Linuxでsudo権限をユーザーに追加する方法|sudoers・NOPASSWDの設定と確認

Linux

Linuxサーバーで一般ユーザーから管理コマンドを実行しようとすると、sudo権限がなく実行できないことがあります。

例えば、既存のbackupユーザーにはsudo権限があるのに、新しく作成したuser01ではsudoを実行できないケースです。

まず権限を確認すると、

sudo -l -U backup

では、

ユーザー backup は次のコマンドを実行できます:
    (ALL) NOPASSWD: ALL

と表示されるのに、

sudo -l -U user01

では、

ユーザー user01 はこのホスト上で sudo を実行することを許可されていません。

と表示されます。

この場合、単純にsudoersへ設定を追加すればよい場合もありますが、最初に、

既存ユーザーのsudo権限がどこで設定されているのか

を確認することが重要です。

この記事では、Linuxでsudo権限を確認し、別のユーザーへ同じ権限を追加する方法を紹介します。


sudoとは?

sudoは、一般ユーザーが別のユーザーの権限でコマンドを実行するための仕組みです。

例えば、

sudo systemctl restart httpd

を実行すると、sudoの設定で許可されていれば、一般ユーザーから管理者権限が必要な操作を実行できます。

ただし、

一般ユーザー
     ↓
sudo
     ↓
何でもrootとして実行

と自動的になるわけではありません。

「誰が」「どのホストで」「どのユーザーとして」「どのコマンドを実行できるか」はsudoersの設定によって制御されます。


1. sudo権限を確認する

まず対象ユーザーに、どのようなsudo権限が設定されているか確認します。

rootなどsudo設定を確認できる権限で、

sudo -l -U backup

を実行します。

例えば、

(ALL) NOPASSWD: ALL

と表示された場合、backupユーザーには非常に広いsudo権限が設定されています。

別のユーザーも確認します。

sudo -l -U user01

ここで、

ユーザー user01 はこのホスト上で sudo を実行することを許可されていません。

などと表示されれば、少なくとも現在のsudo設定では対象ユーザーに利用可能なsudo権限がないことが分かります。


2. sudoersのどこに設定されているか調べる

既存ユーザーにsudo権限がある場合、いきなり新しい設定を書くよりも、

既存ユーザーはどのように設定されているのか

を調べます。

例えばbackupユーザーなら、

grep -R "backup" /etc/sudoers /etc/sudoers.d/ 2>/dev/null

を実行します。

例えば、

/etc/sudoers:backup ALL=(ALL) NOPASSWD: ALL
/etc/sudoers:Defaults:backup !requiretty

と表示されたとします。

この場合、backupユーザーの設定は、

/etc/sudoers

に直接記述されていることが分かります。


3. 「ALL=(ALL) NOPASSWD: ALL」の意味

例えば、

backup ALL=(ALL) NOPASSWD: ALL

という設定があったとします。

大まかには、

backup
  │
  ├─ ALL        → 対象ホスト
  │
  ├─ (ALL)      → 実行ユーザー
  │
  ├─ NOPASSWD   → パスワード入力不要
  │
  └─ ALL        → 実行可能コマンド

という意味です。

つまり、かなり強い権限です。

特に、

NOPASSWD: ALL

は、sudo実行時にパスワード入力なしで幅広いコマンドを実行できる設定です。

便利だからという理由だけで、すべてのユーザーへ設定するのは避けた方がよいでしょう。


4. sudoersを直接エディタで編集しない

sudo設定を変更するときに、

vi /etc/sudoers

で直接編集したくなるかもしれません。

しかし、sudoersには決められた構文があります。

記述を間違えるとsudoが正常に利用できなくなる可能性があります。

そのため、基本的には、

visudo

を使用します。

visudoには、sudoersの編集時に構文を確認する仕組みがあります。


5. 新しいユーザーへsudo権限を追加する

例えばuser01へ、既存のbackupユーザーと同じ、

(ALL) NOPASSWD: ALL

を設定するのであれば、visudoでsudoersを編集して、

user01 ALL=(ALL) NOPASSWD: ALL

を追加する方法があります。

設定後、

sudo -l -U user01

を実行します。

想定した権限が表示されるか確認します。


6. /etc/sudoers.d/へ分けて設定する方法

sudoの設定をすべて/etc/sudoersへ直接書くのではなく、

/etc/sudoers.d/

へユーザーや用途ごとの設定ファイルを作成する方法もあります。

例えば、

visudo -f /etc/sudoers.d/user01

として、

user01 ALL=(ALL) NOPASSWD: ALL

を記述します。

この方法なら、

/etc/sudoers
        │
        ├─ 基本設定
        │
        └─ #includedir /etc/sudoers.d
                         │
                         ├─ backup
                         ├─ operator
                         └─ user01

のように設定を分離できます。

複数の管理ユーザーが存在する環境では、こちらの方が設定を管理しやすい場合があります。

ただし、sudoers側で/etc/sudoers.dが読み込まれる構成になっていることを確認してください。


7. 設定ファイルのパーミッションにも注意する

/etc/sudoers.d/へファイルを作成する場合は、所有者やパーミッションにも注意します。

例えば確認するなら、

ls -l /etc/sudoers.d/

です。

sudoers関連ファイルは不用意に一般ユーザーから変更できる状態にしてはいけません。

通常はroot管理とし、必要に応じて、

chmod 440 /etc/sudoers.d/user01

など適切な権限にします。


8. 設定後に構文を確認する

sudoersの設定を確認するには、

visudo -c

を使用できます。

問題がなければ、環境によって、

/etc/sudoers: parsed OK

などと表示されます。

/etc/sudoers.d/に設定ファイルを作成した場合も、読み込まれているファイルについて確認できます。

設定を変更したら、

編集
 ↓
構文確認
 ↓
sudo権限確認
 ↓
実際のコマンドで確認

という流れにすると安全です。


9. sudo -l -Uで設定結果を確認する

設定後、

sudo -l -U user01

を実行します。

例えば、

ユーザー user01 はこのホスト上で次のコマンドを実行できます:
    (ALL) NOPASSWD: ALL

など、意図した設定が表示されればsudoersの設定が反映されていることを確認できます。

ただし、これだけで終わらず、対象ユーザーへ切り替えて実際に確認します。

例えば、

su - user01

として、

sudo id

を実行します。

正常なら、

uid=0(root) gid=0(root) groups=0(root)

など、rootとして実行されたことを確認できます。


10. NOPASSWDを付けない場合

必ずしも、

NOPASSWD: ALL

にする必要はありません。

例えば、

user01 ALL=(ALL) ALL

なら、sudo実行時に通常はユーザー自身のパスワード入力が求められます。

つまり、

user01 ALL=(ALL) ALL

と、

user01 ALL=(ALL) NOPASSWD: ALL

では意味が違います。

自動バックアップなど、

スクリプト
 ↓
sudoコマンド
 ↓
パスワード入力できない

という用途ではNOPASSWDが必要になる場合があります。

一方、管理者が手作業で利用するアカウントなら、本当にNOPASSWDが必要なのか検討します。


11. ALLではなく必要なコマンドだけ許可する

さらに安全性を高めたい場合は、

NOPASSWD: ALL

ではなく、必要なコマンドだけを許可する方法があります。

例えば、特定の管理コマンドだけ必要なら、

user01 ALL=(root) /usr/bin/systemctl restart httpd

のように制限する考え方です。

実際に指定する場合は、

command -v systemctl

などで実行ファイルのパスを確認します。

つまり、

何でもsudo可能
       ↑
       │ 権限が大きい
       │
必要なコマンドだけ

となります。

業務サーバーでは、

そのユーザーが本当に必要な権限だけを付与する

という考え方が重要です。


12. wheelグループを使う方法

Red Hat系のLinuxでは、wheelグループにsudo権限が設定されていることがあります。

例えば、

grep wheel /etc/sudoers

で、

%wheel ALL=(ALL) ALL

などが設定されている環境です。

この場合、

usermod -aG wheel user01

としてuser01をwheelグループへ追加する方法があります。

確認するには、

id user01

または、

groups user01

を使用します。

ただし、

sudoを使わせたい=必ずwheelへ追加

ではありません。

既存環境が、

個別sudoers設定

で管理されているのか、

wheelグループ

で管理されているのかを確認して、既存の運用に合わせます。


13. Debian・Ubuntu系ではsudoグループの場合もある

Linuxディストリビューションによって運用方法が異なります。

Ubuntuなどでは、

sudo

グループによってsudo権限を管理している環境があります。

例えば、

getent group sudo

で確認できます。

つまり、

RHEL / Rocky Linux系
        ↓
wheel

Ubuntu / Debian系
        ↓
sudo

という構成がよくありますが、実際のsudoers設定を確認して判断してください。


14. Defaults:user !requirettyとは?

既存ユーザーを調べたとき、

Defaults:backup !requiretty

のような設定が見つかることがあります。

これはsudo実行時のTTY要件に関係する設定です。

古いRed Hat系環境や、自動処理・バックアップスクリプトなどで見かけることがあります。

ここで注意したいのは、

backupにあるから
 ↓
user01にもコピー

と機械的に設定しないことです。

現在の環境で必要なのか、既存設定が古い運用の名残ではないかを確認します。


15. 既存ユーザーと同じ権限を付ける場合の確認方法

例えば、

backupユーザー
     ↓
sudo可能

user01
     ↓
sudo不可

という状況なら、私ならまず、

sudo -l -U backup
sudo -l -U user01

で比較します。

次に、

grep -R "backup" /etc/sudoers /etc/sudoers.d/ 2>/dev/null

を実行します。

これによって、

backupのsudo権限は
どこから来ている?
      ↓
ユーザー個別設定?
グループ?
sudoers.d?

を調べます。

原因が分かってから、新しいユーザーへ必要な設定を追加します。


16. sudoersだけでなくグループも確認する

grepでユーザー名が見つからない場合があります。

例えば、

grep -R "backup" /etc/sudoers /etc/sudoers.d/

で何も表示されなくても、sudo権限がないとは限りません。

ユーザーが、

wheel
sudo
独自の管理者グループ

に所属し、そのグループへsudo権限が与えられている可能性があります。

そのため、

id backup

も確認します。

例えば、

groups=10(wheel)

なら、wheelグループ経由で権限を取得していないか調べます。


17. sudoersの変更で特に注意すること

sudo設定はサーバーの管理権限に直結します。

特にリモートサーバーでは、

sudoers変更
    ↓
設定ミス
    ↓
sudoできない
    ↓
rootへ昇格できない

となると復旧が面倒になります。

そのため、SSHで作業する場合は、現在root権限を持っているセッションを不用意に閉じず、別セッションから新しい設定が正常に動作することを確認してから終了すると安全です。


私ならこの順番で設定する

既存ユーザーと同じsudo権限を別ユーザーへ付与する場合は、次の順番で進めます。

既存ユーザーはsudoできる
          ↓
sudo -l -U backup
          ↓
権限内容を確認
          ↓
grep /etc/sudoers
     /etc/sudoers.d/
          ↓
設定元を特定
          ↓
グループ経由ならidも確認
          ↓
本当に同じ権限が必要?
       ┌────┴────┐
      YES        NO
       ↓          ↓
同等設定       必要なコマンド
              だけ許可
       ↓
visudoで設定
       ↓
visudo -c
       ↓
sudo -l -U user01
       ↓
対象ユーザーで実行確認

この順番なら、既存設定を理解しないままsudoersへ設定を追加することを防げます。


まとめ

Linuxで新しいユーザーへsudo権限を追加したい場合、いきなり、

user01 ALL=(ALL) NOPASSWD: ALL

を追加するのではなく、まず既存ユーザーの設定を確認します。

sudo -l -U backup

で権限を確認し、

grep -R "backup" /etc/sudoers /etc/sudoers.d/ 2>/dev/null

で設定元を調査します。

ユーザー名がsudoersに存在しない場合は、

id backup

でグループ経由の権限も確認します。

設定変更には、

visudo

または、

visudo -f /etc/sudoers.d/user01

を使用し、変更後は、

visudo -c

と、

sudo -l -U user01

で確認します。

そして最も重要なのは、

既存ユーザーがNOPASSWD: ALLだから、新しいユーザーにも同じ設定をコピーする

と単純に考えないことです。

そのユーザーが必要とする作業を確認し、可能であれば必要なコマンドだけsudoで許可する方が安全です。

コメント

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