Linuxを操作する上で、管理者権限(root)への切り替えは避けては通れない作業です。その際によく使われるのがsuコマンドですが、実は「なんとなく」で使っていると、思わぬエラーやセキュリティリスクを招くことがあります。
本記事では、suコマンドの基礎知識から、最重要ポイントである「su」と「su -」の違い、さらにはsudoとの使い分けまで、初心者の方にもわかりやすく解説します。
1. suコマンドとは?
suコマンドは、「Substitute User(代わりのユーザー)」の略で、現在ログインしているユーザーから一時的に別のユーザーに切り替えるためのコマンドです。
引数を指定せずに実行すると、デフォルトでrootユーザー(スーパーユーザー)への切り替えを試みます。
su
# 切り替え先(root)のパスワードを求められる2. 【重要】「su」と「su -」の決定的な違い
もっとも間違いやすく、かつ重要なのが、ハイフン(-)の有無です。これによって、切り替え後の「環境」が大きく異なります。
比較表
| 項目 | su (ハイフンなし) | su – (ハイフンあり) |
| シェルの種類 | 非ログインシェル | ログインシェル |
| 環境変数 | 元のユーザーのものを引き継ぐ | 切り替え先ユーザーで初期化 |
| カレントディレクトリ | 移動しない(元の場所のまま) | 切り替え先ユーザーのホームへ移動 |
| 推奨される用途 | 一時的なコマンド実行 | 推奨:システム管理作業全般 |
なぜ「su -」を使うべきなのか?
su(ハイフンなし)でrootになった場合、実行環境(PATHなど)は一般ユーザーのものを引き継いでしまいます。その結果、/sbinなどにある管理者用コマンドにパスが通っておらず、「コマンドが見つかりません」というエラーが発生する原因になります。
トラブルを避けるためにも、基本的には su - を使うと覚えておきましょう。
3. suコマンドの主なオプションと使い方
特定のユーザーに切り替える
root以外の一般ユーザーに切り替えたい場合は、ユーザー名を指定します。
su - user_name特定のコマンドだけを別ユーザーで実行する(-c)
対話シェルを起動せずに、1つのコマンドだけを別の権限で実行して終了します。
su -c 'systemctl restart nginx'※この場合も、切り替え先ユーザーのパスワード入力が必要です。
4. su と sudo の違い
似たような役割を持つsudo(SuperUser DO)ですが、運用の考え方が根本的に異なります。
| 特徴 | su | sudo |
| 認証パスワード | 切り替え先のパスワード | 自分自身のパスワード |
| 権限の範囲 | 全権限(rootそのものになる) | 設定ファイル(sudoers)で制限可能 |
| セキュリティ | rootパスワードの共有が必要 | 各自のパスワードでOK(より安全) |
| ログ記録 | 誰が何をしたか追跡しにくい | 詳細な実行ログが残る |
現代のLinux運用(UbuntuやRHEL等)では、セキュリティ上の観点からsudoの利用が推奨されるケースがほとんどです。
5. セキュリティ設定:suできるユーザーを制限する
デフォルトでは、rootパスワードを知っていれば誰でもsuできてしまいます。これを防ぐために、特定のグループ(通常はwheelグループ)に属するユーザーのみに制限するのが一般的です。
設定方法(PAM認証の利用)
/etc/pam.d/su ファイルを編集し、以下の行のコメントアウトを外します。
auth required pam_wheel.so use_uidこれにより、wheelグループに所属していないユーザーは、パスワードが正しくてもsuに失敗するようになります。
まとめ:suコマンド運用のベストプラクティス
- 環境変数のトラブルを防ぐため、原則
su -を使用する。 - 作業ディレクトリやPATHを意識し、ログインシェルの挙動を理解する。
- セキュリティとログ管理の観点から、可能な限り
sudoを優先する。
suコマンドはLinux管理の基本中の基本です。正しい知識を持って使い分けることで、より安全で効率的なシステム運用が可能になります。

コメント