我正在出于自己的目的调整我在这里找到的脚本。
本质上,该脚本检查一些条件,然后使用 sudo 运行两个命令之一。该命令以用户身份执行cas
。
由于该脚本不会交互式运行,我想确保其中的 sudo 命令在没有密码提示的情况下执行。因此,我将以下几行添加到我的 sudoers 文件中:
ALL ALL = NOPASSWD: /usr/bin/systemctl mask sleep.target suspend.target
ALL ALL = NOPASSWD: /usr/bin/systemctl unmask sleep.target suspend.target
根据我对 sudoers 文件如何工作的理解,这意味着所有用户都可以执行命令/usr/bin/systemctl mask sleep.target suspend.target
,而/usr/bin/systemctl unmask sleep.target suspend.target
无需密码提示。
相反,密码提示仍然出现:
cas-desktop :: ~ » sudo /usr/bin/systemctl mask sleep.target suspend.target
[sudo] cas 的密码:
sudo:需要密码
我也尝试过不使用 sudo:
cas-desktop :: ~ » /usr/bin/systemctl mask sleep.target suspend.target
==== 对 org.freedesktop.systemd1.manage-unit-files 进行身份验证 ====
管理系统服务或单元需要身份验证文件。
身份验证为:Cas (cas)
密码:
我不知道还要做什么才能使这项工作成功,所以如果您有想法,请告诉我。
请运行
sudo -l
并查看是否为您的用户定义了其他允许的sudo
命令行。这将显示所有适用的 sudoers 配置行,包括主配置和任何包含的/etc/sudoers.d/*
文件(如果有)。顺序很重要:将遵循与您的命令相匹配的最后一行。如果该线路是
(ALL : ALL) ALL
没有NOPASSWD:
标签的普通线路,则会要求您输入密码。在这种情况下,请将NOPASSWD:
- 标记的行移动到文件中较靠后的位置sudoers
。如果 sudoers 文件的最后一行是
@includedir /etc/sudoers.d
,请考虑将 sudo 配置行移动到/etc/sudoers.d/
. 请注意,该目录中任何以字符结尾~
或包含.
字符的文件名都将被忽略。或者,要在没有 的情况下允许它
sudo
,您需要编写一个polkit
规则文件,例如/etc/polkit-1/rules.d/01-local-sleep-suspend.rules
: