Skip to main content

Linux配置指定命令sudo免密码使用

在已赋予用户sudo权限的基础上,配置用户sudo执行指定命令时不需要输入密码:

位置必须在#includedir /etc/sudoers.d 后面,添加在其他地方不生效

配置

sudo chmod u+w /etc/sudoers

sudo visudo # 保存时会做语法检查

# 赋予用户执行所有命令不需要输入密码,只需要下面一行
xxx ALL=(ALL) NOPASSWD:ALL

# 赋予用户执行某几个命令不需要密码,注意各个命令必写绝对路径,
# 此时只有指定的命令可以免密sudo执行,其他命令不再有sudo执行权限
xxx ALL= NOPASSWD: /usr/bin/lnmp php-fpm reload,b命令,c命令

# 若设置某些命令免密,其他命令需要密码,需要同时设置如下两行
test ALL=(ALL) ALL
test ALL=(ALL) NOPASSWD: /bin/lnmp php-fpm reload

sudo chmod u-w /etc/sudoers

注意

对于免密命令中有:冒号字符的要在前面加反斜杠,否则会导致语法错误,如

sudo /usr/local/php/bin/php -d variables_order=EGPCS artisan octane\:reload

上面方式实现了不需要密码执行sudo命令,且在控制台手动执行时也不需要输入密码,但对于敏感命令这样也不好,还有一种方法是在运行命令时从输入自己获取密码

'echo "111111" | sudo -S rm -rf ./123.txt'

-S ; 从标准输入读取密码

这种方法将密码暴露在了代码中(也可以将密码放在一个公共位置,在代码中读取),但在控制台手动执行时是需要输入密码的。

两种方法可权衡选择。