C ++,linux,没有root的关机命令

Posted

技术标签:

【中文标题】C ++,linux,没有root的关机命令【英文标题】:C++, linux, shutdown command without root 【发布时间】:2020-01-27 19:42:48 【问题描述】:

是否可以制作一个只以用户身份运行而不使用root权限的关机脚本?

我找到了这段代码,但它似乎什么也没做:

#include <unistd.h>
#include <sys/reboot.h>

int main () 
    sync();    // If reboot() not preceded by a sync(), data will be lost.
    setuid(0); // set uid to root, the running uid must already have the
               // appropriate permissions to do this.
    reboot(RB_AUTOBOOT); // note, this reboots the system, it's not as
    return(0);           // graceful as asking the init system to reboot.

系统信息:

Linux hosek 4.15.0-48-generic #51-Ubuntu SMP Wed Apr 3 08:28:49 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

【问题讨论】:

可以,但程序必须标记为 setuid root。只有 root 可以做到这一点。但是在 root 执行一次之后,它就会保持这种状态。 您忽略了来自setuid() 的返回值-它将返回-1,将errno 设置为EPERM,如果您没有足够的权限,则保持uid 不变。你真的想要if (setuid(0) != 0) perror(""); return 1; @Omnifarious 所以不可能例如制作这个c 程序,上传到另一台服务器并运行这个命令来重启/关闭服务器? @genderbee 这是你的意图吗? @genderbee - 这样看,您是否希望您刚刚在您的服务器上授予登录权限的人能够将其关闭?答案是否定的,而且应该是否定的。 Unix 系统上的随机人员无权关闭系统。如果您想在未经其他人(或公司)同意的情况下关闭其他随机人(或公司)的系统,那么您是在问我们如何做在大多数司法管辖区实际上是非法的事情。 【参考方案1】:

具有 systemd 和适当权限的桌面系统可以从控制台连接到 systemd:

systemctl poweroff

https://wiki.debian.org/UserShutdown

或者通过从 c/c++ 中取消 systemd api

Simple C or C++ API for controlling systemd services

【讨论】:

【参考方案2】:

首先,不要这样做。无论你认为你多么想这样做,你都没有。严重地。通过这样做,您主要是在搞乱系统安全性。这些系统很难正确,即使是非常了解它们的人。所以,不要这样做。如果您需要授予某人关闭系统的权限,请弄清楚如何配置 sudo 以允许它。不要走你要走的路。

如果您绝对坚持这样做,或者您只是在玩完游戏后打算擦除的测试虚拟机,请了解如何在可执行文件上设置“setuid”位。

执行以下三个命令:

$ chmod a-w name_of_executable
$ sudo chown root name_of_executable
$ sudo chmod u+s name_of_executable

这将设置它,以便程序有权成为 root,无论谁运行它。不用说,这是一个非常危险的情况,很多事情都可能出错。您的系统上现在有一些可执行文件是以这种方式设置的,但它们是经过强化的、非常仔细编写的可执行文件,已经过广泛的 bug 搜索,如果有人发现它们有问题,它们会很快得到修复。不要自己创建。

另外,为了解决您在问题中陈述的问题,other answer 更好。我正在为您提供如何使您发布的程序正常工作的答案。你不应该使用那个程序。你应该按照other answer 所说的去做。

【讨论】:

“不要做”太多。 suid程序原则上没有错。事实上,它们通常在企业开发盒中非常有用。 @SergeyA - 我是根据提问者的经验水平来推销的。

以上是关于C ++,linux,没有root的关机命令的主要内容,如果未能解决你的问题,请参考以下文章

linux 命令

Linux系统普通用户怎么关机

常用的Linux关机命令!

shutdown命令总结

shutdown命令总结

Linux的关机与重启命令