在已赋予用户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 ; 从标准输入读取密码
这种方法将密码暴露在了代码中(也可以将密码放在一个公共位置,在代码中读取),但在控制台手动执行时是需要输入密码的。
两种方法可权衡选择。