SU
Section: User Commands (1)
Updated: July 2014
Index
Return to Main Contents
名前
su - 代わりのユーザー ID とグループ ID でコマンドを実行する。
書式
su [options] [-]
[user [argument...]]
説明
su
を使うと、代わりのユーザー ID とグループ ID でコマンドを実行できる。
引き数なしで実行された場合、
su
は
root
で対話シェルを実行する。
後方互換のため、
su
はデフォルトではカレントディレクトリを変更せず、
環境変数
HOME
と
SHELL
を設定するだけである
(対象の
user
が root でない場合、
USER
と
LOGNAME
も設定する)。
いろいろな環境で副作用が出ないように、
(ショートカットの
-
ではなく)
--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 が指定されない場合、
su
は
PATH
を初期化する。
/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