initial commit
This commit is contained in:
parent
cc0a7295ea
commit
6dc7279a25
5
handlers/main.yml
Normal file
5
handlers/main.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
- name: reload sshd
|
||||||
|
systemd:
|
||||||
|
name: sshd
|
||||||
|
state: reloaded
|
6
tasks/asserts.yml
Normal file
6
tasks/asserts.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
- name: assert | check vars
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- users_system is defined
|
||||||
|
- users_system|length > 0
|
15
tasks/main.yml
Normal file
15
tasks/main.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
- name: asserts
|
||||||
|
include_tasks: asserts.yml
|
||||||
|
|
||||||
|
- name: requirements
|
||||||
|
include_tasks: requirements.yml
|
||||||
|
|
||||||
|
- name: create user accounts
|
||||||
|
include_tasks: user.yml
|
||||||
|
|
||||||
|
- name: configure sudo
|
||||||
|
include_tasks: sudo.yml
|
||||||
|
|
||||||
|
- name: configure sshd
|
||||||
|
include_tasks: sshd.yml
|
5
tasks/requirements.yml
Normal file
5
tasks/requirements.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
- name: user | update APT cache
|
||||||
|
apt:
|
||||||
|
update_cache: yes
|
||||||
|
cache_valid_time: 3600
|
33
tasks/sshd.yml
Normal file
33
tasks/sshd.yml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
- name: user | disable SSH access for root
|
||||||
|
replace:
|
||||||
|
dest: /etc/ssh/sshd_config
|
||||||
|
regexp: '^PermitRootLogin (yes|without-password|prohibit-password)'
|
||||||
|
replace: "PermitRootLogin no"
|
||||||
|
validate: '/usr/sbin/sshd -T -f %s'
|
||||||
|
notify: reload shd
|
||||||
|
|
||||||
|
#- name: user | verify AllowUsers directive
|
||||||
|
# command: "grep -E '^AllowUsers' /etc/ssh/sshd_config"
|
||||||
|
# changed_when: False
|
||||||
|
# failed_when: False
|
||||||
|
# register: grep_allowusers_ssh
|
||||||
|
#
|
||||||
|
#- name: "add AllowUsers sshd directive"
|
||||||
|
# lineinfile:
|
||||||
|
# dest: /etc/ssh/sshd_config
|
||||||
|
# line: "\nAllowUsers "
|
||||||
|
# insertafter: 'Subsystem'
|
||||||
|
# validate: '/usr/sbin/sshd -T -f %s'
|
||||||
|
# register: allowusers_added
|
||||||
|
# when: grep_allowusers_ssh.rc != 0
|
||||||
|
|
||||||
|
#- name: "append username to AllowUsers sshd directive"
|
||||||
|
# replace:
|
||||||
|
# dest: /etc/ssh/sshd_config
|
||||||
|
# regexp: '^(AllowUsers(?!.*\b{{ item.key }}\b).*)$'
|
||||||
|
# replace: '\1 {{ item.key }}'
|
||||||
|
# validate: '/usr/sbin/sshd -T -f %s'
|
||||||
|
# with_dict: "{{ user.name }}"
|
||||||
|
# when: allowusers_added
|
||||||
|
# notify: "reload SSH"
|
24
tasks/sudo.yml
Normal file
24
tasks/sudo.yml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
- name: user | install dependencies for sudo
|
||||||
|
apt:
|
||||||
|
name: sudo
|
||||||
|
|
||||||
|
- name: user | ensure sudoers.d is included in config
|
||||||
|
lineinfile:
|
||||||
|
dest: /etc/sudoers
|
||||||
|
line: "#includedir /etc/sudoers.d"
|
||||||
|
state: present
|
||||||
|
validate: "/usr/sbin/visudo -cf %s"
|
||||||
|
with_items: "{{users_system.user|default([])}}"
|
||||||
|
when: item.sudo is defined
|
||||||
|
|
||||||
|
- name: user | add custom sudoers
|
||||||
|
template:
|
||||||
|
src: "{{ item.sudo.template|default('sudoers.j2') }}"
|
||||||
|
dest: "/etc/sudoers.d/{{ item.name }}"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0440
|
||||||
|
validate: "/usr/sbin/visudo -cf %s"
|
||||||
|
with_items: "{{users_system.user|default([])}}"
|
||||||
|
when: ((item.name is defined and item.name != 'root') and (item.state is undefined or (item.state is defined and item.state != 'absent')) and (item.sudo is defined and item.sudo.content is not defined))
|
60
tasks/user.yml
Normal file
60
tasks/user.yml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
- name: user | create groups
|
||||||
|
group:
|
||||||
|
name: "{{ item.group|default(item.name) }}"
|
||||||
|
system: '{{ item.system|default(omit) }}'
|
||||||
|
gid: '{{ item.gid|default(omit) }}'
|
||||||
|
state: '{{ item.state|default("present") }}'
|
||||||
|
with_flattened :
|
||||||
|
- "{{users_system.group|default([])}}"
|
||||||
|
- "{{users_system.user|default([])}}"
|
||||||
|
when : ((item.name is defined and item.name != 'root'))
|
||||||
|
|
||||||
|
- name: user | create/modify/delete
|
||||||
|
user:
|
||||||
|
name: '{{ item.name }}'
|
||||||
|
group: '{{ item.group|default(item.name) }}'
|
||||||
|
groups: "{{ item.groups| default([]) | join(',') or omit }}"
|
||||||
|
append: '{{ item.append|default("yes")}}'
|
||||||
|
shell: '{{ item.shell|default("/bin/bash") }}'
|
||||||
|
uid: '{{ item.uid|default(omit) }}'
|
||||||
|
non_unique: '{{ item.non_unique|default(omit) }}'
|
||||||
|
state: '{{ item.state|default("present") }}'
|
||||||
|
comment: '{{ item.comment|default(omit) }}'
|
||||||
|
password: '{{ item.password|default("!") }}'
|
||||||
|
update_password: '{{ item.update_password|default("on_create") }}'
|
||||||
|
system: '{{ item.system|default(omit) }}'
|
||||||
|
home: '{{ item.home|default(omit) }}'
|
||||||
|
createhome: '{{ item.createhome|default(omit) }}'
|
||||||
|
generate_ssh_key: '{{ item.generate_ssh_key|default(omit) }}'
|
||||||
|
ssh_key_file: '{{ item.ssh_key_file|default(omit) }}'
|
||||||
|
ssh_key_passphrase: '{{ item.ssh_key_passphrase|default(omit) }}'
|
||||||
|
ssh_key_type: '{{ item.ssh_key_ssh_key_type|default("rsa") }}'
|
||||||
|
ssh_key_bits: '{{ item.ssh_key_bits|default(omit) }}'
|
||||||
|
ssh_key_comment: '{{ item.ssh_key_comment|default(omit) }}'
|
||||||
|
expires: '{{ item.expires|default(omit) }}'
|
||||||
|
move_home: '{{ item.move_home|default(omit) }}'
|
||||||
|
remove : '{{ item.remove|default(omit) }}'
|
||||||
|
with_items : "{{users_system.user|default([])}}"
|
||||||
|
no_log: "{{no_log|default(true)}}"
|
||||||
|
when: ((item.name is defined and item.name != 'root') and (item.state is undefined or (item.state is defined and item.state != 'absent')))
|
||||||
|
|
||||||
|
- name: user | ensure home directory mode
|
||||||
|
file:
|
||||||
|
path: '{{ item.home|default("/home/" + item.name) }}'
|
||||||
|
state: directory
|
||||||
|
mode: '{{ item.mode }}'
|
||||||
|
loop_control:
|
||||||
|
label: '{{ item.home|default("/home/" + item.name) }}'
|
||||||
|
when:
|
||||||
|
- 'item.mode is defined'
|
||||||
|
- 'item.state|default("present") != "absent"'
|
||||||
|
with_items: "{{users_system.user|default([])}}"
|
||||||
|
|
||||||
|
- name: user | handle ssh's authorized keys
|
||||||
|
authorized_key:
|
||||||
|
user: "{{ item.name }}"
|
||||||
|
key: "{{ '\n'.join(item.authorized_keys) | string }}"
|
||||||
|
state: present
|
||||||
|
with_items : "{{users_system.user}}"
|
||||||
|
when: ((item.name is defined and item.name != 'root') and (item.state is undefined or (item.state is defined and item.state != 'absent')) and item.authorized_keys is defined)
|
30
templates/sudoers.j2
Normal file
30
templates/sudoers.j2
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# {{ ansible_managed }}
|
||||||
|
|
||||||
|
{% for k in item.sudo.defaults|default([]) -%}
|
||||||
|
Defaults{{ ":" ~ item.name }} {{ k }}
|
||||||
|
{% endfor -%}
|
||||||
|
{#### Retrocompatiblity section #################}
|
||||||
|
{% if item.sudo.user is defined and item.sudo.users is not defined -%}
|
||||||
|
{% set users = item.sudo.user -%}
|
||||||
|
{% elif item.sudo.users is defined -%}
|
||||||
|
{% set users = item.sudo.users -%}
|
||||||
|
{% endif -%}
|
||||||
|
{% if 'requiretty' not in item.sudo.defaults|default([]) and '!requiretty' not in item.sudo.defaults|default([]) -%}
|
||||||
|
{{ "Defaults:" ~ item.name ~ " requiretty" if item.sudo.requiretty is defined and item.sudo.requiretty else "" }}
|
||||||
|
{{ "Defaults:" ~ item.name ~ " !requiretty" if item.sudo.requiretty is defined and not item.sudo.requiretty else "" }}
|
||||||
|
{% endif -%}
|
||||||
|
{#### End retrocompatiblity section ############}
|
||||||
|
{% for alias in item.sudo.runas_alias|default([]) -%}
|
||||||
|
Runas_Alias {{ alias }}
|
||||||
|
{% endfor -%}
|
||||||
|
{% for alias in item.sudo.cmnd_alias|default([]) -%}
|
||||||
|
Cmnd_Alias {{ alias }}
|
||||||
|
{% endfor %}
|
||||||
|
{% for alias in item.sudo.host_alias|default([]) -%}
|
||||||
|
Host_Alias {{ alias }}
|
||||||
|
{% endfor %}
|
||||||
|
{% for alias in item.sudo.user_alias|default([]) -%}
|
||||||
|
User_Alias {{ alias }}
|
||||||
|
{% endfor %}
|
||||||
|
{{ item.name }} {{ item.sudo.hosts|default('ALL') }}={{ "(" ~ users|default('ALL') ~ ":" ~ item.sudo.groups|default('ALL') ~ ")" }} {{ "NOPASSWD:" if item.sudo.nopasswd|default(false) else "" }} {{ item.sudo.commands|default(['ALL'])|join(', ') }}
|
||||||
|
{{ item.sudo.append if item.sudo.append is defined else '' }}
|
Loading…
x
Reference in New Issue
Block a user