我有一个棘手的情况。 我需要一个用户nagios作为另一个用户jenkins执行一个特定的命令 – 但是这个命令只适用于jenkins环境完全加载。 否则,我运行的命令将不起作用,所以我需要执行su - usertypes的命令。
从根目录运行时,命令正常工作:
/bin/su - -c "pm2 show proxy" jenkins
(我得到预期的输出)
当从nagios用户运行时:
nagios@srv01:~$ sudo /bin/su -c "pm2 show proxy" jenkins [sudo] password for nagios:
visudo条目我试过了:
nagios ALL=(root) NOPASSWD: /bin/su - -c "pm2 show proxy" jenkins nagios ALL=(jenkins) NOPASSWD: /bin/su - -c "pm2 show proxy" jenkins
上述工作都没有,还是要求input密码。
它工作如果我只是授予nagios用户完整的权限:
nagios ALL=(root) NOPASSWD: /bin/su
^^这个工作,但不,不授予完整的权限给这个用户。
因为它在全局允许su时工作,我假设它在我的语法中的某个地方。
编辑 –为了解决这个问题,我只是把我想要在脚本中运行的命令,并授予脚本的sudo。 但是,这并不理想,并在此工作stream程中增加了额外的步骤。 宁愿能够直接用sudo运行命令。
如果你需要jenkins的login环境,那么尝试使用-i开关到sudo
-i [命令] -i(模拟初始login)选项将目标用户的密码数据库条目指定的shell作为loginshell运行。 这意味着特定于login的资源文件(如.profile或.login)将被shell读取。 如果指定了一个命令,它会通过shell的-c选项传递给shell执行。 如果没有指定命令,则执行交互式shell。 在运行shell之前,sudo尝试更改为该用户的主目录。 安全策略应将环境初始化为一组最小的variables,与用户login时的情况相似。sudoers(5)手册中的“命令环境”部分logging了-i选项如何影响命令所在的环境在sudoers政策正在使用时运行。
所以像
sudo -u jenkins -i pm2 show proxy
应该做你想做的。