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.
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