いくつかのパラメータを受け入れて他のユーザーとして実行する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
代わりに使用するので、この問題なしにパラメータを正しく渡すことは非常に困難です。su
su
sudo
ちょうど小さなコードスニペットを実行したい場合は、次のこともできます。
target_user="foo"
sudo -u "$target_user" sh -s "$@" <<'EOF'
echo "$@"
EOF
これにより起動され、sh
現在のスクリプトのパラメータが渡され、次にheredocを介して提供されたスクリプトが実行されます。