Das Problem
Die ID Der Befehl zeigt unterschiedliche UID und GID auf verschiedenen SSD-Servern für denselben Windows Active Directory-Benutzer an. Nach dem Löschen des sssd-Cache durch sss_cache sind UID und GID immer noch unterschiedlich.
1. Ausgabe von einem Server:
# id ad_test_user uid=[UID](ad_test_user) gid=[GID](ad_test_group) groups=[GID](ad_test_group2),[GID](ad_test_group)
# sss_cache -u ad_test_user
# id ad_test_user uid=[UID](ad_test_user) gid=[GID](ad_test_group) groups=[GID](ad_test_group2),[GID](ad_test_group)
2. Ausgabe von einem anderen Server:
# id ad_test_user uid=[UID](ad_test_user) gid=[GID](ad_test_group) groups=[GID](ad_test_groups),[GID](ad_test_group3),[GID](ad_test_group4),[GID](ad_test_group5), [GID](ad_test_group2),[GID](ad_test_group)
# sss_cache -u ad_test_user
# id ad_test_user uid=[UID](ad_test_user) gid=[GID](ad_test_group) groups=[GID](ad_test_groups),[GID](ad_test_group3),[GID](ad_test_group4),[GID](ad_test_group5), [GID](ad_test_group2),[GID](ad_test_group)
Mögliche Auswirkungen auf den Linux-Server:AD-Benutzer können sich nicht bei Linux anmelden
# su - ad_test_user Last login: Fri Sep 11 11:11:11 COT 2015 from 10.10.xx.xx on pts/1 Last failed login: Tue Mar 13 13:13:13 COT 2015 from 10.10.10.2 on ssh:hostname There were 1 failed login attempts since the last successful login. su: warning: cannot change directory to /home/ad_test_user: Permission denied id: cannot find name for group ID [GID] -bash: /home/ad_test_user/.bash_profile: Permission denied -bash-4.2$
Die Lösung
Die UID und GID des Linux-Benutzers stammen von der Windows AD SID. Die SSD ändert nichts daran. Die ID-Mapping-Funktion ermöglicht es sssd, als Client von Active Directory zu fungieren, ohne dass Administratoren Benutzerattribute erweitern müssen, um POSIX-Attribute für Benutzer- und Gruppenkennungen zu unterstützen.
Active Directory stellt für jedes Benutzer- und Gruppenobjekt im Verzeichnis eine Objekt-ID bereit. Diese Objekt-ID kann in Komponenten aufgeteilt werden, die die Identität der Active Directory-Domäne und den relativen Bezeichner (RID) des Benutzer- oder Gruppenobjekts darstellen. Der sssd-ID-Zuordnungsalgorithmus nimmt eine Reihe verfügbarer UIDs und unterteilt sie in gleich große Komponentenabschnitte – sogenannte „Slices „-. Jeder Bereich stellt den Speicherplatz dar, der einer Active Directory-Domäne zur Verfügung steht.
Wenn ein Benutzer- oder Gruppeneintrag für eine bestimmte Domain zum ersten Mal angetroffen wird, weist der sssd(8) einen der verfügbaren Slices für diese Domain zu. Um diese Slice-Zuweisung auf verschiedenen Client-Rechnern wiederholbar zu machen, wird der folgende Algorithmus verwendet:Der SID-String wird durch den murmurhash3-Algorithmus geleitet, um ihn in einen 32-Bit-Hash-Wert umzuwandeln. Nehmen Sie dann den Modul dieses Werts mit der Gesamtzahl der verfügbaren Scheiben, um die Scheibe auszuwählen.
Hinweis :Es ist möglich, dass Kollisionen im Hash und im nachfolgenden Modul auftreten. In diesen Situationen wird der nächste verfügbare Slice verwendet, aber es ist möglicherweise nicht möglich, denselben Satz von Slices auf anderen Maschinen zu reproduzieren, da die Reihenfolge, in der sie angetroffen werden, ihren Slice bestimmt. In dieser Situation wird empfohlen, entweder zur Verwendung expliziter POSIX-Attribute in Active Directory zu wechseln (ID-Zuordnung zu deaktivieren) oder eine Standarddomäne zu konfigurieren, um sicherzustellen, dass mindestens eine immer konsistent ist. Einzelheiten finden Sie unter „Konfiguration“.Wenn ID-Mapping in sssd(8) aktiviert ist, werden die Attribute uidNumber und gidNumber ignoriert. Dies soll die Möglichkeit von Konflikten zwischen automatisch zugewiesenen und manuell zugewiesenen Werten vermeiden. Wenn Sie manuell zugewiesene Werte verwenden müssen, müssen ALLE Werte manuell zugewiesen werden.
Hinweis :Die Änderung der Konfigurationsoptionen im Zusammenhang mit der ID-Zuordnung führt zu einer Änderung der Benutzer- und Gruppen-IDs. Momentan unterstützt sssd(8) keine Änderung von IDs, daher muss die sssd-Datenbank entfernt werden. Da zwischengespeicherte Kennwörter auch in der Datenbank gespeichert werden, sollte das Entfernen der Datenbank nur durchgeführt werden, während die Authentifizierungsserver erreichbar sind, da Benutzer sonst möglicherweise ausgesperrt werden. Um das Passwort zwischenzuspeichern, muss eine Authentifizierung durchgeführt werden.Die sssd.conf Datei auf Linux-Clients sollte konsistent sein. Insbesondere die folgenden zwei Parameter müssen in allen sssd.conf konsistent sein, da sie den sssd-ID-Zuordnungsalgorithmus beeinflussen:
1. ldap_idmap_default_domain_sid (Zeichenfolge)
Geben Sie die Domänen-SID der Standarddomäne an. Dadurch wird garantiert, dass diese Domain in der ID-Map immer Slice 0 zugewiesen wird, wobei der oben beschriebene Murmurhash-Algorithmus umgangen wird.
Standard:nicht gesetzt
2. ldap_idmap_default_domain (Zeichenfolge)
Geben Sie den Namen der Standarddomäne an.
Standard:nicht gesetzt