su
su コマンド (substitute user) はシステム上の他のユーザーになりかわるために使われます、一般的にそのユーザーとは root です。su を使うことでユーザーを変えるためにログイン/ログアウトする手間を省くことができます。つまり、あなたのセッション内で一種の"サブセッション"を使って他のユーザーとしてログインし、その後あなたのセッションに戻ることになります。
インストール
su は util-linux パッケージに入っています。
使用方法
他のユーザーのログインとして、su になりたいユーザー名を入力します:
$ su username
デフォルトでは、通常のユーザーとして実行すると、なりたいユーザーのパスワードを求めるプロンプトが表示されます。root として su を実行する場合、パスワードは必要ありません。
ユーザー名が渡されない場合、su は root ユーザーを想定し、要求されるパスワードは root のパスワードになります。
詳細については、su(1) を参照してください。
ヒントとテクニック
ログインシェル
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