su - ユーザID、グループIDを代替してコマンドを実行する

SYNOPSIS

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

DESCRIPTION

su は,ユーザとグループ ID を代用してコマンドを実行できるようにする。

ユーザを指定せずに呼び出すと、su はデフォルトで root として対話型シェルを実行する。 user が指定されている場合、追加の引数を与えることができ、その場合、引数はシェルに渡される。

後方互換性のために、su はデフォルトでカレントディレクトリを変更せず、 環境変数 HOME と SHELL (ターゲットユーザが root でない場合は USER と LOGNAME) のみを設定する。 環境の混在による副作用を避けるため、常に --login オプション (ショートカットの - の代わり) を使用することが推奨される。

このバージョンの su は、認証、アカウント、セッションの管理に PAM を使用する。 ホイールグループのサポートなど、他の su の実装で見られるいくつかの設定オプションは、PAM を使って設定しなければならない。

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

すべての場合において、su は PAM (pam_getenvlist(3)) を使って、最終的な環境の変更を行うことに注意。 --login--preserve-environment のようなコマンドラインオプションは、PAM によって変更される前の環境に影響を与える。

OPTIONS

-c, --command=command
-cオプションでシェルにコマンドを渡す。
-f, --fast
シェルに -f を渡す。これは、シェルによって役に立つ場合とそうでない場合がある。
-g, --group=group
プライマリーグループを指定する。 このオプションはrootユーザーのみ利用可能である。
-G, --supp-group=group
補助グループを指定する。 このオプションはrootユーザのみ使用可能である。 オプション --group が指定されない場合、最初に指定された補助グループはプライマリグループとしても使用される。
-, -l, --login
実際のログインに近い環境で、ログインシェルとして起動する。
o TERM と --whitelist-envi-ronment で指定された変数以外のすべての環境変数をクリアする。
o 環境変数HOME、SHELL、USER、LOGNAME、PATHを初期化する。
o ターゲットユーザーのホームディレクトリの変更
o シェルの argv[0] に '-' を設定し、ログインシェルにする。
-m, -p, --preserve-environment
環境全体を保存する。つまり、HOME、SHELL、USER、LOGNAMEを設定しない。 このオプションは、--loginオプションが指定されている場合、無視される。
-P, --pty
セッション用の擬似端末を作成する。独立したターミナルは、ユーザーがオリジナルのセッションとターミナルを共有しないため、より良いセキュリティを提供する。 これを利用して、TIOCSTI ioctl ターミナルインジェクションや、ターミナルファイル記述子に対する他のセキュリティ攻撃を回避することができる。 また、セッション全体をバックグラウンドに移動させることもできる(例:su --pty - username -c application &)。 擬似端末が有効な場合、su はセッション間のプロキシとして動作する (stdin と stdout をコピーする)。
この機能は、主に対話型セッションのために設計されている。 標準入力が端末ではなく、例えばパイプである場合 (echo "date" | su --pty など)、 擬似端末の ECHO フラグは、雑な出力を避けるために無効化される。
-s, --shell=shell
デフォルトのシェルではなく、指定したシェルを実行する。 実行するシェルは、以下の規則に従って順番に選択される。
o --shell で指定されたシェル
o --preserve-environment オプションを指定している場合、環境変数SHELLで指定されているシェル
o ターゲットユーザの passwdエントリーにリストされたシェル
o /bin/sh
ターゲットユーザーが制限されたシェルを持っている場合 (すなわち /etc/shells にリストされていない場合)、 呼び出しユーザーが root でない限り --shell オプションと SHELL 環境変数は無視される。
--session-command=command
-cと同じであるが、新しいセッションは作られない。
-w, --whitelist-environment=list
環境クリア時にカンマ区切りリストで指定された環境変数をリセットしない。ホワイトリストは、環境変数 HOME、SHELL、USER、LOGNAME、および PATH を無視する。
-V, --version
バージョン情報を表示し終了する。
-h, --help
ヘルプテキストを表示し終了する。

SIGNALS

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

CONFIG FILES

su は /etc/default/su と /etc/login.defs の設定ファイルを読む。 以下の設定項目は、su に関連するものである。


FAIL_DELAY (number)
認証に失敗した場合の遅延時間(秒単位)。負でない整数である必要がある。
ENV_PATH (string)
一般ユーザーのためのPATH環境変数を定義する。 デフォルトは、/usr/local/bin:/bin:/usr/binである。
ENV_ROOTPATH (string)
ENV_SUPATH (string)
root の PATH 環境変数を定義する。 ENV_SUPATHが優先される。 デフォルトは、/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binである。
ALWAYS_SET_PATH (boolean)
yes に設定され、--login--preserve-environment が指定されていない場合、su は PATH を初期化する。

環境変数 PATH は、/bin と /sbin が /usr に統合されているシステムでは異なるかもしれない。この変数は、--login コマンドラインオプションと PAM システム設定 (例: pam_env(7)) によっても影響される。

EXIT STATUS

su は通常、実行したコマンドの終了ステータスを返す。 コマンドがシグナルによって強制終了された場合、su はそのシグナルの番号に 128 を加えたものを返す。

su 自身が生成した終了ステータス。

1 要求されたコマンドを実行する前に一般的なエラーが発生しました。
126 要求されたコマンドを実行できませんでした。
127 要求されたコマンドが見つかりません。

FILES

/etc/pam.d/su
default PAM configuration file
/etc/pam.d/su-l
PAM configuration file if --login is specified
/etc/default/su
command specific logindef config file
/etc/login.defs
global logindef config file

NOTES

セキュリティ上の理由から、su はログインの失敗を常に btmp ファイルに記録するが、 lastlog ファイルには全く書き込まれない。この解決策は、PAM の設定によって su の動作を制御するために使用することができる。もし、pam_lastlog(8) モジュールを使って、ログインに失敗したときの警告メッセージを表示したい場合は、 pam_lastlog(8) が lastlog ファイルも更新するように設定されていなければならない。たとえば、次のようにする。

session required pam_lastlog.so nowtmp

HISTORY

This su command was derived from coreutils' su, which was based on an implementation by David MacKenzie. The util-linux version has been refactored by Karel Zak.


SEE ALSO

setpriv, login.defs, shells, pam(7), runuser

AVAILABILITY

The su command is part of the util-linux package and is available from Linux Kernel Archive ⟨https://www.kernel.org/pub/linux/utils/util-linux/⟩.

External link