在一台特定的机器上,我经常需要时不时地运行sudo命令。sudo在大多数情况下,我可以输入密码。
但是,我想在不输入密码的情况下运行三个sudo命令:
sudo rebootsudo shutdown -r nowsudo shutdown -P now如何从密码保护中排除这些命令sudo?
mgd*_*mgd 327
NOPASSWD指令您可以NOPASSWD在/etc/sudoers文件中使用该指令。
如果您的用户被调用user并且您的主机被调用,host您可以将这些行添加到/etc/sudoers:
user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot
Run Code Online (Sandbox Code Playgroud)
这将允许用户user在host不输入密码的情况下运行所需的命令。所有其他sudoed 命令仍然需要密码。
sudoers文件中指定的命令必须是完全限定的(即使用要运行的命令的绝对路径),如sudoers手册页中所述。提供相对路径被视为语法错误。
如果命令以尾随/字符结尾并指向一个目录,则用户将能够在该目录中运行任何命令(但不能在其中的任何子目录中运行)。在以下示例中,用户user可以运行目录中的任何命令/home/someuser/bin/:
user host = (root) NOPASSWD: /home/someuser/bin/
Run Code Online (Sandbox Code Playgroud)
注意:始终使用该命令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
Run Code Online (Sandbox Code Playgroud)
这也会自动确保正确设置新文件的所有者和权限。
sudoers乱了如果你不习惯visudo编辑你的文件然后不小心把文件弄乱了/etc/sudoers或者把文件弄乱了/etc/sudoers.d那么你就会被锁在外面sudo。
解决方案可能是修复文件使用pkexecwhich 是sudo.
修复/etc/sudoers:
pkexec visudo
Run Code Online (Sandbox Code Playgroud)
修复/etc/sudoers.d/shutdown:
pkexec visudo -f /etc/sudoers.d/shutdown
Run Code Online (Sandbox Code Playgroud)
如果任何sudoers文件的所有权和/或权限不正确,该文件将被忽略,sudo因此您可能会发现自己在这种情况下被锁定。同样,您可以使用它pkexec来解决此问题。
正确的权限应该是这样的:
$ ls -l /etc/sudoers.d/shutdown
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown
Run Code Online (Sandbox Code Playgroud)
pkexec像这样使用来修复所有权和权限:
pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown
Run Code Online (Sandbox Code Playgroud)
Owl*_*Owl 13
对不起,但对此有太多的困惑和一些非常复杂的答案,我觉得我必须在有人误解并做一些疯狂的事情之前权衡一下。
使用视觉!!
将以下行添加到配置中:
ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown
Run Code Online (Sandbox Code Playgroud)
这允许从任何用户执行带有任何参数的命令、重启和关机。第一个“ALL”是指用户,所以它的意思是所有用户。第二个 ALL 是指所有主机。
有关更详细的解释,请参阅man sudoers这提供了更多示例,这些示例向下几页,但如果您深入挖掘,它们实际上就在那里。
请堆栈交换,只给出简单,简洁的答案。
| 归档时间: |
|
| 查看次数: |
322493 次 |
| 最近记录: |