Ubuntu

Linux 權限和狀態碼 1

  • July 5, 2017

我對 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

引用自:https://serverfault.com/questions/859480