为单个用户添加免密码执行某个脚本权限

使用命令sudo visudo安全编辑 sudoers 文件(不要直接编辑 /etc/sudoers),在打开的文件中添加以下行(注意:将 username 替换为实际用户名,例如 thee),然后保存退出

1
2
3
username ALL=(ALL) NOPASSWD: /path/to/your/script.sh
# 或者允许目录下所有脚本
username ALL=(ALL) NOPASSWD: /path/to/scripts/*

若配置后执行脚本仍然需要手动输入密码,那么可以按照下面的步骤进行检查:

1
2
3
4
5
6
7
8
# 使用 visudo 检查语法
sudo visudo -c

# 查看当前用户的 sudo 权限,该命令可以查看具有 sudo 权限的脚本,配置成功后能在该命令输出结果中看得到
sudo -l

# 查看特定用户的 sudo 权限
sudo -l -U username

除了配置特定用户免密码执行脚本命令(可以携带参数)外,还可以配置特定组中所有用户免密码执行脚本、特定目录下所有脚本免密码执行,配置模版如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 用户特定命令免密码
username ALL=(ALL) NOPASSWD: /usr/local/bin/backup.sh
username ALL=(ALL) NOPASSWD: /usr/local/bin/restore.sh

# 组免密码配置(用户必须在组中)
%backup-admin ALL=(ALL) NOPASSWD: /usr/local/bin/backup.sh

# 带参数的命令
username ALL=(ALL) NOPASSWD: /bin/systemctl restart apache2
username ALL=(ALL) NOPASSWD: /bin/systemctl stop apache2

# 目录通配(谨慎使用)
username ALL=(ALL) NOPASSWD: /usr/local/scripts/*

为单个用户添加sudo免密码执行权限

若需要为用户 thee 添加 sudo 权限,那这样该用户就可以免密码执行sudo命令了,使用命令sudo visudoroot ALL=(ALL:ALL) ALL行后添加如下内容:

1
thee ALL=(ALL:ALL) ALL

其中,username为配置的用户名;ALL=(ALL:ALL)表示授予 root 用户在任何主机上使用任何用户身份(即以任何用户身份)执行任何命令的权限,ALL表示允许在任何主机上执行命令;=(ALL:ALL)表示以任何用户身份(即以任何用户身份)执行命令;ALL表示允许执行任何命令

参考:
sudo 命令怎么设置不输入密码 - 富美 - 博客园
在 Linux 中运行特定命令而无需 sudo 密码
sudoers 文件说明 - sudo 免密码 - 限制 sudo 执行特殊命令
Linux 系统 sudoers 文件配置详解与高级应用分析 - OSCHINA - 中文开源技术交流社区