sudo(superuser do の略)は、一時的に管理者(root)権限でコマンドを実行するための Linux コマンドです。
Ubuntu ではデフォルトで root への直接ログインが無効化されており、管理者作業が必要なときは sudo を使うのが標準的な方法です。
パッケージのインストール(sudo apt install)やシステム設定の変更など、権限が必要な操作のほぼすべてに使います。
sudo とは
sudo は「Substitute User DO」または「Superuser DO」の略とされ、自分のパスワードだけで一時的に管理者権限を借りるコマンドです。root ユーザーに切り替えるのではなく、コマンド1回ごとに権限を昇格させる点が特徴で、実行内容はログ(/var/log/auth.log など)に残ります。
- 権限昇格の単位が細かい: コマンド単位で権限を与えるため、root で常時作業するより誤操作のリスクを抑えられる
- 認証は自分のパスワード: root のパスワードを共有する必要がなく、
sudoersで許可されたユーザー・グループだけが使える - 実行記録が残る: 誰が・いつ・何を実行したかが監査できるため、チーム運用や本番環境で標準的に使われる
構文(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 -v # 認証キャッシュを更新(延長)だけ行い、コマンドは実行しない
sudo -e FILE # sudoedit と同じ。ファイルを安全に編集する
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 |
-v | 認証キャッシュを更新(延長)。コマンドは実行しない | sudo -v |
-e | ファイルを安全に編集する(sudoedit と同じ) | sudo -e /etc/hosts |
-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
sudoedit でファイルを安全に編集する
説明: sudo vi FILE のようにエディタごと権限昇格するのではなく、-e(sudoedit)は一時コピーを自分の権限で編集してから元の場所へ書き戻す方式です。エディタ自体を root で動かさないため、より安全に設定ファイルを編集できます。
コマンド:
sudo -e /etc/hosts
# または
sudoedit /etc/hosts
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 全権限が必要な場合) |
よくあるエラーと対処法
sudo グループに未追加のユーザー
sudo apt install nginx
出力例(エラー):
newuser is not in the sudoers file. This incident will be reported.
対処法: 管理者権限を持つユーザーで sudo usermod -aG sudo newuser を実行して sudo グループに追加します。
パスワードを3回間違えた場合
出力例(エラー):
Sorry, try again.
Sorry, try again.
Sorry, try again.
sudo: 3 incorrect password attempts
対処法: sudo はデフォルトで3回まで入力を許可し、失敗するとコマンドを中断します。自分のログインパスワード(root のパスワードではない)を入力しているか確認してください。それでも失敗する場合は、Caps Lock やキーボードレイアウト(IME)の影響も疑ってください。
cron やスクリプトから実行するとエラーになる
出力例(エラー):
sudo: no tty present and no askpass program specified
対処法: cron やCI/CDなど端末(tty)が無い環境からパスワード認証が必要な sudo を実行すると発生します。対象コマンドを sudoers.d で NOPASSWD 指定するか、事前に sudo -v でその端末(セッション)の認証キャッシュを作っておく方法があります。
関連コマンド
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 グループへの追加確認に使う。
関連記事
- su – 別ユーザー(既定は root)に切り替える
- usermod – 既存ユーザーアカウントを変更するコマンド
- apt / apt-get コマンド|Debian・Ubuntu でパッケージを管理する完全ガイド
- Linux コマンド一覧|用途別に整理した初心者向け完全ガイド
- 14日で基礎固め|Linux & Bash 独学ロードマップ
よくある質問
sudo と su の違いは何ですか?
sudo はコマンド単位で一時的に権限を昇格し、自分のパスワードで認証します。su は別ユーザー(既定は root)のシェルに切り替え、切り替え先ユーザーのパスワードが必要です。詳しくは上記の「sudo と su の違い」の比較表を参照してください。
パスワードなしで sudo を使うにはどうすればいいですか?
sudo visudo で /etc/sudoers(または /etc/sudoers.d/ 配下のファイル)に NOPASSWD を指定します。deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp のように、コマンドを限定して NOPASSWD を設定するのが安全です。NOPASSWD: ALL のように無制限にするのはセキュリティリスクが高いため避けてください。
「is not in the sudoers file」と出たときは?
そのユーザーが sudo グループ(Debian/Ubuntu系)または wheel グループ(RHEL/CentOS系)に入っていません。管理者権限を持つ別ユーザーで sudo usermod -aG sudo ユーザー名 を実行し、対象ユーザーは一度ログアウト・再ログインするとグループ変更が反映されます。
sudo でリダイレクト(>)が効かないのはなぜですか?
sudo echo "text" > /etc/file は sudo ではなくシェル自身がリダイレクトを処理するため、書き込み権限は昇格されません。echo "text" | sudo tee /etc/file か、sudo sh -c 'echo "text" > /etc/file' を使ってください。
macOS でも sudo は使えますか?
使えます。macOS は BSD 系のため標準で sudo が搭載されており、基本的なオプション(-i / -s / -l / -k など)は Linux と共通です。ただし /etc/sudoers の初期設定やユーザーグループ名(admin グループなど)は Linux ディストリビューションと異なります。
備考
- 認証キャッシュ:
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 の設定と推奨事項)

コメント