diff --git a/ad-auth/files/pam/mkhomedir b/ad-auth/files/pam/mkhomedir new file mode 100644 index 0000000000000000000000000000000000000000..be7b76507a21d177d25c631c12a542cbc41b9ac0 --- /dev/null +++ b/ad-auth/files/pam/mkhomedir @@ -0,0 +1,6 @@ +Name: Create home directory during login +Default: yes +Priority: 900 +Session-Type: Additional +Session: + required pam_mkhomedir.so umask=0077 skel=/etc/skel diff --git a/ad-auth/files/pam/umask b/ad-auth/files/pam/umask new file mode 100644 index 0000000000000000000000000000000000000000..8eefa2675052ba7c54e09866c8f56da0fc040aee --- /dev/null +++ b/ad-auth/files/pam/umask @@ -0,0 +1,6 @@ +Name: Set our default system-wide umask +Default: yes +Priority: 900 +Session-Type: Additional +Session: + optional pam_umask.so diff --git a/ad-auth/handlers/main.yml b/ad-auth/handlers/main.yml index 6c5ef80ade3c71ed81118e392f8fa222e6994124..e37960b0f086c5132a07decf50df1247eec24a03 100644 --- a/ad-auth/handlers/main.yml +++ b/ad-auth/handlers/main.yml @@ -1,11 +1,17 @@ --- # file: roles/ad-auth/handlers/main.yml -- name: restart nslcd - service: name=nslcd state=restarted +- name: regenerate pam config + shell: DEBIAN_FRONTEND=noninteractive pam-auth-update --force -- name: restart nscd - service: name=nscd state=restarted +- name: clear sssd cache + command: sss_cache -E + register: result + changed_when: "result.rc == 0" + failed_when: "result.rc != 0 and current_realms.rc != 2" -- name: clear nscd caches - command: nscd -i passwd group +- name: restart sssd + service: name=sssd state=restarted + +- name: check sudo config + command: visudo -q -c -f /etc/sudoers diff --git a/ad-auth/tasks/kerberos.yml b/ad-auth/tasks/kerberos.yml index cb87ae888cc9ebd0f522f30aa64b2abd609d69eb..150827985c74cc67437cecb6e366c33106106800 100644 --- a/ad-auth/tasks/kerberos.yml +++ b/ad-auth/tasks/kerberos.yml @@ -1,14 +1,15 @@ --- # file: roles/ad-auth/tasks/kerberos.yml -#- name: ensure kerberos is installed -# apt: name=krb5-user,krb5-clients state=latest -# tags: -# - kerberos -# - packages -# -#- name: configure kerberos -# template: src=krb5.conf.j2 dest=/etc/krb5.conf owner=root group=root mode=0644 -# tags: -# - kerberos -# - config +- name: ensure kerberos is installed + apt: name=krb5-user state=installed + tags: + - kerberos + - packages + +- name: ensure kerberos is configured + template: src=krb5.conf.j2 dest=/etc/krb5.conf owner=root group=root mode=0644 + tags: + - kerberos + - config + diff --git a/ad-auth/tasks/ldap.yml b/ad-auth/tasks/ldap.yml index 9d2a6eac0cf36bd037da3e4cf095892a480f9fb1..cb8b166bcf11dd2fc0cbda25d48ee79905985aa3 100644 --- a/ad-auth/tasks/ldap.yml +++ b/ad-auth/tasks/ldap.yml @@ -1,15 +1,8 @@ --- # file: roles/ad-auth/tasks/ldap.yml -- name: ensure old libnss-ldap and libnss-pam are not installed - apt: name=libnss-ldap,libpam-ldap state=absent - tags: - - packages - - clean - - ldap - -- name: ensure ldap NSS and PAM modules are installed - apt: name=libnss-ldapd,libpam-ldapd,ldap-utils state=latest +- name: ensure ldap-utils is installed + apt: name=ldap-utils state=installed tags: - ldap - packages @@ -19,3 +12,4 @@ tags: - ldap - config + diff --git a/ad-auth/tasks/main.yml b/ad-auth/tasks/main.yml index b86b98f5612af519f344d00734f2861b253f6a78..6eaefa08828a09a3fa7227f0424ed8a1e54d9302 100644 --- a/ad-auth/tasks/main.yml +++ b/ad-auth/tasks/main.yml @@ -3,11 +3,11 @@ - include: ldap.yml - meta: flush_handlers -- include: nslcd.yml +- include: kerberos.yml - meta: flush_handlers -- include: nscd.yml +- include: sssd.yml - meta: flush_handlers -- include: kerberos.yml +- include: pam.yml - meta: flush_handlers - include: sudo.yml - meta: flush_handlers diff --git a/ad-auth/tasks/nscd.yml b/ad-auth/tasks/nscd.yml deleted file mode 100644 index 32d43d4ca49a4dd457f27d23a8a24f23f5595b60..0000000000000000000000000000000000000000 --- a/ad-auth/tasks/nscd.yml +++ /dev/null @@ -1,32 +0,0 @@ ---- -# file: roles/ad-auth/tasks/nscd.yml - -- name: ensure nscd is installed - apt: name=nscd state=latest - tags: - - nscd - - packages - -- name: ensure proper nscd configuration - copy: src=nsswitch.conf dest=/etc/nsswitch.conf owner=root group=root mode=0644 - notify: - - restart nscd - - clear nscd caches - tags: - - nscd - - config - -- name: ensure a happy nscd - file: path=/etc/netgroup state=touch - notify: - - restart nscd - - clear nscd caches - tags: - - nscd - - config - -- name: ensure nscd is running - service: name=nscd state=running enabled=yes - tags: - - nscd - - service diff --git a/ad-auth/tasks/nslcd.yml b/ad-auth/tasks/nslcd.yml deleted file mode 100644 index f8d15be3fac5880c37df3fd990edb3a76b906804..0000000000000000000000000000000000000000 --- a/ad-auth/tasks/nslcd.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -# file: roles/ad-auth/tasks/nslcd.yml - -- name: ensure nslcd is installed - apt: name=nslcd state=latest - tags: - - nslcd - - packages - -- name: ensure proper nslcd configuration - template: src=nslcd.conf.j2 dest=/etc/nslcd.conf owner=root group=nslcd mode=0640 - notify: - - restart nslcd - tags: - - nslcd - - config - -- name: ensure nslcd is running and enabled - service: name=nslcd state=running enabled=yes - tags: - - nslcd - - service diff --git a/ad-auth/tasks/pam.yml b/ad-auth/tasks/pam.yml new file mode 100644 index 0000000000000000000000000000000000000000..c51e6efdb4ef1a3571187ce7fdaad4beb29331b8 --- /dev/null +++ b/ad-auth/tasks/pam.yml @@ -0,0 +1,14 @@ +--- +# file: roles/ad-auth/tasks/pam.yml + +- name: ensure our pam-configs are deployed + copy: src=pam/{{ item }} dest=/usr/share/pam-configs/{{ item }} owner=root group=root mode=0644 + with_items: + - mkhomedir + - umask + notify: + - regenerate pam config + tags: + - pam + - config + diff --git a/ad-auth/tasks/sssd.yml b/ad-auth/tasks/sssd.yml new file mode 100644 index 0000000000000000000000000000000000000000..dacd5de6c0228c67a976f73a9373f1d4df885120 --- /dev/null +++ b/ad-auth/tasks/sssd.yml @@ -0,0 +1,59 @@ +--- +# file: roles/ad-auth/tasks/sssd.yml + +- name: ensure sssd is installed + apt: name="{{ item }}" state=installed + with_items: + - sssd + - libpam-sss + - libnss-sss + - sssd-tools + - realmd + notify: + - clear sssd cache + tags: + - sssd + - packages + +- name: check if our realm is configured + shell: realm list | grep "{{ domain }}" + register: current_realms + changed_when: "current_realms.rc != 0" + failed_when: "current_realms.rc != 0 and current_realms.rc != 1" + +- block: + - name: discover our realm + command: realm discover -v "{{ domain }}" + - name: get a kerberos ticket + shell: echo "{{ lookup('passwordstore', 'samba-admin') }}" | kinit Administrator + - name: leave any other realm + command: realm leave + register: result + until: "result.rc != 0" + retries: 9001 + delay: 0 + failed_when: "result.rc != 0 and result.rc != 1" + - name: join our realm + command: realm join -v "{{ domain }}" + notify: + - clear sssd cache + - restart sssd + - name: destroy kerberos ticket + command: kdestroy + when: "current_realms.rc != 0" + +- name: ensure sssd is configured + template: src=sssd.conf.j2 dest=/etc/sssd/sssd.conf owner=root group=root mode=0600 + notify: + - restart sssd + - clear sssd cache + tags: + - sssd + - config + +- name: ensure sssd is enabled and running + service: name=sssd state=running enabled=yes + tags: + - sssd + - service + diff --git a/ad-auth/tasks/sudo.yml b/ad-auth/tasks/sudo.yml index d6fa4518c66c6cfb6f015ab6f028c1a81404183d..1698aae656256d3b66cf3a7f4f4a1dd166905558 100644 --- a/ad-auth/tasks/sudo.yml +++ b/ad-auth/tasks/sudo.yml @@ -3,12 +3,9 @@ - name: ensure users of group admin are in the sudoers copy: src=sudo/admin dest=/etc/sudoers.d/admin owner=root group=root mode=0440 + notify: + - check sudo config tags: - sudo - config -- name: check whole sudo config - command: visudo -q -c -f /etc/sudoers - tags: - - sudo - - test diff --git a/ad-auth/templates/krb5.conf.j2 b/ad-auth/templates/krb5.conf.j2 index a2c8de0e656dbbbd64e990152bd9c1450e26a36a..8644b560f850a13ae40afaa61585c4e0c6010fe8 100644 --- a/ad-auth/templates/krb5.conf.j2 +++ b/ad-auth/templates/krb5.conf.j2 @@ -1,11 +1,10 @@ -## TODO [libdefaults] -default_realm = FSMPI.RWTH-AACHEN.DE +default_realm = {{ domain.upper() }} dns_lookup_realm = false dns_lookup_kdc = true forwardable = true [domain_realm] -.fsmpi.rwth-aachen.de = FSMPI.RWTH-AACHEN.DE -fsmpi.rwth-aachen.de = FSMPI.RWTH-AACHEN.DE +.{{ domain }} = {{ domain.upper() }} +{{ domain }} = {{ domain.upper() }} diff --git a/ad-auth/templates/ldap.conf.j2 b/ad-auth/templates/ldap.conf.j2 index 3ac0530739ade88aaa796ce4924cb85e3f472fdc..dc7505aad0b7f682a6c1a82ec5991ff667bf8edb 100644 --- a/ad-auth/templates/ldap.conf.j2 +++ b/ad-auth/templates/ldap.conf.j2 @@ -6,10 +6,14 @@ # This file should be world readable but not world writable. BASE {{ authbase }} -URI ldaps://{{ authserver }} +URI {{ authservers | join(" ") }} #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never TLS_CACERT {{ authcacert }} + +SASL_MECH GSSAPI +GSSAPI_SIGN on +GSSAPI_ENCRYPT on diff --git a/ad-auth/templates/nslcd.conf.j2 b/ad-auth/templates/nslcd.conf.j2 deleted file mode 100644 index 5675aebabdcd8b71df552b1dee930ef3fe49bd3c..0000000000000000000000000000000000000000 --- a/ad-auth/templates/nslcd.conf.j2 +++ /dev/null @@ -1,32 +0,0 @@ -# /etc/nslcd.conf -# nslcd configuration file. See nslcd.conf(5) -# for details. - -# The user and group nslcd should run as. -uid nslcd -gid nslcd - -# The location at which the LDAP server(s) should be reachable. -uri ldaps://{{ authserver }} - -# The search base that will be used for all queries. -base {{ authbase }} - -# The LDAP protocol version to use. -#ldap_version 3 - -# The DN to bind with for normal lookups. -#binddn cn=annonymous,dc=example,dc=net -#bindpw secret - -# The DN used for password modifications by root. -#rootpwmoddn cn=admin,dc=example,dc=com - -# SSL options -#ssl off -tls_cacertfile {{ authcacert }} -tls_reqcert demand - -# The search scope. -#scope sub - diff --git a/ad-auth/templates/sssd.conf.j2 b/ad-auth/templates/sssd.conf.j2 new file mode 100644 index 0000000000000000000000000000000000000000..6b3d9b1f96f18966008ce3a47d2515bb597ab898 --- /dev/null +++ b/ad-auth/templates/sssd.conf.j2 @@ -0,0 +1,19 @@ +[sssd] +domains = {{ domain }} +config_file_version = 2 +services = nss, pam + +[domain/{{ domain }}] +ad_domain = {{ domain }} +krb5_realm = {{ domain.upper() }} +realmd_tags = manages-system joined-with-adcli +cache_credentials = True +id_provider = ad +krb5_store_password_if_offline = True +default_shell = /bin/bash +ldap_id_mapping = False +use_fully_qualified_names = False +fallback_homedir = /home/%u +access_provider = ad +enumerate = true +ldap_user_fullname = displayName