sudoの安全な設定方法|visudo・sudoersで権限昇格を防ぐ実践ガイド

Linux Security

「このユーザーにsudo権限を渡しておいて」――そんな軽い気持ちで設定したsudoersが、サーバー全体の管理者権限を奪われる入り口になっていた。現場では珍しくない話です。

sudo(superuser do)はLinuxにおいて一般ユーザーが管理者権限でコマンドを実行するための仕組みですが、設定を誤ると「誰でも何でもできる」状態を生み出してしまいます。過去にはsudo自体の脆弱性が発見され、権限昇格攻撃に悪用された事例もあります。

この記事では、sudoの仕組みと危険なポイントを整理したうえで、visudoによる安全な編集方法、sudoersの書き方、ログ監視まで、現場ですぐ使える実践的な設定手順を解説します。

sudoの安全な設定方法|visudo・sudoersで権限昇格を防ぐ実践ガイド

sudoとは?なぜ安全な設定が重要なのか

sudo(superuser do)とは、Linux/Unix系OSで一般ユーザーが一時的にroot(管理者)権限でコマンドを実行するための仕組みです。rootで直接ログインする運用と比べて、「誰が」「いつ」「何を実行したか」が記録に残るため、本来はセキュリティを高めるための仕組みです。

しかし、sudoの設定が甘いと逆にリスクを生みます。

ALL権限の付与: 「何でも実行できる」設定を安易に与えると、そのユーザーのアカウントが乗っ取られた場合にサーバー全体が危険にさらされます
NOPASSWDの濫用: パスワードなしでsudoを実行できる設定は、不正アクセス時の最後の防壁を取り除いてしまいます
sudoers直接編集の事故: /etc/sudoersを通常のエディタで編集して構文エラーを入れると、sudoが一切使えなくなる可能性があります

sudoに対する攻撃手法を知る(防御のための理解)

防御策を適切に設計するために、攻撃者がsudoをどのように悪用するかを理解しておきましょう。

1. sudo脆弱性の悪用による権限昇格

sudo自体にセキュリティ上の欠陥が発見されることがあります。たとえば、過去にはsudoのバージョンによって、本来許可されていないユーザーがroot権限を取得できてしまう脆弱性が報告されました。攻撃者はこうした脆弱性を利用して、一般ユーザーからrootへの権限昇格を狙います。

2. NOPASSWD設定の悪用

NOPASSWDが設定されたアカウントが乗っ取られると、攻撃者はパスワード入力なしでroot権限のコマンドを実行できます。特にWebアプリケーション経由でシェルアクセスを得た攻撃者にとって、NOPASSWDは格好の踏み台です。

3. コマンドパス未指定による悪意あるプログラムの実行

sudoersでコマンドをフルパスで指定していない場合、攻撃者がPATH環境変数を操作して、同名の悪意あるプログラムを先に実行させることが可能です。たとえば「restart」というコマンドを許可している場合、攻撃者が作成した偽の「restart」が実行されるリスクがあります。

sudoの安全な設定方法|visudo・sudoersで権限昇格を防ぐ実践ガイド - 解説

具体的なsudo安全設定手順

ここからは、sudoを安全に運用するための具体的な設定手順を解説します。

1. visudoで安全にsudoersを編集する

sudoersファイル(/etc/sudoers)の編集には、必ずvisudoコマンドを使ってください。visudoは保存時に構文チェックを行い、エラーがあれば警告を出して保存を阻止してくれます。

# visudoでsudoersを編集(必ずこのコマンドを使う) sudo visudo # エディタをvimからnanoに変更したい場合 sudo EDITOR=nano visudo # /etc/sudoers.d/配下の個別ファイルを編集する場合 sudo visudo -f /etc/sudoers.d/webadmin

絶対にやってはいけないこと: vi /etc/sudoersnano /etc/sudoers で直接編集すると、構文エラーがあってもそのまま保存されてしまいます。結果としてsudoが使えなくなり、復旧にはシングルユーザーモードでの起動やコンソールアクセスが必要です。

2. sudoersの書式と最小権限の原則

sudoersの基本書式は以下のとおりです。

# sudoersの基本書式 # ユーザー ホスト=(実行ユーザー) コマンド # 危険な例: 全コマンドを許可(避けるべき) # webadmin ALL=(ALL) ALL # 安全な例: 必要なコマンドだけをフルパスで許可 webadmin ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl restart php-fpm # グループ単位で許可する場合(%をグループ名の前に付ける) %webops ALL=(ALL) /usr/bin/systemctl restart nginx

最小権限の原則に従い、以下の点を守ってください。

ALL=(ALL) ALLは使わない: どうしても必要な場合を除き、実行できるコマンドを明示的に列挙します
コマンドはフルパスで指定: /usr/bin/systemctl のようにフルパスで書くことで、PATH操作による攻撃を防ぎます
/etc/sudoers.d/を活用: ユーザーやロールごとにファイルを分けると管理しやすく、ミスの影響範囲も限定できます

3. NOPASSWD設定の正しい使い方

NOPASSWDは「パスワード入力なしでsudoを実行できる」設定です。自動化スクリプトやCI/CDパイプラインで必要になることがありますが、使い方を誤るとセキュリティホールになります。

# 危険な例: 全コマンドをNOPASSWDで許可(絶対に避ける) # deploy ALL=(ALL) NOPASSWD: ALL # 安全な例: 特定コマンドのみNOPASSWDで許可 deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp # さらに安全: 引数まで限定する deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp, /usr/bin/systemctl status myapp

NOPASSWD設定のルールは次の3つです。

対象コマンドを最小限に絞る: 「NOPASSWD: ALL」は論外です。自動化に必要なコマンドだけを許可してください
引数まで限定できるなら限定する: /usr/bin/systemctl restart myapp のように引数込みで指定すれば、他のサービスの操作を防げます
専用ユーザーを作る: 人間が使うアカウントにNOPASSWDを設定するのではなく、自動化専用のユーザーを作成して権限を分離しましょう

4. sudoログの有効化と監視

sudoの実行履歴はデフォルトで/var/log/secureまたは/var/log/auth.logに記録されますが、専用のログファイルに出力する設定にしておくと監視が容易です。

# visudoで以下を追記(sudo専用ログファイルを指定) Defaults logfile="/var/log/sudo.log" # 入出力のログも記録する場合(操作内容の証跡として有効) Defaults log_input, log_output Defaults iolog_dir="/var/log/sudo-io"

ログを設定したら、定期的に不審な実行がないか確認しましょう。

# sudo実行ログを確認 sudo cat /var/log/sudo.log # 失敗したsudo試行を抽出(不正アクセスの兆候) grep "authentication failure" /var/log/secure

5. sudoパッケージの更新で脆弱性に対応する

sudoは定期的にセキュリティアップデートがリリースされます。既知の脆弱性を放置しないために、パッケージの更新を習慣化してください。

# 現在のsudoバージョンを確認 sudo --version # RHEL/CentOS/AlmaLinux系: sudoパッケージを更新 sudo dnf update sudo # Ubuntu/Debian系: sudoパッケージを更新 sudo apt update && sudo apt upgrade sudo # セキュリティアップデートのみを適用する場合(RHEL系) sudo dnf update --security sudo

中小企業でも今日からできること

予算や人手が限られていても、以下の対策は今日から始められます。

visudoだけを使うルールを徹底: /etc/sudoersの直接編集を禁止するだけで、設定事故のリスクを大幅に減らせます
ALL=(ALL) ALLの設定を棚卸し: 現在のsudoers設定を確認し、本当に全権限が必要なユーザーがいないか見直してください。sudo cat /etc/sudoerssudo ls /etc/sudoers.d/ で確認できます
sudoのバージョンを確認・更新: sudo --version で現在のバージョンを確認し、最新のセキュリティパッチを適用してください
sudoログを有効にする: visudoで Defaults logfile="/var/log/sudo.log" を追記するだけで、誰がいつ何を実行したかが記録されます

よくある誤解と注意点

【誤解】「sudoが使えるなら安全に管理されている」

sudoを導入していること自体はセキュリティ対策の第一歩ですが、設定内容が甘ければrootで直接ログインしているのとほぼ同じ状態です。ALL=(ALL) ALLの設定は「root権限をそのまま渡している」のと実質的に変わりません。

【誤解】「sudoersを一度設定すれば放置してよい」

人事異動や退職によって不要になったsudo権限が残り続けるケースは非常に多いです。定期的な棚卸しを行い、不要な権限は速やかに削除しましょう。

【注意】sudoersの構文エラーは致命的

構文エラーを含んだsudoersファイルが保存されると、すべてのユーザーがsudoを使えなくなります。復旧にはサーバーの物理コンソールやシングルユーザーモードが必要です。だからこそvisudoの使用が必須なのです。

Linuxの基本的なコマンド操作やファイル権限管理については、姉妹サイトLinuxMaster.JPで詳しく解説しています。

sudoの安全な設定方法|visudo・sudoersで権限昇格を防ぐ実践ガイド - まとめ

本記事のまとめ

sudoは正しく設定すればLinuxサーバーのセキュリティを大幅に向上させる仕組みですが、安易な設定は逆にリスクを生みます。以下のポイントを押さえて、安全な運用を心がけてください。

脅威 対策 難易度
sudoers構文エラーで操作不能 visudoで編集を徹底 低(すぐできる)
過剰な権限付与による権限昇格 最小権限の原則でコマンドを限定 低(設定変更のみ)
NOPASSWD悪用による不正操作 対象コマンド・引数を最小限に限定 低(設定変更のみ)
sudo操作の証跡がない 専用ログファイルの有効化 低(1行追記)
sudo脆弱性の悪用 パッケージの定期更新 低(運用ルール化)

あなたのサーバーのsudo設定、最後に見直したのはいつですか?

sudoの設定ミスは、気づかないまま長期間放置されがちです。定期的な見直しと正しい知識が、サーバーを守る基盤になります。
正しいセキュリティ知識を体系的に身につけたい方へ、メルマガで実践的なセキュリティ対策ノウハウをお届けしています。

コメント

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