我正在linux中创建一个项目,需要在进程完成时关闭系统。如果不需要提供密码怎么办呢?
答案 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身份启动程序(例如,通过配置init
或systemd
或某些crontab
或{{1等等等......)
答案 1 :(得分:2)
在最近systemd
的发行版上,如果没有其他用户登录,则可以关闭系统。但这需要通过systemd-logind进行全面的登录会话,其中我不知道你是否拥有它。
如果您的流程位于此类环境中,则可以致电systemctl poweroff
或systemctl reboot
。您的进程的上下文(如果没有其他用户登录,则在完整的登录会话中运行)将允许您关闭系统。
答案 2 :(得分:0)
如果您使用visudo并添加
%group_name ALL=(ALL) NOPASSWD: /sbin/shutdown
您可以在不提供密码的情况下使用关机。 但是你仍然需要sudo。 但是你可以在.bashrc中创建一个别名,现在用shutdown
替换sudo shutdown如何创建别名: http://community.linuxmint.com/tutorial/view/891
当然这也适用于所有其他命令