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..735c7f6b388ace1f6ef084f86ef9f1ea19d9655e 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 result.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..69cd4a959597fb3c4b6210e8a12e7797a8d34fe5 --- /dev/null +++ b/ad-auth/tasks/pam.yml @@ -0,0 +1,20 @@ +--- +# file: roles/ad-auth/tasks/pam.yml + +- name: ensure pam applies a general umask + copy: src=pam/umask dest=/usr/share/pam-configs/umask owner=root group=root mode=0644 + notify: + - regenerate pam config + tags: + - pam + - config + +- name: ensure pam creates a home dir if necessary + copy: src=pam/mkhomedir dest=/usr/share/pam-configs/mkhomedir owner=root group=root mode=0644 + when: "'clients' not in group_names" + 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..ecc41bc936121b570a1f4555b5578c0b2d5e3fa5 --- /dev/null +++ b/ad-auth/tasks/sssd.yml @@ -0,0 +1,69 @@ +--- +# file: roles/ad-auth/tasks/sssd.yml + +- name: ensure sssd is installed + apt: name="{{ item }}" state=installed install_recommends=no + 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 + when: debian_version == "jessie" + - name: ensure pexpect is installed + apt: name=python-pexpect state=installed + when: debian_version == "stretch" + - name: get a kerberos ticket + expect: + command: kinit Administrator + responses: + "Password for Administrator@{{ domain.upper() }}": "{{ lookup('passwordstore', 'samba-admin') }}" + when: debian_version == "stretch" + - 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..c729bcec01248fe013e48080b33cf6f94463aeb3 --- /dev/null +++ b/ad-auth/templates/sssd.conf.j2 @@ -0,0 +1,27 @@ +[sssd] +domains = {{ domain }} +config_file_version = 2 +services = nss, pam + +[pam] +offline_credentials_expiration = 1 +offline_failed_login_attempts = 3 +offline_failed_login_delay = 0 + +[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 +krb5_lifetime = 48h +krb5_renewable_lifetime = 200h +krb5_renew_interval = 30m diff --git a/nfs-client/files/create_netdir.sh b/nfs-client/files/create_netdir.sh deleted file mode 100644 index b2f75521bf4eff05eaf33af7d2f472f8b1896e64..0000000000000000000000000000000000000000 --- a/nfs-client/files/create_netdir.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -if [ ! -h /$1 ]; then - rm /$1 - rmdir /$1 - ln -s /net/$1 /$1 -fi - diff --git a/nfs-client/files/modprobe-nfs.conf b/nfs-client/files/modprobe-nfs.conf new file mode 100644 index 0000000000000000000000000000000000000000..2f7e4b40072674549df590ae915fb89d2f959986 --- /dev/null +++ b/nfs-client/files/modprobe-nfs.conf @@ -0,0 +1 @@ +options nfs nfs4_disable_idmapping=N diff --git a/nfs-client/handlers/main.yml b/nfs-client/handlers/main.yml index 6697abf0c5ab1d75df6ace43e6bf1eb316407f4f..7944169d8c6f1aad07261147e7e16f3f0addb958 100644 --- a/nfs-client/handlers/main.yml +++ b/nfs-client/handlers/main.yml @@ -7,8 +7,5 @@ - name: restart nfs-common service: name=nfs-common state=restarted -- name: reload sysfs.conf - service: name=sysfsutils state=restarted - - name: reload sysctl command: sysctl -p diff --git a/nfs-client/tasks/main.yml b/nfs-client/tasks/main.yml index 9cd580445496d30cae14d50e413ebe606cf374eb..7835528b64bccee5ef6ef111101191ee0ac42c4a 100644 --- a/nfs-client/tasks/main.yml +++ b/nfs-client/tasks/main.yml @@ -2,42 +2,30 @@ # file: roles/nfs-client/tasks/main.yml - name: ensure nfs client utils are installed - apt: name=nfs-common state=latest - tags: - - nfs-client - - packages - -- name: ensure CIFS utils are installed - apt: name=cifs-utils,smbclient state=latest - tags: - - nfs-client - - cifs-client - - packages - -- name: ensure sysfs-utils are installed - apt: name=sysfsutils state=present + apt: name="{{ item }}" state=installed + with_items: + - nfs-common + - libgssrpc4 + - librpcsecgss3 + - autofs tags: - nfs-client - packages -- name: ensure we use the idmapper - command: 'echo "N" > /sys/module/nfs/parameters/nfs4_disable_idmapping' - notify: - - restart nfs-common - tags: - - nfs-client - - sysfs - - config - -- name: ensure we use the idmapper after a reboot - lineinfile: line="module/nfs/parameters/nfs4_disable_idmapping = N" dest=/etc/sysfs.conf create=yes - notify: - - reload sysfs.conf - - restart nfs-common - tags: - - nfs-client - - sysfs - - config +#- name: ensure we use the idmapper +# copy: content="N" dest=/sys/module/nfs/parameters/nfs4_disable_idmapping +# notify: +# - restart nfs-common +# - restart autofs +# tags: +# - nfs-client +# - config +# +#- name: ensure we use the idmapper after a reboot +# copy: src=modprobe-nfs.conf dest=/etc/modprobe.d/nfs.conf owner=root group=root mode=0644 +# tags: +# - nfs-client +# - config - name: ensure the kernel key storage quote used for idmapping is sufficiently high sysctl: name=kernel.keys.root_maxkeys state=present value=1000 # default is 200, this quote was reached @@ -59,13 +47,12 @@ - sysctl - config -# makes life much easier to have an automounter and not /etc/fstab -- name: ensure automounter is installed - apt: name=autofs state=latest +- name: ensure there is a base directory for automount + file: state=directory path=/net owner=root group=root mode=0755 + notify: + - restart autofs tags: - nfs-client - - autofs - - packages - name: ensure automounter is configured copy: src=auto.master dest=/etc/auto.master owner=root group=root mode=0644 @@ -73,39 +60,33 @@ - restart autofs tags: - nfs-client - - autofs - config - name: ensure mounts from central storage are available template: src=auto.nfs.j2 dest=/etc/auto.nfs owner=root group=root mode=0644 notify: - - nfs-client - restart autofs tags: - - autofs + - nfs-client - config - name: ensure automounter is enabled service: name=autofs state=running enabled=yes tags: - nfs-client - - autofs - service -- name: ensure linking of home - script: create_netdir.sh home +- name: ensure linking of netdirs + file: src="/net/{{ item.netdir }}" dest="/{{ item.dest }}" state=link force=yes + with_items: "{{ nfs_shares }}" tags: - nfs-client - - fsmpi - - autofs -- name: ensure linking of pub - script: create_netdir.sh pub +- name: configure default umask and other user related stuff + copy: src=login.defs dest=/etc/login.defs owner=root group=root mode=0644 tags: - nfs-client - - fsmpi - - autofs + - umask + - config - meta: flush_handlers -- include: umask.yml -- meta: flush_handlers diff --git a/nfs-client/tasks/umask.yml b/nfs-client/tasks/umask.yml deleted file mode 100644 index 6c9e2d48fd1907f27159661246d6ae52e90c199a..0000000000000000000000000000000000000000 --- a/nfs-client/tasks/umask.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -# file: roles/client/tasks/main.yml - -- name: configure default umask and other user related stuff - copy: src=login.defs dest=/etc/login.defs owner=root group=root mode=0644 - tags: - - umask - - config - -- name: activate pam.d session modules to set default umask - lineinfile: dest=/etc/pam.d/common-session line="session optional pam_umask.so" - tags: - - umask - - pam - - config diff --git a/nfs-client/templates/auto.nfs.j2 b/nfs-client/templates/auto.nfs.j2 index 11cc345431834bec54784f3f9cfb8465057d4952..f60b42fdba4b1f5364781799c9847f6a18388cc4 100644 --- a/nfs-client/templates/auto.nfs.j2 +++ b/nfs-client/templates/auto.nfs.j2 @@ -1,3 +1,3 @@ -{% for share in nfsshares %} -{{ share }} -{% endfor %} +{%- for share in nfs_shares %} +{{ share.netdir }} -{{ share.options }} {{ share.src }} +{% endfor -%} diff --git a/nfs-server/files/auto.master b/nfs-server/files/auto.master new file mode 100644 index 0000000000000000000000000000000000000000..aef7888b76e0fd5d8292e0f4dea827125e370cc2 --- /dev/null +++ b/nfs-server/files/auto.master @@ -0,0 +1,24 @@ +# +# Sample auto.master file +# This is an automounter map and it has the following format +# key [ -mount-options-separated-by-comma ] location +# For details of the format look at autofs(5). +# +#/misc /etc/auto.misc +# +# NOTE: mounts done from a hosts map will be mounted with the +# "nosuid" and "nodev" options unless the "suid" and "dev" +# options are explicitly given. +# +#/net -hosts +/net /etc/auto.nfs +# +# Include central master map if it can be found using +# nsswitch sources. +# +# Note that if there are entries for /net or /misc (as +# above) in the included master map any keys that are the +# same will not be seen as the first read key seen takes +# precedence. +# ++auto.master diff --git a/nfs-server/files/login.defs b/nfs-server/files/login.defs new file mode 100644 index 0000000000000000000000000000000000000000..7253908e8b11330242b9eee8186166574d520b39 --- /dev/null +++ b/nfs-server/files/login.defs @@ -0,0 +1,335 @@ +# +# /etc/login.defs - Configuration control definitions for the login package. +# +# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH. +# If unspecified, some arbitrary (and possibly incorrect) value will +# be assumed. All other items are optional - if not specified then +# the described action or option will be inhibited. +# +# Comment lines (lines beginning with "#") and blank lines are ignored. +# +# Modified for Linux. --marekm + +# REQUIRED for useradd/userdel/usermod +# Directory where mailboxes reside, _or_ name of file, relative to the +# home directory. If you _do_ define MAIL_DIR and MAIL_FILE, +# MAIL_DIR takes precedence. +# +# Essentially: +# - MAIL_DIR defines the location of users mail spool files +# (for mbox use) by appending the username to MAIL_DIR as defined +# below. +# - MAIL_FILE defines the location of the users mail spool files as the +# fully-qualified filename obtained by prepending the user home +# directory before $MAIL_FILE +# +# NOTE: This is no more used for setting up users MAIL environment variable +# which is, starting from shadow 4.0.12-1 in Debian, entirely the +# job of the pam_mail PAM modules +# See default PAM configuration files provided for +# login, su, etc. +# +# This is a temporary situation: setting these variables will soon +# move to /etc/default/useradd and the variables will then be +# no more supported +MAIL_DIR /var/mail +#MAIL_FILE .mail + +# +# Enable logging and display of /var/log/faillog login failure info. +# This option conflicts with the pam_tally PAM module. +# +FAILLOG_ENAB yes + +# +# Enable display of unknown usernames when login failures are recorded. +# +# WARNING: Unknown usernames may become world readable. +# See #290803 and #298773 for details about how this could become a security +# concern +LOG_UNKFAIL_ENAB no + +# +# Enable logging of successful logins +# +LOG_OK_LOGINS no + +# +# Enable "syslog" logging of su activity - in addition to sulog file logging. +# SYSLOG_SG_ENAB does the same for newgrp and sg. +# +SYSLOG_SU_ENAB yes +SYSLOG_SG_ENAB yes + +# +# If defined, all su activity is logged to this file. +# +#SULOG_FILE /var/log/sulog + +# +# If defined, file which maps tty line to TERM environment parameter. +# Each line of the file is in a format something like "vt100 tty01". +# +#TTYTYPE_FILE /etc/ttytype + +# +# If defined, login failures will be logged here in a utmp format +# last, when invoked as lastb, will read /var/log/btmp, so... +# +FTMP_FILE /var/log/btmp + +# +# If defined, the command name to display when running "su -". For +# example, if this is defined as "su" then a "ps" will display the +# command is "-su". If not defined, then "ps" would display the +# name of the shell actually being run, e.g. something like "-sh". +# +SU_NAME su + +# +# If defined, file which inhibits all the usual chatter during the login +# sequence. If a full pathname, then hushed mode will be enabled if the +# user's name or shell are found in the file. If not a full pathname, then +# hushed mode will be enabled if the file exists in the user's home directory. +# +HUSHLOGIN_FILE .hushlogin +#HUSHLOGIN_FILE /etc/hushlogins + +# +# *REQUIRED* The default PATH settings, for superuser and normal users. +# +# (they are minimal, add the rest in the shell startup files) +ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games + +# +# Terminal permissions +# +# TTYGROUP Login tty will be assigned this group ownership. +# TTYPERM Login tty will be set to this permission. +# +# If you have a "write" program which is "setgid" to a special group +# which owns the terminals, define TTYGROUP to the group number and +# TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign +# TTYPERM to either 622 or 600. +# +# In Debian /usr/bin/bsd-write or similar programs are setgid tty +# However, the default and recommended value for TTYPERM is still 0600 +# to not allow anyone to write to anyone else console or terminal + +# Users can still allow other people to write them by issuing +# the "mesg y" command. + +TTYGROUP tty +TTYPERM 0600 + +# +# Login configuration initializations: +# +# ERASECHAR Terminal ERASE character ('\010' = backspace). +# KILLCHAR Terminal KILL character ('\025' = CTRL/U). +# UMASK Default "umask" value. +# +# The ERASECHAR and KILLCHAR are used only on System V machines. +# +# UMASK is the default umask value for pam_umask and is used by +# useradd and newusers to set the mode of the new home directories. +# 022 is the "historical" value in Debian for UMASK +# 027, or even 077, could be considered better for privacy +# There is no One True Answer here : each sysadmin must make up his/her +# mind. +# +# Prefix these values with "0" to get octal, "0x" to get hexadecimal. +# +ERASECHAR 0177 +KILLCHAR 025 +UMASK 002 + +# +# Password aging controls: +# +# PASS_MAX_DAYS Maximum number of days a password may be used. +# PASS_MIN_DAYS Minimum number of days allowed between password changes. +# PASS_WARN_AGE Number of days warning given before a password expires. +# +PASS_MAX_DAYS 99999 +PASS_MIN_DAYS 0 +PASS_WARN_AGE 7 + +# +# Min/max values for automatic uid selection in useradd +# +UID_MIN 1000 +UID_MAX 60000 +# System accounts +#SYS_UID_MIN 100 +#SYS_UID_MAX 999 + +# +# Min/max values for automatic gid selection in groupadd +# +GID_MIN 1000 +GID_MAX 60000 +# System accounts +#SYS_GID_MIN 100 +#SYS_GID_MAX 999 + +# +# Max number of login retries if password is bad. This will most likely be +# overriden by PAM, since the default pam_unix module has it's own built +# in of 3 retries. However, this is a safe fallback in case you are using +# an authentication module that does not enforce PAM_MAXTRIES. +# +LOGIN_RETRIES 5 + +# +# Max time in seconds for login +# +LOGIN_TIMEOUT 60 + +# +# Which fields may be changed by regular users using chfn - use +# any combination of letters "frwh" (full name, room number, work +# phone, home phone). If not defined, no changes are allowed. +# For backward compatibility, "yes" = "rwh" and "no" = "frwh". +# +CHFN_RESTRICT rwh + +# +# Should login be allowed if we can't cd to the home directory? +# Default in no. +# +DEFAULT_HOME yes + +# +# If defined, this command is run when removing a user. +# It should remove any at/cron/print jobs etc. owned by +# the user to be removed (passed as the first argument). +# +#USERDEL_CMD /usr/sbin/userdel_local + +# +# If set to yes, userdel will remove the user“s group if it contains no +# more members, and useradd will create by default a group with the name +# of the user. +# +# Other former uses of this variable such as setting the umask when +# user==primary group are not used in PAM environments, such as Debian +# +USERGROUPS_ENAB yes + +# +# Instead of the real user shell, the program specified by this parameter +# will be launched, although its visible name (argv[0]) will be the shell's. +# The program may do whatever it wants (logging, additional authentification, +# banner, ...) before running the actual shell. +# +# FAKE_SHELL /bin/fakeshell + +# +# If defined, either full pathname of a file containing device names or +# a ":" delimited list of device names. Root logins will be allowed only +# upon these devices. +# +# This variable is used by login and su. +# +#CONSOLE /etc/consoles +#CONSOLE console:tty01:tty02:tty03:tty04 + +# +# List of groups to add to the user's supplementary group set +# when logging in on the console (as determined by the CONSOLE +# setting). Default is none. +# +# Use with caution - it is possible for users to gain permanent +# access to these groups, even when not logged in on the console. +# How to do it is left as an exercise for the reader... +# +# This variable is used by login and su. +# +#CONSOLE_GROUPS floppy:audio:cdrom + +# +# If set to "yes", new passwords will be encrypted using the MD5-based +# algorithm compatible with the one used by recent releases of FreeBSD. +# It supports passwords of unlimited length and longer salt strings. +# Set to "no" if you need to copy encrypted passwords to other systems +# which don't understand the new algorithm. Default is "no". +# +# This variable is deprecated. You should use ENCRYPT_METHOD. +# +#MD5_CRYPT_ENAB no + +# +# If set to MD5 , MD5-based algorithm will be used for encrypting password +# If set to SHA256, SHA256-based algorithm will be used for encrypting password +# If set to SHA512, SHA512-based algorithm will be used for encrypting password +# If set to DES, DES-based algorithm will be used for encrypting password (default) +# Overrides the MD5_CRYPT_ENAB option +# +# Note: It is recommended to use a value consistent with +# the PAM modules configuration. +# +ENCRYPT_METHOD SHA512 + +# +# Only used if ENCRYPT_METHOD is set to SHA256 or SHA512. +# +# Define the number of SHA rounds. +# With a lot of rounds, it is more difficult to brute forcing the password. +# But note also that it more CPU resources will be needed to authenticate +# users. +# +# If not specified, the libc will choose the default number of rounds (5000). +# The values must be inside the 1000-999999999 range. +# If only one of the MIN or MAX values is set, then this value will be used. +# If MIN > MAX, the highest value will be used. +# +# SHA_CRYPT_MIN_ROUNDS 5000 +# SHA_CRYPT_MAX_ROUNDS 5000 + +################# OBSOLETED BY PAM ############## +# # +# These options are now handled by PAM. Please # +# edit the appropriate file in /etc/pam.d/ to # +# enable the equivelants of them. +# +############### + +#MOTD_FILE +#DIALUPS_CHECK_ENAB +#LASTLOG_ENAB +#MAIL_CHECK_ENAB +#OBSCURE_CHECKS_ENAB +#PORTTIME_CHECKS_ENAB +#SU_WHEEL_ONLY +#CRACKLIB_DICTPATH +#PASS_CHANGE_TRIES +#PASS_ALWAYS_WARN +#ENVIRON_FILE +#NOLOGINS_FILE +#ISSUE_FILE +#PASS_MIN_LEN +#PASS_MAX_LEN +#ULIMIT +#ENV_HZ +#CHFN_AUTH +#CHSH_AUTH +#FAIL_DELAY + +################# OBSOLETED ####################### +# # +# These options are no more handled by shadow. # +# # +# Shadow utilities will display a warning if they # +# still appear. # +# # +################################################### + +# CLOSE_SESSIONS +# LOGIN_STRING +# NO_PASSWORD_CONSOLE +# QMAIL_DIR + + + diff --git a/nfs-server/files/modprobe-nfs.conf b/nfs-server/files/modprobe-nfs.conf new file mode 100644 index 0000000000000000000000000000000000000000..2f7e4b40072674549df590ae915fb89d2f959986 --- /dev/null +++ b/nfs-server/files/modprobe-nfs.conf @@ -0,0 +1 @@ +options nfs nfs4_disable_idmapping=N diff --git a/nfs-server/handlers/main.yml b/nfs-server/handlers/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..7944169d8c6f1aad07261147e7e16f3f0addb958 --- /dev/null +++ b/nfs-server/handlers/main.yml @@ -0,0 +1,11 @@ +--- +# file: roles/nfs-client/handlers/main.yml + +- name: restart autofs + service: name=autofs state=restarted + +- name: restart nfs-common + service: name=nfs-common state=restarted + +- name: reload sysctl + command: sysctl -p diff --git a/nfs-server/tasks/main.yml b/nfs-server/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..38154e34b2e1b8e22745affcc6443f097f13865a --- /dev/null +++ b/nfs-server/tasks/main.yml @@ -0,0 +1,144 @@ +--- +# file: roles/nfs-server/tasks/main.yml + +- name: ensure nfs server utils are installed + apt: name="{{ item }}" state=installed + with_items: + - nfs-common + - nfs-kernel-server + - msktutils + - librpcsecgss3 + - libgssrpc4 + tags: + - nfs-server + - packages + +- name: ensure default umask and other user related stuff + copy: src=login.defs dest=/etc/login.defs owner=root group=root mode=0644 + tags: + - nfs-server + - umask + - config + +- name: ensure exports configuration is in place + template: src=exports.j2 dest=/etc/exports owner=root group=root mode=0644 + notify: + - restart nfs-server + tags: + - nfs-server + - config + +- name: ensure nfs-common is configured + copy: src=nfs-common dest=/etc/default/nfs-common owner=root group=root mode=0644 + notify: + - restart nfs-server + tags: + - nfs-server + - config + +- name: ensure nfs-kernel-server is configured + copy: src=nfs-kernel-server dest=/etc/default/nfs-kernel-server owner=root group=root mode=0644 + notify: + - restart nfs-server + tags: + - nfs-server + - config + +- name: ensure nfs-server is enabled and running + service: name=nfs-server state=running enabled=yes + tags: + - nfs-server + - service + +- name: ensure that there is a keytab available + file: path=/etc/krb5.keytab state=present + tags: + - nfs-server + - service-principal + +- name: check that we have a valid service principal + shell: klist -k /etc/krb5.keytab | grep nfs/{{ ansible_fqdn }} + register: principal + failed_when: False + tags: + - nfs-server + - service-principal + +- block: + - name: test if there is a nfs-user account + shell: samba-tool user list | grep nfs-user + register: nfsuser + failed_when: False + delegate_to: "{{ authservers[0] }}" + tags: + - nfs-server + - service-principal + + - name: ensure there is a nfs-user account + command: samba-tool user create nfs-user --random-password + when: nfsuser.rc == 1 + delegate_to: "{{ authservers[0] }}" + tags: + - nfs-server + - service-principal + + - name: create service principal + command: "samba-tool spn add nfs/{{ ansible_fqdn }} nfs-user" + delegate_to: "{{ authservers[0] }}" + tags: + - nfs-server + - service-principal + + - name: export keytab + command: "samba-tool domain exportkeytab /root/{{ ansible_fqdn }}.keytab --principal nfs/{{ ansible_fqdn }}" + creates: "/root/{{ ansible_fqdn }}.keytab" + delegate_to: "{{ authservers[0] }}" + tags: + - nfs-server + - service-principal + + - name: copy keytab + synchronize: + src: "/root/{{ ansible_fqdn }}.keytab" + dest: "{{ ansible_fqdn }}:/root/{{ ansible_fqdn }}.keytab" + delegate_to: "{{ authservers[0] }}" + tags: + - nfs-server + - service-principal + + - name: ensure pexpect is installed + apt: name=python-pexpect state=installed + tags: + - nfs-server + - service-principal + + - name: merge keytabs + - expect: + command: ktutil + responses: + ktutil(.*): + - rkt /etc/krb5.keytab + - "rkt /root/{{ ansible_fqdn }}.keytab" + - wkt /etc/krb5.keytab + - exit + notify: + - restart nfs-server + tags: + - nfs-server + - service-principal + + - name: remove keytab at kdc + file: path="/root/{{ ansible_fqdn }}.keytab" state=absent + delegate_to: "{{ authservers[0] }}" + tags: + - nfs-server + - service-principal + + - name: remove keytab at host + file: path="/root/{{ ansible_fqdn }}.keytab" state=absent + tags: + - nfs-server + - service-principal + when: principal.rc == 1 + +- meta: flush_handlers diff --git a/nfs-server/templates/auto.nfs.j2 b/nfs-server/templates/auto.nfs.j2 new file mode 100644 index 0000000000000000000000000000000000000000..f60b42fdba4b1f5364781799c9847f6a18388cc4 --- /dev/null +++ b/nfs-server/templates/auto.nfs.j2 @@ -0,0 +1,3 @@ +{%- for share in nfs_shares %} +{{ share.netdir }} -{{ share.options }} {{ share.src }} +{% endfor -%}