Извините, мой тупой вопрос, но я не знаю, как описать мою ситуацию.

Есть журналы от Дженкинса:

ssh www.myserver.com '/var/lib/tomcat7/webapps/deploy_webapp.sh'
+ id
uid=1004(jenkins) gid=1004(jenkins) groups=1004(jenkins),107(tomcat7)
+ sudo su tomcat7
+ id
uid=1004(jenkins) gid=1004(jenkins) groups=1004(jenkins),107(tomcat7)

Из-за соображений безопасности я не могу получить доступ к myserver с пользователем tomcat7. "sudo su tomcat7" работает без пароля, потому что я добавил эту единственную команду в /etc /sudoers с NOPASSWD.

Итак, вопрос: почему я не могу su для моего пользователя tomcat7 ?

1 ответ1

2

Я полагаю, что скрипт deploy_webapp.sh содержит следующую последовательность команд:

id
sudo su tomcat7
id

Что там происходит?

  1. ssh запускает скрипт deploy_webapp.sh в процессе, принадлежащем пользователю jenkins .
  2. sudo запускается как новый процесс и меняет владельца процесса на root .
  3. sudo запускает su от имени пользователя root в другом процессе.
  4. su пытается запустить оболочку входа пользователя tomcat7 от имени пользователя tomcat7 .
  5. tomcat7 скорее всего, не имеет настроенной интерактивной оболочки (проверьте grep tomcat7 /etc/passwd).
  6. su выходит. (В этом сеансе процесс tomcat7 больше не принадлежит.)
  7. выходы sudo . (В этом сеансе процесс больше не принадлежит root .)
  8. Последний id выполняется под тем же пользователем, что и весь сценарий deploy_webapp.sh - jenkins . Весь скрипт выполняется под одним и тем же пользователем. Ни sudo ни su изменяют это.

Что ты можешь сделать?

  1. Позвоните su с нужной вам оболочкой. Например: su -s /bin/bash
  2. Запустите второй id в процессе, принадлежащем tomcat7 . Например: su tomcat7 -c id

Полный пример скрипта:

id
sudo su tomcat7 -s /bin/bash -c id

Резюме

Все команды, которые должны быть выполнены в tomcat7 должны выполняться в процессе, запускаемом su (с помощью опции -c), и обращать внимание на оболочки входа пользователей.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .