SU(1)

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

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

解説
su ユーティリティは PAM 経由で適切なユーザ資格を要求し、 そのユーザ ID に切り替えます (デフォルトユーザはスーパユーザです)。 その後シェルが実行されます。

すべてのポリシの設定には PAM が使用されます。

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

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

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

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

-   (文字無し) -l と同じです。

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

-s  ユーザの資格の設定の一環として、 MAC ラベルをユーザのデフォルトラベルへ設定します。 起動したプロセスの MAC ラベルが、 ユーザのデフォルト MAC ラベルへ遷移するには不十分である場合、 MAC ラベルの設定は失敗するかもしれません。 ラベルの設定ができない場合、 su は失敗します。

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

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

オプションの args がコマンドラインに指定されると、 それらはターゲットログインのログインシェルに引き渡されます。 ターゲットログイン名より前のコマンドライン引数はすべて su 自身によって処理され、 ターゲットログイン名より後のコマンドライン引数はすべて ログインシェルに渡されることに注意してください。

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

関連ファイル
/etc/pam.conf
    su は PAM サポート付きで設定されています。 /etc/pam.conf エントリをサービス名 “su” で使用します。

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

環境変数
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 - foo
    上と同じです。
su -
    rootのログインをシミュレートします。

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