# -*- coding: utf-8 -*- # vim: ft=sls {## Name: users/sudo.sls Description: This file sets up sudoers #} {% from "users/map.jinja" import users_settings with context %} # Ensure availability of bash users-bashpackage-group-dir: pkg.installed: - name: {{ users_settings.bash_package }} group.present: - name: sudo - system: True file.directory: - name: {{ users_settings.sudoers_dir }} users-sudo-package: pkg.installed: - name: {{ users_settings.sudo_package }} - require: - group: users_sudo-group - file: {{ users_settings.sudoers_dir }} file.append: - name: {{ users_settings.sudoers_file }} - text: - Defaults env_reset - Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - '#includedir {{ users_settings.sudoers_dir }}' {% for name, user in users_settings.items() %} {% if user.absent is not defined or not user.absent or user != None %} {% if 'sudouser' in user and user['sudouser'] %} users-sudoer-{{ name }}: file.managed: - name: {{ users.sudoers_dir }}/{{ name }} - user: root - group: {{ users.root_group }} - mode: '0440' {% if 'sudo_rules' in user or 'sudo_defaults' in user %} {% if 'sudo_rules' in user %} {% for rule in user['sudo_rules'] %} "validate {{ name }} sudo rule {{ loop.index0 }} {{ name }} {{ rule }}": cmd.run: - name: 'visudo -cf - <<<"$rule" | { read output; if [[ $output != "stdin: parsed OK" ]] ; then echo $output ; fi }' - stateful: True - shell: {{ users.visudo_shell }} - env: # Specify the rule via an env var to avoid shell quoting issues. - rule: "{{ name }} {{ rule }}" {% endfor %} {% endif %} {% if 'sudo_defaults' in user %} {% for entry in user['sudo_defaults'] %} "validate {{ name }} sudo Defaults {{ loop.index0 }} {{ name }} {{ entry }}": cmd.run: - name: 'visudo -cf - <<<"$rule" | { read output; if [[ $output != "stdin: parsed OK" ]] ; then echo $output ; fi }' - stateful: True - shell: {{ users.visudo_shell }} - env: # Specify the rule via an env var to avoid shell quoting issues. - rule: "Defaults:{{ name }} {{ entry }}" {% endfor %} {% endif %} users_{{ users.sudoers_dir }}/{{ name }}: file.managed: - name: {{ users.sudoers_dir }}/{{ name }} - contents: | {%- if 'sudo_defaults' in user %} {%- for entry in user['sudo_defaults'] %} Defaults:{{ name }} {{ entry }} {%- endfor %} {%- endif %} {%- if 'sudo_rules' in user %} {%- for rule in user['sudo_rules'] %} {{ name }} {{ rule }} {%- endfor %} {%- endif %} {% endif %} {% else %} users_{{ users.sudoers_dir }}/{{ name }}: file.absent: - name: {{ users.sudoers_dir }}/{{ name }} {% endif %} {% endif %} {% endfor %}