是否可以允许在需要 sudo 的命令的别名上使用 NOPASSWD?

是否可以允许在需要 sudo 的命令的别名上使用 NOPASSWD?

我添加了这个别名:

alias shutdown2h='sudo shutdown -h +120'

我希望运行它而不必输入密码,也不必为整个关机命令添加 NOPASSWD。

是否可以使用 NOPASSWD 一起将别名添加到 sudoers 文件?我尝试使用命令的位置~/.bash_aliases/shutdown2h,但出现语法错误。或者还有其他方法吗?

非常感谢!

答案1

您希望确保您的用户无法更改允许运行的内容。例如,通过尝试添加您的用户拥有的脚本 ( ~/.bash_aliases/shutdown2h) 以 root 身份运行而sudo无需密码,您将允许运行任何任意命令。只需编辑该文件并运行它。这与允许用户通过 运行任何命令相同。sudoers例如,用户可以编辑文件以读取now而不是-h +120并立即关闭机器。

相反,将 root 用户拥有的脚本添加到系统会更好,可能位于 中/usr/local/bin/。例如,/usr/local/bin/shutdown2h每个人都可以执行,但只有 root 可以写入。这样,您可以确保用户只能运行特定脚本,并且他们不能更改该脚本来运行其他脚本。放置脚本的路径应位于 中$PATH/usr/local/bin默认情况下应位于 中。

  1. 创建脚本
sudo vim /usr/local/bin/shutdown2h

#!/bin/bash
shutdown -h +120
  1. 允许执行脚本
sudo chmod +x /usr/local/bin/shutdown2h
  1. 允许用户运行特定脚本
sudo visudo

# Add this entry
USER ALL=(ALL) NOPASSWD: /usr/local/bin/shutdown2h

现在,您的用户无需输入密码即可运行,并确保该用户只有在没有密码的情况sudo shutdown2h下才能运行。shutdown -h +120

此外,在输入时sudoers,请务必提供可执行文件/脚本的完整路径,并且不要使用任何快捷方式,如~/$HOME

答案2

不需要额外脚本的直接解决方案是:

  1. 创建你的别名:
alias shutdown2h='sudo shutdown -h +120' 
  1. 使用以下命令允许此命令在没有 pw 的情况下运行:
sudo visudo
# Add this entry
someusername ALL=(ALL) NOPASSWD: shutdown -h +120

(与使用 sudo visudo 相比,我更喜欢使用sudo visudo /etc/sudoers/someuserfile并在这个新文件中添加上述条目。这样做的优点是,系统升级可能会覆盖原始 sudo 文件,但此文件中的配置不会受到影响。)

  1. 运行shutdown2h后无需密码即可运行。所有其他关机操作都需要与之前相同的权限。

相关内容