次のコマンドを実行するスクリプトを作成しようとしています。
Sudo su
runmqsc_result=`su -c "runmqsc QMGR < /home/rob/query_queue.txt" -m "mqm"`
ただし、私の問題は、これらのコマンドがsudoersファイルにあるユーザーによってシェルスクリプトの一部として実行されることです。ただし、明らかにSudosuはそれを実行しているユーザーのパスワードを要求します。
スクリプトが自動的に実行されるように、パスワードをSudosuに渡す必要があります。これどうやってするの?
p.s:「runmqsc」を実行するための権限を変更できません... rootユーザーから切り替える必要があるユーザーmqmとして実行する必要があります。
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 [...]
は機能するはずです。
または、スクリプトをrootのみで書き込み可能にし、以下を/etc/sudoers
に追加して、ユーザーjohndoe
がパスワードを入力せずにroot権限でスクリプトを実行できるようにすることもできます。
johndoe ALL = NOPASSWD: /full/path/to/your/script
rootのみが書き込み可能の部分は、johndoe
がスクリプトを変更したり、rootとして任意のコマンドを実行したりするのを防ぐために重要です。
このソリューションは、pty(ターミナル)をセットアップする「bsdutiles」パッケージの「script」コマンドを使用して機能します。 「sleep」コマンドは、「su」コマンドがパスワードを読み取る準備ができる前にパスワードが送信されないようにするためにあります。 「tail」コマンドは、「su」によって発行された「Password:」入力行を削除します。
{ sleep 1; echo rootpassword } | script -qc 'su -c "runmqsc QMGR < /home/rob/query_queue.txt" -m "mqm"' /dev/null | tail -n +2
Rootpasswordはさまざまな方法(履歴、ps、/ proc /など)で表示される可能性があることに注意してください。少なくとも履歴の記録を避けるために、スペースを入れてコマンドを開始してください。