Autorisations Linux et code d'état 1

J'ai un problème avec les permissions linux (ubuntu 16.04) et l'exécution de la command.

/ etc / sudoers file:

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 

J'ai besoin d'exécuter cette command, je suis looged en tant qu'user jenkins:

 sudo -u deployer kill -9 $(ps aux | grep /data/web/test1 | grep -v grep | awk {'print $2'}) 

Cette command doit tuer 2 process. Mais quand je l'exécute comme ça, j'ai le statut de sortie 1. Je ne sais pas pourquoi et je ne peux find aucun message d'erreur enregistré …

Lorsque je me connecte en tant qu'user de deployment et que j'exécute cette command, tout va bien:

 kill -9 $(ps aux | grep /data/web/test1 | grep -v grep | awk {'print $2'}) 

Les process que j'ai besoin de tuer semblent:

 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 

Je découvre que ce problème ne concerne que le commandment de tuer, mais je ne sais vraiment pas pourquoi.

Votre problème est que le process fonctionne comme "www-data" et que vous passez à l'user "déployer". Le seul "user" qui peut tuer des process qui ne les appartiennent pas n'est root.

Essayez ce qui suit dans vos sudoers

 jenkins ALL=(www-data) NOPASSWD: ALL 

Puis, comme votre command

 sudo -u www-data pkill --signal 9 -f /data/web/test1 

L'autre chose que je peux penser, c'est la règle sudo de votre déployeur

 deployer ALL=NOPASSWD:/etc/init.d/php7.0-fpm reload,/bin/kill,/bin/ps,/bin/grep,/usr/bin/awk,/usr/bin/xargs 

Cette règle se traduit par

 /etc/init.d/php7.0-fpm reload /bin/kill /bin/ps /bin/grep /usr/bin/awk /usr/bin/xargs 

Votre command kill n'a pas d'options. Vous auriez besoin

 deployer ALL=NOPASSWD:/etc/init.d/php7.0-fpm reload,/bin/kill *,/bin/ps,/bin/grep,/usr/bin/awk,/usr/bin/xargs 

Essayez avec le commutateur -s. Comme ça:

 sudo -u deployer -s kill -9 $(ps aux | grep /data/web/test1 | grep -v grep | awk {'print $2'})