別のユーザーに切り替えなければならないシナリオがあり、その後、いくつかのLinuxコマンドを実行する必要があります。
私のコマンドはこのようなものです
( echo myPassword | Sudo -S su hduser ) && bash /usr/local/hadoop/sbin/start-dfs.sh
しかし、このコマンドを使用すると、ユーザーに切り替え、次のコマンドが前のユーザーでトリガーされました。
シェルスクリプトを使用してこれを達成できるものはありますか
お試しください。
Sudo -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh'
参照 man Sudo :
-H
-H(HOME)オプションは、セキュリティポリシーがHOME環境変数をターゲットデータベース(デフォルトではroot)のホームディレクトリに、パスワードデータベースで指定されたとおりに設定することを要求します。ポリシーによっては、これがデフォルトの動作になる場合があります。
-uユーザー
-u(ユーザー)オプションを指定すると、Sudoは指定されたコマンドをroot以外のユーザーとして実行します。ユーザー名の代わりにuidを指定するには、#uidを使用します。コマンドをuidとして実行する場合、多くのシェルでは、 '#'をバックスラッシュ( '\')でエスケープする必要があります。セキュリティポリシーは、uidをパスワードデータベースにリストされているものに制限する場合があります。 sudoersポリシーでは、targetpwオプションが設定されていない限り、パスワードデータベースにないuidを許可します。他のセキュリティポリシーはこれをサポートしない場合があります。
su user -c "sh /path/command.sh"
serとしてコマンドを実行できます。
私はこのコマンドでテストしました:
echo myPassword | Sudo -S su - foobar -c "/usr/bin/watch -n 1 cat /etc/resolv.conf"
その後、watch -n
はfoobarとして実行されていました。
だから私はあなたのコマンドがそのように機能するはずだと思います:
echo myPassword | Sudo -S su - hduser -c "bash /usr/local/hadoop/sbin/start-dfs.sh"
ここに αғsнιηの回答の短いバージョン :
Sudo -Hu user command
# example: Sudo -Hu root fish
あなたはこれを試すことができます:
pkexec-別のユーザーとしてコマンドを実行する
pkexec [--user username] PROGRAM [ARGUMENTS ...]