コマンドラインのマニュアル

Man » su マニュアルオンライン - su man ページの詳細なオンラインドキュメント

🌍
su - 別のユーザーおよびグループ ID でコマンドを実行します。

概要

su [オプション] [-] [ユーザー [引数...]]

説明

su を使用すると、コマンドを別のユーザーおよびグループ ID で実行できます。

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

後方互換性のために、su はデフォルトで現在のディレクトリを変更せず、環境変数 HOME と SHELL (およびターゲットユーザーが root ではない場合は USER と LOGNAME) のみを設定します。 常に --login オプション (またはそのショートカットである -) を使用して、異なる環境が混在することによって発生する副作用を避けることをお勧めします。

このバージョンの su は、認証、アカウント、およびセッション管理に PAM を使用します。 他の su 実装にあるホイールグループのサポートなど、一部の構成オプションは、PAM 経由で構成する必要があります。

su は主に権限のないユーザー向けに設計されており、権限のあるユーザー (例: root として実行されるスクリプト) に推奨されるソリューションは、認証を必要とせず、個別の PAM 構成を提供する、set-user-ID コマンド runuser(1) を使用することです。 PAM セッションがまったく必要ない場合は、コマンド setpriv(1) を使用することを推奨します。

su は常に PAM (pam_getenvlist(3)) を使用して、最終的な環境の変更を行います。 コマンドラインオプション (例: --login および --preserve-environment) は、PAM によって環境が変更される前に環境に影響を与えます。

バージョン 2.38 以降、su はプロセスリソース制限 RLIMIT_NICE、RLIMIT_RTPRIO、RLIMIT_FSIZE、 RLIMIT_AS、および RLIMIT_NOFILE をリセットします。

オプション

-c, --command コマンド

シェルに -c オプションを使用してコマンドを渡します。

-f, --fast

シェルに -f を渡します。これは、シェルによっては役に立つことも、そうでないこともあります。

-g, --group グループ

プライマリグループを指定します。このオプションは root ユーザーのみが使用できます。

-G, --supp-group グループ

補助グループを指定します。このオプションは root ユーザーのみが使用できます。 最初に指定された補助グループは、--group オプションが指定されていない場合は、プライマリグループとしても使用されます。

-, -l, --login

シェルをログインシェルとして、実際のログインと同様の環境で起動します。

systemd ベースのシステムでは、新しいセッションがシステムの実際のエントリポイントとして定義される場合があります。ただし、su はこの時点から見て、実際のセッション (PAM によって) を作成しません。
完全な実際のセッションを開始するには、systemd-run や machinectl などのツールを使用する必要があります。

su は次のことを行います。

TERM および --whitelist-environment で指定された変数を除くすべての環境変数をクリアします。

環境変数 HOME、SHELL、USER、LOGNAME、および PATH を初期化します。

ターゲットユーザーのホームディレクトリを変更する

シェルの argv[0] を '-' に設定して、シェルをログインシェルにする

-m, -p, --preserve-environment
環境全体を保持する。つまり、HOME、SHELL、USER、LOGNAME を設定しない。このオプションは、--login オプションが指定された場合は無視される。

-P, --pty
セッション用に疑似端末を作成する。独立した端末は、セキュリティを向上させる。ユーザーが元のセッションと端末を共有しないため。これにより、TIOCSTI ioctl 端末インジェクションや、端末ファイル記述子に対するその他のセキュリティ攻撃を回避できる。また、セッション全体をバックグラウンドに移動することもできる(例:su --pty - user -c application &)。疑似端末が有効になっている場合、su はセッション間のプロキシとして機能する(stdin と stdout を同期する)。

この機能は主にインタラクティブなセッション向けに設計されている。標準入力が端末ではなく、たとえばパイプである場合(例:echo "date" | su --pty)、疑似端末の ECHO フラグは無効になり、出力が乱雑になるのを防ぐ。

-s, --shell shell
指定されたシェルをデフォルトの代わりに実行する。ターゲットユーザーが制限されたシェル(つまり、/etc/shells にリストされていない)を使用している場合、--shell オプションと SHELL 環境変数は、呼び出しユーザーが root でない限り無視される。

実行するシェルは、次の順序で選択される。

--shell で指定されたシェル

--preserve-environment オプションが使用されている場合、環境変数 SHELL で指定されたシェル

ターゲットユーザーの passwd エントリにリストされているシェル

/bin/sh

--session-command=command
-c と同じだが、新しいセッションを作成しない。(推奨されない)

-T, --no-pty
疑似端末を作成しない。--pty と -P の反対。疑似端末なしで実行すると、TIOCSTI/TIOCLINUX ioctl コマンドインジェクションによって特権昇格のリスクが発生する可能性があるため、セキュリティ上のリスクがある。

-w, --whitelist-environment list
--login で環境をクリアするときに、カンマ区切りのリストで指定された環境変数をリセットしない。このホワイトリストは、HOME、SHELL、USER、LOGNAME、および PATH 環境変数には適用されない。

-h, --help
ヘルプテキストを表示して終了する。

-V, --version
バージョンを表示して終了する。

シグナル

SIGINT、SIGQUIT、または SIGTERM を受信すると、su は子プロセスを終了し、その後、受信したシグナルで自身を終了する。子プロセスは SIGTERM で終了し、失敗した場合、2 秒の遅延後に SIGKILL で強制終了される。

構成ファイル

su は /etc/default/su および /etc/login.defs 構成ファイルを読み取る。次の構成項目が su に関連する。

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 (ブール型)
`--login` および `--preserve-environment` が指定されていない場合、`su` は `PATH` を初期化します。`yes` に設定すると、`PATH` が初期化されます。

環境変数 `PATH` は、`/bin` と `/sbin` が `/usr` にマージされているシステムでは異なる場合があります。この変数は、`--login` コマンドラインオプションと PAM システム設定 (例: `pam_env(8)`) の影響も受けます。

終了ステータス

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

`su` 自体によって生成される終了ステータス:

1   リクエストされたコマンドを実行する前の一般的なエラー

126 リクエストされたコマンドを実行できなかった

127 リクエストされたコマンドが見つからなかった

ファイル

/etc/pam.d/su
デフォルトの PAM 構成ファイル

/etc/pam.d/su-l
`--login` が指定された場合の PAM 構成ファイル

/etc/default/su
コマンド固有の `logindef` 構成ファイル

/etc/login.defs
グローバルな `logindef` 構成ファイル

注意事項

セキュリティ上の理由から、`su` は常に失敗したログイン試行を `btmp` ファイルに記録しますが、`lastlog` ファイルには何も書き込みません。このソリューションを使用して、PAM 構成によって `su` の動作を制御できます。`pam_lastlog(8)` モジュールを使用して、失敗したログイン試行に関する警告メッセージを出力する場合は、`pam_lastlog(8)` を `lastlog` ファイルを更新するように構成する必要があります。たとえば、次のようにします。

session required pam_lastlog.so nowtmp

歴史

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

関連項目

setpriv(1), login.defs(5), shells(5), [pam]({filename}../../pam)(8), runuser(1)

バグ報告

バグ報告については、[https://github.com/util-linux/util-linux/issues] の課題追跡システムを使用してください。

入手方法

`su` コマンドは、util-linux パッケージの一部であり、Linux Kernel Archive [https://www.kernel.org/pub/linux/utils/util-linux/] からダウンロードできます。