su
su コマンド (substitute user) はシステム上の他のユーザーになりかわるために使われます、一般的にそのユーザーとは root です。su を使うことでユーザーを変えるためにログイン/ログアウトする手間を省くことができます。つまり、あなたのセッション内で一種の"サブセッション"を使って他のユーザーとしてログインし、その後あなたのセッションに戻ることになります。
インストール
su は util-linux パッケージに入っています。
使用方法
他のユーザーのログインとして、su になりたいユーザー名を入力します:
$ su username
デフォルトでは、通常のユーザーとして実行すると、なりたいユーザーのパスワードを求めるプロンプトが表示されます。root として su を実行する場合、パスワードは必要ありません。
ユーザー名が渡されない場合、su は root ユーザーを想定し、要求されるパスワードは root のパスワードになります。
詳細については、su(1) を参照してください。
セキュリティ
セキュリティの観点から、おそらく su の代わりに sudo を設定して使うほうがベターと言えます。sudo システムは、ターゲットユーザー(あなたが使おうとしているユーザーアカウント)のパスワードではなく、あなた自身のパスワードを要求します(設定によっては全くパスワードを使いません)。ユーザー間でパスワードを共有する必要がないため、ユーザーからの root 権限へのアクセス(もしくはその他のアカウントへのアクセス)を止めなくてはならない場合、root パスワードを変更しなくてもよいのです。あなた以外のユーザーにとっては不自由でしょうが、あなたはユーザーの sudo を無効にするだけになります。
ユーザーが root のシェルを使えるように sudo を設定している場合、sudo -s
や sudo -i
で、su
や su -l
と同じことができます、それぞれ、root パスワードではなくユーザーのパスワードを使います(もしくはパスワードを使わない)。同様に、john のシェルを実行することが許可されているなら、sudo -u john -i
が su -l john
と同じになります。
ヒントとテクニック
ログインシェル
su はデフォルトで、現在のディレクトリとユーザーの環境変数を維持します(新しいユーザーのそれにはスイッチしません)。
重要な対照的考察事項:
- 管理者のシェルアカウントを使うよりも、標準的なユーザーのシェルアカウントを使う方が都合の良い場合があります。特に、ユーザーの問題を解決するとき、そのユーザーアカウントにログインして問題を再現・デバッグするのが一番効果的かもしれません。
- しかし、多くの場合、一般ユーザーのシェルから root ユーザーが作業を行う(そのアカウントの環境変数を使う)ことは望ましくなく、また危険でもあります。不注意に一般ユーザーのシェルアカウントを使っていると、プログラムのインストールなどのシステム作業が root アカウントとは違う結果を生むことがあります。例えば、インストールされたプログラムが、偶然にも一般ユーザーにシステムにダメージを与える権限や、データへの許されざるアクセス権を与えてしまう可能性があるのです。
よって、管理者ユーザーは(さらに他のユーザーも)、su を使う時(su を使うこともできるだけ避けましょう)はいつも su コマンドに -l
/--login
オプションを加えるべきです。オプションには2つの意味があります:
- そのユーザーにログインする際に現在のディレクトリから、新しいユーザーのホームディレクトリ(root ユーザーの場合、
/root
)に移動します - 環境変数を
~/.bashrc
によって指定された、新しいユーザーのものに変更します。つまり、su に-l
/--login
オプションをつけると、現在のディレクトリと環境変数が新しいユーザーが(現在のセッションではなく)新しいセッションにログインしたときと同じようになるということです。
管理者は su を使う時は次のようにすべきです:
$ su -l
ユーザーネームとして root を付け加えても同じ結果になります:
$ su -l root
また、他のユーザーでも同じことができます (例: archie という名前のユーザー):
# su -l archie
~/.bashrc
に次のようにエイリアスを追加してもいいでしょう:
alias su="su -l"
su と wheel
BSD の su はデフォルトで root を使うことができるのが "wheel" グループのユーザーだけになっています。これは GNU su のデフォルトとは違いますが、PAM を使うことで BSD と同じようにできます。/etc/pam.d/su
と /etc/pam.d/su-l
にある次の行をアンコメントしてください:
auth required pam_wheel.so use_uid