「visudoで/etc/sudoersを編集したいけど、書き方がよくわからない」
Linuxサーバーを管理していると、一般ユーザーで作業中にroot権限が必要になる場面は頻繁にあります。そのたびに su でrootに切り替えるのはセキュリティ上のリスクが大きく、現場では sudo を使うのが鉄則です。
この記事では、
sudo コマンド の実践的な使い方を解説します。基本的な実行方法から visudo による /etc/sudoers の設定、ログ確認やトラブルシュートまで、実務で必要な操作をすべてカバーします。動作確認環境は RHEL 9.4 / Rocky Linux 9.4 です。
この記事のポイント
・sudo コマンド名 でroot権限のコマンドを安全に実行できる
・/etc/sudoers の編集は必ず visudo を使う
・sudo -l で自分に許可されたコマンドを確認できる
・sudo の実行ログは /var/log/secure で追跡できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
sudoとは?suとの違いを整理する
sudo(superuser do)は、一般ユーザーのまま特定のコマンドだけをroot権限で実行する仕組みです。root パスワードを知らなくても、自分のパスワードで認証して管理者権限のコマンドを実行できます。一方、
su(substitute user)はユーザーそのものを切り替えるコマンドです。su - でrootに切り替えると、以後のすべての操作がroot権限で実行されます。実務では sudo が推奨される理由を押さえておきましょう。
・最小権限の原則:必要なコマンドだけをroot権限で実行できる(全操作がrootにならない)
・監査ログ:誰がいつどのコマンドを sudo で実行したか、すべてログに記録される
・rootパスワード不要:rootパスワードを複数人で共有するリスクがなくなる
・タイムスタンプ:一度認証すると一定時間(デフォルト5分)は再認証不要
RHEL 9/Rocky Linux 9 では、インストール時に作成した管理ユーザーはデフォルトで
wheel グループに所属しており、sudo が使える状態になっています。sudoの基本的な使い方
最も基本的な使い方は、実行したいコマンドの前にsudo を付けるだけです。1. root権限でコマンドを実行する
$ sudo systemctl restart httpd [sudo] testuser のパスワード: # パスワード入力後、httpdが再起動される
2. 別のユーザーとしてコマンドを実行する
-u オプションで、root以外のユーザーとしてコマンドを実行できます。# apacheユーザーとしてファイルの所有権を確認する $ sudo -u apache ls -la /var/www/html/
3. rootのシェルを起動する(sudo -i / sudo -s)
複数のコマンドを連続でroot権限で実行したい場合は、rootシェルを起動できます。# rootのログインシェルを起動する(su - と同等) $ sudo -i [root@sv01 ~]# # 現在のシェルのままroot権限に切り替える $ sudo -s [root@sv01 testuser]#
sudo -i:rootのログインシェルが起動し、rootのホームディレクトリ(/root)に移動する。環境変数もrootのものに切り替わる・
sudo -s:現在のディレクトリのまま、rootのシェルが起動する。環境変数は呼び出し元ユーザーのものが引き継がれる作業が終わったら
exit で必ず元のユーザーに戻りましょう。rootシェルを開きっぱなしにするのは su - と同じリスクを抱えることになります。4. 許可されたコマンドを確認する(sudo -l)
自分がどのコマンドを sudo で実行できるか確認するには-l オプションを使います。$ sudo -l ユーザー testuser は sv01.linuxmaster.jp 上で次のコマンドを実行できます: (ALL) ALL
(ALL) ALL と表示された場合は、すべてのコマンドをroot権限で実行できる状態です。制限付きの設定がされている場合は、許可されたコマンドだけが一覧表示されます。visudoで/etc/sudoersを安全に編集する
sudoの権限設定は/etc/sudoers ファイルで管理します。このファイルを直接viで編集するのは厳禁です。構文エラーがあると sudo が使えなくなり、サーバー管理ができなくなる致命的な状態に陥ります。必ず
visudo コマンドを使いましょう。保存時に構文チェックが自動で実行され、エラーがあれば警告してくれます。1. visudoの起動と基本操作
# visudoを起動する(root権限が必要) $ sudo visudo
:wq で保存すると、自動で構文チェックが行われます。構文エラーがある場合は次のようなメッセージが出ます。
>>> /etc/sudoers: syntax error near line 25 <<< What now? Options are: (e)dit sudoers file again (x)exit without saving changes to sudoers file (Q)uit and save changes to sudoers file (DANGER!)
e を押して再編集するか、x で変更を破棄してください。Q は絶対に選ばないでください。壊れたsudoersを保存してしまうと、sudoが完全に使えなくなります。2. sudoersファイルの書き方
/etc/sudoers の基本構文は次のとおりです。# 書式: ユーザー名 ホスト名=(実行ユーザー) コマンド # すべてのホストですべてのコマンドをroot権限で実行可能 testuser ALL=(ALL) ALL # wheelグループのメンバーに全権限を付与(RHEL 9のデフォルト) %wheel ALL=(ALL) ALL # パスワードなしで全コマンドを実行可能にする %wheel ALL=(ALL) NOPASSWD: ALL
・ユーザー名(または %グループ名):sudo を許可する対象。グループ名の場合は先頭に
% を付ける・ALL(ホスト名):このルールが適用されるホスト。ALL はすべてのホストを意味する
・(ALL)(実行ユーザー):どのユーザーとしてコマンドを実行できるか。ALL はroot含む全ユーザー
・ALL(コマンド):実行を許可するコマンド。ALL はすべてのコマンド
3. 特定のコマンドだけを許可する実務例
全権限を与えるのではなく、必要なコマンドだけを許可するのがセキュリティのベストプラクティスです。# webadminユーザーにApacheの再起動だけを許可 webadmin ALL=(root) /usr/bin/systemctl restart httpd, /usr/bin/systemctl status httpd # dbadminユーザーにMySQLのバックアップだけを許可 dbadmin ALL=(root) /usr/bin/mysqldump # monitorグループにログの閲覧だけを許可(書き込み系コマンドは不可) %monitor ALL=(root) /usr/bin/tail, /usr/bin/cat, /usr/bin/less, /usr/bin/grep
which コマンドでパスを確認してから設定しましょう。$ which systemctl /usr/bin/systemctl
4. /etc/sudoers.dディレクトリの活用
RHEL 9 では/etc/sudoers の末尾に次の行が記述されています。#includedir /etc/sudoers.d
/etc/sudoers.d/ ディレクトリに配置したファイルが自動的に読み込まれます。ユーザーやグループごとに個別のファイルを作成すると、管理がしやすくなります。# webadmin用のsudo設定ファイルを作成 $ sudo visudo -f /etc/sudoers.d/webadmin # ファイル内容 webadmin ALL=(root) /usr/bin/systemctl restart httpd
.(ドット)や ~(チルダ)を含めないこと(読み込みがスキップされる)・パーミッションは
0440 に設定する(visudo -f で作成すれば自動で適切なパーミッションが付与される)sudoの実務で使えるオプション
基本操作に加えて、現場でよく使うオプションを紹介します。1. タイムスタンプをリセットする(sudo -k)
# 認証キャッシュを無効化する(次回sudo実行時にパスワードを求められる) $ sudo -k
2. 環境変数を引き継ぐ(sudo -E)
# 現在のユーザーの環境変数をroot権限のコマンドに引き継ぐ $ sudo -E env | grep -i proxy http_proxy=http://proxy.example.com:8080
http_proxy 変数を引き継ぐ必要がある場面で使います。3. コマンドの出力をリダイレクトする
sudo でリダイレクトを使う場合は注意が必要です。# これはPermission deniedになる(リダイレクトは一般ユーザー権限で実行される) $ sudo echo "test" > /etc/test.conf -bash: /etc/test.conf: Permission denied # 正しい方法:teeコマンドを使う $ echo "test" | sudo tee /etc/test.conf # 追記する場合は -a オプション $ echo "test2" | sudo tee -a /etc/test.conf
> リダイレクトはシェルが処理するため、sudo の権限が及びません。tee コマンドを sudo で実行すれば、root権限でファイルに書き込めます。sudoのログを確認する方法
sudo の大きな利点は、すべての実行履歴がログに記録されることです。セキュリティ監査や障害調査で重要な情報源になります。1. /var/log/secureでsudoログを確認する
RHEL 9 / Rocky Linux 9 では、sudo の実行ログは/var/log/secure に記録されます。$ sudo grep sudo /var/log/secure | tail -5 Apr 14 10:23:45 sv01 sudo: testuser : TTY=pts/0 ; PWD=/home/testuser ; USER=root ; COMMAND=/usr/bin/systemctl restart httpd Apr 14 10:25:12 sv01 sudo: testuser : TTY=pts/0 ; PWD=/home/testuser ; USER=root ; COMMAND=/usr/bin/cat /etc/shadow Apr 14 10:30:01 sv01 sudo: webadmin : command not allowed ; TTY=pts/1 ; PWD=/home/webadmin ; USER=root ; COMMAND=/usr/sbin/reboot
・ユーザー名:sudo を実行したユーザー
・TTY:実行端末
・PWD:実行時のカレントディレクトリ
・USER:どのユーザーとして実行したか
・COMMAND:実行されたコマンド(フルパス)
3行目のように
command not allowed と記録されたエントリは、許可されていないコマンドを実行しようとした証拠です。不正アクセスの兆候として注意が必要です。2. journalctlでsudoログを確認する
systemd 環境ではjournalctl でもログを確認できます。# sudoに関するログを直近から表示 $ sudo journalctl _COMM=sudo --no-pager | tail -10 # 特定の日付のsudoログを抽出 $ sudo journalctl _COMM=sudo --since "2026-04-14" --until "2026-04-15"
「sudo: ユーザー名 is not in the sudoers file」が出た時の対処法
sudo を実行して次のエラーが表示された場合、そのユーザーに sudo の権限が設定されていません。$ sudo systemctl restart httpd [sudo] testuser のパスワード: testuser は sudoers ファイル内にありません。この事象は記録・報告されます。
1. wheelグループに追加する(推奨)
RHEL 9 ではwheel グループに所属するユーザーに sudo の全権限が付与される設定がデフォルトで有効です。# rootまたは既にsudo権限のあるユーザーで実行 $ sudo usermod -aG wheel testuser # 設定の反映を確認する(再ログインが必要な場合がある) $ id testuser uid=1001(testuser) gid=1001(testuser) groups=1001(testuser),10(wheel)
-aG の -a(append)を忘れると、既存のグループ所属がすべて外れてしまうので注意してください。2. visudoで個別にユーザーを追加する
特定のコマンドだけを許可したい場合は、visudo で個別に設定します。$ sudo visudo # 末尾に追加 testuser ALL=(root) /usr/bin/systemctl restart httpd
sudoでよくあるトラブルと対処法
現場で遭遇しやすいトラブルと、その解決策をまとめます。1. 「sudo: コマンド名: command not found」
sudoでコマンドを実行すると、rootユーザーのPATH環境変数が使われます。一般ユーザーのPATHにしか含まれないコマンドは見つからないことがあります。# フルパスで指定すれば実行できる $ sudo /usr/local/bin/mycommand # または、PATHの設定をsudoersに追加する $ sudo visudo Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
2. sudoのパスワードキャッシュ時間を変更する
デフォルトの5分では短すぎる、あるいはセキュリティポリシーで毎回パスワードを要求したい場合は、timestamp_timeout で変更できます。$ sudo visudo # パスワードキャッシュを15分に変更 Defaults timestamp_timeout=15 # 毎回パスワードを要求する Defaults timestamp_timeout=0
3. NOPASSWDが効かない場合
NOPASSWD を設定してもパスワードを求められる場合は、設定の記述順序が原因です。sudoers は上から順に評価され、後の行が優先されます。# この順序だと NOPASSWD が上書きされてしまう testuser ALL=(ALL) NOPASSWD: ALL %wheel ALL=(ALL) ALL # 正しい順序:個別設定はグループ設定の後に記述する %wheel ALL=(ALL) ALL testuser ALL=(ALL) NOPASSWD: ALL
/etc/sudoers.d/ に個別ファイルとして配置するのが確実です。sudoのセキュリティ設定(実務Tips)
本番サーバーでsudoを運用する際に設定しておきたい項目を紹介します。1. rootログインを無効化してsudo運用に統一する
rootで直接ログインできる状態は、パスワードブルートフォース攻撃のリスクがあります。SSH経由のrootログインを無効化し、sudo経由でのみ管理者操作を行う運用が推奨されます。# /etc/ssh/sshd_configを編集 $ sudo vi /etc/ssh/sshd_config PermitRootLogin no # sshd を再起動して反映 $ sudo systemctl restart sshd
2. sudo実行時のログメッセージを追加する
sudo 実行時に警告メッセージを表示して、管理者権限の操作であることをユーザーに意識させることができます。$ sudo visudo # 初回sudo時に警告メッセージを表示する(RHEL 9デフォルト) Defaults lecture = always
本記事のまとめ
sudo コマンドの基本操作から visudo の設定、トラブルシュートまでを解説しました。| やりたいこと | コマンド |
|---|---|
| root権限でコマンドを実行する | sudo コマンド名 |
| 別のユーザーとして実行する | sudo -u ユーザー名 コマンド名 |
| rootのログインシェルを起動する | sudo -i |
| 許可されたコマンドを確認する | sudo -l |
| 認証キャッシュをリセットする | sudo -k |
| sudoersファイルを安全に編集する | sudo visudo |
| sudoersの個別設定ファイルを編集する | sudo visudo -f /etc/sudoers.d/ファイル名 |
| wheelグループにユーザーを追加する | sudo usermod -aG wheel ユーザー名 |
| sudoの実行ログを確認する | sudo grep sudo /var/log/secure |
sudo はサーバー管理の基盤となるコマンドです。rootのパスワードを複数人で共有するのではなく、sudo と visudo を正しく使って「誰が何をしたか」を追跡できる状態を維持しましょう。
suコマンドとの使い分けについては「suコマンドでユーザーを切り替える方法」、パスワード管理の詳細は「passwdコマンドでパスワードを変更する方法」もあわせてご覧ください。
sudoの基本はわかった。次はサーバー構築全体の流れを押さえませんか?
sudo の設定はサーバー管理の入口にすぎません。安全なサーバー構築を体系的に学ぶことが、現場で信頼されるエンジニアへの近道です。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
