他のユーザーが実行するコマンドに引数を渡す

他のユーザーが実行するコマンドに引数を渡す

いくつかのパラメータを受け入れて他のユーザーとして実行するbashスクリプトがあります。test.sh

#!/bin/bash
sudo su user2 <<'EOF'
echo $1
EOF

ただし、空白で印刷されます。

$ ./test.sh haha

環境変数がリセット(?)されたためであることがわかっています。この主張をどのように伝えることができますか?セキュリティに関しては、環境リセットを無効にしてはいけないと聞きました。この問題を解決するために私が考えることができる唯一の方法は、$1ファイルに書き込んでからuser2が再度読むことです。しかし、もっと良い方法があるべきだと思います。

ベストアンサー1

スクリプト全体を別のユーザーとして実行するための一般的なアプローチは、スクリプトの先頭に次のような内容を追加することです。

target_user="foo"
if [ "$(whoami)" != "$target_user" ]; then
  exec sudo -u "$target_user" -- "$0" "$@"
fi

ここでは。sudo代わりに使用するので、この問題なしにパラメータを正しく渡すことは非常に困難です。sususudo

ちょうど小さなコードスニペットを実行したい場合は、次のこともできます。

target_user="foo"
sudo -u "$target_user" sh -s "$@" <<'EOF'
  echo "$@"
EOF

これにより起動され、sh現在のスクリプトのパラメータが渡され、次にheredocを介して提供されたスクリプトが実行されます。

おすすめ記事