ahuffman.sudoers

Ansibleロール

ahuffman.sudoers

デフォルトの/etc/sudoersファイルおよび含まれるファイル/ディレクトリの設定を管理します。


注意してください。リリース2.0.0以上はロールの大幅な書き直しです。以前のバージョンからのインストールおよび使用の前に、変更内容を理解するためにドキュメントをお読みください。


目次

  1. 目次
  2. ヒント
  3. ロール変数
  4. sudoers_files辞書フィールド
    1. sudoers_files.aliases辞書フィールド
    2. user_specifications辞書フィールド
  5. 既存の設定からsudoersファイルデータを自動生成
  6. 例プレイブック
  7. ライセンス
  8. 著者情報

ヒント

ヒント: sudoers設定に関するいくつかの優れたリソースです:
ここから始める - 基本的なsudoersファイル設定と用語についての素晴らしい解説があります。
Sudoersマニュアル - 詳細を知りたい方はこちらをご覧ください。

ロール変数

このロールに対して定義されているデフォルトは、RHEL7.6のデフォルト/etc/sudoers設定に基づいています。実行前にdefaults/main.ymlでデフォルトを確認してください。

変数名 説明 デフォルト値 変数タイプ
sudoers_rewrite_default_sudoers_file デフォルトまたはユーザー定義のsudoers_files定義を使用して、配布供給の/etc/sudoersファイルを置き換えます。新しい設定ファイルをinclude_directoriesにデプロイする際、/etc/sudoersファイルを変更したくない場合に便利です。 True boolean
sudoers_remove_unauthorized_included_files 非常に危険! sudoers_filesで定義されていないinclude_directories辞書内の各既存のsudoerファイルが削除されます。これは望ましい状態を強制するために使用されます。 False boolean
sudoers_backup 既存の/etc/sudoersファイルとsudoers_filesで定義されたファイルの現在の状態のバックアップを作成するかどうか。バックアップはAnsible制御ノード(Ansibleを実行しているサーバ)に保存され、include_directoriesに残されたファイルを誤って評価されないようにします。 True boolean
sudoers_backup_path プレイブックを実行している場所からの相対パスで、リモートコピーのsudoers_filesをバックアップします。 "sudoers_backups" string
sudoers_backup_become ローカルsudoersバックアップディレクトリおよびsudoersファイルバックアップを作成する際にsudoを使用するかどうか。 True boolean
sudoers_visudo_path sudoers設定変更の検証に必要なvisudoバイナリの完全修飾パス。オペレーティングシステムの互換性のために追加されました。 "/usr/sbin/visudo" string
sudoers_files すべてのsudoers設定の定義 defaults/main.ymlを参照 辞書のリスト

sudoers_files 辞書フィールド

変数名 説明 変数タイプ
path 設定ファイルをファイルシステム上にデプロイする場所。 string
aliases オプショナルなcmnd_aliashost_aliasrunas_alias、またはuser_aliasアイテムの定義。 dictionary
defaults sudoers設定のデフォルトを定義することを可能にします。デフォルトの上書きは、user_specificationsキーを使用して実行できます。 list
include_files 設定に含めたい特定のファイル。sudoers設定の#includeオプションを経由して含める完全修飾パスのリストです。 list
include_directories 設定に含めたい特定のディレクトリ。sudoers設定の#includedirオプションを経由して含める完全修飾パスのリストです。 list
user_specifications sudoersファイル設定に適用するユーザー指定とデフォルトの上書きのリスト。 list

sudoers_files.aliases 辞書フィールド

変数名 説明 変数タイプ
cmnd_alias コマンドエイリアスの定義リスト。 辞書のリスト
host_alias ホストエイリアスの定義リスト 辞書のリスト
runas_alias runasエイリアスの定義リスト 辞書のリスト
user_alias ユーザーエイリアスの定義リスト 辞書のリスト

user_specifications 辞書フィールド

この辞書は、ユーザー指定またはデフォルトの上書きを割り当てるために使用できます。

標準user_specifications

変数名 説明 変数タイプ
users 指定を適用するユーザーのリスト。ユーザー名とともにuser_alias名を使用できます。 list
hosts 指定を適用するホストのリスト。定義されたhost_alias名やホスト名を使用できます。 list
operators 指定を適用するオペレーターのリスト。定義されたrunas_alias名やユーザー名を使用できます。 list
tags 指定に適用するオプショナルなタグのリスト。 list
commands 指定を適用するコマンドのリスト。定義されたcmnd_alias名やコマンドを使用できます。 list

既存の設定からsudoersファイルデータを自動生成

ドキュメントからの設定が非常に複雑だと感じますか? ahuffman.scan_sudoersを試して、適切なデータ構造を自動生成するロールを見つけてください。 ahuffman.scan_sudoersロールを使用すると、実行中の設定を1つのプレイで収集し、別のホストに配置できます。また、収集したデータをCMDBやリポジトリなどの真実の源にプッシュすることもできます。

この方法で、手動でsudoers設定をコードとして定義する際の複雑さを軽減でき、より早く動作を開始できます。

例プレイブック

RHEL7.6 デフォルト sudoers 設定

- name: "RHEL7.6 デフォルト /etc/sudoers 設定を適用"
  hosts: "all"
  roles:
    - role: "ahuffman.sudoers"

...または最新の構文を使用して:

- name: "RHEL7.6 デフォルト /etc/sudoers 設定を適用"
  hosts: "all"
  tasks:
    - name: "Configure /etc/sudoers"
      include_role:
        name: "ahuffman.sudoers"

sudoers ファイルの結果

上記の2つの例は、ロールのデフォルトを使用して、次のような/etc/sudoers設定ファイルを生成します:

# Ansible管理

# デフォルトの仕様
Defaults    !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR"
Defaults    env_keep += "LS_COLORS MAIL PS1 PS2 QTDIR"
Defaults    env_keep += "USERNAME LANG LC_ADDRESS LC_CTYPE LC_COLLATE"
Defaults    env_keep += "LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME"
Defaults    env_keep += "LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL"
Defaults    env_keep += "LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

# ユーザー仕様
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL

# 含まれるフォルダ
## 含まれるディレクトリ
#includedir /etc/sudoers.d

sudoers 設定 (複数ファイル)

- name: "複数ファイルのsudoers設定を適用"
  hosts: "all"
  tasks:
    - name: "Configure /etc/sudoers および含まれるファイル"
      include_role:
        name: "ahuffman.sudoers"
      vars:
        sudoers_rewrite_default_sudoers_file: True
        sudoers_remove_unauthorized_included_files: True
        sudoers_backup: True
        sudoers_backup_path: "sudoers-backups"
        sudoers_files:
          - path: "/etc/sudoers"
            defaults:
              - "!visiblepw"
              - "always_set_home"
              - "match_group_by_gid"
              - "always_query_group_plugin"
              - "env_reset"
              - secure_path:
                  - "/sbin"
                  - "/bin"
                  - "/usr/sbin"
                  - "/usr/bin"
              - env_keep:
                  - "COLORS"
                  - "DISPLAY"
                  - "HOSTNAME"
                  - "HISTSIZE"
                  - "KDEDIR"
                  - "LS_COLORS"
                  - "MAIL"
                  - "PS1"
                  - "PS2"
                  - "QTDIR"
                  - "USERNAME"
                  - "LANG"
                  - "LC_ADDRESS"
                  - "LC_CTYPE"
                  - "LC_COLLATE"
                  - "LC_IDENTIFICATION"
                  - "LC_MEASUREMENT"
                  - "LC_MESSAGES"
                  - "LC_MONETARY"
                  - "LC_NAME"
                  - "LC_NUMERIC"
                  - "LC_PAPER"
                  - "LC_TELEPHONE"
                  - "LC_TIME"
                  - "LC_ALL"
                  - "LANGUAGE"
                  - "LINGUAS"
                  - "_XKB_CHARSET"
                  - "XAUTHORITY"
            user_specifications:
              - users:
                  - "root"
                hosts:
                  - "ALL"
                operators:
                  - "ALL"
                commands:
                  - "ALL"
              - users:
                  - "%wheel"
                hosts:
                  - "ALL"
                operators:
                  - "ALL"
                commands:
                  - "ALL"
            include_directories:
              - "/etc/sudoers.d"
            aliases:
              cmnd_alias:
                - name: "PING"
                  commands:
                    - "/bin/ping"
              user_alias:
                - name: "PINGERS"
                  users:
                    - "ahuffman"
          - path: "/etc/sudoers.d/pingers"
            user_specifications:
              - type: "user"
                defaults:
                  - "!requiretty"
                users:
                  - "PINGERS"
          - path: "/etc/sudoers.d/root"
            defaults:
              - "syslog=auth"
            user_specifications:
              - type: "runas"
                defaults:
                  - "!set_logname"
                operators:
                  - "root"

この例により、以下のような設定ファイルが生成されます:

結果: /etc/sudoers

# Ansible管理

# デフォルトの仕様
Defaults    !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR"
Defaults    env_keep += "LS_COLORS MAIL PS1 PS2 QTDIR"
Defaults    env_keep += "USERNAME LANG LC_ADDRESS LC_CTYPE LC_COLLATE"
Defaults    env_keep += "LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME"
Defaults    env_keep += "LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL"
Defaults    env_keep += "LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

# エイリアス仕様
## コマンドエイリアス
Cmnd_Alias    PING = /bin/ping

## ユーザーエイリアス
User_Alias    PINGERS = ahuffman

# ユーザー仕様
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL

# 含まれるフォルダ
## 含まれるディレクトリ
#includedir /etc/sudoers.d

結果: /etc/sudoers.d/pingers

# Ansible管理

# デフォルトの上書き仕様
Defaults:PINGERS !requiretty

結果: /etc/sudoers.d/root

# Ansible管理

# デフォルトの仕様
Defaults    syslog=auth

# デフォルトの上書き仕様
Defaults>root !set_logname

実行中のsudoers設定を別のホストに移行する

---
- name: "既存のsudoers事実を収集"
  hosts: "source-host"
  tasks:
    - name: "実行中のsudoers設定を収集"
      include_role:
        name: "ahuffman.scan_sudoers"

    - name: "収集したsudoers事実を設定"
      set_fact:
        sudoers_files: "{{ ansible_facts['sudoers'].sudoers_files }}"

    - name: "収集したsudoers設定の事実を表示"
      debug:
        var: "sudoers_files"
        verbosity: "1"

- name: "ターゲットに実行中の構成をデプロイ"
  hosts: "destination-host"
  tasks:
    - include_role:
        name: "ahuffman.sudoers"
      vars:
        sudoers_remove_unauthorized_included_files: True

上記の例は、既知の設定を構造化データに変換して将来の自動化を推進するための方法を提供します。また、新しいホストに収集された構成を直接プロビジョニングする代わりに、データをCMDBやリポジトリにプッシュし、真実の源として将来使用することもできます。

ライセンス

MIT

著者情報

Andrew J. Huffman
Tyler Cross

プロジェクトについて

Controls the configuration of the default /etc/sudoers file and included files/directories

インストール
ansible-galaxy install ahuffman.sudoers
ライセンス
mit
ダウンロード
34.8k