2013-10-03 2 views
5

Я пытаюсь написать скрипт, который будет выполняться следующие команды:су передать пароль для сценария

sudo su 
runmqsc_result=`su -c "runmqsc QMGR < /home/rob/query_queue.txt" -m "mqm"` 

Мой вопрос, однако, является то, что эти команды выполняются как часть сценария оболочки, пользователем, который является в файле sudoers. Однако, очевидно, sudo su запрашивает пароль пользователя, запускающего его.

Что мне нужно сделать, так это передать пароль в sudo su, чтобы сценарий запускался автоматически. Как я могу это сделать?

p.s: Я не могу изменить разрешения для запуска «runmqsc» ... он должен быть запущен как пользовательский mqm, который необходимо переключить с пользователя root.

ответ

12

От man sudo:

-S The -S (stdin) option causes sudo to read the password from the standard 
     input instead of the terminal device. The password must be followed by a 
     newline character. 

Таким образом, в то время как бросает вызов всем принципам безопасности, echo 'password' | sudo -S su [...] должны работать.


В качестве альтернативы, вы можете сделать свой сценарий записываемый только корень и добавьте следующие строки в /etc/sudoers, чтобы позволить пользователю johndoe запустить его с корневыми привилегиями без необходимости вводить свой пароль:

johndoe ALL = NOPASSWD: /full/path/to/your/script 

часть , доступная только для root, важна для предотвращения изменения johndoe скрипта и выполнения произвольных команд с правами администратора.

+1

Нарушение всех принципов безопасности Я сделал это в Busybox: 'echo password | su -c reboot' –

+1

Я верю, что речь шла о переходе к 'su'; в моем случае, машина, о которой идет речь, не имеет и никогда не будет 'sudo' на ней, поэтому это решение в значительной степени мертво для su в одиночку. – kevr

0

Это решение работает с использованием команды 'script' из пакета 'bsdutiles', который устанавливает pty (терминал). Команда «sleep» предназначена для предотвращения отправки пароля до того, как команда «su» готова к чтению. Команда «хвост» удаляет строку ввода «Пароль:», выданную «su».

{ sleep 1; echo rootpassword } | script -qc 'su -c "runmqsc QMGR < /home/rob/query_queue.txt" -m "mqm"' /dev/null | tail -n +2 

Берегитесь, что rootpassword можно увидеть во многих отношениях (история, пс/Proc /, и т.д. ...). Запустите команду с пространством, чтобы избежать записи истории.

Смежные вопросы