【Linux】sudoの使い方|is not in the sudoers fileの対処・権限の確認・suとの違い

【Linux】sudoの使い方|is not in the sudoers fileの対処・権限の確認・suとの違い Linux

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のパスワードではありません)。

sudo の基本
# 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を付けると読めました。そしてwhoamisudouser(自分)を返すのに、sudo whoamirootを返すことも確認しました。つまりsudoは、「そのコマンドの間だけ、rootとして振る舞う」仕組みです。一度パスワードを入力すると、しばらくの間(既定で数分〜15分程度)は再入力なしでsudoを続けられます。

【有名エラー】is not in the sudoers file

sudoで最も有名なのがこのエラーです。許可されていないユーザーがsudoを実行すると、パスワードを正しく入れても拒否されます。

sudoersに居ないユーザーのエラー(実証)
# sudo の許可が無いユーザーで実行すると…
sudo whoami
# [sudo] password for nosudouser:
# nosudouser is not in the sudoers file.  This incident will be reported.
#   ↑「sudoersファイルに載っていません。この件は報告されます」

# パスワードが合っていても、権限そのものが無いので拒否される
「This incident will be reported」の意味と対処(実証)

実機で、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グループ)に所属しているか」が基準です。

sudoersの仕組み
# /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 で権限確認
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との違いです。

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 に切り替え
sudoersはvisudoで編集・sudo -uで別ユーザー実行(実証)

/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を付けるのが安全です。

よくある質問

Qsudoとは何ですか?
A一般ユーザーが、管理者(root)権限の必要な操作を一時的に実行するためのコマンドです。sudo コマンドと書くと、そのコマンドだけがroot権限で実行されます。実機でも、一般ユーザーでは読めない/etc/shadowがsudoを付けると読め、sudo whoamiがrootを返すことを確認しています。入力するパスワードは自分自身のものです。
Q「is not in the sudoers file. This incident will be reported.」と出ます。
Aあなたのユーザーにsudoを使う権限が無いという意味です(パスワードの間違いではありません)。実機でも、sudoグループに入っていないユーザーはこのエラーで拒否されることを確認しています。対処は、root権限を持つ管理者にusermod -aG sudo ユーザー名でsudoグループへ追加してもらい、ログインし直すことです。「報告される」はログに記録されるという意味で、直ちに何かが起こるわけではありません。
Q自分がsudoを使えるか確認するには?
Asudo -lで、自分がsudoで実行できる内容が表示されます。(ALL : ALL) ALLならすべて実行可能です。またgroupsコマンドで、sudo(RHEL系ではwheel)グループに所属しているかを確認できます。権限が無い場合はis not in the sudoers fileエラーになります。
Qsudoとsuの違いは何ですか?
Asudo コマンドは「そのコマンドだけ」をroot権限で実行し、自分のパスワードを使います。su -はrootに完全に切り替わる方法で、rootのパスワードが必要です。日常の管理作業は、必要なコマンドだけsudoを付けるほうが安全で、多くのクラウド環境ではrootパスワードが無効化されておりsudoが標準です。rootに切り替えたい場合はsudo su -という組み合わせも使われます。
Qsudoersファイルを編集するには?
A必ずsudo visudoを使ってください。/etc/sudoersを直接エディタで編集すると、文法ミスでsudo自体が動かなくなる恐れがあります。visudoは保存時に構文チェックを行い、壊れた設定を防ぎます。ユーザーにsudoを許可するだけなら、ファイル編集よりもusermod -aG sudo ユーザー名でグループに追加する方法が簡単で安全です。

まとめ

  • sudo コマンドそのコマンドだけroot権限で実行(自分のパスワード)。
  • is not in the sudoers fileは権限が無いという意味。sudoグループへの追加で解決。
  • 権限の確認はsudo -lgroups
  • 設定は直接編集せずvisudo。別ユーザー実行はsudo -u
  • suで「なりきる」より、必要なコマンドだけsudoが安全です。

sudoは、Linuxの権限管理の入り口です。「エラーの正体は権限の欠如」「設定はvisudo」「rootになりきらず必要な分だけ」——この3点を押さえれば、chmodchownと組み合わせて、安全にサーバーを管理できるようになります。