LinuxやUnix系システムの管理作業において、管理者権限(root権限)の操作は避けて通れません。
システムの設定変更やパッケージのインストールを行う際、一般ユーザーのままでは実行できないコマンドが多く存在するからです。
そこで頻繁に利用されるのがsuとsudoという2つのコマンドですが、これらには決定的な役割の違いがあります。
初心者のうちは「どちらも管理者権限になるためのもの」と混同しがちですが、セキュリティや運用効率の面で使い分けが非常に重要です。
本記事では、2026年現在の標準的なサーバー運用に基づき、suとsudoの違いや正しい使い分けの基準をシンプルに整理して解説します。
suコマンドの基礎知識と役割
suは「substitute user」の略であり、現在ログインしているユーザーから別のユーザーに切り替えるためのコマンドです。
引数を指定せずに実行した場合は、デフォルトで「rootユーザー(スーパーユーザー)」への切り替えを試みます。
suコマンドの最大の特徴は、切り替え先となるユーザーのパスワード(rootに切り替えるならrootのパスワード)を要求する点にあります。
suコマンドの基本的な使い方
最も一般的な使い方は、rootユーザーへの切り替えです。
# rootユーザーに切り替える(現在の環境変数を引き継ぐ場合が多い)
su
# rootユーザーに切り替える(推奨:ログインシェルとして環境変数を初期化する)
su -
実行するとパスワードの入力を求められますが、ここで入力するのは「rootユーザーのパスワード」です。
Password:
root@server:~#
「su」と「su -」の違いに注意
単なるsuとハイフンを付けたsu -では、切り替え後の環境が大きく異なります。
suのみの場合、元のユーザーの環境変数(PATHなど)を引き継ぐため、管理者用のコマンドが見つからないといったトラブルが起こりやすくなります。
実務でrootに切り替える際は、ログインし直した状態と同じ環境を構築する「su -」を利用するのが鉄則です。
sudoコマンドの基礎知識と役割
sudoは「superuser do」の略であり、一時的に他のユーザー(主にroot)の権限でコマンドを実行するためのコマンドです。
suとの最大の違いは、ユーザーを完全に切り替えるのではなく、特定のコマンドを実行する間だけ権限を借りるという点です。
また、実行時に求められるのは「rootのパスワード」ではなく、「現在ログインしている自分自身のパスワード」である点が大きな特徴です。
sudoコマンドの基本的な使い方
管理者権限が必要なコマンドの先頭にsudoを付与して実行します。
# システムをアップデートする例
sudo apt update
実行すると自分自身のパスワードを求められます。
[sudo] password for user:
Hit:1 http://archive.ubuntu.com/ubuntu focal InRelease
...
一度パスワードを入力すると、デフォルトで5分間などの一定時間はパスワードなしで再実行が可能です。
sudoの管理設定ファイル
sudoを利用できるユーザーは、/etc/sudoersという設定ファイルで厳格に管理されています。
このファイルを編集する際は、文法チェック機能を持つ専用コマンドのvisudoを使用するのが一般的です。
誰がどのコマンドを実行できるかを細かく制御できるため、多人数でのサーバー管理において非常に強力なツールとなります。
suとsudoの主な違いを比較
両者の違いを理解するために、主要な項目を比較表にまとめました。
| 比較項目 | su | sudo |
|---|---|---|
| 主な目的 | ユーザーそのものを切り替える | 特定のコマンドを一時的に実行する |
| 要求パスワード | 切り替え先(root等)のパスワード | 自分自身のパスワード |
| ログの記録 | 「誰が切り替えたか」が残りにくい | 「誰が何を実行したか」が詳細に残る |
| 権限の範囲 | 切り替え後は全権限を持つ | 設定により実行可能なコマンドを制限可能 |
| 推奨環境 | 個人所有の検証環境など | 複数人での運用、本番環境 |
パスワード管理における安全性の差
suを使用する場合、管理者権限を必要とする全員がrootパスワードを共有しなければなりません。
これに対し、sudoは各ユーザーが自分のパスワードを使うため、rootパスワードを教える必要がないという利点があります。
管理者が退職したりチームを離れたりした際も、その個人のアカウントを停止するだけで済むため、運用の安全性が高まります。
実行ログの透明性
sudoを介して実行されたコマンドは、通常/var/log/auth.logや/var/log/secureなどのシステムログに詳細に記録されます。
「いつ、誰が、どのディレクトリで、どのようなコマンドを管理者権限で実行したか」が明確になります。
万が一の操作ミスや不正アクセスの際、原因の特定が容易になるのはsudoの大きなメリットです。
適切な使い分けの基準
基本的には、「可能な限りsudoを利用する」のが現代のLinux運用のスタンダードです。
しかし、状況によってはsuを選択するケースもあるため、具体的なシーンごとに解説します。
sudoを優先すべきケース
- パッケージのインストールやサービスの再起動: 単発のコマンド実行で済む場合は
sudoが最適です。 - 複数人でのサーバー運用: 誰が作業したかを追跡する必要があるため、
sudo一択となります。 - セキュリティを重視する環境: rootでの直接ログインを禁止している多くのディストリビューション(Ubuntuなど)では、
sudoの使用が前提です。
su(またはsudo -i)を使用するケース
- 長時間の複雑な管理者作業: 多数のコマンドを連続して実行する場合、毎回
sudoを入力するのは手間がかかります。 - リダイレクトやパイプを多用する複雑な操作: 標準出力のリダイレクトなどは、
sudoを付けても意図通りに権限が反映されない場合があります。 - 環境変数を完全にrootのものとして扱いたい場合:
su -を使用することで、rootユーザー固有の環境を確実に再現できます。
なお、sudo -iというコマンドを使えば、自分自身のパスワードで「rootとしてログインした状態のシェル」を開始できます。
これはsu -の利便性とsudoのログ管理・パスワード管理の良さを組み合わせた方法として、多くの現場で推奨されています。
セキュリティをさらに高めるための設定
権限管理をより強固にするために、以下のベストプラクティスを意識しましょう。
rootパスワードの無効化
UbuntuなどのモダンなOSでは、初期設定でrootパスワードが設定されておらず、suによるログインができないようになっています。
これにより、外部からのブルートフォース攻撃でroot権限を直接奪取されるリスクを低減しています。
sudoersでの権限制限
すべてのユーザーに全権限を与えるのではなく、「Webサーバーの再起動だけを許可するユーザー」のように、必要最小限の権限(最小権限の原則)を設定することが望ましいです。
# 特定のユーザーにApacheの再起動だけを許可する設定例
username ALL=(ALL) /usr/bin/systemctl restart apache2
まとめ
suとsudoはどちらも管理者権限を扱うためのツールですが、その設計思想は大きく異なります。
suはユーザーそのものを切り替え、共有されたrootパスワードを必要とします。
一方でsudoは、個人のパスワードを使用して一時的に権限を行使し、詳細な実行ログを残します。
現代のシステム運用においては、セキュリティと透明性の観点から「sudo」の利用が強く推奨されます。
それぞれの特性を正しく理解し、安全かつ効率的なシステム管理を目指しましょう。
