#%PAM-1.0
# Block login if shell in (nologin, false) or if for maintanence
auth       required   pam_succeed_if.so shell notin /sbin/nologin:/usr/sbin/nologin:/bin/false:/usr/bin/false
auth       requisite  pam_nologin.so

# Block login for root user; set authentication rules
auth       required   pam_succeed_if.so user != root quiet_success
auth       required   pam_permit.so
auth       required   pam_unix.so

# Fail all requests to modify passwords
password   required   pam_deny.so

# Load environment from /etc/environment and ~/.pam_environment
session    required   pam_env.so readenv=1
session    required   pam_env.so readenv=1 envfile=/etc/locale.conf
session    required   pam_env.so readenv=1 envfile=/etc/default/locale

# SELinux needs to be the first session rule. This ensures that any
# lingering context has been cleared. Without out this it is possible
# that a module could execute code in the wrong domain.
# When the module is present, "required" would be sufficient (When SELinux
# is disabled, this returns success.)
session    [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
session    required   pam_limits.so
session    required   pam_loginuid.so

# SELinux needs to intervene at login time to ensure that the process
# starts in the proper default security context. Only sessions which are
# intended to run in the user's context should be run after this.
session    [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
# When the module is present, "required" would be sufficient (When SELinux
# is disabled, this returns success.)
