名前

runuser - 代替ユーザーおよびグループ ID によるコマンド実行

書式

runuser [options] -u user [[--] command [argument...]]

runuser [options] [-] [user [argument...]]

説明

runuser は、 代替ユーザーおよびグループ ID を使って、 コマンドを実行するために用いられる。 -u オプションが指定されなかった場合、 su 互換の動作となり、 シェルを実行する。 runusersu の両コマンドの違いは、 runuser ではパスワードを尋ねることがなく (なぜなら root ユーザーでしか実行できない)、 さらに異なる PAM 設定を利用する点である。 runuser コマンドは、 set-user-ID 権限をつけてインストールする必要はない。

PAM セッションが不要であれば、 setpriv(1) コマンドの利用が推奨される。

引数をなしにして実行した場合、 runuser はデフォルトで、 root による対話型シェルを実行する。

後方互換のため、 runuser はデフォルトで、 カレントディレクトリの変更は行わず、 設定変更を行う環境変数は、 HOMESHELL (さらに対象 user が root でなければ、 USERLOGNAME) だけである。 runuser の当バージョンは、 セッション管理に PAM を利用する。

なお runuser は、 どのような場合であっても、 最終的な環境変数の変更にあっては、 PAM (pam_getenvlist()) を利用する。 --login--preserve-environment のようなコマンドラインオプションは、 環境変数の反映が行われてから、 PAM による環境変数変更が行われる。

バージョン 2.38 から runuser は、 プロセスのリソース制限 RLIMIT_NICE, RLIMIT_RTPRIO, RLIMIT_FSIZE, RLIMIT_AS, RLIMIT_NOFILE をリセットするようになった。

オプション

-c, --command=command

シェルに対して -c オプションをつけて command を受け渡す。

-f, --fast

シェルに -f を受け渡す。 これが役立つものかどうかは、シェル次第である。

-g, --group=group

主として用いるグループを指定する。 このオプションは root ユーザーに対してのみ利用可能である。

-G, --supp-group=group

補助グループ (supplementary group) を指定する。 このオプションは、 root ユーザーに対してのみ利用可能である。 --group オプションが指定されていない場合は、 最初に指定された補助グループが、 プライマリグループとして用いられる。

-, -l, --login

実際のログインと同様の環境を使って、 ログインシェルとしてシェルを実行する。

·

環境変数 TERM と、 --whitelist-environment で指定されたものを除き、 すべての環境変数をクリアする。

·

環境変数 HOMESHELLUSERLOGNAMEPATH を初期化する。

·

対象ユーザーのホームディレクトリを変更する。

·

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

-P, --pty

セッションに対して疑似端末を生成する。 端末を独立させると、 元々のセッションが利用する端末を、 ユーザーが共有しなくなるため、 セキュリティが高まる。 これを用いれば、 TIOCSTI ioctl 端末インジェクションや、他のセキュリティ攻撃による、 端末ファイルディスクリプターへの攻撃を回避できる。 すべてのセッションは、 バックグラウンド実行することもできる (runuser --pty -u username -- command & のように実行する)。 疑似端末が有効である場合、 runuser は、 セッション間のプロキシーとして動作する (標準入力と標準出力をコピーする)。

この機能の大部分は、 対話型セッションのために設計されている。 標準入力が端末ではない、 つまりたとえばパイプであった場合 (echo "date" | runuser --pty -u user を実行した場合)、 疑似端末における ECHO フラグは、 不要な出力を抑えるため、 無効化される。

-m, -p, --preserve-environment

環境変数を維持する。 つまり HOMESHELLUSERLOGNAME の設定を行わない。 オプション --login が指定された場合、 本オプションは無視される。

-s, --shell=shell

指定された shell が、 デフォルトの代わりに実行される。 実行されるシェルは、 以下のルールに従って決定する。 決定順は以下のとおり。

·

--shell によって指定されたシェル。

·

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

·

対象ユーザーの passwd エントリーに記述されたシェル。

·

/bin/sh

対象ユーザーに、 シェル利用の制限がある場合 (つまり /etc/shells に記載がない場合)、 root ユーザーでない限りは、 --shell オプションや環境変数 SHELL は無視される。

--session-command=command

-c と同様。 ただし新規セッションは生成しない (利用は非推奨)。

-w, --whitelist-environment=list

--login の指定によって、 環境変数をクリアする際に、 カンマ区切りの list に指定された環境変数は、 リセットを行わない。 ホワイトリストの指定にあたって、 環境変数 HOMESHELLUSERLOGNAMEPATH の指定は無視される。

-h, --help

ヘルプを表示して終了する。

-V, --version

バージョンを表示して終了する。

設定ファイル

runuser は、 設定ファイル /etc/default/runuser/etc/login.defs を読み込む。 runuser に関係するのは、 以下の設定項目である。

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 (ブール値)

yse が設定され、 --login--preserve-environment が指定されていなかった場合、 runuserPATH を初期化する。

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

終了ステータス

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

runuser が生成する終了ステータスは、 以下のとおり。

1

指定されたコマンドを実行する前の一般的なエラー。

126

指定されたコマンドが実行できなかった。

127

指定されたコマンドが存在しなかった。

ファイル

/etc/pam.d/runuser

デフォルトの PAM 設定ファイル。

/etc/pam.d/runuser-l

--login 指定時に用いる PAM 設定ファイル。

/etc/default/runuser

runuser 固有の logindef 設定ファイル。

/etc/login.defs

システム全体の logindef 設定ファイル。

履歴

runuser コマンドは coreutils の su に由来する。 そのコマンドは、 David MacKenzie の実装に基づいている。 Fedora における runuser コマンドは Dan Walsh によるものである。

関連項目

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

バグ報告

バグ報告は、 以下にある issue トラッカーを利用すること。 <https://github.com/util-linux/util-linux/issues>.

入手方法

runuser コマンドは util-linux パッケージの一部であり、 以下からダウンロードできる。 Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.