在ubuntu 11.04中没有密码的系统关闭

Posted

技术标签:

【中文标题】在ubuntu 11.04中没有密码的系统关闭【英文标题】:System shutdown without password in ubuntu 11.04 【发布时间】:2012-04-10 10:10:28 【问题描述】:

我正在编写一个带有关闭按钮的 QT 应用程序。我想用这个按钮关闭系统,但是当我使用 shell 命令“shutdown -h now”时,系统要求输入密码。 我想在没有密码的情况下关机。

我的QT代码是:

QObject *parent;
myProcess = new QProcess(this);
QString command= "sudo shutdown";
QStringList arguments;
arguments << "-h " << "now"  ;
myProcess->start(command,arguments);

【问题讨论】:

你考虑过权限吗?要么让你的程序 setuid(坏主意),要么让 /sbin/shutdown setuid(坏主意),要么将当前用户添加到 /etc/sudoers 文件,这样你就可以从你的程序中运行 sudo /sbin/shutdown(麻烦)。 【参考方案1】:

确保运行该进程的用户位于 sudoers 文件中。 使用 visudo 修改 sudoers 文件并添加如下内容:

<username> ALL = NOPASSWD: /sbin/shutdown

【讨论】:

对于那些对此命令有问题的人...您可能需要将其设置为 sudoers 文件的最后一行。如果后面有任何其他命令,它们可能会干扰。 您还必须在 /etc/sudoers Defaults exclude_group= 中添加以下内容【参考方案2】:

查看通过gksudo/kdesudo 调用reboot,其中之一应该在大多数Linux 安装上。 它们是简单的包装器,会要求用户输入密码以确认将权限提升到root,在您的情况下,调用rebootshutdown

只需与系统的其余部分配合使用,让shutdown 向用户询问他的密码。

【讨论】:

【参考方案3】:

您可以直接调用reboot 来暂停或重新启动系统,而不是调用shell 命令。请参阅“man 2 重启”。但是,如果用户没有 CAP_SYS_BOOT 能力,您仍然会收到权限错误。使用 sudo 或 suid 二进制文件,如上面评论中所述,您将获得此功能(以及更多)。

您还可以使用 setcap 程序或类似程序为您的二进制文件设置 CAP_SYS_BOOT 功能。请记住,每次重新编译程序后都必须这样做,并且您必须使用 sudo 才能使用 setcap。

【讨论】:

以上是关于在ubuntu 11.04中没有密码的系统关闭的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu 11.04怎么运行可执行文件 (application/x-executable)

Windows 10 - Bash(Ubuntu)SU(根密码)[关闭]

ubuntu怎么关闭窗口

ubuntu20待机关闭风扇

Ubuntu 10.10和Ubuntu 11.04都不能使用root帐户登陆系统是为啥?

在虚拟机下装了ubuntu11.04。不能上网了。以前可以上网