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 -%}