Переключение пользователей с помощью 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 

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 (по умолчанию он отключен, но некоторые дистрибутивы добавляют его, несмотря на чрезвычайно ограниченные обстоятельства, при которых он может значительно улучшить безопасность).

  • Проблема Бодхи с Наутилусом как SU
  • Как работает `: w! Sudo tee%`
  • Почему LXC-create возвращает ошибку «sudo.conf должен быть 0»?
  • Parallels на Mac - больше не может работать в Ubuntu
  • Почему при запуске sudo cp отображаются два процесса
  • Какой пользователь выполняет сценарий / приложение Linux как?
  • Как мне спросить пароль по приглашению GUI при использовании sudo в скрипте?
  • Почему мы не можем выполнять список команд как пользователь без sudo?
  • Можно ли динамически устанавливать пользователей .gitconfig (для git config -global)?
  • Почему пользователь без какой-либо записи PASSWD в конфигурации sudo должен аутентифицироваться каждый раз?
  • Скрипт с использованием sudo работает с терминала, но не с ярлыка на рабочем столе
  • запустить gvfs-mount как пользователь в скрипте, принадлежащем root для диспетчера сетевого менеджера
  • Linux и Unix - лучшая ОС в мире.