Saltstack Official Users Formula
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
vor 11 Jahren
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. # vim: sts=2 ts=2 sw=2 et ai
  2. {% from "users/map.jinja" import users with context %}
  3. {% set used_sudo = False %}
  4. {% for name, user in pillar.get('users', {}).items() if user.absent is not defined or not user.absent %}
  5. {%- if user == None -%}
  6. {%- set user = {} -%}
  7. {%- endif -%}
  8. {%- set home = user.get('home', "/home/%s" % name) -%}
  9. {%- if 'prime_group' in user and 'name' in user['prime_group'] %}
  10. {%- set user_group = user.prime_group.name -%}
  11. {%- else -%}
  12. {%- set user_group = name -%}
  13. {%- endif %}
  14. {% for group in user.get('groups', []) %}
  15. {{ name }}_{{ group }}_group:
  16. group:
  17. - name: {{ group }}
  18. - present
  19. {% endfor %}
  20. {{ name }}_user:
  21. file.directory:
  22. - name: {{ home }}
  23. - user: {{ name }}
  24. - group: {{ user_group }}
  25. - mode: {{ user.get('user_dir_mode', '0750') }}
  26. - require:
  27. - user: {{ name }}
  28. - group: {{ user_group }}
  29. group.present:
  30. - name: {{ user_group }}
  31. {%- if 'prime_group' in user and 'gid' in user['prime_group'] %}
  32. - gid: {{ user['prime_group']['gid'] }}
  33. {%- elif 'uid' in user %}
  34. - gid: {{ user['uid'] }}
  35. {%- endif %}
  36. user.present:
  37. - name: {{ name }}
  38. - home: {{ home }}
  39. - shell: {{ users.get('visudo_shell', '/bin/bash') }}
  40. {% if 'uid' in user -%}
  41. - uid: {{ user['uid'] }}
  42. {% endif -%}
  43. {% if 'password' in user -%}
  44. - password: {{ user['password'] }}
  45. {% endif -%}
  46. {% if 'prime_group' in user and 'gid' in user['prime_group'] -%}
  47. - gid: {{ user['prime_group']['gid'] }}
  48. {% else -%}
  49. - gid_from_name: True
  50. {% endif -%}
  51. {% if 'fullname' in user %}
  52. - fullname: {{ user['fullname'] }}
  53. {% endif -%}
  54. {% if not user.get('createhome', True) %}
  55. - createhome: False
  56. {% endif %}
  57. - groups:
  58. - {{ user_group }}
  59. {% for group in user.get('groups', []) -%}
  60. - {{ group }}
  61. {% endfor %}
  62. - require:
  63. - group: {{ user_group }}
  64. {% for group in user.get('groups', []) -%}
  65. - group: {{ group }}
  66. {% endfor %}
  67. user_keydir_{{ name }}:
  68. file.directory:
  69. - name: {{ user.get('home', '/home/{0}'.format(name)) }}/.ssh
  70. - user: {{ name }}
  71. - group: {{ user_group }}
  72. - makedirs: True
  73. - mode: 700
  74. - require:
  75. - user: {{ name }}
  76. - group: {{ user_group }}
  77. {%- for group in user.get('groups', []) %}
  78. - group: {{ group }}
  79. {%- endfor %}
  80. {% if 'ssh_keys' in user %}
  81. {% set key_type = 'id_' + user.get('ssh_key_type', 'rsa') %}
  82. user_{{ name }}_private_key:
  83. file.managed:
  84. - name: {{ user.get('home', '/home/{0}'.format(name)) }}/.ssh/{{ key_type }}
  85. - user: {{ name }}
  86. - group: {{ user_group }}
  87. - mode: 600
  88. - show_diff: False
  89. - contents_pillar: users:{{ name }}:ssh_keys:privkey
  90. - require:
  91. - user: {{ name }}_user
  92. {% for group in user.get('groups', []) %}
  93. - group: {{ name }}_{{ group }}_group
  94. {% endfor %}
  95. user_{{ name }}_public_key:
  96. file.managed:
  97. - name: {{ user.get('home', '/home/{0}'.format(name)) }}/.ssh/{{ key_type }}.pub
  98. - user: {{ name }}
  99. - group: {{ user_group }}
  100. - mode: 644
  101. - show_diff: False
  102. - contents_pillar: users:{{ name }}:ssh_keys:pubkey
  103. - require:
  104. - user: {{ name }}_user
  105. {% for group in user.get('groups', []) %}
  106. - group: {{ name }}_{{ group }}_group
  107. {% endfor %}
  108. {% endif %}
  109. {% if 'ssh_auth' in user %}
  110. {% for auth in user['ssh_auth'] %}
  111. ssh_auth_{{ name }}_{{ loop.index0 }}:
  112. ssh_auth.present:
  113. - user: {{ name }}
  114. - name: {{ auth }}
  115. - require:
  116. - file: {{ name }}_user
  117. - user: {{ name }}_user
  118. {% endfor %}
  119. {% endif %}
  120. {% if 'ssh_auth.absent' in user %}
  121. {% for auth in user['ssh_auth.absent'] %}
  122. ssh_auth_delete_{{ name }}_{{ loop.index0 }}:
  123. ssh_auth.absent:
  124. - user: {{ name }}
  125. - name: {{ auth }}
  126. - require:
  127. - file: {{ name }}_user
  128. - user: {{ name }}_user
  129. {% endfor %}
  130. {% endif %}
  131. {% if 'sudouser' in user and user['sudouser'] %}
  132. {% if not used_sudo %}
  133. {% set used_sudo = True %}
  134. include:
  135. - users.sudo
  136. {% endif %}
  137. sudoer-{{ name }}:
  138. file.managed:
  139. - name: {{ users.sudoers_dir }}{{ name }}
  140. - user: root
  141. - group: {{ users.root_group }}
  142. - mode: '0440'
  143. {% if 'sudo_rules' in user %}
  144. {% for rule in user['sudo_rules'] %}
  145. "validate {{ name }} sudo rule {{ loop.index0 }} {{ name }} {{ rule }}":
  146. cmd.run:
  147. - name: 'visudo -cf - <<<"$rule" | { read output; if [[ $output != "stdin: parsed OK" ]] ; then echo $output ; fi }'
  148. - stateful: True
  149. - shell: {{ users.visudo_shell }}
  150. - env:
  151. # Specify the rule via an env var to avoid shell quoting issues.
  152. - rule: "{{ name }} {{ rule }}"
  153. - require_in:
  154. - file: {{ users.sudoers_dir }}{{ name }}
  155. {% endfor %}
  156. {{ users.sudoers_dir }}{{ name }}:
  157. file.managed:
  158. - contents: |
  159. {%- for rule in user['sudo_rules'] %}
  160. {{ name }} {{ rule }}
  161. {%- endfor %}
  162. - require:
  163. - file: sudoer-defaults
  164. - file: sudoer-{{ name }}
  165. {% endif %}
  166. {% else %}
  167. {{ users.sudoers_dir }}{{ name }}:
  168. file.absent:
  169. - name: {{ users.sudoers_dir }}{{ name }}
  170. {% endif %}
  171. {% endfor %}
  172. {% for name, user in pillar.get('users', {}).items() if user.absent is defined and user.absent %}
  173. {{ name }}:
  174. {% if 'purge' in user or 'force' in user %}
  175. user.absent:
  176. {% if 'purge' in user %}
  177. - purge: {{ user['purge'] }}
  178. {% endif %}
  179. {% if 'force' in user %}
  180. - force: {{ user['force'] }}
  181. {% endif %}
  182. {% else %}
  183. user.absent
  184. {% endif -%}
  185. {{ users.sudoers_dir }}{{ name }}:
  186. file.absent:
  187. - name: {{ users.sudoers_dir }}{{ name }}
  188. {% endfor %}
  189. {% for user in pillar.get('absent_users', []) %}
  190. {{ user }}:
  191. user.absent
  192. {{ users.sudoers_dir }}{{ user }}:
  193. file.absent:
  194. - name: {{ users.sudoers_dir }}{{ user }}
  195. {% endfor %}
  196. {% for group in pillar.get('absent_groups', []) %}
  197. {{ group }}:
  198. group.absent
  199. {% endfor %}