SU

Section: User Commands (1)
Updated: July 2014
Index Return to Main Contents
 

名前

su - 代わりのユーザー ID とグループ ID でコマンドを実行する。  

書式

su [options] [-] [user [argument...]]  

説明

su を使うと、代わりのユーザー ID とグループ ID でコマンドを実行できる。

引き数なしで実行された場合、 suroot で対話シェルを実行する。

後方互換のため、 su はデフォルトではカレントディレクトリを変更せず、 環境変数 HOMESHELL を設定するだけである (対象の user が root でない場合、 USERLOGNAME も設定する)。 いろいろな環境で副作用が出ないように、 (ショートカットの - ではなく) --login オプションを常に使うことが推奨される。

このバージョンの su はアカウントとセッション管理に PAM を使う。 wheel グループのサポートといった、他の su 実装にある設定オプションを使うには、PAM で設定する必要がある。

su は主に非特権ユーザーのために設計されている。 特権ユーザーのための推奨される方法 (例えば、root が実行するスクリプト) は、 set-user-ID が設定されていないコマンド runuser(1) を使うことである。 runuser(1) は認証は必要なく、別の PAM 設定で提供される。 PAM セッションが全く必要ない場合、推奨される方法は、コマンド setpriv(1) を使うことである。

 

オプション

-c, --command=command
command をシェルに -c オプションを付けて渡す。
-f, --fast
-f をシェルに渡す。 これはシェルによっては、使えたり、使えなかったりする。
-g, --group=group
使用するプライマリーグループ。 このオプションは root ユーザーにのみ許可されている。
-G, --supp-group=group
補助 (supplementary) グループを指定する。 このオプションは root ユーザーにのみ許可されている。 オプション --group が指定されていない場合、補助グループがプライマリグループとして 使われる。
-, -l, --login
シェルをログインシェルとして開始する。環境変数は実際の login と同様である:
o
TERM--whitelist-environment で指定された環境変数以外の、 全ての環境変数をクリアする。
o
環境変数 HOME, SHELL, USER, LOGNAME, PATH を初期化する。
o
対象ユーザーのホームディレクトリに変更する。
o
シェルの argv[0] に '-' を設定し、シェルをログインシェルとする。
-m, -p, --preserve-environment
環境変数を保持する。つまり、 HOME, SHELL, USER, LOGNAME を設定しない。 オプション --login が指定されている場合、このオプションは無視される。
-P, --pty
セッションに対して擬似端末 (pseudo-terminal) を作成する。 独立した端末を使うことで、ユーザーが元のセッションと端末を 共有しなくなり、より良いセキュリティ環境を提供する。 これにより、端末のファイルディスクリプターに対する、 TIOCSTI ioctl 端末インジェクションやセキュリティアタックを回避できる。 全てのセッションはバックグランドに移すこともできる (例えば、 "su --pty - username -c application &")。 擬似端末が有効になっている場合、 su コマンドはセッション間の プロキシとして動作する (標準入力と標準出力をコピーする)。

この機能は大部分が対話セッションのために設計されている。 標準入力が端末ではなく、例えばパイプの場合 (例、echo "date" | su --pty)、 不要な出力を避けるため、擬似端末の ECHO フラグは無効化される。

-s, --shell=shell
デフォルトのシェルの代わりに、指定した shell を実行する。 実行するシェルは以下のルールに従って順番に選択される:
o
--shell で指定したシェル
o
オプションが使われている場合は、環境変数 SHELL で指定されたシェル
o
対象ユーザーの passwd エントリにリストされているシェル
o
/bin/sh
対象ユーザーが制限されたシェル (つまり /etc/shells に記載されていないシェル) を使っている場合、 呼び出し元ユーザーが root でない限り、 --shell オプションと SHELL 環境変数は無視される。
--session-command=command
-c と同様であるが、新しいセッションを作成しない。(推奨しない)
-w, --whitelist-environment=list
--login で環境変数をクリアする際に、 カンマ区切りの list に指定された環境変数はリセットしない。 このホワイトリストでは、環境変数 HOME, SHELL, USER, LOGNAME, PATH は無視される。
-V, --version
バージョン情報を表示して、終了する。
-h, --help
ヘルプを表示して、終了する。
 

シグナル

SIGINT, SIGQUIT, SIGTERM を受けとると、 su は、受け取ったシグナルで子プロセスを終了し、その後で自身を終了する。 子プロセスが SIGTERM で終了されて失敗すると、2 秒後に SIGKILL で kill される。  

設定ファイル

su は設定ファイル /etc/default/runuser/etc/login.defs を読み込む。 以下の設定項目が su(1) と関連する:

FAIL_DELAY (数値)

認証が失敗した場合の待ち時間。数値は、負ではない整数である。

ENV_PATH (文字列)

一般ユーザーの PATH 環境変数を定義する。 デフォルト値は、 /usr/local/bin::/bin::/usr/bin である。

ENV_ROOTPATH (文字列)
ENV_SUPATH (文字列)

root の PATH 環境変数を定義する。 ENV_SUPATH が優先される。 デフォルト値は、 /usr/local/sbin::/usr/local/bin::/sbin::/bin::/usr/sbin::/usr/bin である。

ALWAYS_SET_PATH (ブール値)

この項目が yes に設定されており、--login と --preserve-environment が指定されない場合、 suPATH を初期化する。

/bin と /sbin が /usr の中に統合されているシステムでは、 環境変数 PATH が違うかもしれない。  

返り値

通常、 su は実行したコマンドの返り値を返す。 コマンドがシグナルで kill された場合、 su はシグナルの番号 + 128 を返す。

su 自身が生成する返り値は、以下の通り:

1
要求されたコマンドを実行する前の一般的なエラー。
126
要求されたコマンドが実行できなかった。
127
要求されたコマンドが見つからなかった。
 

ファイル

/etc/pam.d/su
デフォルトの PAM 設定ファイル
/etc/pam.d/su-l
--login が指定された場合の PAM 設定ファイル
/etc/default/su
su コマンド固有の logindef 設定ファイル
/etc/login.defs
グローバルの logindef 設定ファイル
 

注意

セキュリティ上の理由から、 su はログインの失敗を btmp ファイルに記録するが、lastlog ファイルには書き出さない。 この su 挙動は PAM 設定で制御できる。 pam_lastlog モジュールを使って、ログインの失敗の警告メッセージを表示する場合、 lastlog ファイルも更新するように pam_lastlog 設定しなければならない。 例えば、以下のように設定する:


session required pam_lastlog.so nowtmp
 

関連項目

setpriv(1), login.defs(5), shells(5), pam(8), runuser(8)  

履歴

この su コマンドは、 David MacKenzie によって実装された coreutils の su コマンドから派生している。 util-linux バージョンは Karel Zak によってリファクタされた。  

入手方法

su コマンドは util-linux パッケージの一部であり、 Linux Kernel Archive から入手できる。


 

Index

名前
書式
説明
オプション
シグナル
設定ファイル
返り値
ファイル
注意
関連項目
履歴
入手方法

This document was created by man2html, using the manual pages.
Time: 15:12:38 GMT, April 13, 2020