スクリプトの一部を別の(非root)ユーザーとして実行する方法はありますか?それが役立つ場合、スクリプトの最後に別のユーザーとして実行される部分が発生します
編集:
OS-> Ubuntu 9.04
スクリプトでSudoコマンドを使用します。
フォーム:
Sudo -u username command
sudoコマンドはユーザーcommandをユーザーusernameとして実行します。
スクリプトがrootとして実行されている場合、パスワードの入力を求められるとは思いません。それ以外の場合、この記事では 1つのコマンドラインでパスワード付きのSudo? を使用する方法について説明し、この記事では パスワードなしでSudo? を使用する方法について説明します。
#I =好き:
#test if running bash as a different user works
Sudo -u nobody bash -c : && RUNAS="Sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
#./run
1: root
2: nobody
3: root
この答え は良いですが、serverfaultのアドバイスは少し危険です-誰でも何でもrootとして実行することができます!コメントをフォーマットできないので、ここに投稿します。
Visudoを使用して、必要な権限をできる限り正確に与えることをお勧めします。 visudo
と入力して、次のような行を追加します。
username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
これと同じことを多くのホストで実行する必要がある場合は、次のコマンドで開くことができます。
username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
しかし、私はどちらも**使用しません*:
username ALL=(ALL) NOPASSWD: ALL
またはユーザー名のホスト名= ALL
sudoerのmanページ には、多くの詳細が含まれています
ソナルクの場合:
Sudo -u sonar /usr/bin/sonar start
ここで、sonar
は、コマンドの実行に使用されるユーザーの名前/usr/bin/sonar start
このように、スクリプトの最後は別のユーザー(root)によって実行されます。 $[LINENO+2]
およびexit $?
呼び出し。これらは、スクリプトの終わりを1回だけ実行し、Sudo
呼び出しの終了コードを保持するために必要です。
#!/bin/bash
echo $USER
# pipe the rest of this script via a Sudo call
tail -n +$[LINENO+2] $0 | exec Sudo bash
exit $?
echo $USER
exit 1
よくわかりませんが、そのスクリプトの最後だけを別のユーザーとして実行する場合は、su someuser
スクリプトの最後の前。
何か不足していますか?
お役に立てれば幸いです。
よろしく