web-dev-qa-db-ja.com

別のユーザーとしてbashスクリプトの一部を実行する

スクリプトの一部を別の(非root)ユーザーとして実行する方法はありますか?それが役立つ場合、スクリプトの最後に別のユーザーとして実行される部分が発生します

編集:
OS-> Ubuntu 9.04

33
Manish Mathai

スクリプトでSudoコマンドを使用します。

フォーム:

Sudo -u username command

sudoコマンドはユーザーcommandをユーザーusernameとして実行します。

スクリプトがrootとして実行されている場合、パスワードの入力を求められるとは思いません。それ以外の場合、この記事では 1つのコマンドラインでパスワード付きのSudo? を使用する方法について説明し、この記事では パスワードなしでSudo? を使用する方法について説明します。

42
pcapademic

#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
6
AXE Labs

この答え は良いですが、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ページ には、多くの詳細が含まれています

6
DaveParillo

ソナルクの場合:

Sudo -u sonar /usr/bin/sonar start

ここで、sonarは、コマンドの実行に使用されるユーザーの名前/usr/bin/sonar start

4
burtsevyg

このように、スクリプトの最後は別のユーザー(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
2
dparalen

よくわかりませんが、そのスクリプトの最後だけを別のユーザーとして実行する場合は、su someuserスクリプトの最後の前。

何か不足していますか?

お役に立てれば幸いです。

よろしく

2
dag729