diff --git a/pillar.example b/pillar.example new file mode 100644 index 0000000..89c5389 --- /dev/null +++ b/pillar.example @@ -0,0 +1,28 @@ +sudoers: + users: + johndoe: 'ALL=(ALL) ALL' + groups: + sudo: 'ALL=(ALL) NOPASSWD: ALL' + defaults: + - env_reset + - mail_badpass + - secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + aliases: + hosts: + WEBSERVERS: + - www1 + - www2 + - www3 + users: + ADMINS: + - millert + - dowdy + - mikef + commands: + PROCESSES: + - /usr/bin/nice + - /bin/kill + - /usr/bin/renice + - /usr/bin/pkill + - /usr/bin/top + includedir: /etc/sudoers.d diff --git a/sudoers/files/sudoers b/sudoers/files/sudoers new file mode 100644 index 0000000..d6aa716 --- /dev/null +++ b/sudoers/files/sudoers @@ -0,0 +1,52 @@ +{% set sudoers = pillar.get('sudoers', {}) %} +{%- set defaults = sudoers.get('defaults', []) %} +{%- set aliases = sudoers.get('aliases', {}) %} +{%- set host_aliases = aliases.get('hosts', {}) %} +{%- set user_aliases = aliases.get('users', {}) %} +{%- set command_aliases = aliases.get('commands', {}) %} +{%- set runas_aliases = aliases.get('runas', {}) %} +{%- set users = sudoers.get('users', {}) %} +{%- set groups = sudoers.get('groups', {}) %} +{%- set includedir = sudoers.get('includedir', None) -%} +# +# This file is managed by salt +# + +{% for default in defaults -%} +Defaults {{ default }} +{% endfor %} +# Host alias specification +{%- for name,hosts in host_aliases.items() %} +Host_Alias {{ name }} = {{ ",".join(hosts) }} +{%- endfor %} + +# User alias specification +{%- for name,users in user_aliases.items() %} +User_Alias {{ name }} = {{ ",".join(users) }} +{%- endfor %} + +# Cmnd alias specification +{%- for name,commands in command_aliases.items() %} +Cmnd_Alias {{ name }} = {{ ",".join(commands) }} +{%- endfor %} + +# Runas alias specification +{%- for name,runas in runas_aliases.items() %} +Runas_Alias {{ name }} = {{ ",".join(runas) }} +{%- endfor %} + +# User privilege specification +{%- for user,spec in users.items() %} +{{ user }} {{ spec }} +{%- endfor %} + +# Group privilege specification +{%- for group,spec in groups.items() %} +%{{ group }} {{ spec }} +{%- endfor %} + +{% if includedir %} +includedir {{ includedir }} +{% else %} +#includedir /etc/sudoers.d +{% endif %} diff --git a/sudoers/init.sls b/sudoers/init.sls new file mode 100644 index 0000000..09f10e3 --- /dev/null +++ b/sudoers/init.sls @@ -0,0 +1,15 @@ +{% from "sudoers/package-map.jinja" import pkgs with context %} + +sudo: + pkg.installed: + - name: {{ pkgs.sudo }} + +/etc/sudoers: + file.managed: + - user: root + - group: root + - mode: 440 + - template: jinja + - source: salt://sudoers/files/sudoers + - require: + - pkg: sudo diff --git a/sudoers/package-map.jinja b/sudoers/package-map.jinja new file mode 100644 index 0000000..121de81 --- /dev/null +++ b/sudoers/package-map.jinja @@ -0,0 +1,14 @@ +{% set package_table = { + 'Debian': {'sudo': 'sudo'}, + 'Ubuntu': {'sudo': 'sudo'}, + 'CentOS': {'sudo': 'sudo'}, + 'Fedora': {'sudo': 'sudo'}, + 'RedHat': {'sudo': 'sudo'}, + 'Gentoo': {'sudo': 'app-admin/sudo'} +} %} + +{% if 'package_table' in pillar %} + {% set pkgs = pillar['package_table'] %} +{% elif grains['os'] in package_table %} + {% set pkgs = package_table[grains['os']] %} +{% endif %}