Linuxにおけるsudo権限昇格の設定と管理

Linuxにおけるsudo権限昇格の設定と管理

sudo権限昇格とは

sudo(superuser do)は、システム管理者が一般ユーザーに特定のコマンドをroot権限で実行する権限を付与するためのメカニズムです。これにより、rootユーザーとして直接ログインすることなく、必要な管理タスクを実行できます。

なぜ権限昇格が必要か

Linuxシステムの運用において、rootユーザーとして常時作業することはセキュリティリスクが伴います。root権限はシステム全体を変更できるため、誤操作による深刻な問題を引き起こす可能性があります。また、rootユーザーでのリモートログインはセキュリティ上の脅威となります。sudoを使用すること、これらのリスクを低減しつつ必要な管理タスクを実行できます。

権限昇格のプロセス

  1. 管理者による権限付与(/etc/sudoersファイルの修正)
  2. 一般ユーザーによるsudo形式でのコマンド実行
  3. sudo -lコマンドで権限状況の確認

sudo権限昇格の設定方法

/etc/sudoersファイルを修正する方法には、主に2つのアプローチがあります。

権限付与方法

  • visudo: 構文チェック機能付き(デフォルトで色分け表示なし)
  • vim /etc/sudoers: 構文チェックなし(デフォルトで色分け表示あり)

権限付与の形式

基本的な権限付与形式は以下の通りです:

ユーザー名またはグループ名(%グループ名)      認証ドメインでの有効範囲      実行可能なコマンドリスト

具体的な例:

ユーザー/グループ                      ALL=(ALL)                     NOPASSWD: ALL

sudo権限昇格のテスト

権限昇格未設定時のテスト

# 権限昇格未設定のテスト
[root@web1 ~]# useradd testuser
[root@web1 ~]# echo password | passwd --stdin testuser
[root@web1 ~]# su - testuser
[testuser@web1 ~]$ useradd newuser
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
[testuser@web1 ~]$ exit
logout

権限昇格設定後のテスト

# 権限昇格のテスト
[root@web1 ~]# visudo
100 root    ALL=(ALL)       ALL
101 testuser ALL=(ALL)     NOPASSWD: ALL       # 追加

[root@web1 ~]# su - testuser
[testuser@web1 ~]$ sudo -l
...
User testuser may run the following commands on web1:
    (ALL) ALL

[testuser@web1 ~]$ sudo useradd newuser
[testuser@web1 ~]$ sudo id newuser
uid=1048(newuser) gid=1048(newuser) groups=1048(newuser)
[testuser@web1 ~]$ exit

Ansibleを使用したsudo権限昇格の設定

対象ノードでのユーザー作成とsudo権限付与

[root@ansible-controller ~]# vim sudo_user.yml
---
- name: sudoユーザーの設定
  hosts: all
  tasks:
    - name: sudoユーザーの作成
      user:
        name: ansible_user
        password: "{{ 'securepassword' | password_hash('sha512') }}"
        state: present
    
    - name: sudo権限の設定
      lineinfile:
        path: /etc/sudoers
        line: "ansible_user ALL=(ALL) NOPASSWD: ALL"
        state: present
        validate: /usr/sbin/visudo -cf %s

[root@ansible-controller ~]# ansible-playbook sudo_user.yml

Ansible設定ファイルの修正

[root@ansible-controller ~]# vim ansible.cfg
[defaults]
inventory = inventory
host_key_checking = false
remote_user = ansible_user
roles_path = ./roles

[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false

SSH接続の設定

ansible_userユーザーでパスワードなしでSSH接続できるように設定します:

[root@ansible-controller ~]# for host in web1 web2 db1; do
    ssh-copy-id ansible_user@$host
done

動作確認

[root@ansible-controller ~]# ansible all -m ping

タグ: linux sudo 権限昇格 ansible システム管理

7月14日 18:08 投稿