在一台特定的机器上,我经常需要不时地运行sudo
命令。sudo
在大多数情况下,我都可以输入密码。
但是,我想在不输入密码的情况下运行三个sudo
命令:
sudo reboot
sudo shutdown -r now
sudo shutdown -P now
如何从密码保护中排除这些命令sudo
?
在一台特定的机器上,我经常需要不时地运行sudo
命令。sudo
在大多数情况下,我都可以输入密码。
但是,我想在不输入密码的情况下运行三个sudo
命令:
sudo reboot
sudo shutdown -r now
sudo shutdown -P now
如何从密码保护中排除这些命令sudo
?
Answers:
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
。
解决方法/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
user
未以其他方式授予sudo
权限,则该用户无法使用其他命令。看看man sudo
和man sudoers
。
mgd ALL=(root) NOPASSWD: /var/root/test
。我是用户mgd
,ALL
意思是“来自所有主机”。/var/root/test
是一个简单的“Hello World”的外壳具有权限的脚本:-rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test
。我没有对系统进行任何其他更改。
host
在sudoers文件?