ahuffman.sudoers
ahuffman.sudoers
デフォルトの/etc/sudoers
ファイルおよび含まれるファイル/ディレクトリの設定を管理します。
注意してください。リリース2.0.0以上はロールの大幅な書き直しです。以前のバージョンからのインストールおよび使用の前に、変更内容を理解するためにドキュメントをお読みください。
目次
ヒント
ヒント: 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_alias 、host_alias 、runas_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やリポジトリにプッシュし、真実の源として将来使用することもできます。