Wie ruft der ID-Befehl unter Linux Benutzergruppen ab oder welches PAM-Modul wird verwendet?

Wie ruft der ID-Befehl unter Linux Benutzergruppen ab oder welches PAM-Modul wird verwendet?

Wir haben die SSD-Konfiguration wie folgt:

id_provider = ad
auth_provider = krb5
access_provider = ldap
enumerate = false
ignore_group_members = true;

Wie Sie sehen, zählen wir Benutzer und Gruppen nicht auf und zeigen daher getent passwddie getent groupBenutzer und Gruppen aus der Anzeige nicht an.

Jetzt möchte ich verstehen, wie id -a <aduser>der Befehl den Benutzer und seine Gruppen anzeigt. Ich verstehe, dass er in Echtzeit den angegebenen Benutzernamen abruft oder aus dem SSD-Cache abruft. Aber ich möchte genau wissen, was dem ID-Befehl sagt, dass er diese Informationen von der SSD abrufen soll.

Einige Hintergrundinformationen zu meiner Frage:

Ich versuche, die LDAP-Authentifizierung auf unserem MySQL 5.6-Community-Server einzurichten und verwende dazu auth_pam.so, das ich vom Percona-Server meiner lokalen VM kopiert habe.

Ich habe einen Proxy-Benutzer erstellt: ad_dbaund mit der LDAP-Gruppe zugeordnet: mysql_dba Und ich habe den folgenden PAM-Dienst erstellt:

# cat /etc/pamd./mysqld
#%PAM-1.0
auth    include  password-auth audit
account include password-auth audit

Mein Auth_String sieht also wie folgt aus:mysqld, ad_dba=mysql_dba

Jetzt habe ich dem Proxy-Benutzer alle Berechtigungen erteilt:ad_dba

Ich kann mich jedoch nur mit meinem Ad-Benutzernamen authentifizieren, habe aber keine Berechtigungen. Meines Wissens funktioniert die Gruppenzuordnung nicht.

Ich bin nicht sicher, wie MySQL Benutzergruppenmitglieder überprüft. Ich versuche herauszufinden, ob ich ein bestimmtes Modul in PAM hinzufügen kann, um diese Gruppeninformationen abzurufen.

BEARBEITEN-1:

Ich sehe aus dem Quellcode, dass das MySQL-Plugin integrierte Linux-Funktionen verwendet getgrouplistund getgrgid_r:

Ich muss also einen Weg finden, meine benötigten Gruppen und Benutzer in der Gruppendatenbank aufzulisten oder den Code ändern und neu kompilieren. Meine Frage ist für dieses Problem jetzt irrelevant geworden. Aber ich bin immer noch gespannt, herauszufinden, wie id an diese Informationen kommt.

Antwort1

Der idBefehl ruft die Gruppeninformationen aus derselben Quelle ab wie getent group:, indem er die C-Bibliothek fragt, die dann die groupZeile von betrachtet /etc/nsswitch.confund die Funktionen in der libnss_<name>.sooder den entsprechenden Bibliotheken verwendet, um die Antwort zu erhalten.

PAM-Bibliotheken werden hier überhaupt nicht verwendet.

In Ihrer Situation sollte beispielsweise nsswitch.confzumindest Folgendes gesagt werden:

passwd: files sss
group: files sss

Dadurch wird die C-Bibliothek veranlasst, die Abfrage zuerst mit durchzuführen (wobei und libnss_files.sonachgeschaut wird ), und wenn die Antwort dort nicht gefunden wird, dann mit (wobei gefragt wird )./etc/passwd/etc/grouplibnss_sss.sosssd

Alle Benutzernamen-/Gruppensuchmechanismen in der GNU C-Bibliothek ( glibc) verwenden diesen Mechanismus, sodass sowohl der idBefehl als auch MySQL letztendlich auf dieselben Informationsquellen zurückgreifen.

In Ihrem Fall könnte Ihr Text jedoch nur (oder ) in den Zeilen und nsswitch.confenthalten . Sie sollten Ihre Datei überprüfen und sie bei Bedarf ergänzen.filescompatpasswdgroupnsswitch.confsss

Antwort2

id verwendet einige grundlegende Dienstprogramme, um die Informationen abzurufen. Wenn Sie sich ansehenich würde.cSie können sehen, dass es die Datei mgetgroups.h einbindet und eine Funktion xgetgroups aufruft, die aufruftmgetgruppen... wenn Sie weiter nachforschen, können Sie die aufgerufenen Funktionen und deren Einbindung herausfinden. Grundsätzlich gibt es Systemaufrufe, um die relevanten Informationen aus der Gruppendatenbank abzurufen, die theoretisch unter Verwendung der nsswitch.conf-Informationen erstellt wird, um die Datenbank aus den in der Zeile „group:“ angegebenen Quellen zu erstellen.

verwandte Informationen