у меня проблема с разрешениями 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'})