我有问题与Linux(Ubuntu 16.04)的权限和命令执行。
/ etc / sudoers文件:
Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" root ALL=(ALL:ALL) ALL %admin ALL=(ALL) ALL %sudo ALL=(ALL:ALL) ALL #includedir /etc/sudoers.d (this dir is empty) jenkins ALL=(deployer) NOPASSWD: ALL deployer ALL=NOPASSWD:/etc/init.d/php7.0-fpm reload,/bin/kill,/bin/ps,/bin/grep,/usr/bin/awk,/usr/bin/xargs
我需要运行这个命令,我作为用户jenkinslooged:
sudo -u deployer kill -9 $(ps aux | grep /data/web/test1 | grep -v grep | awk {'print $2'})
这个命令必须杀死2个进程。 但是,当我这样运行,我得到退出状态1.我不知道为什么,我找不到任何logging的错误消息…
当我以部署用户身份login并运行此命令时,一切正常:
kill -9 $(ps aux | grep /data/web/test1 | grep -v grep | awk {'print $2'})
我需要杀死的进程如下所示:
www-data 48689 0.0 1.6 306184 33872 ? Ss 14:26 0:00 /usr/bin/php /data/web/test1/xxx www-data 48690 0.0 1.6 306184 34108 ? Ss 14:26 0:00 /usr/bin/php /data/web/test1/yyy
我发现问题是只有杀死命令,但我真的不知道为什么。
你的问题是这个过程是以“www-data”的forms运行的,而你正在切换到“部署者”用户。 可以杀死不属于他们的进程的唯一“用户”是root。
尝试以下在你的sudoers
jenkins ALL=(www-data) NOPASSWD: ALL
然后作为你的命令
sudo -u www-data pkill --signal 9 -f /data/web/test1
另一件我能想到的就是你的部署者sudo规则
deployer ALL=NOPASSWD:/etc/init.d/php7.0-fpm reload,/bin/kill,/bin/ps,/bin/grep,/usr/bin/awk,/usr/bin/xargs
该规则转化为
/etc/init.d/php7.0-fpm reload /bin/kill /bin/ps /bin/grep /usr/bin/awk /usr/bin/xargs
你的kill命令没有任何选项。 你会需要的
deployer ALL=NOPASSWD:/etc/init.d/php7.0-fpm reload,/bin/kill *,/bin/ps,/bin/grep,/usr/bin/awk,/usr/bin/xargs
尝试使用-s开关。 像那样:
sudo -u deployer -s kill -9 $(ps aux | grep /data/web/test1 | grep -v grep | awk {'print $2'})