在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=查看通过gksudo
/kdesudo
调用reboot
,其中之一应该在大多数Linux 安装上。
它们是简单的包装器,会要求用户输入密码以确认将权限提升到root
,在您的情况下,调用reboot
或shutdown
。
只需与系统的其余部分配合使用,让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(根密码)[关闭]