sudo(superuser do の略)は、一時的に管理者(root)権限でコマンドを実行するための Linux コマンドです。
Ubuntu ではデフォルトで root への直接ログインが無効化されており、管理者作業が必要なときは sudo を使うのが標準的な方法です。
パッケージのインストール(sudo apt install)やシステム設定の変更など、権限が必要な操作のほぼすべてに使います。
構文(Syntax)
sudo [OPTIONS] COMMAND [ARGS...]
# 主な使い方
sudo COMMAND # 管理者権限で COMMAND を実行
sudo -u USER COMMAND # 指定ユーザーとして COMMAND を実行
sudo -i # root のログインシェルを起動(root 環境に入る)
sudo -s # root シェルを起動(環境変数は引き継ぐ)
sudo -l # 現在のユーザーに許可された sudo コマンドを一覧表示
sudo -k # 認証キャッシュを即時クリア(次回から再入力が必要)
sudo visudo # /etc/sudoers を安全に編集
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-u USER | 指定ユーザーとして実行 | sudo -u www-data cat /var/log/nginx/error.log |
-i | root のログインシェルを起動 | sudo -i |
-s | root シェルを起動(現在の環境変数を引き継ぐ) | sudo -s |
-l | 許可されたコマンドを一覧表示 | sudo -l |
-k | 認証キャッシュをクリア | sudo -k |
-n | 非対話モード(パスワード不要なければ失敗) | sudo -n apt update |
-E | 現在のユーザーの環境変数を引き継ぐ | sudo -E make install |
-- | オプション終端(コマンドに - が含まれる場合) | sudo -- mycmd -x |
実行例
パッケージのインストール(最もよく使うパターン)
説明: apt install はシステムファイルを変更するため root 権限が必要です。
コマンド:
sudo apt update
sudo apt install curl
ファイルの所有権・パーミッション変更
説明: /etc/ 配下など root 所有のファイルを変更するときに使います。
コマンド:
sudo chmod 644 /etc/nginx/nginx.conf
sudo chown root:root /etc/cron.d/myjob
root シェルに切り替える
説明: 複数の管理者操作を続けて行う場合、都度 sudo を付けるより sudo -i で root 環境に入るほうが効率的です。
コマンド:
sudo -i
# root として操作...
exit # 一般ユーザーに戻る
自分に許可された sudo コマンドを確認
説明: -l で自分が sudo できるコマンドの一覧を確認できます。
コマンド:
sudo -l
出力例(抜粋):
User ubuntu may run the following commands on this host:
(ALL : ALL) ALL
エラー例:sudo グループに未追加のユーザー
sudo apt install nginx
出力例(エラー):
newuser is not in the sudoers file. This incident will be reported.
対処法: 管理者権限を持つユーザーで sudo usermod -aG sudo newuser を実行して sudo グループに追加します。
sudoers の設定と注意点
/etc/sudoers はどのユーザー・グループが sudo を使えるかを定義するファイルです。
Ubuntu では初期ユーザーが sudo グループに自動追加されており、そのグループに対して次のルールが設定されています:
# /etc/sudoers の既定ルール(Ubuntu の場合)
%sudo ALL=(ALL:ALL) ALL
これは「sudo グループのメンバーは、あらゆるホスト・ユーザーで、あらゆるコマンドを実行できる」という意味です。
sudoers を安全に編集する方法
必ず visudo を使ってください。 直接エディタで開いて編集すると、構文エラーが入ったまま保存されて sudo が完全に使えなくなるリスクがあります。visudo は保存前に構文チェックを実行します。
# sudoers の安全な編集
sudo visudo
# 追加設定は /etc/sudoers.d/ に別ファイルで書く(推奨)
sudo visudo -f /etc/sudoers.d/myconfig
よく使う sudoers の設定例
# ユーザー alice にすべての権限を付与
alice ALL=(ALL:ALL) ALL
# deploy ユーザーが apt コマンドのみをパスワードなしで実行できる
deploy ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get
# %devops グループに全権限を付与
%devops ALL=(ALL:ALL) ALL
sudoers の重要な注意点
/etc/sudoersを直接編集しない: 構文エラーで sudo が使えなくなる。必ずsudo visudoを使うこと。NOPASSWD: ALLの乱用に注意: パスワードなしで何でも実行できる設定はセキュリティリスクが高い。CI/CD 専用ユーザーへの特定コマンド限定など、スコープを絞ること。- 追加設定は
/etc/sudoers.d/に分割する: メインファイルを汚さず管理しやすい。sudo visudo -f /etc/sudoers.d/FILENAMEで編集する。 - ユーザーの sudo 権限を確認する:
sudo -l -U ユーザー名で特定ユーザーの権限を確認できる(管理者権限が必要)。 - ログはシステムログに残る:
sudoの実行記録は/var/log/auth.log(Ubuntu)に保存される。不正な sudo 実行(「This incident will be reported」のメッセージ)もここに記録される。
sudo と su の違い
| 比較項目 | sudo | su |
|---|---|---|
| 動作 | 1コマンドだけ権限昇格して実行 | 別ユーザー(通常 root)のシェルに切り替える |
| 認証 | 自分のパスワードで認証 | 対象ユーザー(root)のパスワードが必要 |
| ログ | 実行コマンドがシステムログに記録される | セッション中の操作はほぼ記録されない |
| Ubuntu のデフォルト | 初期ユーザーは sudo が使える | root パスワードが未設定のため使いにくい |
| 推奨度 | 推奨(最小権限の原則に沿っている) | 必要なときのみ(root 全権限が必要な場合) |
関連コマンド
apt/apt-get: Debian/Ubuntu 系パッケージ管理コマンド。sudo apt install PKGのように sudo と組み合わせて使う。su: 別ユーザーのシェルに切り替えるコマンド。su - rootで root シェルに入る(root パスワードが必要)。visudo:/etc/sudoersを安全に編集するためのコマンド。構文チェック付き。usermod: ユーザーのグループ追加など属性変更。sudo usermod -aG sudo USERNAMEで sudo グループへ追加。id/groups: 現在のユーザーが所属するグループを確認。sudo グループへの追加確認に使う。
関連記事
- apt / apt-get コマンド|Debian・Ubuntu でパッケージを管理する完全ガイド
- Linux コマンド一覧|用途別に整理した初心者向け完全ガイド
- 14日で基礎固め|Linux & Bash 独学ロードマップ
備考
- 認証キャッシュ:
sudo認証後、デフォルト15分間はパスワード不要で繰り返し実行できる。sudo -kでキャッシュを手動クリア可能。 - 環境変数の引き継ぎ:
sudoはデフォルトで環境変数をリセットする(安全のため)。sudo -Eで引き継ぎ可能。 - 対話コマンドへの対応:
sudo vim /etc/hostsのように対話型コマンドも問題なく動作する。 - パイプとリダイレクト:
sudo echo "text" > /etc/fileはシェルがリダイレクトを先に処理するため root 権限が効かない。echo "text" | sudo tee /etc/fileを使うか、sudo sh -c 'echo "text" > /etc/file'とする。 - 対象OS: Linux 全般で利用可能。macOS でも同様に動作する。
参考
- manページ:
man 8 sudo,man 5 sudoers,man 8 visudo - Ubuntu 公式ドキュメント: RootSudo ページ(sudo の設定と推奨事項)

コメント