【コマンド詳細】sudo完全ガイド|基本・sudoers設計・安全な運用・よくあるエラー対処

  • URLをコピーしました!

sudo は「一般ユーザーが必要なときだけ root 権限でコマンドを実行する」ための仕組みです。
ただし sudo は “使い方を間違えると事故が起きる” コマンドでもあります(権限の付与ミス、NOPASSWD乱用、PATH汚染、タイムスタンプ放置など)。

本記事では、単なる構文説明だけでなく、sudoers の安全な設計・運用、そして よくあるエラーの切り分け まで「実務で困らないレベル」でまとめます。

📌 他のLinuxコマンドも体系的に確認したい方へ
ファイル操作・検索・テキスト処理など用途別に整理した総合まとめはこちら。
Linuxコマンド大全|カテゴリ別まとめ+コマンド詳細リンク集(チートシート付き)

目次

sudoの結論(先に要点)

  • 普段は一般ユーザーで作業し、必要なコマンドだけ sudo で実行する。
  • 権限付与は 最小権限(Least Privilege) が基本。
  • /etc/sudoers の編集は 必ず visudo(構文ミス=詰み防止)。
  • NOPASSWD は “便利” だが事故率が跳ねるので 用途限定 が原則。
  • sudoが遅い/失敗する時は、エラー別に原因が決まっている

sudoとは?(rootで作業しない理由)

Linuxでは、rootで常用作業をすると「誤操作=即事故」になりやすく、監査面でも問題が起きます。
sudo は 必要な操作だけ一時的に権限昇格させ、日常作業は一般ユーザーで行うための仕組みです。

基本構文

sudo [オプション] コマンド

よくある例

# パッケージ操作(Debian/Ubuntu)
sudo apt update

# サービス再起動
sudo systemctl restart nginx

# rootしか読めないログ閲覧
sudo less /var/log/secure

主要オプション一覧(実務で使うものだけ厳選)

オプション意味実務での使いどころ
-l許可されている sudo コマンド一覧表示「自分は何ができる?」の確認sudo -l
-u指定ユーザーとして実行サービスユーザーでの実行確認などsudo -u www-data whoami
-k認証キャッシュを破棄(次回必ずパスワード)作業終了後の安全確保sudo -k
-v認証キャッシュ延長(パスワード再入力)長い作業前に認証更新sudo -v
-irootのログインシェルへ環境も含めてrootで作業したい時(慎重に)sudo -i
-s現在の環境のままrootシェルへ環境変数の影響を受けやすいので注意sudo -s
-bバックグラウンド実行長い処理を裏で回すsudo -b apt update
-e / sudoedit安全にファイル編集設定ファイル編集の事故率を下げるsudoedit /etc/hosts

補足:sudo はタイムスタンプ(認証キャッシュ)を使って「一定時間はパスワード省略」できます。デフォルトは環境により差がありますが、sudoers の timestamp_timeout で制御可能です。

実務ユースケース集(“現場で使える”状態にする)

1) パッケージ管理

# Debian/Ubuntu
sudo apt update
sudo apt install -y curl

# RHEL/CentOS
sudo yum install -y curl
sudo dnf install -y curl

2) サービス操作(systemd)

sudo systemctl status nginx
sudo systemctl restart nginx
sudo journalctl -u nginx -xe

3) 設定ファイル編集(推奨は sudoedit)

# 推奨:sudoedit(編集は自分、保存だけroot)
sudoedit /etc/ssh/sshd_config

# 直接編集(事故が起きやすいので注意)
sudo vi /etc/ssh/sshd_config

4) root権限が必要なログ確認

sudo less /var/log/auth.log
sudo tail -n 200 /var/log/secure

5) “危険コマンド”の実行前チェック(事故防止)

# 削除対象が想定通りかを確認
ls -la /path/to/target
# 実行
sudo rm -rf /path/to/target

sudoers設計:安全に権限を配る方法

sudoの権限管理ファイル

対象役割パス
メイン設定sudoの許可ルール本体/etc/sudoers
分割設定ユーザー/用途ごとにルール分割(推奨)/etc/sudoers.d/

重要:sudoersは必ずvisudoで編集

sudo visudo

直接編集すると、構文ミスで sudo が壊れて復旧が面倒(最悪ログイン不能)になるため、構文チェック付きの visudo が鉄則です。

sudoersの基本構文

ユーザー ホスト = (実行ユーザー) 許可コマンド

安全な設計テンプレ(おすすめ順)

テンプレ1:グループ運用(王道)

Ubuntu系は %sudo、RHEL系は %wheel が定番です(環境差はあります)。

# Ubuntu系(例)
%sudo   ALL=(ALL:ALL) ALL

# RHEL/CentOS系(例)
%wheel  ALL=(ALL) ALL

テンプレ2:特定コマンドだけ許可(最小権限)

「全部OK」ではなく、運用で必要なコマンドだけに絞ると事故率が下がります。

# 例:user1 に systemctl のみ許可
user1 ALL=(root) /usr/bin/systemctl

テンプレ3:NOPASSWDは“用途限定”で使う

NOPASSWD は便利ですが、誤実行や第三者操作のリスクが増えます。
どうしても必要なら「コマンド限定」「対象ユーザー限定」で。

# 例:CI用ユーザーに、限定コマンドだけパスワード不要
ciuser ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx

テンプレ4:/etc/sudoers.d に分割して管理(運用が強い)

# ファイル作成
sudo touch /etc/sudoers.d/ciuser

# visudoで安全に編集
sudo visudo -f /etc/sudoers.d/ciuser

セキュリティ・運用の落とし穴

1) 環境変数の引き継ぎ(env_reset / env_keep)

sudoers は環境変数を制御します。デフォルトでは env_reset が有効で「最小限の環境」でコマンドを実行する挙動が一般的です。

運用で “環境変数が必要” なケース(例:プロキシ、LANG、PATH など)があるため、env_keep を安易に増やしすぎない(=攻撃面が増える)点が重要です。

2) 認証キャッシュ(timestamp_timeout)

timestamp_timeout は「何分間パスワード不要にするか」を制御します。0にすると毎回パスワード、負値は再起動まで失効しない等の挙動があります。

3) 作業後はsudo -k(“やったつもり事故”防止)

sudo -k

共有端末・踏み台・長時間セッションで特に効果が大きいです。

よくあるエラー(症状別)

sudoのエラーは「症状ごとに原因がだいたい決まっている」ので、下記から該当へ進むのが最短です。

FAQ

Q1. sudo と su の違いは?
sudo は「必要なコマンドだけ権限昇格」、su は「ユーザー(多くはroot)へ切り替え」です。
運用では “root常用を避ける” ために sudo が基本になります。

Q2. sudoでパスワードを毎回聞かれる/逆に聞かれないのはなぜ?
sudoは認証キャッシュを使います。
sudoers の timestamp_timeoutsudo -k(破棄)、sudo -v(更新)で挙動が変わります。

Q3. sudoersを直接編集してはいけない理由は?
構文ミスで sudo の解釈に失敗すると、sudoが使えなくなり復旧が面倒になります。
visudoは構文チェック+排他制御があるため安全です。

Q4. NOPASSWDは使っていい?
便利ですが、事故率が上がります。使うなら「ユーザー限定」「コマンド限定」が原則です。
例:CI用途の systemctl restart だけ、など。

Q5. sudoが遅い(固まる)ときの典型原因は?
DNS逆引きやhosts/hostname整合、sudoersのホスト指定などが典型です。詳しくは下記を参照。
sudo実行でタイムアウトする/遅いときの原因と解決方法

まとめ(この記事でできるようになること)

  • sudoの基本構文と主要オプションを “使えるレベル” で理解できる
  • sudoers を 最小権限で設計し、運用事故を減らせる
  • よくあるエラーを “症状別” に最短で解決できる

📌 sudoトラブルを一覧で引きたい方へ
sudo関連のエラーと解決方法をまとめて整理しています。
【完全版】sudoエラー大全|よくある原因と解決方法まとめ

目次