Переключение пользователей с помощью sudo или su в сценарий оболочки

Я унаследовал это. Короче говоря, у меня есть XML-файл, который вызывает оболочку для запуска некоторых команд. Все, что я пробовал, потерпел неудачу во втором su в скрипте. Вот некоторые из сообщений об отказах:

sudo: no tty present and no askpass program specified 

Или

 su: must be run from a terminal 

Или

 usage: sudo [-D level] -h | -K | -k | -V blah blah blah 

Вот фрагмент моего сценария. Это происходит только при второй попытке su :

  <script language="shell"><![CDATA[ echo Doing some stuff sudo -u adminuser /path/to/a/script/script echo Emailing this stuff... su emailuser -c "mutt -e 'set content_type=text/html' -s 'Your stuff is ready' -- ${WHOEVER_PARAM_RECIPIENT} < /tmp/emailingstuff.html" ]]></script> 

Я так много играл с разрешениями, что забыл, где я был с ними. Здесь они в настоящее время находятся в судерах:

 # See the man page for details on how to write a sudoers file Defaults:emailuser !authenticate adminuser ALL=NOPASSWD: /bin/su - emailuser adminuser ALL=NOPASSWD: /bin/su emailuser adminuser ALL=NOPASSWD: /usr/bin/sudo su emailuser # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d 

  • Выполнение выражения Bash из sudo
  • Замена команды: / dev / stdin: Отказано в разрешении
  • вставить текст в файл с помощью команды echo
  • Как запустить программу GUI как другого пользователя (Debian)?
  • разрешение отклонено при выполнении двоичного кода
  • PAM не может аутентифицировать sudo, после успешного обращения к ssh-agent
  • Проблема с именем пользователя su -c "./script.sh" и sudo -u ush bash -c "./script.sh" и Java classpath
  • Как я могу сохранить * all * environment vars для определенной команды в sudo?
  • One Solution collect form web for “Переключение пользователей с помощью sudo или su в сценарий оболочки”

    Если в конфигурации su нет чего-то, что позволяет пользователю запускать эти команды для запуска команд в качестве пользователя электронной emailuser с помощью su , команда su emailuser -c … будет запрашивать пароль пользователя электронной emailuser . Использование sudo всегда явно.

    Учитывая ваши правила sudo, вы, вероятно, хотели

     sudo su emailuser -c … 

    Но ваши правила sudo странны: нет смысла санкционировать sudo только для запуска su еще одному пользователю. Измените их, чтобы указать целевого пользователя, и забудьте о su .

     scriptuser ALL = (adminuser) NOPASSWD: /path/to/a/script/script "" scriptuser ALL = (emailuser) NOPASSWD: mutt 

    Обратите внимание, что, поскольку Mutt разрешает экранирование оболочки, ограничение команды как пользователя- emailuser mutt на самом деле не повышает безопасность, но может уменьшить случайное злоупотребление. В своем скрипте используйте

     sudo -H -u emailuser mutt -e 'set content_type=text/html' -s 'Your stuff is ready' -- ${WHOEVER_PARAM_RECIPIENT} < /tmp/emailingstuff.html 

    Так как вы вызываете sudo из сценария, убедитесь, что флаг requiretty отключен в файле sudoers (по умолчанию он отключен, но некоторые дистрибутивы добавляют его, несмотря на чрезвычайно ограниченные обстоятельства, при которых он может значительно улучшить безопасность).

    Linux и Unix - лучшая ОС в мире.