SU(1)

名称
su - 一時的に他のユーザになりかわる

書式
su [-Kflm] [-c class] [login [args]]

解説
su は login するときに Kerberos パスワード (もしくはログイン ( login ) が指定されない場合には、 “login.root” のパスワード)を要求し、Kerberos 認証を得たあとにユーザとグループ ID を 切替えます。シェルはそのあとに実行されます。もし Kerberos エラーがあれ ば、 su は、 login のためのパスワードを見つけるためにローカルパスワードファイルを調べま す。もし su が root によって実行された場合、パスワードは要求されず、適当なユーザ ID をもったシェルが実行されます。付加的な Kerberos 認証は一つも得られ ません。

デフォルトでは、 USER, HOME, SHELL 以外の環境変数は引き継がれます。 HOME と SHELL はターゲットとなるログインのデフォルト値になります。 USER は、ターゲットログインのユーザ ID が 0 以外であれば、ターゲットログイ ンのものがセットされます。0 の場合は変更されません。実行されるシェルは ターゲットログインのログインシェルです。これは su の伝統的なふるまいです。 オリジナルユーザのログインクラス( login.conf(5) 参照)の資源制約とセッション優先度も通常保たれます。 例外はターゲットログインがユーザ ID 0 の場合です。

オプションとしては、以下のものがあります:

-K  ユーザ認証に Kerberos を使用しません。

-f  シェルとして csh(1) が実行される場合、 “.cshrc” ファイルを読み込みません。

-l  通常にログインした場合と同様になるように環境変数が設定されます。 すなわち、環境変数は HOME, SHELL, PATH, TERM, USER 以外は捨てられます。 HOME と SHELL は上記のように変更されます。 USER はターゲットログインの値になります。 PATH は “/bin:/usr/bin” になります。 TERM は、あなたの現在の環境変数の値になります。 ターゲットログインのクラスにより、 ログインクラスケーパビリティデータベースに基づき、 環境変数が設定もしくは変更されることがあります。 実行されるシェルはターゲット ログインのログインシェルになり、 ターゲットログインのホームディレクトリに移動します。 資源制約とセッション優先度は、 ターゲットアカウントのログインクラスのものに変更されます。

-m  環境変数は変化しません。 実行されるシェルは自分のログインシェルで、ディレクトリの移動も行われません。 セキュリティの用心として、もしターゲットユーザのシェルが 非標準シェル ( getusershell(3) で定義される) であったり、呼出側の実ユーザ ID が 0 でなければ、 su は失敗します。

-c class
    指定されたログインクラスの設定を使用します。 スーパユーザのみが使用を許されます。

-l と -m は、同時に指定することはできません。最後に指定したものが優先されます。

オプションの args がコマンドラインに指定されると、 それらはターゲットログインのログインシェルに引き渡されます。

グループ 0 (通常は “wheel”) のメンバのみ “root” となることが可能です。 グループ 0 が存在しないか空の場合には、どのユーザでも “root” に su することが可能です。

デフォルトでは (設定がされていなければ) スーパユーザのプロンプトは “#” に設定されます。

関連ファイル
/etc/auth.conf
    認証サービスの設定

関連項目
csh(1), kerberos(1), kinit(1), login(1), sh(1), group(5), login.conf(5), passwd(5), environ(7)

環境変数
su で利用される環境変数は以下の通りです:

HOME
    上記で示した書き換えがない限り、 実ユーザ ID のデフォルトのホームディレクトリです。

PATH
    上記で示した書き換えがない限り、実ユーザ ID のデフォルトのサーチパスで す。

TERM
    なり代わる人が所有している端末のターミナルタイプです。

USER
    ユーザ ID が 0 (root) 以外の場合は、ユーザ ID は常に su 後の effective ID (ターゲットとなるユーザ ID) です。

使用例
su man -c catman
    コマンド catman をユーザ man で実行します。 あなたの実 UID が 0 でない場合は、man のパスワードを尋ねられます。
su man -c 'catman /usr/share/man /usr/local/man /usr/X11R6/man'
    上と同様ですが、コマンドが複数の語から構成されています。 -c オプションをシェルに渡すためにクォートしています (ほとんどのシェルでは -c への引数が単一語であると期待します)。
su -c staff man -c 'catman /usr/share/man /usr/local/man /usr/X11R6/man'
    上と同様ですが、ログインクラス “staff” の資源制限にてターゲットコマンドを実行します。 注釈: この例では、最初の -c オプションは su に適用され、2 番目のものは起動されるシェルの引数となります。
su -l foo
    ユーザ foo のログインの振舞をします。

歴史
su コマンドは AT&T UNIX から登場しました。