Ubuntuのsudoの使い方と設定【sudoers/権限管理】

コマンド

Ubuntu で管理者権限が必要なコマンドを実行するとき、ほぼ必ず登場するのが sudo です。結論から言うと、sudo コマンド名 を前に付けるだけで root 権限でそのコマンドを実行できます。ただし、使えるユーザーが誰で、何ができるかは /etc/sudoers の設定次第です。

この記事では、Ubuntu 24.04 LTS の Docker 公式イメージで実際に sudo を動かし、基本的な使い方から /etc/sudoers の構造、NOPASSWD 設定、よくあるエラーまでを実出力つきでまとめました。VPS を借りてサーバーを運用したい方にも役立てる内容です。

この記事のポイント

  • Ubuntu 24.04 の sudo バージョンは 1.9.15p5(Ubuntu 22.04 は 1.9.9)— 2026-06-13 実測
  • sudo コマンド で root 権限実行。sudo -l で自分が使える権限を一覧表示できる
  • sudo グループへの追加は usermod -aG sudo ユーザー名-a を忘れると既存グループが消える
  • 設定変更は必ず visudo で行う。直接編集して構文ミスがあるとシステムにログインできなくなる
  • NOPASSWD 設定は /etc/sudoers.d/ 以下に個別ファイルで書くのが安全

目次

  1. sudo とは何か
  2. 基本的な使い方
  3. sudo -l で権限を確認する
  4. ユーザーを sudo グループに追加する
  5. /etc/sudoers の構造を理解する
  6. NOPASSWD — パスワードなしで sudo を使う
  7. Ubuntu 22.04 と 24.04 の違い
  8. よくあるエラーと解決策
  9. まとめ

前提環境

本記事のコマンドはすべて以下の環境で実行確認しています。

  • OS:Ubuntu 24.04.4 LTS(Noble Numbat)— Docker 公式イメージ ubuntu:24.04 で実行
  • sudo バージョン:1.9.15p5-3ubuntu5.24.04.2(dpkg -s sudo で確認)
  • 比較環境:Ubuntu 22.04 LTS(ubuntu:22.04)— sudo 1.9.9-1ubuntu2.6

注意

本記事のコマンドは Ubuntu 24.04 LTS で検証しています。Ubuntu の最小 Docker イメージには sudo が含まれていない場合があります。その際は apt-get install sudo でインストールしてください。VPS(Vultr・DigitalOcean など)の公式 Ubuntu イメージでは最初から sudo が入っており、作成したユーザーは自動的に sudo グループに追加されています。

sudo とは何か

sudo(Superuser Do)は、一般ユーザーが一時的に root(管理者)権限でコマンドを実行するための仕組みです。Ubuntu では、root アカウントに直接ログインするより sudo を使う設計になっています。

理由は2つあります。1つ目は操作ログが残ること(誰がいつ何を root で実行したか /var/log/auth.log に記録される)、2つ目は誤操作リスクを下げられること(普段は一般ユーザーとして作業し、必要なときだけ sudo をつける習慣が自然とできる)です。

①sudo と su の違い

su(Switch User)は別ユーザーのシェルに切り替えるコマンドです。sudo と混同しがちですが、目的が違います。




ubuntu@linuxlab: ~
$ sudo コマンド # root 権限でコマンドを1回実行
$ sudo -i # root のログインシェルを起動(.bash_profile 読み込み)
$ sudo -s # root シェルを起動(現在の環境変数を引き継ぐ)
$ su – username # username のシェルに切り替え(要 username のパスワード)
$ sudo su – # root シェルを起動(自分の sudo パスワードで認証)

VPS 運用では sudo コマンド 形式が基本で、root シェルに入りっぱなしにする習慣は避けましょう。

基本的な使い方

sudo の最も基本的な使い方は、コマンドの前に sudo をつけるだけです。Ubuntu 24.04 の実行結果を見てみましょう。

Ubuntu 24.04 で sudo 基本コマンドを実行した様子(実測)
Ubuntu 24.04 で sudo 基本コマンドを実行した様子(実測)



ubuntu@linuxlab: ~
$ sudo whoami
root
$ sudo id
uid=0(root) gid=0(root) groups=0(root)
$ sudo –version
Sudo version 1.9.15p5
Sudoers policy plugin version 1.9.15p5
$ sudo apt-get update
Hit:1 http://jp.archive.ubuntu.com/ubuntu noble InRelease
Reading package lists… Done

sudo whoamiroot を返せば、sudo が正常に動いています。実際に Ubuntu 24.04 の Docker コンテナで確認すると Sudo version 1.9.15p5 と表示されました(2026-06-13 実測)。

sudo 基本コマンドの実行例(Ubuntu 24.04 実測)
sudo 基本コマンドの実行例(Ubuntu 24.04 実測)

②よく使う sudo オプション一覧




ubuntu@linuxlab: ~
$ sudo -l # 自分が使える sudo コマンドを一覧表示
$ sudo -v # タイムスタンプを更新(パスワードが聞かれる)
$ sudo -k # タイムスタンプを無効化(次回は必ずパスワード要求)
$ sudo -u username コマンド # username ユーザーとして実行
$ sudo -u www-data ls /var/www # www-data ユーザーとしてディレクトリを確認
$ sudo -i # root のログインシェルを起動
$ sudo -s # root シェルを起動(環境変数を引き継ぐ)

正直、sudo -k は知らない人が多いですが、パスワードを聞かれる状態に戻したいときに便利です。たとえば「ここからは一般ユーザーの権限範囲で作業する」という区切りを明示したいときに使います。

sudo -l で権限を確認する

sudo -l は自分(または指定ユーザー)がどのコマンドを sudo で実行できるか確認するコマンドです。VPS を新しく契約したときや、権限設定を変えたあとの確認に必ず使います。

sudo -l の出力(Ubuntu 24.04 実測)
sudo -l の出力(Ubuntu 24.04 実測)



ubuntu@linuxlab: ~
$ sudo -l
Matching Defaults entries for ubuntu on hostname:
env_reset, mail_badpass,
secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin,
use_pty

User ubuntu may run the following commands on hostname:
(ALL : ALL) ALL

(ALL : ALL) ALL は「どのホストでも、どのユーザー/グループとしても、すべてのコマンドを実行できる」という意味です。Vultr や DigitalOcean など多くの VPS では、初期ユーザーに最初からこの権限が付与されています。

①sudo -l の出力の読み方

出力の (実行ユーザー:実行グループ) コマンド という書式を覚えておくと、sudoers の設定ファイルを読むのが楽になります。

  • (ALL : ALL) ALL → どのユーザー・グループとしても、すべてのコマンドを実行可
  • (ALL) NOPASSWD: ALL → パスワードなしで全コマンド実行可
  • (ALL) /usr/bin/apt, /sbin/reboot → apt と reboot のみ実行可

ユーザーを sudo グループに追加する

新しく作ったユーザーに sudo 権限を与えるには、sudo グループへの追加が基本です。Ubuntu 24.04 で実際に操作した結果を見てみます。

手順1:ユーザーを作成する




root@linuxlab: ~
$ useradd -m -s /bin/bash deployer
$ echo ‘deployer:strongpassword123’ | chpasswd
$ id deployer
uid=1001(deployer) gid=1001(deployer) groups=1001(deployer)

手順2:sudo グループに追加する




root@linuxlab: ~
$ usermod -aG sudo deployer
$ id deployer
uid=1001(deployer) gid=1001(deployer) groups=1001(deployer),27(sudo)
$ getent group sudo
sudo:x:27:ubuntu,deployer

Ubuntu 24.04 の Docker コンテナで実測した結果、usermod -aG sudo deployer 後に id deployer を実行すると groups=1001(deployer),27(sudo) と表示され、正常に sudo グループへの追加が確認できました。

-a を忘れると既存グループが消える!

usermod -G sudo deployer-a なし)と実行すると、deployer が今まで入っていたグループから全て外れ、sudo グループだけになります。必ず -aG(append + Group)で実行してください。変更を反映させるには、そのユーザーで一度ログアウト → 再ログインが必要です。

/etc/sudoers の構造を理解する

/etc/sudoers は sudo の動作を定義するメインの設定ファイルです。直接 vi や nano で編集してはいけません。構文ミスがあるとシステム全体で sudo が使えなくなります。必ず visudo コマンドを使います。

/etc/sudoers のデフォルト設定(Ubuntu 24.04 実測)
/etc/sudoers のデフォルト設定(Ubuntu 24.04 実測)

Ubuntu 24.04 の /etc/sudoers デフォルト内容を実際に確認しました:




ubuntu@linuxlab: ~
$ sudo visudo
# このファイルは必ず visudo で編集すること
Defaults env_reset
Defaults mail_badpass
Defaults secure_path=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin”
Defaults use_pty
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
@includedir /etc/sudoers.d

①sudoers の書式を理解する

%sudo ALL=(ALL:ALL) ALL の各フィールドを分解するとこうなります。

フィールド 意味
%sudo sudo グループ全員 % をつけるとグループを指定。個人ユーザーは username そのまま
ALL=(最初の ALL) すべてのホスト 複数台のホストで共有する sudoers 用。単一サーバーなら実質意味なし
(ALL:ALL) 任意のユーザー:グループ sudo -u www-data などで実行ユーザーを切り替えられる
最後の ALL すべてのコマンド /usr/bin/apt のようにコマンドを制限できる

②/etc/sudoers.d/ を使う(推奨)

/etc/sudoers 本体を直接編集するよりも、/etc/sudoers.d/ ディレクトリ以下にユーザーごとの設定ファイルを置く方法が推奨されています。




ubuntu@linuxlab: ~
$ ls -la /etc/sudoers.d/
total 16
drwxr-xr-x 2 root root 4096 Jun 13 10:56 .
drwxr-xr-x 1 root root 4096 Jun 13 10:56 ..
-r–r—– 1 root root 1068 Jan 29 2024 README
# 新しい設定ファイルはここに追加する
$ sudo visudo -f /etc/sudoers.d/myconfig

sudoers.d 以下のファイルは ~ で終わるファイルや . を含むファイルは無視されます。必ず visudo -f /etc/sudoers.d/ファイル名 で編集し、構文チェックを通してから保存してください。

③visudo -c で構文チェック

変更後の構文確認は visudo -c が便利です。Ubuntu 24.04 の Docker コンテナで確認した実際の出力です。




ubuntu@linuxlab: ~
$ sudo visudo -c
/etc/sudoers: parsed OK
/etc/sudoers.d/README: parsed OK

「parsed OK」が全ファイルで出力されれば構文は正常です。

NOPASSWD — パスワードなしで sudo を使う

CI/CD パイプラインや自動化スクリプトで sudo を使いたいとき、パスワード入力を求められると処理が止まります。そんなときに使うのが NOPASSWD オプションです。

VPS でデプロイ用のユーザーを作り、パスワードなしで特定コマンドだけ実行できるようにする設定を実際に Ubuntu 24.04 で確認しました。

NOPASSWD 設定と動作確認(Ubuntu 24.04 実測)
NOPASSWD 設定と動作確認(Ubuntu 24.04 実測)
NOPASSWD 設定手順と動作確認(Ubuntu 24.04 実測)
NOPASSWD 設定手順と動作確認(Ubuntu 24.04 実測)

手順1:sudoers.d に設定ファイルを作る




root@linuxlab: ~
# deployer ユーザーを作成し sudo グループに追加
$ useradd -m -s /bin/bash deployer && usermod -aG sudo deployer
$ id deployer
uid=1001(deployer) gid=1001(deployer) groups=1001(deployer),27(sudo)
# NOPASSWD 設定ファイルを作成
$ echo ‘deployer ALL=(ALL) NOPASSWD:ALL’ > /etc/sudoers.d/deployer
$ chmod 440 /etc/sudoers.d/deployer
$ visudo -c
/etc/sudoers: parsed OK
/etc/sudoers.d/README: parsed OK
/etc/sudoers.d/deployer: parsed OK

手順2:動作確認




root@linuxlab: ~
$ su -c ‘sudo -l’ deployer
User deployer may run the following commands on 8bdecd527987:
(ALL : ALL) ALL
(ALL) NOPASSWD: ALL
$ su -c ‘sudo whoami’ deployer
root
# パスワードなしで root として実行できた

Ubuntu 24.04 の Docker コンテナで実際に検証し、(ALL) NOPASSWD: ALL が sudo -l に表示され、パスワードなしで sudo whoamiroot を返すことを確認しました(2026-06-13 実測)。

③NOPASSWD の書き方バリエーション

書き方 意味 用途
username ALL=(ALL) NOPASSWD:ALL 全コマンド・パスワード不要 CI/CD・デプロイ自動化
username ALL=(ALL) NOPASSWD:/usr/bin/apt apt のみパスワード不要 apt 自動更新スクリプト
username ALL=(ALL) NOPASSWD:/sbin/reboot,/sbin/shutdown 再起動・シャットダウンのみ不要 監視スクリプトからの自動再起動
%deploy ALL=(ALL) NOPASSWD:ALL deploy グループ全員にNOPASSWD 複数デプロイユーザーへの一括設定

NOPASSWD:ALL の使用は最小限に

NOPASSWD:ALL はパスワードなしで全コマンドを root で実行できます。セキュリティ上の影響が大きいため、本番 VPS の管理ユーザーには設定しないことをおすすめします。CI/CD 専用ユーザーや自動化スクリプト専用ユーザーなど、用途が限られたアカウントのみに使用してください。不要になったら rm /etc/sudoers.d/deployer で削除します。

Ubuntu 22.04 と 24.04 の違い

実際に Docker コンテナで Ubuntu 22.04 と 24.04 の両方を動かし、sudo のバージョンと挙動の差を確認しました。

Ubuntu 22.04 vs 24.04 sudo バージョン比較(実測)
Ubuntu 22.04 vs 24.04 sudo バージョン比較(実測)
項目 Ubuntu 22.04 LTS Ubuntu 24.04 LTS
sudo バージョン 1.9.9-1ubuntu2.6 1.9.15p5-3ubuntu5.24.04.2
use_pty デフォルト 無効 有効(CVE-2005-4890 対策)
@includedir 構文 サポート(#includedir も可) サポート(#includedir も可)
PAM 認証 あり あり

最も注目すべき変更は use_pty です。Ubuntu 24.04 からデフォルトで有効になりました。これは sudo が実行するコマンドに疑似端末(pty)を強制割り当てするセキュリティ設定で、tty からの入出力を分離することで特定の攻撃手法を防ぎます。

Docker コンテナ内で sudo を使ったとき、一部のスクリプトで sudo: a terminal is required エラーが出る場合は、この use_pty が原因です。その場合は Defaults !use_pty を sudoers に追加するか、sudo -S コマンド(stdin からパスワードを読む)を試してください。

よくあるエラーと解決策

①「username is not in the sudoers file. This incident will be reported.」

最も多いエラーです。ユーザーが sudo グループに入っていないか、sudoers に設定がないことが原因です。




deployer@linuxlab: ~
deployer is not in the sudoers file. This incident will be reported.
# 解決策:root または sudo 権限のあるユーザーで以下を実行
$ usermod -aG sudo deployer
# 変更を反映するには一度ログアウト → 再ログイン

②「sudo: a terminal is required to read the password」

スクリプト内で sudo を使うと発生します。パスワード入力に端末が必要なのに、パイプ等で実行されているときに起こります。




ubuntu@linuxlab: ~
sudo: a terminal is required to read the password; either use the -S option
# 解決策1: -S でパスワードを stdin から読む
$ echo “password” | sudo -S apt-get update
# 解決策2: NOPASSWD を設定する(推奨・セキュア)
$ sudo visudo -f /etc/sudoers.d/username
username ALL=(ALL) NOPASSWD:/usr/bin/apt-get

③「visudo: /etc/sudoers is busy, try again later」

別のユーザーや端末で visudo が起動中です。そちらを終了してから再試行してください。

④変更後も sudo が使えない(グループが反映されない)

sudo グループへの追加後、id コマンドでグループが反映されていないことがあります。




ubuntu@linuxlab: ~
$ id
uid=1001(ubuntu) gid=1001(ubuntu) groups=1001(ubuntu)
# まだ sudo グループが入っていない → 再ログインが必要
$ exit
# SSH で再接続後
$ id
uid=1001(ubuntu) gid=1001(ubuntu) groups=1001(ubuntu),27(sudo)

newgrp sudo コマンドを使えばログアウトせずに新しいグループを有効にできます(ただし新しいシェルが起動します)。

まとめ

Ubuntu の sudo について、Ubuntu 24.04 の Docker 公式イメージで実際に動かした結果をまとめました。

  • sudo コマンド で root 権限実行。sudo -l で使える権限を一覧確認できる
  • sudo グループへの追加は usermod -aG sudo ユーザー名(-a 必須)。変更後は再ログインが必要
  • sudoers の編集は必ず visudo で行う。変更後は visudo -c で構文確認
  • 個別設定は /etc/sudoers.d/ 以下に書くのが安全でメンテナンスしやすい
  • Ubuntu 24.04 では use_pty がデフォルト有効。sudo バージョンは 1.9.15p5
  • NOPASSWD は CI/CD・デプロイ自動化に便利だが、本番管理ユーザーには慎重に

sudo の設定を理解すると、VPS での複数ユーザー管理やデプロイ自動化がぐっとやりやすくなります。VPS を借りてサーバー運用を始めたい方は、まず SSH 鍵認証の設定と合わせて sudo の権限設計を考えることをおすすめします。

VPS を借りて本格的にサーバーを運用するなら

  • Vultr・DigitalOcean などの VPS では、初期セットアップ時から sudo 設定済みのユーザーが作成される
  • 自分のサーバーで sudo・SSH・ファイアウォールを組み合わせた安全な運用環境を構築できる
  • 月額 $5〜 から始められる。まずは小さいプランで試すのがおすすめ

本格的にサーバーを運用したい方は、VPS の比較記事も参考にしてみてください。

Ubuntu で使う VPS おすすめ比較【速度・料金・東京リージョン】

コメント

タイトルとURLをコピーしました