我添加了这个别名:
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
默认情况下应位于 中。
- 创建脚本
sudo vim /usr/local/bin/shutdown2h
#!/bin/bash
shutdown -h +120
- 允许执行脚本
sudo chmod +x /usr/local/bin/shutdown2h
- 允许用户运行特定脚本
sudo visudo
# Add this entry
USER ALL=(ALL) NOPASSWD: /usr/local/bin/shutdown2h
现在,您的用户无需输入密码即可运行,并确保该用户只有在没有密码的情况sudo shutdown2h
下才能运行。shutdown -h +120
此外,在输入时sudoers
,请务必提供可执行文件/脚本的完整路径,并且不要使用任何快捷方式,如~/
或$HOME
。
答案2
不需要额外脚本的直接解决方案是:
- 创建你的别名:
alias shutdown2h='sudo shutdown -h +120'
- 使用以下命令允许此命令在没有 pw 的情况下运行:
sudo visudo
# Add this entry
someusername ALL=(ALL) NOPASSWD: shutdown -h +120
(与使用 sudo visudo 相比,我更喜欢使用sudo visudo /etc/sudoers/someuserfile
并在这个新文件中添加上述条目。这样做的优点是,系统升级可能会覆盖原始 sudo 文件,但此文件中的配置不会受到影响。)
- 运行
shutdown2h
后无需密码即可运行。所有其他关机操作都需要与之前相同的权限。