2012年12月29日土曜日

su した時の PATH

前回は ログイン時の PATH について書きましたが、今回は su した時の PATH について書きます。(別途 sudo した時の PATH も書く予定です。)

今の PATH が
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
となっている状態で、su すると
$ su - user
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PATH が変更されて、sbin 系のものがなかったり、/usr/local/games が追加されてたりします。

調べてみました。結論だけ言うと、
  • 「$ sudo su -」した場合 (「-」付きで root に su した場合)
  • PATH は /etc/login.defs の ENV_SUPATH で上書きされます。
    $ grep ^ENV_SUPATH /etc/login.defs
    ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
    ENV_SUPATH が無い場合は /bin:/usr/bin で上書きされます。

  • 「$ su - user」した場合 (「-」付きで一般ユーザーに su した場合)
  • PATH は /etc/login.defs の ENV_PATH で上書きされます。
    $ grep ^ENV_PATH /etc/login.defs
    ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
    
    ENV_PATH が無い場合は /bin:/usr/bin で上書きされます。

  • 「$ sudo su」又は「$ su user」した場合 (「-」なしで root 又は一般ユーザーに su した場合)
  • /etc/login.defs に ENV_SUPATH や ENV_PATH があっても無視され、/etc/environment に書いてある PATH で上書きされます。
    $ cat /etc/environment
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
    
    /etc/environment は前回「ログイン時の PATH」で紹介した、ログイン時に設定されている PATH です。

このあたりのことは su の man に書いてます。
$ man su
... snip ...
       The current environment is passed to the new shell. The value of $PATH
       is reset to /bin:/usr/bin for normal users, or
       /sbin:/bin:/usr/sbin:/usr/bin for the superuser. This may be changed
       with the ENV_PATH and ENV_SUPATH definitions in /etc/login.defs.
... snip ...
  • PATH は一般ユーザーに su した場合は /bin:/usr/bin に、root に su した場合は /sbin:/bin:/usr/sbin:/usr/bin にリセットされる。
  • これらの値は /etc/login.defs の ENV_PATH、ENV_SUPATH で変更できる。
とのことですが、この通りではないみたいです。
まず、ENV_PATH、ENV_SUPATH が有効になるのは su を「-」付きで実行した場合で、「-」無しで実行した合は /etc/environment の PATH が有効になりました。
また、「-」付きで su した場合に ENV_PATH、ENV_SUPATH が無いと一般ユーザーの場合は /bin:/usr/bin、root の場合は /sbin:/bin:/usr/sbin:/usr/bin になるとのことですが、実際は一般ユーザーも root も /bin:/usr/bin になりました。
なぜかわかりませんが、man どおりには動かなかったです。

0 件のコメント:

コメントを投稿