Как я могу запустить часть скрипта в качестве другого пользователя?

#!/bin/ksh (some code) Log=~/my.log chown USER1 filename su - USER1 -c " date | tee -a ${Log} 2>&1; cd /blah/blah if [ SOMECONDITION ] then sh ./somescript.ksh > logfile fi exit" | tee -a ${Log} 2>&1; 

Сценарий имеет тенденцию останавливаться, когда он подпрыгивает до USER1, а затем он выполняется снова, когда нам нужно выйти вручную.

2 Solutions collect form web for “Как я могу запустить часть скрипта в качестве другого пользователя?”

Я ожидал бы, что сценарий останавливается на команде «su», потому что он запрашивает пароль и не получает его.

Как часто несколько решений для этого 🙂

Вместо «su» используйте «sudo», у которого есть ключ -S, чтобы принимать пароль со стандартного ввода:

 echo "password" | sudo -S -u USER1 sh -c "... 

Альтернативно переместите этот раздел вашего приложения / скрипта, который должен запускаться как другой пользователь для вспомогательного приложения. Затем вы можете избежать сценариев с сохраненным текстовым паролем (который имеет некоторые проблемы с безопасностью), используя set-uid и set-gid для этого вспомогательного приложения:

 chown USER1.GRP1 helperapp chmod 6755 helperapp 

Риск, который вы запускаете с этим, заключается в том, что теперь любой пользователь системы может запускать helperapp в качестве USER1. Вместо использования set-uid / gid вы можете использовать configure sudo, чтобы позволить конкретному пользователю запускать het helperapp в качестве USER1 без подсказки пароля (для этого требуются admin / root priviliges):

 # /etc/sudoers # Allow USER2 to run helperapp as USER1 without prompting for a password USER2 ALL=(USER1) NOPASSWD:/path/to/helperapp 

ваш код может выглядеть примерно так:

 #!/bin/ksh (some code) Log=~/my.log chown USER1 filename sudo -u USER1 /path/to/helperapp | tee -a ${Log} 2>&1; 

Ничто из этого не было проверено и использовалось на вашей собственной опасности …

Поскольку вы используете su - , вы говорите su для запуска оболочки входа. Оболочка входа игнорировала свой аргумент -c и вместо этого читала команды. Решение не должно проходить.

Если вы хотите прочитать файл запуска целевого пользователя, сделайте это явно.

 su - USER1 <<EOF date if [ -e ~/.profile ]; then . ~/.profile; fi … EOF 2>&1 | tee -a -- "$LOG" 
  • логин с пользователем apache
  • Загруженный из NFS Linux не имеет права на команду su
  • su - пользователь не работает для пользователей без пароля
  • Как (или это возможно) Linux-сервер X-Server от терминала под именем SU otherusername
  • Изменение переменной PATH для процесса, выполняемого как пользователь в Linux
  • su: Пользователь не известен базовому модулю аутентификации
  • Ошибка аутентификации: su медленнее, чем sudo
  • Установка umask для su root
  • su - -c 'll' other_user приводит к ошибке, как я могу запустить псевдоним другого пользователя?
  • Почему я могу переключиться на пользователя, но не запускать сценарий, поскольку он
  • Что отличает «su - username», а затем команда и команда «sudo -u username»,
  • Сделать суперпользователь действовать как какой-либо другой пользователь в определенном дереве каталогов
  • Interesting Posts

    Есть ли способ поделиться службой, прослушивающей петлю хоста с гостем LXC?

    sed – удалить unmatched "}", ")" или "]" (только для рассматриваемой строки)

    Что вы фильтруете / исключаете список при выполнении резервного копирования с помощью rsync?

    Безопасно ли использовать & и перенаправление вывода вместо nohup?

    mv на шаблоне glob не работает без sudo

    Telnetting Локальный порт не работает, но пытается работать ip

    Добавление метки времени перед каждой строкой STDOUT внутри perlscript

    nmap не показывает sshd?

    'ln' не ведет себя одинаково, когда выполняется в скрипте

    Удобный способ имен файлов в Linux

    Получение липкого фонового терминала, работающего на рабочем пространстве bspwm в полноэкранном режиме

    Как я могу перечислить патчи установленного пакета в SUSE?

    Необходимость ssh с одного сервера Amazon EC2 в другой

    Простейший способ хэширования паролей с несколькими различными алгоритмами хэша

    awk соответствует только 1 линии с одинаковым рисунком

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