sudo コマンドの "-i" オプションと "-E" オプションについて
sudo コマンドの "-i" オプションと "-E" オプションについてメモ。
・Man page of SUDO
https://linuxjm.osdn.jp/html/sudo/man8/sudo.8.html
■ -i オプションについて
ドキュメント曰く
パスワード・データベースの変身対象ユーザの項目でログイン・シェルとして指定されているシェルを実行する。すなわち、 .profile や .login といったログイン用のリソース・ファイルが、 シェルによって読み込まれることになる。
とのこと。これを指定すると $HOME/.bash_profile なりが読み込まれるということのようです。
動作確認を。
# cat /tmp/env/test.sh #!/bin/sh echo $ETC_PROFILE echo $BASH_PROFILE # cat /etc/profile - 略 - export ETC_PROFILE=etc_profile - 略 - # cat /home/test/.bash_profile - 略 - export BASH_PROFILE=bash_profile - 略 - # sudo -u test sh -c /tmp/env/test.sh // -i オプション無しだと環境変数は設定されていない # sudo -u test -i sh -c /tmp/env/test.sh // -i オプション有りだと環境変数が設定されている etc_profile bash_profile
■ -E オプションについて
こちらはドキュメント曰く
現在の環境変数をそのまま保持するのがユーザの意向だと、セキュリティポリシーに指示する。
とのことです。sudo 実行ユーザの環境変数がそのまま引き継がれるという感じです(セキュリティポリシーは今回は無視)
こちらも動作確認を。
# id uid=0(root) gid=0(root) groups=0(root) # echo $ETC_PROFILE etc_profile # echo $BASH_PROFILE # sudo -u test -E sh -c /tmp/env/test.sh // root の環境変数として設定されている $ETC_PROFILE だけが設定されている etc_profile
■ -i と -E が同時に指定された場合について
この場合、どうも -E の設定が効かないような動作になりました。以下の感じです。
# cat /tmp/env/test2.sh #!/bin/sh echo $AAA echo $BBB echo $BASH_PROFILE # id uid=0(root) gid=0(root) groups=0(root) # export AAA=aaa; export BBB=bbb # echo $AAA aaa # echo $BBB bbb # sudo -u test -E -i sh -c /tmp/env/test2.sh // rootの環境変数 $AAA、$BBB は設定されていない bash_profile
-i が「ログイン・シェルとして指定されているシェルを実行する」だから、引き継がれないのは当たり前なんですかね・・・(まったく確認なし・・・)
シェルにもっと詳しくなりたいもんです。
以上になります。