su は、現在のシェルを保ったまま別ユーザーとしてコマンドを実行する、またはそのユーザーのシェルに切り替えるためのコマンドです(既定の対象は root)。
対象ユーザーのパスワードで認証するのが基本で、su - で「ログインシェル」として完全に切り替えられます。
実務では、管理者作業のために root に入る、あるいは postgres などのサービス用ユーザーに一時的に切り替える用途で使います。
構文(Syntax)
su [OPTION...] [USER]
su [OPTION...] [USER] -c "COMMAND"
# 代表例
su - # root のログインシェルへ(root のパスワードが必要)
su USER # USER に切り替え(USER のパスワードが必要)
su - USER # USER のログインシェルへ
su -c "CMD" root # root として 1 コマンドだけ実行して戻る
su -s /bin/bash USER # USER で使うシェルを指定
-または-lは「ログインシェル」(環境変数・HOME・PATHなどをそのユーザー基準に初期化)。-cは 1 回だけコマンドを実行して終了。- オプションや挙動は実装(util-linux / BSD / BusyBox)で一部異なります。
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
- / -l | ログインシェルとして切り替え(環境を初期化) | su - |
-c CMD | 1 回だけコマンドを実行 | su -c "id -u" root |
-m / -p | 現在の環境変数を保持して切り替え(実装により同義) | su -m USER |
-s SHELL | 使用するシェルを指定 | su -s /bin/bash USER |
-g GROUP | 主要グループを指定(util-linux 系) | su -g www USER |
-G LIST | 補助グループを指定(util-linux 系) | su -G adm,cdrom USER |
--help, --version | ヘルプ/バージョン表示 | su --help |
注意: macOS/BSD の
suは-g/-Gを持たないなど差異があります。必要な場合はman suで確認してください。
実行例
管理者(root)にログインシェルで切り替える
説明: root の環境に完全切替(HOME=/root 等)。
コマンド:
su -
# (root のパスワード入力を求められます)
whoami && echo "$HOME"
出力例:
root
/root
root として 1 回だけコマンドを実行して戻る
説明: 実行後は元のユーザーに戻ります。
コマンド:
su -c "id -u" root
出力例:
0
別ユーザーに切り替え(ログインシェル)
説明: サービス用ユーザーに切り替えて作業する例。
コマンド:
su - postgres
# または
su -s /bin/bash postgres
出力例(例):
postgres@host:~$
環境を保持して切り替える(-m / -p)
説明: PATH など現在の環境を引き継ぎます(セキュリティ上の注意あり)。
コマンド:
su -m USER
エラー例:root がロックされている/ログイン不可
説明: root にパスワードが設定されていない(Ubuntu 既定など)場合は失敗します。
コマンド:
su -
出力例(例):
Authentication failure
説明: システムユーザーはログインシェルが /usr/sbin/nologin などで拒否されることがあります。
コマンド:
su - nobody
出力例(例):
This account is currently not available.
関連コマンド
sudo: 呼び出し元ユーザーの認証で一時的に権限昇格(細かな制御・監査向き)。runuser: root 専用のsu風コマンド(パスワード不要、スクリプト向き・util-linux)。login: ログイン処理。passwd: ユーザーのパスワード変更(root アカウントの有効化/無効化にも関与)。newgrp: 現在の主要グループを切り替える。
備考
- 認証の違い:
suは対象ユーザーのパスワードで認証します(既定は root のパスワード)。一方sudoは呼び出し元ユーザーのパスワードで認証し、権限はsudoersで細かく制御します。 - root がロックされる環境: Ubuntu などは root がロック(パスワード未設定)されているため、
suは失敗します。必要なら管理者がsudo passwd rootで有効化します(推奨可否は組織方針次第)。 - PAM と制限:
suは PAM(/etc/pam.d/su)により制御され、wheelやsudoグループに所属していないと実行を拒否する設定(pam_wheel)が有効な場合があります。 - 環境引き継ぎの注意:
-m/-pで環境変数やPATHを保持すると、想定外のバイナリが実行されるリスクがあります。管理作業では基本的にsu -を推奨。 - シェル階層:
suは現在のシェルの子プロセスとして新しいシェルを起動します。終了すれば元のシェルに戻ります(exitで抜ける)。 - 実装差分: util-linux、BSD、BusyBox でサポートオプションが異なります。スクリプトでの利用時は特に移植性に注意してください。
参考
man 1 su(各ディストリ付属のマニュアル)- PAM 設定例:
/etc/pam.d/su、pam_wheel(8) - util-linux
suドキュメント(Linux 環境) - FreeBSD/macOS の
suマニュアル(BSD 実装)

コメント