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

#!/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, а затем он выполняется снова, когда нам нужно выйти вручную.

  • Загруженный из NFS Linux не имеет права на команду su
  • su и перенаправление
  • `$ XAUTHORITY` появляется из 'нигде' на su + tmux
  • su не может выполнить bin / bash / ****
  • Ошибка аутентификации: su медленнее, чем sudo
  • Различия между sudo и su в наследующей среде
  • Как выйти из su и другого пользователя
  • Избегайте спрашивать пароль, если `` пользовательская команда su -m` используется под `user`?
  • 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" 
    Linux и Unix - лучшая ОС в мире.