su(1)

名前
su - ユーザー ID とグループ ID を変更してシェルを起動する

書式
su [-] [-flmp] [-c command] [-s shell] [--fast] [--login] [--preserve-environment] [--command=command] [--shell=shell] [user [arg...]]

説明
su はあるユーザーが一時的に他のユーザになるために用いられる。 su は user の実ユーザー ID、実効ユーザー ID、グループ ID、および所属グループ の権限を与えてコマンドを実行する (対話式のシェルであることが多い)。

user が与えられなかった場合、デフォルトは root すなわちスーパーユーザーである。 実行されるシェルは user のパスワードエントリから選択される。ここに何も書かれていない場合は /bin/sh が実行される。 user にパスワードがある場合には、 su はパスワードを要求するプロンプトを表示する。ただし su を実行したのが実ユーザー ID 0 (スーパーユーザー) の場合には パスワード認証は行われない。

su はデフォルトではカレントディレクトリを変更しない。また su は 環境変数 HOME と SHELL を user のパスワードエントリの値にセットする。また user がスーパーユーザー以外の場合には、環境変数 USER と LOGNAME を user にセットする。デフォルトでは、 起動されるシェルはログインシェルにはならない。

その他に引き数が与えられた場合には、それらはシェルに渡され、 引き数としてシェルに付加される。

su は /bin/sh あるいはそれ以外のいかなるシェルも特別には扱わない (argv[0] に "-su" を設定したり、あるシェルにだけ -c を渡したり、 といったことはしない)。

syslog(3) に対応しているシステムでは、 su が失敗したとき syslog にレポートするようにコンパイルすることができる (成功をレポートするようにもできる)。

オプション

-c command, --command=command
    対話的なシェルを起動するのではなく、シェルに -c オプションとともに command (実行されるコマンドライン一行) を渡す。

-f, --fast
    シェルに -f オプションを渡す。これはおそらく csh(1) と tcsh(1) でのみ意味を持つ。これらのシェルでは -f オプションを指定すると、スタートアップファイル (.cshrc) を読み込まない。 Bourne 系のシェルでは -f オプションはファイル名パターンの展開 (glob) を抑制する。 これは大抵の場合は望ましい動作ではないだろう。

-, -l, --login
    シェルをログインシェルにする。すなわち以下のような取り扱いをする: すべての環境変数を解除する。その上で TERM, HOME, SHELL を前述のように設定し、 USER, LOGNAME を同じく前述のように (スーパーユーザーであっても) 設定する。 続いて PATH をコンパイル時のデフォルト値に設定する。ディレクトリを user のホームディレクトリに変更する。シェル名の前に `-' を付加し、 シェルにログイン時のスタートアップファイルを読ませる。

-m, -p, --preserve-environment
    環境変数 HOME, USER, LOGNAME, SHELL を変更しない。 /etc/passwd で指定されている user のシェルではなく、現在の環境変数 SHELL で指定されているシェルを実行する。ただし su を実行するユーザーがスーパーユーザではなく、 user によるシェルの実行が制限されている場合はこの限りではない。 実行が制限されているシェルとは、 /etc/shells にリストされていないシェル、あるいは /etc/shells がなければコンパイル時の指定リストに存在しないシェルのことである。 このオプションが実行する作業の一部は --login または --shell によって上書きされる。

-s, --shell shell
    /etc/passwd に記述された user のシェルの代わりに shell を実行する。ただし su を実行するユーザーがスーパーユーザではなく、 user によるシェルの実行が制限されている場合はこの限りではない。

--help
    標準出力に使用方法のメッセージを出力して正常終了する。

--version
    標準出力にバージョン情報を出力して正常終了する。

GNU su で wheel グループをサポートしないわけ (Richard Stallman)
ときおり、少数のユーザーによって、 他のユーザーに対する全権を掌握しようとする試みがなされることがある。 例えば 1984 年、 MIT AI ラボの少数のユーザーは Twenex システムのオペレーターパスワードの変更権限を強奪し、 これを他のユーザーから秘匿することに決定した (この際には私はこのクーデターの裏をかき、 カーネルにパッチを当てて権限を取り返すことに成功した。 しかしこれが Unix であったら、私にはどうすればよいかわからなかっただろう)。

しかしながら、時には専制者も秘密を漏らすものである。 通常の su のメカニズムでは、 一般ユーザーの側に立つ者が root のパスワードを知れば、 これを他のユーザーにも知らせることができる。 しかし "wheel group" 機能はこれを不可能にし、 結果として専制者達の権限を強固たるものにしてしまう。

私は大衆の側に立つものであり、専制的な立場には反対する。 あなたはボスやシステム管理者のやり口に従うことに慣れているかも知れないが、 その場合はまずそのこと自身を不思議に思うべきではないだろうか。

注意
プログラムのバグについては bug-sh-utils@gnu.org に報告してください。 ページの更新は Ragnar Hojland Espinosa <ragnar@ragnar-hojland.com> が行っています。