それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

sudo su実行後も環境変数を維持する

suの実行後にカレントディレクトリを維持したい

su を実行するとカレントディレクトリが変わってしまうので、いまいるディレクトリやeditor 変数をそのままに 別ユーザーになりたい。

sudo -E を使う

sudo にオプションを付ければ、カレントディレクトリなど現在の環境をそのまま維持してsu することができる。

sudo -E su

man sudo から抜粋

      -E, --preserve-env
                   現在の環境変数をそのまま保持するのがユーザの意向だと、セキュリティポリシーに指示する。 ユーザが環境を保持する許可を持っていない場合は、 セキュ                                                                            
                   リティポリシーがエラーを返すことになるだろう。                                     

/etc/sudoers の設定と密接な関係

環境変数の設定と維持は sudoers の設定と密接な関係にある。

私の場合、sudo 実行時に余計な環境変数を持ち込みたくないのでリセットしている。というかディストリビューションのデフォルトはほとんど場合が環境変数を初期化するはずだ。

sudoers

Defaults  env_reset

この設定があれば、 /etc/environment の設定で環境変数がリセットされるはずだ。

sudoersで環境変数を維持することにする?

sudo -E を毎回付けるのが面倒な場合は env_reset を消してしまえばいい。 

個人用のLinux Desktop だと便利だと思う。 ただ、共有のサーバーなどでこれをやると知らないあいだに alias 書き換えられてたりして、気づかずマルコマンドを実行する恐れがあって怖い。

なので、他の設定 etc_keep や set_env を sudoersで組み合わせて必要な環境変数だけ持ち込むのがベターだとおもう。これらのついては、はどこか別の機会に

参考資料

  • man sudo
  • man 5 sudoers

関連資料

http://takuya-1st.hatenablog.jp/entry/2018/10/17/023000