1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
|
#
# Add users expected by tests. Assumes passwordless sudo to root.
#
# WARNING: this creates non-privilged accounts with pre-set passwords!
#
- name: Mitogen test users and groups
hosts: all
gather_facts: true
strategy: mitogen_free
become: true
vars:
distro: "{{ansible_distribution}}"
special_users:
- name: mitogen__has_sudo
- name: mitogen__has_sudo_nopw
- name: mitogen__has_sudo_pubkey
- name: mitogen__pw_required
- name: mitogen__readonly_homedir
- name: mitogen__require_tty
- name: mitogen__require_tty_pw_required
- name: mitogen__permdenied
- name: mitogen__slow_user
- name: mitogen__webapp
- name: mitogen__sudo1
- name: mitogen__sudo2
- name: mitogen__sudo3
- name: mitogen__sudo4
user_groups:
mitogen__has_sudo: ['mitogen__group', '{{ sudo_group[distro] }}']
mitogen__has_sudo_pubkey: ['mitogen__group', '{{ sudo_group[distro] }}']
mitogen__has_sudo_nopw: ['mitogen__group', 'mitogen__sudo_nopw']
mitogen__sudo1: ['mitogen__group', 'mitogen__sudo_nopw']
mitogen__sudo2: ['mitogen__group', '{{ sudo_group[distro] }}']
mitogen__sudo3: ['mitogen__group', '{{ sudo_group[distro] }}']
mitogen__sudo4: ['mitogen__group', '{{ sudo_group[distro] }}']
normal_users:
- name: mitogen__user1
- name: mitogen__user2
- name: mitogen__user3
- name: mitogen__user4
- name: mitogen__user5
all_users: "{{
special_users +
normal_users
}}"
mitogen_test_groups:
- name: mitogen__group
- name: mitogen__sudo_nopw
user_policies_max_failed_logins: 1000
user_policies_users: "{{ all_users }}"
pre_tasks:
- name: Disable non-localhost SSH for Mitogen users
when: false
blockinfile:
path: /etc/ssh/sshd_config
block: |
Match User mitogen__* Address !127.0.0.1
DenyUsers *
- name: Create Mitogen test groups
group:
name: "{{ item.name }}"
with_items: "{{ mitogen_test_groups }}"
- name: Create user accounts
vars:
password: "{{ item.name | replace('mitogen__', '') }}_password"
block:
- user:
name: "{{ item.name }}"
shell: /bin/bash
groups: "{{ user_groups[item.name] | default(['mitogen__group']) }}"
password: "{{ password | password_hash('sha256') }}"
with_items: "{{all_users}}"
when: ansible_system != 'Darwin'
- user:
name: "{{ item.name }}"
shell: /bin/bash
group: staff
groups: |
{{
['com.apple.access_ssh'] +
(user_groups[item.name] | default(['mitogen__group']))
}}
hidden: true
password: "{{ password }}"
with_items: "{{all_users}}"
when: ansible_system == 'Darwin'
- name: Check if AccountsService is used
stat:
path: /var/lib/AccountsService/users
register: out
- name: Hide users from login window (Linux).
when: ansible_system == 'Linux' and out.stat.exists
with_items: "{{all_users}}"
copy:
dest: /var/lib/AccountsService/users/{{ item.name }}
mode: u=rw,go=
content: |
[User]
SystemAccount=true
- name: Restart AccountsService (Linux).
when: ansible_system == 'Linux' and out.stat.exists
service:
name: accounts-daemon
state: restarted
- name: Readonly homedir for one account
file:
path: ~mitogen__readonly_homedir
owner: root
recurse: true
state: directory
- name: Slow bash profile for one account
copy:
dest: ~mitogen__slow_user/.{{item}}
src: ../data/docker/mitogen__slow_user.profile
owner: mitogen__slow_user
group: mitogen__group
mode: u=rw,go=r
with_items:
- bashrc
- profile
- name: "Login throws permission denied errors (issue #271)"
copy:
dest: ~mitogen__permdenied/.{{item}}
src: ../data/docker/mitogen__permdenied.profile
owner: mitogen__permdenied
group: mitogen__group
mode: u=rw,go=r
with_items:
- bashrc
- profile
- name: Install pubkey for mitogen__has_sudo_pubkey
block:
- file:
path: ~mitogen__has_sudo_pubkey/.ssh
state: directory
mode: go=
owner: mitogen__has_sudo_pubkey
group: mitogen__group
- copy:
dest: ~mitogen__has_sudo_pubkey/.ssh/authorized_keys
src: ../data/docker/mitogen__has_sudo_pubkey.key.pub
mode: go=
owner: mitogen__has_sudo_pubkey
group: mitogen__group
- name: Configure sudoers
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
mode: ug=r,o=
validate: '/usr/sbin/visudo -cf %s'
with_items:
- {src: sudoers_defaults, dest: /etc/sudoers.d/mitogen_test_defaults}
- name: Configure sudoers users
blockinfile:
path: /etc/sudoers
marker: "# {mark} Mitogen test users"
block: |
# User Host(s) = (runas user:runas group) Command(s)
{{ lookup('pipe', 'whoami') }} ALL = (mitogen__pw_required:ALL) ALL
{{ lookup('pipe', 'whoami') }} ALL = (mitogen__require_tty_pw_required:ALL) ALL
{{ lookup('pipe', 'whoami') }} ALL = (mitogen__require_tty:ALL) NOPASSWD:ALL
{{ lookup('pipe', 'whoami') }} ALL = (mitogen__readonly_homedir:ALL) NOPASSWD:ALL
{% for runas_user in normal_users %}
{{ lookup('pipe', 'whoami') }} ALL = ({{ runas_user.name }}:ALL) NOPASSWD:ALL
{% endfor %}
validate: '/usr/sbin/visudo -cf %s'
when:
- ansible_connection == "local"
roles:
- role: user_policies
|