sudo
命令。在大多数情况下,我都可以在
sudo
上输入密码。但是我想要三个
sudo
命令无需输入密码即可运行:sudo reboot
sudo shutdown -r now
sudo shutdown -P now
如何将这些命令从密码保护中排除到
sudo
?#1 楼
使用NOPASSWD
指令您可以在
NOPASSWD
文件中使用/etc/sudoers
指令。如果您的用户名为
user
,而您的主机名为host
,则可以将这些行添加到/etc/sudoers
:user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot
这将允许用户
user
在host
上运行所需的命令,而无需输入密码。所有其他sudo
ed命令仍将需要密码。在
sudoers
文件中指定的命令必须完全合格(即,使用要运行的命令的绝对路径),如sudoers
手册页所述。提供相对路径被视为语法错误。如果命令以结尾的
/
结尾并指向目录,则用户将能够在该目录中运行任何命令(但不能在任何目录中运行)其中的子目录)。在以下示例中,用户user
可以在目录/home/someuser/bin/
中运行任何命令:user host = (root) NOPASSWD: /home/someuser/bin/
注意:始终使用命令
visudo
编辑sudoers
文件以确保您不要将自己锁定在系统之外,以防万一您不小心将不正确的内容写入sudoers
文件。 visudo
会将修改后的文件保存到一个临时位置,并且只有在可以正确地解析修改后的文件的情况下,才会覆盖实际的sudoers
文件。使用
/etc/sudoers.d
而不是修改/etc/sudoers
作为编辑
/etc/sudoers
文件的替代方法,您可以将两行添加到/etc/sudoers.d
中的新文件中,例如/etc/sudoers.d/shutdown
。这是分离sudo
权限的不同更改的一种优雅方法,并且不影响原始sudoers
文件,以便于升级。注意:同样,您应该使用命令
visudo
编辑文件以确保您不会将自己锁定在系统之外:sudo visudo -f /etc/sudoers.d/shutdown
这还会自动确保正确设置了新文件的所有者和权限。
如果
sudoers
搞砸了如果您没有使用
visudo
编辑文件,然后不小心弄乱了/etc/sudoers
或弄乱了/etc/sudoers.d
中的文件,那么您将被锁在sudo
中。解决方案是使用
pkexec
修复文件,这是sudo
的替代方法。< br修复
/etc/sudoers
:pkexec visudo
修复
/etc/sudoers.d/shutdown
:pkexec visudo -f /etc/sudoers.d/shutdown
如果所有权和/或任何
sudoers
文件的权限不正确,该文件将被sudo
忽略,因此您可能还会发现自己在这种情况下被锁定。同样,您可以使用pkexec
修复此问题。正确的权限应如下所示:
$ ls -l /etc/sudoers.d/shutdown
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown
使用
pkexec
可以修复所有权和权限:pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown
评论
这两行专门引用了这两个命令。如果没有以其他方式为用户提供sudo权限,则该用户无法使用其他命令。看看man sudo和man sudoers。
– mgd
2012年7月5日在15:27
@StanKurdziel我在Mac OS X Yosemite上尝试了此行,并且运行良好:mgd ALL =(root)NOPASSWD:/ var / root / test。我是mgd用户,ALL表示“来自所有主机”。 / var / root / test是一个简单的“ Hello World” shell脚本,具有以下权限:-rwx ------ 1个root wheel 27 Jun 6月12日09:54 / var / root / test。我没有对系统进行任何其他更改。
– mgd
2015年6月12日在8:02
sudoers文件中的主机是什么?
–user106563
16-10-20在14:02
这不是答案,几乎是关于NOPASSWD指令的完整指南。谢谢。
– Eray
17年8月14日在20:10
@Michael请阅读手册页。全部都写在那里。引用它:但是,您也可以指定命令行参数(包括通配符)。或者,您可以指定“”来指示该命令只能在没有命令行参数的情况下运行。
– mgd
17年8月31日在18:35
#2 楼
抱歉,对此有很多困惑,还有一些非常复杂的答案,我觉得在有人误解并做一些疯狂的事情之前,我必须在这里加油。使用visudo !!
将以下行添加到配置中:
ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown
这允许从任何用户执行带有任何参数的命令,重新引导和关闭。
请stackexchange,只给出简单的答案。
评论
还有一个答案。将此答案与另一个答案进行比较:另一个答案说明了如何在一个主机上为一个用户进行设置。对多个用户和多个主机的推广是显而易见的。您的答案给出了一个魔咒(实际上适用于所有用户或所有主机,但这完全不明显)。另一个区别是您的答案在一行上给出了两个命令。我不知道您能做到这一点-它适度有用,但是鉴于sudoers的复杂性,我怀疑我是否会使用它。
–马丁·邦纳(Martin Bonner)支持莫妮卡(Monica)
20年1月13日在10:21
评论
类似于如何在不使用sudo的情况下允许执行?