Ubuntu
Linux 權限和狀態碼 1
我對 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
我需要執行這個命令,我是 jenkins 使用者:
sudo -u deployer kill -9 $(ps aux | grep /data/web/test1 | grep -v grep | awk {'print $2'})
此命令必須殺死 2 個程序。但是當我像這樣執行它時,我得到退出狀態1。我不知道為什麼,我找不到任何記錄的錯誤消息……
當我以部署使用者身份登錄並執行此命令時,一切正常:
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
我發現問題只出在 kill 命令上,但我真的不知道為什麼。
您的問題是該程序作為“www-data”執行,並且您正在切換到“部署者”使用者。唯一可以殺死不屬於他們的程序的“使用者”是 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