Назад | Перейти на главную страницу

Разрешения 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», и вы переключаетесь на пользователя «deployer». Единственный «пользователь», который может уничтожать процессы, которым он не владеет, - это 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'})