2012年5月12日土曜日

suとsu - の違い

http://www.obenri.com/_command/su01.html

su の後に "-(ハイフン)" をつけた場合と付けない場合の違いは、 su コマンド実行前のユーザーアカウントの操作環境(使用する シェル の種類や 環境変数 、 ホームディレクトリ など)をそのまま "root" に引き継ぐか、それとも "root" に設定されている操作環境を用いるか、という違いがあります。

具体的には
su
だとホームディレクトリやPATHなどの環境変数が変更前のユーザーの設定のままだが
su -
だとrootのホームディレクトリになり、PATHなどの環境変数もrootのものが設定される。

▼具体例
・CentOSでifconfigコマンドが使えない

[root@localhost ~]# which ifconfig
/sbin/ifconfig

ifconfigとコマンドを打ってもコマンドが通らないのは一般ユーザーは/sbin/にデフォルトで
パスが通っていないため。

[guest@localhost ~]$ env | grep PATH
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/guest/bin

下記のようにsuでは環境変数が一般ユーザーのものと同一なためifconfigのパスが通っていない


[guest@localhost ~]$ su
パスワード:
[root@localhost guest]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/guest/bin
[root@localhost guest]# ifconfig
bash: ifconfig: command not found

su -ならrootの環境変数がセットされるため、ifconfigのパスが通っている
[guest@localhost ~]$ su -
パスワード:
[root@localhost ~]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr **:**:**:**:**:**
          inet addr:192.168.1.*  Bcast:192.168.1.255  Mask:255.255.255.0