sudoは、一般ユーザーが「管理者(root)権限が必要な操作」を一時的に実行するためのコマンドです。パッケージのインストール(sudo apt install)、システム設定の変更、所有者の変更など、Linuxの管理作業には欠かせません。「Permission deniedと言われたらsudoを付ける」というのは誰もが通る道です。
ただしsudoは「付ければ誰でも使える」わけではありません。許可されていないユーザーが実行すると、is not in the sudoers file. This incident will be reported.(sudoersファイルに載っていません。この件は報告されます)という、少し怖い有名なエラーが出ます。この記事では、実機のLinux(WSLのDebian)で許可されたユーザーと許可されていないユーザーの両方を実際に作って、sudoの仕組みとこのエラーの対処法を検証しながら整理します。
sudo コマンドで、そのコマンドだけをroot権限で実行します(自分のパスワードを入力)。sudoを使えるのは、許可されたユーザーだけ(多くの環境ではsudoグループ所属者)。- 許可されていないと
is not in the sudoers fileエラーになります。 - 対処は、管理者(root)に
sudoグループへ追加してもらうことです(usermod -aG sudo ユーザー)。 - 自分の権限は
sudo -lで確認できます。 - 設定ファイル
/etc/sudoersは直接編集せずvisudoで編集します。
権限とパーミッションの基本はchmod、所有者の変更はchown(Operation not permittedの回でsudoの必要性に触れています)、ユーザーの確認はwhich・typeもあわせて参考になります。
sudoの基本:1コマンドだけrootになる
sudo コマンドと書くと、そのコマンドだけがroot(管理者)権限で実行されます。実行時に求められるのは自分自身のパスワードです(rootのパスワードではありません)。
# root専用のファイルは、一般ユーザーでは読めない cat /etc/shadow # cat: /etc/shadow: Permission denied # sudo を付けると読める(自分のパスワードを入力) sudo cat /etc/shadow # [sudo] password for sudouser: ← 自分のパスワード # root:*:19352:0:99999... ← 読めた! # 実行ユーザーが root に変わっていることを確認 whoami # sudouser(普段は自分) sudo whoami # root (sudo中は root)
実機で検証したところ、一般ユーザーでは/etc/shadow(パスワード情報のファイル)がPermission deniedで読めませんでしたが、sudoを付けると読めました。そしてwhoamiはsudouser(自分)を返すのに、sudo whoamiはrootを返すことも確認しました。つまりsudoは、「そのコマンドの間だけ、rootとして振る舞う」仕組みです。一度パスワードを入力すると、しばらくの間(既定で数分〜15分程度)は再入力なしでsudoを続けられます。
【有名エラー】is not in the sudoers file
sudoで最も有名なのがこのエラーです。許可されていないユーザーがsudoを実行すると、パスワードを正しく入れても拒否されます。
# sudo の許可が無いユーザーで実行すると… sudo whoami # [sudo] password for nosudouser: # nosudouser is not in the sudoers file. This incident will be reported. # ↑「sudoersファイルに載っていません。この件は報告されます」 # パスワードが合っていても、権限そのものが無いので拒否される
実機で、sudoグループに入っていないユーザー(nosudouser)でsudoを実行したところ、正しいパスワードを入力してもnosudouser is not in the sudoers file. This incident will be reported.と拒否されました。このエラーは「パスワードの間違い」ではなく「そもそもsudoを使う権限が無い」ことを意味します。「報告されます」という文言は不穏に感じますが、実際にはシステムログに記録が残る(管理者が確認できる)という意味で、直ちに何かが起こるわけではありません。対処法は、root権限を持つ人(管理者)に、自分をsudoグループへ追加してもらうことです:usermod -aG sudo ユーザー名(Debian/Ubuntu系。RHEL系はwheelグループ)。追加後は一度ログインし直すとグループが反映されます。自分が管理するサーバーなら、rootでログインするか、既にsudoを使える別ユーザーから実行します。
誰がsudoを使えるのか(sudoersとグループ)
sudoを使えるかどうかは、/etc/sudoersという設定ファイルで決まっています。多くの環境では、「sudoグループ(RHEL系ではwheelグループ)に所属しているか」が基準です。
# /etc/sudoers の該当行(Debian/Ubuntu系) %sudo ALL=(ALL:ALL) ALL # ↑「sudoグループのメンバーは、すべてのコマンドを実行できる」 # ユーザーを sudo グループに追加する(root権限で) usermod -aG sudo ユーザー名 # ※反映にはログインし直しが必要 # 自分がどのグループに居るか確認 groups # sudouser sudo ← sudo が含まれていれば使える
実機の/etc/sudoersには%sudo ALL=(ALL:ALL) ALLという行があり、これが「sudoグループの全メンバーに、すべてのコマンドの実行を許可する」という意味です(%はグループを表します)。検証でも、usermod -aG sudoでグループに追加したユーザーはsudoが使え、追加していないユーザーは拒否されました。自分が使えるかどうかは、groupsコマンドでsudo(またはwheel)グループに入っているかを見れば分かります。
sudo -lで自分の権限を確認する
sudo -lを実行すると、自分がsudoで何を実行できるかが表示されます。「使えるかどうか分からない」ときの確認に便利です。
sudo -l # User sudouser may run the following commands on HOSTNAME: # (ALL : ALL) ALL # ↑「すべてのコマンドを実行できる」という意味 # 権限が無いユーザーの場合はエラーになる # → is not in the sudoers file ...
実機でも、sudoグループのユーザーでsudo -lを実行すると(ALL : ALL) ALL(すべて実行可)と表示されました。サーバーによっては「特定のコマンドだけ許可」という設定もあり(例: 再起動コマンドのみ許可)、その場合は許可されたコマンドの一覧が表示されます。共用サーバーや会社のサーバーでは、まずsudo -lで自分に何が許されているかを確認してから作業すると安全です。
visudoとsudo -u・suとの違い
関連する重要事項を3つまとめます。設定編集はvisudo、別ユーザーでの実行はsudo -u、そしてsuとの違いです。
# /etc/sudoers は直接編集せず、必ず visudo で編集する sudo visudo # ↑ 構文チェック付きで開く。文法ミスでsudoが壊れるのを防ぐ # sudo -u で「rootではなく別のユーザー」として実行 sudo -u www-data whoami # www-data ← Webサーバーのユーザーとして実行できた # su との違い: # sudo コマンド … そのコマンドだけ root で実行(推奨) # su - … root に「なりきる」(rootのパスワードが必要) # sudo su - … 自分のパスワードで root に切り替え
/etc/sudoersを直接エディタで編集してはいけません。文法ミスがあるとsudo自体が動かなくなり、権限操作が一切できなくなる恐れがあるからです。visudoは保存時に構文チェックを行い、壊れた設定の保存を防いでくれます。また、実機でsudo -u nosudouser whoamiを実行するとnosudouserが返り、rootではなく指定した別ユーザーとしてコマンドを実行できることを確認しました。Webサーバーのユーザー(www-data)としてファイルを作りたいときなどに便利です。suとの違いも押さえましょう。su -はrootに完全に「なりきる」方法で、rootのパスワードが必要かつ、抜け忘れると危険です。日常の管理作業は「必要なコマンドだけsudo」が安全で推奨されます。多くのクラウド環境(Ubuntuなど)ではrootパスワード自体が無効化されており、sudoが標準の作法になっています。
主な書き方一覧
sudoの要点をまとめます。
| 書き方 | 働き |
|---|---|
sudo コマンド |
そのコマンドをroot権限で実行 |
sudo -l |
自分がsudoで何をできるか確認 |
sudo -u ユーザー コマンド |
別ユーザーとして実行 |
sudo visudo |
sudoers設定を安全に編集 |
usermod -aG sudo ユーザー |
sudoグループに追加(要root) |
groups |
自分の所属グループを確認 |
よくある失敗
is not in the sudoers fileと言われる
sudoを使う権限がありません。管理者にsudoグループへ追加してもらいます。
グループに追加したのにsudoできない
グループの反映にはログインし直しが必要です。
sudoersを直接編集して壊す
必ずvisudoを使います。構文チェックが壊滅的な事故を防ぎます。
パスワードを何度入れても拒否される
入力するのは自分のパスワードです(rootのではありません)。それでも拒否されるなら権限の問題です。
常にsudo su -でrootのまま作業する
事故のもとです。必要なコマンドだけsudoを付けるのが安全です。
よくある質問
sudo コマンドと書くと、そのコマンドだけがroot権限で実行されます。実機でも、一般ユーザーでは読めない/etc/shadowがsudoを付けると読め、sudo whoamiがrootを返すことを確認しています。入力するパスワードは自分自身のものです。usermod -aG sudo ユーザー名でsudoグループへ追加してもらい、ログインし直すことです。「報告される」はログに記録されるという意味で、直ちに何かが起こるわけではありません。sudo -lで、自分がsudoで実行できる内容が表示されます。(ALL : ALL) ALLならすべて実行可能です。またgroupsコマンドで、sudo(RHEL系ではwheel)グループに所属しているかを確認できます。権限が無い場合はis not in the sudoers fileエラーになります。sudo コマンドは「そのコマンドだけ」をroot権限で実行し、自分のパスワードを使います。su -はrootに完全に切り替わる方法で、rootのパスワードが必要です。日常の管理作業は、必要なコマンドだけsudoを付けるほうが安全で、多くのクラウド環境ではrootパスワードが無効化されておりsudoが標準です。rootに切り替えたい場合はsudo su -という組み合わせも使われます。sudo visudoを使ってください。/etc/sudoersを直接エディタで編集すると、文法ミスでsudo自体が動かなくなる恐れがあります。visudoは保存時に構文チェックを行い、壊れた設定を防ぎます。ユーザーにsudoを許可するだけなら、ファイル編集よりもusermod -aG sudo ユーザー名でグループに追加する方法が簡単で安全です。まとめ
sudo コマンドでそのコマンドだけroot権限で実行(自分のパスワード)。is not in the sudoers fileは権限が無いという意味。sudoグループへの追加で解決。- 権限の確認は
sudo -lとgroups。 - 設定は直接編集せず
visudo。別ユーザー実行はsudo -u。 suで「なりきる」より、必要なコマンドだけsudoが安全です。
sudoは、Linuxの権限管理の入り口です。「エラーの正体は権限の欠如」「設定はvisudo」「rootになりきらず必要な分だけ」——この3点を押さえれば、chmodやchownと組み合わせて、安全にサーバーを管理できるようになります。
- grep(文字列検索)
- find(ファイル検索)
- sed(置換・行編集)
- awk(列抽出・集計)
- cut(列の切り出し)
- chmod(パーミッション)
- tar(圧縮・解凍)
- gzip・gunzip(ファイル圧縮)
- リダイレクトとパイプ
- echo・printf(文字列出力)
- ps・kill(プロセス管理)
- free・uptime(メモリ/負荷)
- top(リアルタイム監視)
- 環境変数とPATH
- which・type(コマンドの正体)
- ln(シンボリックリンク)
- cp・mv・rm(コピー/移動/削除)
- touch・mkdir(ファイル/フォルダ作成)
- basename・dirname(パス分解)
- history(コマンド履歴)
- curl(HTTP通信・API)
- wget(ダウンロード)
- ping(疎通確認)
- dig・nslookup(DNS調査)
- ss・netstat(ポート確認)
- jq(JSON処理)
- vim(基本操作・終了方法)
- cron・crontab(定期実行)
- test・[ ](条件判定)
- read(入力の読み取り)
- date(日付・時刻)
- sort・uniq・wc(並べ替え/集計)
- xargs(一括処理)
- chown・chgrp(所有者/グループ変更)
- sudo(管理者権限)
- diff(ファイル比較)
- du・df(ディスク使用量)
- head・tail(先頭/末尾・ログ監視)
- cat・less(ファイル表示)
- alias(コマンドの別名)
- nohup(SSH切断対策)
- tmux(セッション管理)
- よく使うコマンドまとめ
- cd(ディレクトリ移動)
