如何给用户关机特权?


9

我正在使用Ubuntu 11.04。我想运行一个脚本,该脚本检查正在运行的进程,并在该进程结束时关闭系统。为此,用户需要关机访问权限,以便无需密码即可执行脚本。

我参考了此页面,并将文本添加到了我的sudoers文件中。但是,无论何时执行,它仍在询问我密码sudo shutdown -h now。另外,当我执行不带sudo的关机时,我得到一条错误消息,指出需要root特权。

我的sudoers文件看起来像这样。

# Cmnd alias specification
Cmnd_Alias      SHUTDOWN = /sbin/shutdown

# User privilege specification
root    ALL=(ALL:ALL) ALL
myusername    ALL = NOPASSWD: SHUTDOWN

如何授予用户执行关机命令的权限,而无需手动输入密码?

谢谢。


1
请您发布您的真实和完整sudoers文件吗?
enzotib

Answers:


6

您可以使用HAL或ConsoleKit关闭或重新启动,而无需输入用户名/密码:

HAL(较旧的Ubuntu版本):

dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

ConsoleKit(较新的Ubuntu版本,已在Ubuntu 11.04上测试):

dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

7

我这样做就像在这个答案中一样,对我来说完美无缺。也许您的方法错过了visudo一部分?

打开命令行并输入:

sudo visudo 

在打开的文件中,在末尾添加以下行:

yourusername ALL=NOPASSWD: /sbin/halt

然后退出编辑器并保护它(CTRL + x)。

现在,您可以从命令行关闭计算机,例如在下载某些内容之后:

wget UrlOfTheFileYouWantToDownload ; sudo halt

1

前一段时间,我通过设置suid(设置用户ID)来完成此操作。这使程序以文件的所有者而不是运行它的用户的身份执行。由于shutdown是root拥有的,因此应该让您无需sudo即可关机。

chmod u+s /sbin/shutdown

尽管存在安全隐患,因为任何人都可以随后关机。http://en.wikipedia.org/wiki/Setuid


通常,不建议修改从包中安装的文件或文件的元数据,而不是中的配置文件/etc
enzotib

嗯...是真的!但是,官方的方式是什么?在玩polkit吗?也不太好...
turbo

sudo我认为这是正确的方法,但不幸的是,用户没有机会查看其sudoers文件,这是怎么回事。
enzotib

这是唯一对我有用的东西。
马克·斯图尔特2014年

0

听起来您想以root身份运行脚本本身。如果要运行一个脚本,该脚本等待某些操作完成,然后关闭计算机电源,则只需使用sudo运行脚本即可。运行脚本时会询问您的密码,但是脚本本身可以自由关闭系统,而无需任何进一步干预。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.