在没有sudo的情况下关闭linux

时间:2014-09-17 17:11:52

标签: linux

我正在linux中创建一个项目,需要在进程完成时关闭系统。如果不需要提供密码怎么办呢?

3 个答案:

答案 0 :(得分:2)

如果您的程序(例如C,C ++,Ocaml,...)被编译成ELF可执行文件,您可以将其setuid(然后使用seteuid(2)sync(2),{ {3}}系统调用,或者更好/sbin/poweroff或其他命令reboot(2)。但要小心(害怕execve(2),...)

您需要非常仔细地编写程序,并且您需要成为root用户才能使用setuid位设置安装程序(例如,chmod u+s作为root用户)。但是用户不需要是root用户来运行已安装的可执行文件。

您应该阅读security holes(并仔细阅读重要Advanced Linux Programming的几个手册页)。请花点时间了解 setuid 机制,这种机制很棘手,可以危险地使用。

您可以简单地安装和配置系统以root身份启动程序(例如,通过配置initsystemd或某些crontab或{{1等等等......)

另请阅读syscalls(2)credentials(7)

答案 1 :(得分:2)

在最近systemd的发行版上,如果没有其他用户登录,则可以关闭系统。但这需要通过systemd-logind进行全面的登录会话,其中我不知道你是否拥有它。

如果您的流程位于此类环境中,则可以致电systemctl poweroffsystemctl reboot。您的进程的上下文(如果没有其他用户登录,则在完整的登录会话中运行)将允许您关闭系统。

答案 2 :(得分:0)

如果您使用visudo并添加

%group_name ALL=(ALL) NOPASSWD: /sbin/shutdown

您可以在不提供密码的情况下使用关机。 但是你仍然需要sudo。 但是你可以在.bashrc中创建一个别名,现在用shutdown

替换sudo shutdown

如何创建别名:     http://community.linuxmint.com/tutorial/view/891

当然这也适用于所有其他命令

相关问题