Turgon37.sudoers

Ansible 角色 Sudo/Sudoers

构建状态 许可证 Ansible 角色

描述

:grey_exclamation: 在使用此角色之前,请了解我所有的 Ansible 角色都是完全根据我的 IT 基础设施编写和调整的。因此,即使它们尽可能通用,也不一定能满足您的需求。我建议您仔细分析它们的功能,并评估它们是否能够安全地安装在您的服务器上。

此角色用于配置 sudo。

要求

需要 Ansible >= 2.4。

依赖关系

操作系统系列

此角色适用于 Debian 和 CentOS。

特性

目前此角色可以用于:

  • 安装 sudo
  • 配置默认值和命令规则
  • 提供伪 "类型" 以允许其他角色包含 sudo 规则
  • 本地事实

配置

角色

所有可以被覆盖的变量存储在 defaults/main.yml 文件中,以下表格也包含这些变量。请参阅该文件以查看默认值。

名称 类型/值 描述
sudoers__sss 布尔值 安装使用 sss 后端所需的包
sudoers__defaults_(global/group/host) 字典/字符串列表 在角色级别声明 sudoers 的默认设置
sudoers__purge 布尔值 如果为真,则所有未由此角色直接处理的 sudo 规则将被删除
sudoers__ansible_managed_key 字符串 用于标识哪些 sudo 规则由 ansible 管理的字符串
sudoers__rules_(global/group/host) 规则的字典(见下) 在角色级别应用的 sudoers 规则

Sudo 规则

此角色提供一个伪 "类型",您可以从另一个角色中使用该类型。这允许另一个角色声明一组超出该 sudoers 角色范围的 sudo 规则,并在 playbook 中应用后生效。

要使用它,只需声明任务,如下所示:

- name: 为 ROLE 配置 sudoers 规则
  include_role:
    name: sudoers
    tasks_from: types/sudo_rule
  vars:
    sudoers__sudo_rule: {}

整个规则配置项必须放在 sudoers__sudo_rule 变量下。

名称 类型/值 描述
name 字符串 规则文件的名称(不得包含空格)
state 枚举 absent/present 规则的状态,如果需要则移除
defaults 默认值列表(见下) 在此规则中应用的 sudoers 'defaults' 指令列表。请注意,这些将在整个 sudo 运行时配置中有效,而不仅仅在此规则中
users 字符串列表 此规则将应用于的用户列表
hosts 字符串列表 此规则应用的主机的可选列表,默认为 ALL
commands 命令列表(见下) 命令定义的列表
comment 字符串 文件中包含的可选注释
"defaults" 指令

因为 sudo "defaults" 指令可以接受可选值,ansible 支持每个 defaults 指令的两种形式:

Defaults   always_set_home
Defaults   listpw = always
  • 一个简单的字符串
  • 一个映射

字符串版本使用起来最简单,因为该字符串将直接放在 sudo 关键字 Defaults 之后。

映射版允许更细致的设置。首先,要注意 sudo Defaults 指令支持主机、用户、命令和 runas 过滤。但您只能为一个默认指令选择一个过滤条件。因此,如果您设置了多个过滤键,此 ansible 角色将使用前面的键顺序作为优先顺序。

如果指令需要值,您必须将指令名称设为映射的键,并将其值与该键的值关联。
否则,如果指令只需要它的名称(例如 requiretty),您必须(这是一个限制)将静态词 "defaults" 作为键,指令名称作为值。

例如,要将 "requiretty" 应用到 user1 用户,请设置以下变量:

sudoers__sudo_rule:
  name: rule1
  defaults:
    - defaults: requiretty
      user: user1

要应用 "listpw",请设置:

sudoers__sudo_rule:
  name: rule1
  defaults:
    - listpw: always
      user: user1

总结一下,以下字典键可在 defaults 规范中使用:

名称 用法
defaults: NAME 对于无值指令
NAME: VALUE 对于有值指令
host: HOST 用于限制 Defaults 影响指定主机
user: USER 用于限制 Defaults 影响指定用户
command: COMMAND 用于限制 Defaults 影响指定命令
runas: RUNAS_USER 用于限制 Defaults 影响指定的 runas 用户
"commands" 指令

在 commands 键下的每个命令允许用户以有或没有限制的方式运行系统命令。

命令块允许以下键

名称 类型/值 用法
commands: 字符串或字符串列表 命令模式,参见 man 5 sudoers 了解语法规范
run_as_user: 字符串或字符串列表 这些命令(上一行)仅能由这些用户运行
run_as_group: 字符串或字符串列表 这些命令(上一行)仅能由这些组运行
tags 字符串或字符串列表 应用在该命令上的标签或标签列表

例如,允许用户 "user1" 作为 root 用户在任何地方运行 ls,而不需要输入密码:

sudoers__sudo_rule:
  name: rule1
  commands:
   - commands: /bin/ls
     run_as_user: user1
     run_as_group: root
     tags: NOPASSWD

事实

默认情况下,已安装本地事实并公开以下变量:

  • ansible_local.sudoers.version_full
  • ansible_local.sudoers.version_major

示例

Playbook

在 playbook 中使用如下:

- hosts: all
  roles:
    - turgon37.sudoers

清单

  • 声明默认设置
sudoers__defaults_global:
  - always_set_home
  - insults
  - listpw: always
  - mailsub: "[PRODUCTION][%h][SUDO SECURITY]"
  - mailto: [email protected]
  - mail_no_user
  - mail_no_perms
  - mail_no_host
  - mail_badpass
  - passprompt_override
  - pwfeedback
  - secure_path: /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
  - '!visiblepw'
  • 与 sssd 一起使用
# 需要 sudo 从 LDAP 检索规则
sudoers__sss: true
  • 从另一个角色声明 sudo 规则
- name: 为 ROLE 配置 sudoers 规则
  include_role:
    name: sudoers
    tasks_from: types/sudo_rule
  vars:
    sudoers__sudo_rule:
      name: role__autogenerated_rule_10
      remove_using_regexp:
        - role__autogenerated_rule_0[0-9]+
      force_remove_using_regexp: true
      users: '{{ role__user }}'
      hosts: ALL
      comment: 为角色自动生成的规则
      commands:
        - commands: /bin/ls
          run_as_user: '{{ role__another_user }}'
          run_as_group: root
          tags: NOPASSWD
        - commands: /bin/cat /home/[a-zA-Z]*/.ssh/config
          run_as_user: ALL
          run_as_group: root
      defaults:
        - defaults: '!requiretty'
          user: '{{ role__user }}'
      state: present
关于项目

This role configure sudoers file

安装
ansible-galaxy install Turgon37.sudoers
许可证
mit
下载
4.8k
拥有者
Ingénieur, Informaticien, curieux de nouvelles technologies. Passionné par le libre et l'esprit de communauté