summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorJonathan Bauer2013-07-31 19:05:27 +0200
committerJonathan Bauer2013-07-31 19:05:27 +0200
commit485f67a2bbaf45ac957b5d049f8337be625885cb (patch)
tree8dba148651a89b6ff4d03d09bafa6eadf7f4d670 /server
parent[pam] removed old data dir... (diff)
downloadtm-scripts-485f67a2bbaf45ac957b5d049f8337be625885cb.tar.gz
tm-scripts-485f67a2bbaf45ac957b5d049f8337be625885cb.tar.xz
tm-scripts-485f67a2bbaf45ac957b5d049f8337be625885cb.zip
[server] added new parameter for export target. Use: ./mltk server <ip> stage32 -e stage32 <config>. Added function in export_target to pack an archive with all the files found in activated modules of server/configs/<config>
Diffstat (limited to 'server')
-rw-r--r--server/configs/config.tgzbin0 -> 6661 bytes
l---------server/configs/freiburg/pam1
-rwxr-xr-xserver/export_target54
-rw-r--r--server/modules/pam-freiburg/etc/gssapi_mech.conf21
-rw-r--r--server/modules/pam-freiburg/etc/idmapd.conf12
-rw-r--r--server/modules/pam-freiburg/etc/krb5.conf28
-rw-r--r--server/modules/pam-freiburg/etc/ldap.conf11
-rw-r--r--server/modules/pam-freiburg/etc/ldap/ldap.conf7
l---------server/modules/pam-freiburg/etc/openldap/ldap.conf1
l---------server/modules/pam-freiburg/etc/pam-script/pam_script_ses_close1
l---------server/modules/pam-freiburg/etc/pam-script/pam_script_ses_open1
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/common-account26
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/common-auth27
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/common-password33
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/common-session37
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/common-session-noninteractive30
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/kdm10
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/kdm-np11
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/login101
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/other10
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/passwd6
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/sshd41
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/vmware-authd6
-rw-r--r--server/modules/pam-freiburg/etc/pam.d/xdm6
-rw-r--r--server/modules/pam-freiburg/etc/systemd/system/activate-nss-ldap.service10
l---------server/modules/pam-freiburg/etc/systemd/system/getty.target.wants/activate-nss-ldap.service1
l---------server/modules/pam-freiburg/etc/systemd/system/getty.target.wants/rpc-gssd.service1
l---------server/modules/pam-freiburg/etc/systemd/system/getty.target.wants/rpc-idmapd.service1
-rw-r--r--server/modules/pam-freiburg/etc/systemd/system/rpc-gssd.service7
-rw-r--r--server/modules/pam-freiburg/etc/systemd/system/rpc-idmapd.service7
-rw-r--r--server/modules/pam-freiburg/etc/systemd/system/run-rpc_pipefs.mount7
-rwxr-xr-xserver/modules/pam-freiburg/opt/openslx/scripts/pam_script_ses_close9
-rwxr-xr-xserver/modules/pam-freiburg/opt/openslx/scripts/pam_script_ses_open30
33 files changed, 541 insertions, 13 deletions
diff --git a/server/configs/config.tgz b/server/configs/config.tgz
new file mode 100644
index 00000000..01ad15a6
--- /dev/null
+++ b/server/configs/config.tgz
Binary files differ
diff --git a/server/configs/freiburg/pam b/server/configs/freiburg/pam
new file mode 120000
index 00000000..4e851a8d
--- /dev/null
+++ b/server/configs/freiburg/pam
@@ -0,0 +1 @@
+../../modules/pam-freiburg \ No newline at end of file
diff --git a/server/export_target b/server/export_target
index aa4795c5..fd4112b6 100755
--- a/server/export_target
+++ b/server/export_target
@@ -13,33 +13,32 @@
# stateless clients
#############################################################################
-#where we are
+# where we are
MODE_DIR="${ROOT_DIR}/server"
-#files generated by this script land in boot
+# files generated by this script land in boot
SERVER_BOOT_DIR="${MODE_DIR}/boot/${REMOTE_IP}"
-#builds from remote server
+# builds from remote server
SERVER_BUILD_DIR="${MODE_DIR}/local_builds/${REMOTE_IP}"
-#stage32 sqfs directory
+# stage32 sqfs directory
STAGE32_SQFS_DIR="${SERVER_BOOT_DIR}/stage32_sqfs/mnt"
+# target directory
+SERVER_CONFIGS_DIR="${MODE_DIR}/configs"
+
# initial checks
initial_checks() {
local TOOL_STR="$TOOL_STR initial_checks:"
- #check for required tools
- for BIN in squashfs-tools
- do
- if dpkg -l "${BIN}" 2&>/dev/null; then
- pinfo "Installing ${BIN}..."
- apt-get -y install ${BIN}
- fi
- done
-
[ ! -d "${SERVER_BOOT_DIR}" ] && mkdir -p "${SERVER_BOOT_DIR}"
+
+ # check if SERVER_EXPORT_TARGET is valid
+ if [ ! -d "${SERVER_CONFIGS_DIR}/${SERVER_EXPORT_CONFIG}" ]; then
+ perror "Given export config not found: ${SERVER_CONFIGS_DIR}/${SERVER_EXPORT_CONFIG}"
+ fi
}
copy_kernel() {
@@ -88,6 +87,34 @@ generate_addons() {
generate_config() {
# generate config from the target directory
+ local TOOL_STR="${TOOL_STR} generate_config:"
+ pinfo "Generating config.tgz for '$SERVER_EXPORT_CONFIG'"
+
+ local TARGET_CONFIG="${SERVER_CONFIGS_DIR}/${SERVER_EXPORT_CONFIG}"
+
+ # its not possible to append files to a compressed tar archiv, so start with
+ # a simple tar which we will gzip at the end.
+
+ local TARGET_CONFIG_PATH="${SERVER_CONFIGS_DIR}/config.tar"
+ local TARGET_COMPRESSED_CONFIG_PATH="${SERVER_CONFIGS_DIR}/config.tgz"
+
+ [ -e "$TARGET_COMPRESSED_CONFIG_PATH" ] && rm -f "$TARGET_COMPRESSED_CONFIG_PATH"
+
+ for MODULE_CONFIG in $(ls "$TARGET_CONFIG"); do
+ # add files in that directory to config.tgz
+ cd "$TARGET_CONFIG/$MODULE_CONFIG" || perror "Could not cd to $TARGET_CONFIG/$MODULE_CONFIG"
+ tar rf "${TARGET_CONFIG_PATH}" $(ls)
+ RET=$?
+ if [ "x$RET" != "x0" ]; then
+ # something went wrong
+ perror "Could not add files from $MODULE_CONFIG to $TARGET_CONFIG_PATH"
+ fi
+ done
+
+ # now gzip the tarball
+ gzip "${TARGET_CONFIG_PATH}" || perror "Could not gzip ${TARGET_CONFIG_PATH}"
+ mv "${TARGET_CONFIG_PATH}.gz" "${TARGET_COMPRESSED_CONFIG_PATH}"
+
}
export_target() {
@@ -104,6 +131,7 @@ case "$2" in
;;
stage32)
generate_stage32
+ generate_config
;;
addons)
generate_addons
diff --git a/server/modules/pam-freiburg/etc/gssapi_mech.conf b/server/modules/pam-freiburg/etc/gssapi_mech.conf
new file mode 100644
index 00000000..ac41f5fd
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/gssapi_mech.conf
@@ -0,0 +1,21 @@
+# Example /etc/gssapi_mech.conf file
+#
+# GSSAPI Mechanism Definitions
+#
+# This configuration file determines which GSS-API mechanisms
+# the gssd code should use
+#
+# NOTE:
+# The initiaiization function "mechglue_internal_krb5_init"
+# is used for the MIT krb5 gssapi mechanism. This special
+# function name indicates that an internal function should
+# be used to determine the entry points for the MIT gssapi
+# mechanism funtions.
+#
+# library initialization function
+# ================================ ==========================
+# The MIT K5 gssapi library, use special function for initialization.
+libgssapi_krb5.so.2 mechglue_internal_krb5_init
+#
+# The SPKM3 gssapi library function. Use the function spkm3_gss_initialize.
+# /usr/local/gss_mechs/spkm/spkm3/libgssapi_spkm3.so spkm3_gss_initialize
diff --git a/server/modules/pam-freiburg/etc/idmapd.conf b/server/modules/pam-freiburg/etc/idmapd.conf
new file mode 100644
index 00000000..2253cf0d
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/idmapd.conf
@@ -0,0 +1,12 @@
+[General]
+
+Verbosity = 0
+Pipefs-Directory = /run/rpc_pipefs
+# set your own domain here, if id differs from FQDN minus hostname
+Domain = uni-freiburg.de
+# localdomain
+
+[Mapping]
+
+Nobody-User = nobody
+Nobody-Group = nogroup
diff --git a/server/modules/pam-freiburg/etc/krb5.conf b/server/modules/pam-freiburg/etc/krb5.conf
new file mode 100644
index 00000000..6fd49243
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/krb5.conf
@@ -0,0 +1,28 @@
+# file copied from configuration package (rootfs/etc/krb5.conf)
+#########################################################################
+[libdefaults]
+ noaddresses = false
+ clockskew = 300
+ default_realm = PUBLIC.ADS.UNI-FREIBURG.DE
+ forwardable = true
+ minimum_uid = 1000
+ proxiable = false
+ renew_lifetime = 30d
+ retain_after_close = false
+ ticket_lifetime = 3d
+ use_shmem = sshd
+ allow_weak_crypto=true
+#########################################################################
+[realms]
+ PUBLIC.ADS.UNI-FREIBURG.DE = {
+ kdc = kerberos.uni-freiburg.de
+ default_domain = uni-freiburg.de
+ admin_server = kerberos.uni-freiburg.de
+ }
+#########################################################################
+[domain_realm]
+ uni-freiburg.de = PUBLIC.ADS.UNI-FREIBURG.DE
+ .uni-freiburg.de = PUBLIC.ADS.UNI-FREIBURG.DE
+##########################################################################
+[appdefaults]
+#########################################################################
diff --git a/server/modules/pam-freiburg/etc/ldap.conf b/server/modules/pam-freiburg/etc/ldap.conf
new file mode 100644
index 00000000..483595d2
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/ldap.conf
@@ -0,0 +1,11 @@
+URI ldaps://bv1.ruf.uni-freiburg.de ldaps://bv2.ruf.uni-freiburg.de ldaps://bv3.ruf.uni-freiburg.de
+BASE ou=people,dc=uni-freiburg,dc=de
+BIND_TIMELIMIT 5
+TIMELIMIT 10
+LOGDIR /tmp/ldap
+TLS_REQCERT allow
+nss_base_passwd ou=people,dc=uni-freiburg,dc=de?one?rufdienst=ldap*)(&(rufclienthome=*)(rufstatus=enabled)
+nss_base_group ou=group,dc=uni-freiburg,dc=de?one
+nss_map_attribute homeDirectory rufClientHome
+
+nss_initgroups_ignoreusers avahi,avahi-autoipd,backup,bin,colord,daemon,distccd,games,git,gnats,hplip,irc,kdm,kernoops,libuuid,lightdm,list,lp,mail,man,messagebus,news,ntp,proxy,pulse,root,rtkit,saned,speech-dispatcher,sshd,statd,sync,sys,syslog,usbmux,uucp,whoopsie,www-data
diff --git a/server/modules/pam-freiburg/etc/ldap/ldap.conf b/server/modules/pam-freiburg/etc/ldap/ldap.conf
new file mode 100644
index 00000000..809065cc
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/ldap/ldap.conf
@@ -0,0 +1,7 @@
+URI ldaps://bv1.ruf.uni-freiburg.de ldaps://bv2.ruf.uni-freiburg.de ldaps://bv3.ruf.uni-freiburg.de
+BASE ou=people,dc=uni-freiburg,dc=de
+TLS_REQCERT allow
+nss_base_passwd ou=people,dc=uni-freiburg,dc=de?one?rufdienst=ldap*)(&(rufclienthome=*)(rufstatus=enabled)
+nss_base_group ou=group,dc=uni-freiburg,dc=de?one
+nss_map_attribute homeDirectory rufClientHome
+
diff --git a/server/modules/pam-freiburg/etc/openldap/ldap.conf b/server/modules/pam-freiburg/etc/openldap/ldap.conf
new file mode 120000
index 00000000..c0aaf459
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/openldap/ldap.conf
@@ -0,0 +1 @@
+/etc/ldap.conf \ No newline at end of file
diff --git a/server/modules/pam-freiburg/etc/pam-script/pam_script_ses_close b/server/modules/pam-freiburg/etc/pam-script/pam_script_ses_close
new file mode 120000
index 00000000..f3682056
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam-script/pam_script_ses_close
@@ -0,0 +1 @@
+/opt/openslx/scripts/pam_script_ses_close \ No newline at end of file
diff --git a/server/modules/pam-freiburg/etc/pam-script/pam_script_ses_open b/server/modules/pam-freiburg/etc/pam-script/pam_script_ses_open
new file mode 120000
index 00000000..4f5598e5
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam-script/pam_script_ses_open
@@ -0,0 +1 @@
+/opt/openslx/scripts/pam_script_ses_open \ No newline at end of file
diff --git a/server/modules/pam-freiburg/etc/pam.d/common-account b/server/modules/pam-freiburg/etc/pam.d/common-account
new file mode 100644
index 00000000..3a5d5a14
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/common-account
@@ -0,0 +1,26 @@
+#
+# /etc/pam.d/common-account - authorization settings common to all services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of the authorization modules that define
+# the central access policy for use on the system. The default is to
+# only deny service to users whose accounts are expired in /etc/shadow.
+#
+# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
+# To take advantage of this, it is recommended that you configure any
+# local modules either before or after the default block, and use
+# pam-auth-update to manage selection of other modules. See
+# pam-auth-update(8) for details.
+#
+
+# here are the per-package modules (the "Primary" block)
+account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
+account [success=1 new_authtok_reqd=done default=ignore] pam_ldap.so use_first_pass
+# here's the fallback if no module succeeds
+account requisite pam_deny.so
+# prime the stack with a positive return value if there isn't one already;
+# this avoids us returning an error just because nothing sets a success code
+# since the modules above will each just jump around
+account required pam_permit.so
+# and here are more per-package modules (the "Additional" block)
+# end of pam-auth-update config
diff --git a/server/modules/pam-freiburg/etc/pam.d/common-auth b/server/modules/pam-freiburg/etc/pam.d/common-auth
new file mode 100644
index 00000000..5b544395
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/common-auth
@@ -0,0 +1,27 @@
+#
+# /etc/pam.d/common-auth - authentication settings common to all services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of the authentication modules that define
+# the central authentication scheme for use on the system
+# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
+# traditional Unix authentication mechanisms.
+#
+# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
+# To take advantage of this, it is recommended that you configure any
+# local modules either before or after the default block, and use
+# pam-auth-update to manage selection of other modules. See
+# pam-auth-update(8) for details.
+
+# here are the per-package modules (the "Primary" block)
+auth [success=3 default=ignore] pam_krb5.so minimum_uid=1000
+auth [success=2 default=ignore] pam_unix.so try_first_pass
+auth [success=1 default=ignore] pam_ldap.so use_first_pass nullok_secure
+# here's the fallback if no module succeeds
+auth requisite pam_deny.so
+# prime the stack with a positive return value if there isn't one already;
+# this avoids us returning an error just because nothing sets a success code
+# since the modules above will each just jump around
+auth required pam_permit.so
+# and here are more per-package modules (the "Additional" block)
+# end of pam-auth-update config
diff --git a/server/modules/pam-freiburg/etc/pam.d/common-password b/server/modules/pam-freiburg/etc/pam.d/common-password
new file mode 100644
index 00000000..cb8c7b71
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/common-password
@@ -0,0 +1,33 @@
+#
+# /etc/pam.d/common-password - password-related modules common to all services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of modules that define the services to be
+# used to change user passwords. The default is pam_unix.
+
+# Explanation of pam_unix options:
+#
+# The "sha512" option enables salted SHA512 passwords. Without this option,
+# the default is Unix crypt. Prior releases used the option "md5".
+#
+# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
+# login.defs.
+#
+# See the pam_unix manpage for other options.
+
+# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
+# To take advantage of this, it is recommended that you configure any
+# local modules either before or after the default block, and use
+# pam-auth-update to manage selection of other modules. See
+# pam-auth-update(8) for details.
+
+# here are the per-package modules (the "Primary" block)
+password [success=1 default=ignore] pam_unix.so obscure sha512
+# here's the fallback if no module succeeds
+password requisite pam_deny.so
+# prime the stack with a positive return value if there isn't one already;
+# this avoids us returning an error just because nothing sets a success code
+# since the modules above will each just jump around
+password required pam_permit.so
+# and here are more per-package modules (the "Additional" block)
+# end of pam-auth-update config
diff --git a/server/modules/pam-freiburg/etc/pam.d/common-session b/server/modules/pam-freiburg/etc/pam.d/common-session
new file mode 100644
index 00000000..6182d470
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/common-session
@@ -0,0 +1,37 @@
+#
+# /etc/pam.d/common-session - session-related modules common to all services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of modules that define tasks to be performed
+# at the start and end of sessions of *any* kind (both interactive and
+# non-interactive).
+#
+# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
+# To take advantage of this, it is recommended that you configure any
+# local modules either before or after the default block, and use
+# pam-auth-update to manage selection of other modules. See
+# pam-auth-update(8) for details.
+
+# here are the per-package modules (the "Primary" block)
+session [default=1] pam_permit.so
+# here's the fallback if no module succeeds
+session requisite pam_deny.so
+# prime the stack with a positive return value if there isn't one already;
+# this avoids us returning an error just because nothing sets a success code
+# since the modules above will each just jump around
+session required pam_permit.so
+# The pam_umask module will set the umask according to the system default in
+# /etc/login.defs and user settings, solving the problem of different
+# umask settings with different shells, display managers, remote sessions etc.
+# See "man pam_umask".
+session optional pam_umask.so
+# and here are more per-package modules (the "Additional" block)
+session required pam_systemd.so
+session optional pam_env.so readenv=1
+session optional pam_env.so readenv=1 envfile=/etc/default/locale
+session optional pam_krb5.so minimum_uid=1000
+session [success=1] pam_unix.so
+session [success=ok] pam_ldap.so
+session sufficient pam_script.so
+session optional pam_mkhomedir.so skel=/etc/skel umask=0022
+# end of pam-auth-update config
diff --git a/server/modules/pam-freiburg/etc/pam.d/common-session-noninteractive b/server/modules/pam-freiburg/etc/pam.d/common-session-noninteractive
new file mode 100644
index 00000000..1fee2c4f
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/common-session-noninteractive
@@ -0,0 +1,30 @@
+#
+# /etc/pam.d/common-session-noninteractive - session-related modules
+# common to all non-interactive services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of modules that define tasks to be performed
+# at the start and end of all non-interactive sessions.
+#
+# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
+# To take advantage of this, it is recommended that you configure any
+# local modules either before or after the default block, and use
+# pam-auth-update to manage selection of other modules. See
+# pam-auth-update(8) for details.
+
+# here are the per-package modules (the "Primary" block)
+session [default=1] pam_permit.so
+# here's the fallback if no module succeeds
+session requisite pam_deny.so
+# prime the stack with a positive return value if there isn't one already;
+# this avoids us returning an error just because nothing sets a success code
+# since the modules above will each just jump around
+session required pam_permit.so
+# The pam_umask module will set the umask according to the system default in
+# /etc/login.defs and user settings, solving the problem of different
+# umask settings with different shells, display managers, remote sessions etc.
+# See "man pam_umask".
+session optional pam_umask.so
+# and here are more per-package modules (the "Additional" block)
+session required pam_unix.so
+# end of pam-auth-update config
diff --git a/server/modules/pam-freiburg/etc/pam.d/kdm b/server/modules/pam-freiburg/etc/pam.d/kdm
new file mode 100644
index 00000000..e6a4ec9b
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/kdm
@@ -0,0 +1,10 @@
+#
+# /etc/pam.d/kdm - specify the PAM behaviour of kdm
+#
+auth required pam_nologin.so
+auth required pam_env.so readenv=1
+auth required pam_env.so readenv=1 envfile=/etc/default/locale
+auth include common-auth
+account include common-account
+password include common-password
+session include common-session
diff --git a/server/modules/pam-freiburg/etc/pam.d/kdm-np b/server/modules/pam-freiburg/etc/pam.d/kdm-np
new file mode 100644
index 00000000..dc10e5b5
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/kdm-np
@@ -0,0 +1,11 @@
+#
+# /etc/pam.d/kdm-np - specify the PAM behaviour of kdm for passwordless logins
+#
+auth required pam_nologin.so
+auth required pam_env.so readenv=1
+auth required pam_env.so readenv=1 envfile=/etc/default/locale
+session required pam_limits.so
+account include common-account
+password include common-password
+session include common-session
+auth required pam_permit.so
diff --git a/server/modules/pam-freiburg/etc/pam.d/login b/server/modules/pam-freiburg/etc/pam.d/login
new file mode 100644
index 00000000..1065f351
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/login
@@ -0,0 +1,101 @@
+#
+# The PAM configuration file for the Shadow `login' service
+#
+
+# Enforce a minimal delay in case of failure (in microseconds).
+# (Replaces the `FAIL_DELAY' setting from login.defs)
+# Note that other modules may require another minimal delay. (for example,
+# to disable any delay, you should add the nodelay option to pam_unix)
+auth optional pam_faildelay.so delay=3000000
+
+# Outputs an issue file prior to each login prompt (Replaces the
+# ISSUE_FILE option from login.defs). Uncomment for use
+# auth required pam_issue.so issue=/etc/issue
+
+# Disallows root logins except on tty's listed in /etc/securetty
+# (Replaces the `CONSOLE' setting from login.defs)
+#
+# With the default control of this module:
+# [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die]
+# root will not be prompted for a password on insecure lines.
+# if an invalid username is entered, a password is prompted (but login
+# will eventually be rejected)
+#
+# You can change it to a "requisite" module if you think root may mis-type
+# her login and should not be prompted for a password in that case. But
+# this will leave the system as vulnerable to user enumeration attacks.
+#
+# You can change it to a "required" module if you think it permits to
+# guess valid user names of your system (invalid user names are considered
+# as possibly being root on insecure lines), but root passwords may be
+# communicated over insecure lines.
+auth [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so
+
+# Disallows other than root logins when /etc/nologin exists
+# (Replaces the `NOLOGINS_FILE' option from login.defs)
+auth requisite pam_nologin.so
+
+# 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.)
+# OpenSLX: Not Needed?
+#session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
+
+# This module parses environment configuration file(s)
+# and also allows you to use an extended config
+# file /etc/security/pam_env.conf.
+#
+# parsing /etc/environment needs "readenv=1"
+session required pam_env.so readenv=1
+# locale variables are also kept into /etc/default/locale in etch
+# reading this file *in addition to /etc/environment* does not hurt
+session required pam_env.so readenv=1 envfile=/etc/default/locale
+
+# Standard Un*x authentication.
+auth include common-auth
+
+# TODO do we need this?
+# This allows certain extra groups to be granted to a user
+# based on things like time of day, tty, service, and user.
+# Please edit /etc/security/group.conf to fit your needs
+# (Replaces the `CONSOLE_GROUPS' option in login.defs)
+#auth optional pam_group.so
+
+# Uncomment and edit /etc/security/time.conf if you need to set
+# time restrainst on logins.
+# (Replaces the `PORTTIME_CHECKS_ENAB' option from login.defs
+# as well as /etc/porttime)
+# account requisite pam_time.so
+
+# Uncomment and edit /etc/security/access.conf if you need to
+# set access limits.
+# (Replaces /etc/login.access file)
+# account required pam_access.so
+
+# TODO do we need this?
+# Sets up user limits according to /etc/security/limits.conf
+# (Replaces the use of /etc/limits in old login)
+#session required pam_limits.so
+
+# TODO check if this is needed
+# Prints the last login info upon succesful login
+# (Replaces the `LASTLOG_ENAB' option from login.defs)
+session optional pam_lastlog.so
+
+# Prints the motd upon succesful login
+# (Replaces the `MOTD_FILE' option in login.defs)
+session optional pam_motd.so
+
+# Standard Un*x account and session
+account include common-account
+session include common-session
+password include common-password
+
+# 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.)
diff --git a/server/modules/pam-freiburg/etc/pam.d/other b/server/modules/pam-freiburg/etc/pam.d/other
new file mode 100644
index 00000000..840eb77f
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/other
@@ -0,0 +1,10 @@
+#%PAM-1.0
+auth required pam_warn.so
+auth required pam_deny.so
+account required pam_warn.so
+account required pam_deny.so
+password required pam_warn.so
+password required pam_deny.so
+session required pam_warn.so
+session required pam_deny.so
+
diff --git a/server/modules/pam-freiburg/etc/pam.d/passwd b/server/modules/pam-freiburg/etc/pam.d/passwd
new file mode 100644
index 00000000..32eaa3c6
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/passwd
@@ -0,0 +1,6 @@
+#
+# The PAM configuration file for the Shadow `passwd' service
+#
+
+password include common-password
+
diff --git a/server/modules/pam-freiburg/etc/pam.d/sshd b/server/modules/pam-freiburg/etc/pam.d/sshd
new file mode 100644
index 00000000..8954d639
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/sshd
@@ -0,0 +1,41 @@
+# PAM configuration for the Secure Shell service
+
+# Read environment variables from /etc/environment and
+# /etc/security/pam_env.conf.
+auth required pam_env.so # [1]
+# In Debian 4.0 (etch), locale-related environment variables were moved to
+# /etc/default/locale, so read that as well.
+auth required pam_env.so envfile=/etc/default/locale
+
+# Standard Un*x authentication.
+auth include common-auth
+
+# Disallow non-root logins when /etc/nologin exists.
+account required pam_nologin.so
+
+# Uncomment and edit /etc/security/access.conf if you need to set complex
+# access limits that are hard to express in sshd_config.
+# account required pam_access.so
+
+# Standard Un*x authorization.
+account include common-account
+
+# Standard Un*x session setup and teardown.
+session include common-session
+
+# Print the message of the day upon successful login.
+session optional pam_motd.so # [1]
+
+# TODO do we need this?
+# Print the status of the user's mailbox upon successful login.
+#session optional pam_mail.so standard noenv # [1]
+
+# TODO do we need this?
+# Set up user limits from /etc/security/limits.conf.
+#session required pam_limits.so
+
+# Set up SELinux capabilities (need modified pam)
+# session required pam_selinux.so multiple
+
+# Standard Un*x password updating.
+password include common-password
diff --git a/server/modules/pam-freiburg/etc/pam.d/vmware-authd b/server/modules/pam-freiburg/etc/pam.d/vmware-authd
new file mode 100644
index 00000000..1f9b60f9
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/vmware-authd
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth include common-auth
+account include common-account
+password include common-password
+session include common-session
+
diff --git a/server/modules/pam-freiburg/etc/pam.d/xdm b/server/modules/pam-freiburg/etc/pam.d/xdm
new file mode 100644
index 00000000..d21651db
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/pam.d/xdm
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth include common-auth
+account include common-account
+password include common-password
+session required pam_loginuid.so
+session include common-session
diff --git a/server/modules/pam-freiburg/etc/systemd/system/activate-nss-ldap.service b/server/modules/pam-freiburg/etc/systemd/system/activate-nss-ldap.service
new file mode 100644
index 00000000..bbac775a
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/systemd/system/activate-nss-ldap.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Activate NSS-LDAP lookups
+Before=graphical.target
+
+[Service]
+Type=oneshot
+ExecStart=-/opt/openslx/bin/mkdir /tmp/ldap
+ExecStart=/opt/openslx/bin/sed -i -e 's/^passwd:.*$/passwd:\t\tcache files ldap/;s/^group:.*$/group:\t\tcache files ldap/;s/^hosts:.*files/hosts:\t\tcache files/' /etc/nsswitch.conf
+ExecStart=/usr/bin/systemctl restart nscd
+
diff --git a/server/modules/pam-freiburg/etc/systemd/system/getty.target.wants/activate-nss-ldap.service b/server/modules/pam-freiburg/etc/systemd/system/getty.target.wants/activate-nss-ldap.service
new file mode 120000
index 00000000..1102840c
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/systemd/system/getty.target.wants/activate-nss-ldap.service
@@ -0,0 +1 @@
+../activate-nss-ldap.service \ No newline at end of file
diff --git a/server/modules/pam-freiburg/etc/systemd/system/getty.target.wants/rpc-gssd.service b/server/modules/pam-freiburg/etc/systemd/system/getty.target.wants/rpc-gssd.service
new file mode 120000
index 00000000..194aba77
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/systemd/system/getty.target.wants/rpc-gssd.service
@@ -0,0 +1 @@
+../rpc-gssd.service \ No newline at end of file
diff --git a/server/modules/pam-freiburg/etc/systemd/system/getty.target.wants/rpc-idmapd.service b/server/modules/pam-freiburg/etc/systemd/system/getty.target.wants/rpc-idmapd.service
new file mode 120000
index 00000000..66a28252
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/systemd/system/getty.target.wants/rpc-idmapd.service
@@ -0,0 +1 @@
+../rpc-idmapd.service \ No newline at end of file
diff --git a/server/modules/pam-freiburg/etc/systemd/system/rpc-gssd.service b/server/modules/pam-freiburg/etc/systemd/system/rpc-gssd.service
new file mode 100644
index 00000000..79ffce8d
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/systemd/system/rpc-gssd.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=NFS rpcsec_gss daemon
+Requires=run-rpc_pipefs.mount
+After=run-rpc_pipefs.mount
+
+[Service]
+ExecStart=/usr/sbin/rpc.gssd -f -vvv -p /run/rpc_pipefs
diff --git a/server/modules/pam-freiburg/etc/systemd/system/rpc-idmapd.service b/server/modules/pam-freiburg/etc/systemd/system/rpc-idmapd.service
new file mode 100644
index 00000000..c4da93e7
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/systemd/system/rpc-idmapd.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=NFSv4 ID-name mapping daemon
+Requires=network.target run-rpc_pipefs.mount
+After=network.target
+
+[Service]
+ExecStart=/usr/sbin/rpc.idmapd -f
diff --git a/server/modules/pam-freiburg/etc/systemd/system/run-rpc_pipefs.mount b/server/modules/pam-freiburg/etc/systemd/system/run-rpc_pipefs.mount
new file mode 100644
index 00000000..692adce8
--- /dev/null
+++ b/server/modules/pam-freiburg/etc/systemd/system/run-rpc_pipefs.mount
@@ -0,0 +1,7 @@
+[Unit]
+Description=Pipefs RPC filesystem
+
+[Mount]
+What=rpc_pipefs
+Where=/run/rpc_pipefs
+Type=rpc_pipefs
diff --git a/server/modules/pam-freiburg/opt/openslx/scripts/pam_script_ses_close b/server/modules/pam-freiburg/opt/openslx/scripts/pam_script_ses_close
new file mode 100755
index 00000000..2b6f6105
--- /dev/null
+++ b/server/modules/pam-freiburg/opt/openslx/scripts/pam_script_ses_close
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/openslx/bin:/opt/openslx/sbin:/opt/openslx/usr/bin:/opt/openslx/usr/sbin"
+
+[ ! -z "$SLX_DEBUG" ] && echo "[$PAM_TYPE] Closing session for $PAM_USER"
+
+# TODO check if its the last session of the user.
+
+[ $(id -g $PAM_USER) -ge 1000 ] && umount /home/$PAM_USER
diff --git a/server/modules/pam-freiburg/opt/openslx/scripts/pam_script_ses_open b/server/modules/pam-freiburg/opt/openslx/scripts/pam_script_ses_open
new file mode 100755
index 00000000..f5ad8af1
--- /dev/null
+++ b/server/modules/pam-freiburg/opt/openslx/scripts/pam_script_ses_open
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/openslx/bin:/opt/openslx/sbin:/opt/openslx/usr/bin:/opt/openslx/usr/sbin"
+
+[ ! -z "$SLX_DEBUG" ] && echo "[$PAM_TYPE] Opening session for $PAM_USER"
+
+if [ $(id -g $PAM_USER) -ge 1000 ]; then
+ [ ! -z "$SLX_DEBUG" ] && echo "[$PAM_TYPE] Mounting home directory for $PAM_USER"
+
+ # generate keytab
+ sslconnect npserv.ruf.uni-freiburg.de:3 > /etc/krb5.keytab
+ chmod 600 /etc/krb5.keytab
+
+ # determine fileserver and share for home directories
+ ldapsearch -x -LLL uid="$PAM_USER" homeDirectory rufFileserver > /tmp/ldapsearch."$PAM_USER"
+
+ FILESERVER=$(cat /tmp/ldapsearch.$PAM_USER | grep rufFileserver | cut -d" " -f2)
+ VOLUME=$(cat /tmp/ldapsearch.$PAM_USER | grep homeDirectory | cut -d" " -f2)
+
+ # now we can mount the home directory
+ mkdir -p /home/$PAM_USER
+ if mount -t nfs4 -o rw,nosuid,nodev,nolock,intr,hard,sloppy,sec=krb5p "$FILESERVER":"$VOLUME" /home/"$PAM_USER"; then
+ exit 0
+ else
+ echo "Failed to mount home directory for $PAM_USER"
+ exit 1
+ fi
+
+fi
+