Authentisierung mit sssd

Im folgenden wird beschrieben wie Sie ein Red Hat Enterprise Linux System (ab Version 6.x) so einrichten, dass sich dessen Benutzer über den sssd AD-Provider an der ETHZ Infrastruktur authentisieren können und beim Login automatisch ein lokales Homeverzeichnis erstellt wird, falls dieses noch nicht existiert.

Table Of Contents

Voraussetzungen

Prüfen Sie bitte zunächst, dass die im folgenden beschriebenen Vorraussetzungen erfüllt sind.

Pakete

Bitte stellen Sie sicher, dass die benötigten Pakete auf dem anzubindenden System vorhanden sind:

sssd krb5-workstation samba-common authconfig

Die Paketnamen können bei anderen Distributionen abweichen.

Posix Attribute

Das an der ETHZ genutzte Active Directory D.ETHZ.CH enthält bereits die notwendigen Posix Erweiterungen (Services for Unix).

Attribute wie das Home Verzeichnis, oder die Login Shell lassen sich mit dem nethz Admin-Tool in den Mailbox-Service-Einstellungen bearbeiten.

Die empfohlene Einstellung für das Unix Home Verzeichnis lautet /home/IHR_USERNAME, wobei Sie bitte IHR_USERNAME durch den Namen Ihres Benutzerkontos ersetzen.

DNS

Stellen Sie bitte sicher, dass die DNS Server korrekt konfiguriert sind und in der Suchreihenfolge zuerst d.ethz.ch gelistet wird.

Eine /etc/resolv.conf Datei kann z.B. wie folgt aussehen:

      nameserver 129.132.135.5
nameserver 129.132.135.6
nameserver 129.132.135.37
search d.ethz.ch ethz.ch

Bei der Nutzung von DHCP, könnte eine Interface-Konfiguration /etc/sysconfig/network-scripts/ifcfg-IHR_NETZWERK_INTERFACE wie folgt aussehen:

      IPV6INIT="no"
NM_CONTROLLED="yes"
BOOTPROTO="dhcp"
DEVICE="IHR_NETZWERK_INTERFACE"
ONBOOT="yes"
PEERDNS="no"
DNS1="129.132.135.5"
DNS2="129.132.135.6"
DNS3="129.132.135.37" DOMAIN="d.ethz.ch ethz.ch"

Passen Sie bitte IHR_NETZWERK_INTERFACE an den Namen Ihrer Netzwerk Schnittstelle an (z.B. eth0, oder enp0s3 ...)

Nach einem Neustart des Netzwerkdienst mit service network restart sollte der Inhalt der Datei /etc/resolv.conf dadurch korrekt befüllt werden.

sssd

Erstellen Sie bitte eine sssd Konfigurationsdatei /etc/sssd/sssd.conf mit dem Inhalt:

[sssd]
config_file_version = 2

# Number of times services should attempt to reconnect in the
# event of a crash or restart before they give up
reconnection_retries = 3

# If a back end is particularly slow you can raise this timeout here
sbus_timeout = 30
services = nss, pam

# SSSD will not start if you do not configure any domains.
# Add new domain configurations as [domain/<NAME>] sections, and
# then add the list of domains (in the order you want them to be
# queried) to the "domains" attribute below and uncomment it.
# domains = LOCAL,LDAP

domains = D.ETHZ.CH

[nss]
# The following prevents SSSD from searching for the root user/group in
# all domains (you can add here a comma-separated list of system accounts that
# are always going to be /etc/passwd users, or that you want to filter out).
filter_groups = root
filter_users = root
reconnection_retries = 3

# The entry_cache_timeout indicates the number of seconds to retain an
# entry in cache before it is considered stale and must block to refresh.
# The entry_cache_nowait_timeout indicates the number of seconds to
# wait before updating the cache out-of-band. (NSS requests will still
# be returned from cache until the full entry_cache_timeout). Setting this
# value to 0 turns this feature off (default).
# entry_cache_timeout = 600
# entry_cache_nowait_timeout = 300

[pam]
reconnection_retries = 3

[domain/D.ETHZ.CH]
#debug_level=5
id_provider = ad
ad_domain = d.ethz.ch
dns_discovery_domain = d.ethz.ch
krb5_realm = D.ETHZ.CH
ldap_user_principal = xyz.example
ldap_id_mapping = false
dyndns_update = false
ldap_use_tokengroups=false
ldap_group_nesting_level=1
krb5_ccname_template = KEYRING:persistent:%{uid}

Führen Sie nach der Erstellung der Datei bitte ein:

chmod 600 /etc/sssd/sssd.conf

durch.

Hinweis: Der Parameter ldap_group_nesting_levelbetrifft die Tiefe mit der verschachtelte Gruppen aufgelöst werden sollen. Passen Sie den Wert bitte bei Bedarf an. Der Beispielwert in der obigen Konfiguration stellt einen Kompromiss aus Performance und Funktionalität dar.

Kerberos

Der (lesende) Zugriff auf das LDAP erfolgt ueber die GSSAPI Schnittstelle mit Hilfe eines zuvor erstellten Keytab-Files. Alternativ besteht die Möglichkeit die Maschine in das Active Directory zu joinen. Im folgenden werden beide Varianten beschrieben; wählen Sie bitte die für Sie passende aus.

Keytab erzeugen

Um ein Keytab-File erzeugen zu können, benötigen Sie das Programm ktpass. Dabei handelt es sich um eine Anwendung, die für aktuelle Windows Server Version zur Verfügung steht. Die Gruppe Client Delivery betreibt im Bereich Baramundi Terminalserver, auf denen das Kommando ausgeführt werden kann. Beachten Sie bitte, dass Ihr Konto über sogenannte OU-Admin-Rechte im Active Directory der ETHZ verfügen muss.

Erstellen Sie in Ihrer OU bitte zunächst einen Mapping-Benutzer, dem das Keytab-File später zugeordnet werden kann.

Erzeugen Sie daraufhin das Keytab-File mit dem Befehl:

      ktpass /out krb5.keytab /mapuser IHR_MAPPING_USER@D.ETHZ.CH /princ IHR_SPN/d.ethz.ch@D.ETHZ.CH /crypto AES256-SHA1 /pass randpass /ptype KRB5_NT_PRINCIPAL

wobei Sie bitte IHR_MAPPING_USERNAME durch den tatsächlichen Namen des neu erstellten Mapping-Benutzers und IHR_SPN durch den gewünschten Service-Principal-Name ersetzen. Kopieren Sie das erzeugte Keytab z.B. per SCP auf das Zielsystem. Für Windows eignet sich dazu das Programm WinSCP.

Speichern Sie dort bitte das Keytab-File unter /etc/krb5.keytab ab. Beachten Sie bitte, dass nur der root Benutzer Rechte auf diese Datei erhalten sollte (chmod 600 /etc/krb5.keytab). Bei aktiviertem SELinux führen Sie bitte noch ein restorecon -v /etc/krb5.keytab aus, nachdem Sie die Datei kopiert haben. Damit wird sichergestellt, dass der Kontext korrekt ist.

Domain-Join

Um ein Linux-System an das Active Directory der ETHZ zu joinen, erstellen Sie bitte eine Samba Konfigurationsdatei /etc/samba/smb.conf mit folgendem Inhalt:

      [global]
        workgroup = D
        client signing = yes
        client use spnego = yes
        kerberos method = secrets and keytab
        log file = /var/log/samba/%m.log
        password server = D.ETHZ.CH
        realm = D.ETHZ.CH
        security = ads
        netbios name = IHR_NETBIOSNAME

Ersetzen Sie bitte IHR_NETBIOSNAME durch den Computerkonto-Namen, der im Active Directory erzeugt werden soll (max. 16 Zeichen).

Daraufhin können Sie den Computer mit Hilfe von:

      net ads join -U IHR_OUADMIN createcomputer=Hosting/ID-BD-CD/OUs/ID-RHN/computers

zur Domain joinen. Ersetzen Sie bitte IHR_OUADMIN durch den Namen des Kontos, das join Rechte auf die unter createcomputer angegebene OU hat. Die im obigen Beispiel angegebene OU passen Sie bitte an Ihre Gegebenheiten an.

Eine mögliche Fehlermeldung bzgl. nicht erfolgter DNS-Einträge können Sie ignorieren. Das AD-DNS der ETHZ erlaubt diese Einstellungen nicht.

Kerberos konfigurieren

Für das Credential-Caching wird eine Kerberos Konfiguration erwartet.

Bitte konfigurieren Sie Kerberos in beiden Fällen (Keytab oder Domain-Join) mit folgenden Einstellungen in der Datei /etc/krb5.conf

      [libdefaults]
        dns_lookup_realm = true
        forwardable = true
        default_realm = D.ETHZ.CH
        rdns = false
        default_ccache_name = KEYRING:persistent:%{uid}

Hinweis: Die Uhrzeit des Rechners sollte nicht wesentlich von der Zeit des Domaincontrollers abweichen. Deshalb sollte unbedingt ein Zeitserver zur Synchronisation verwendet werden.

sssd Service aktivieren und starten

Mit Hilfe von chkconfig sssd on aktivieren den Dienst beim Systemstart. Starten sie daraufhin den Dienst bitte mit Hilfe von service sssd start.

PAM einrichten um AD Benutzern das Login zu ermöglichen

Red Hat und Fedora bringen das Tool authconfig zur einfachen PAM Administration mit.

Sie können authconfig wie folgt aufrufen:

      authconfig --update --enablesssd --enablesssdauth --enablemkhomedir --enablepamaccess

um die benoetigten PAM-Module zu aktivieren.

Test

Nach der erfolgreichen Einrichtung, sollten sich mit Hilfe von:

      getent passwd IHR_USERNAME

Benutzerinformationen abrufen lassen. Ersetzen Sie hierbei bitte IHR_USERNAME durch den Active Directory Benutzernamen, den Sie abfragen möchten.

Jetzt sollten Sie sich mit Ihrem Active Directory Benutzeraccount einloggen können.

Security

Standardmässig können sich alle Active Directory Benutzer anmelden. Um dies zu verhindern empfehlen wir die nutzung des pam_access Moduls.

pam_access

Die Konfiguration erfolgt in der Datei /etc/security/access.conf und kann wie folgt aussehen:

      +:root:LOCAL
+:@IHRE_ADGRUPPE:ALL
-:ALL:ALL

Wobei Sie bitte IHRE_ADGRUPPE durch den Namen der Gruppe ersetzen die Zugriff erhalten soll. Im obigen Beispiel kann sich der Benutzer root nur noch lokal anmelden. Möchten Sie den grafischen Anmeldemanager GDM nutzen, fügen Sie bitte über dem Eintrag -:ALL:ALL folgende Zeile ein:

      +:gdm:LOCAL

sudo

Um Remote-Wartungsarbeiten durchführen zu können, empfiehlt sich die Nutzung von sudo.

Zur Einrichtung von sudo können Sie eine Datei /etc/sudoers.d/IHRE_ADGRUPPE mit folgendem Inhalt erstellen:

      %IHRE_ADGRUPPE ALL=ALL

Ersetzen Sie auch hier bitte wieder IHRE_ADGRUPPE durch den tatsächlichen Namen der Gruppe, der Sie sudo-Zugriff ermöglichen möchten. Beachten Sie bitte, dass das führende %-Zeichen erhalten bleiben muss, wenn Sie eine Gruppe angeben möchten.

Passen Sie bitte nach der Erstellung der Datei die Rechte wie folgt an:

      chmod 700 /etc/sudoers.d/IHRE_ADGRUPPE

Allgemeine Hinweise zum Debugging

SELinux

Beim Eingrenzen von Problemen kann ein temporäres Ausschalten von SELinux eine Hilfe sein.

Cache löschen

Der Cache kann beim Einrichten Probleme machen, ihn zu löschen schadet nie:

systemctl stop sssd
cd /var/lib/sss/db
rm -rf cache_*
systemctl start sssd