Filtern Sie LDAP-Benutzer durch PAM, sodass es so aussieht, als ob sie gar nicht existieren

Filtern Sie LDAP-Benutzer durch PAM, sodass es so aussieht, als ob sie gar nicht existieren

In unserer Unternehmensumgebung hat vor langer Zeit irgendein Experte beschlossen, den Benutzer " mysql" in LDAP einzufügen.

Das Konto ist deaktiviert:

$ sudo su - mysql
This account is currently not available.

...aber seine ID existiert noch:

$ id mysql
uid=2050913(mysql) gid=867(ENG) groups=867(ENG)

Dies führt dazu, dass MariaDB-Installationen unter CentOS7 fehlschlagen, da /var/run/mariadbdies durch eine temporäre Dateiregel erstellt wird, die versucht, das Verzeichnis MySQL zuzuweisen. MySQL existiert jedoch erst, wenn LDAP/Netzwerk eingerichtet und ausgeführt wird, und die MariaDB-Installation erstellt den mysqlBenutzer nicht, da der Benutzer bereits in LDAP vorhanden ist.

Gibt es eine Möglichkeit, PAM (oder etwas anderes?) lokal zu zwingen, den Benutzer mysql in LDAP zu ignorieren? Oder den LDAP- mysqlBenutzer in umzubenennen mysql_ldap?

Ist meine einzige Problemumgehung, den Eintrag manuell hinzuzufügen /etc/passwd? (Oder die MariaDB-Konfiguration so zu ändern, dass ein anderer Benutzername verwendet wird.) Ich hätte lieber minimale Änderungen an den Konfigurations- und Systemd-Dateien, die aus dem RPM stammen.

(Und ich habe keine großen Hoffnungen hinsichtlich der Entfernung mysqlaus LDAP, da dadurch viele ältere Infrastrukturen zerstört werden könnten.)

Ich werde übrigens Ansible verwenden, um die Änderung zu implementieren.

Zusätzlich:

Ich habe den Titel der Frage geändert:

mysqlIch habe festgestellt , dass es funktioniert, wenn ich den lokalen " " Benutzer hinzufüge , es sei denn, ich habe Dateien, die der Benutzer-ID des LDAP- mysqlBenutzers " " gehören. Wenn ich ls -ladie Dateien hinzufüge, wird der NSCD- (oder SSDS-) Cache verschmutzt und " mysql" wird wieder zum LDAP-Benutzer aufgelöst. Es scheint, dass ich eigentlich irgendwie einen PAM-Filter für Konten erstellen möchte, um diesen LDAP- mysqlBenutzer " " verschwinden zu lassen.

Antwort1

Hier ist meine endgültige Lösung, codiert in Ansible:

- name: Disable ldap users                                                  
  ini_file: dest=/etc/sssd/sssd.conf section='nss' 
            option=filter_users value={{ filter_ldap_users | join(",") }}
  register: sssd_conf_users                                                   

- name: Disable ldap groups                                                 
  ini_file: dest=/etc/sssd/sssd.conf section='nss' 
            option=filter_groups value={{ filter_ldap_groups | join(",") }}
  register: sssd_conf_groups                                                  

- name: Restart SSSD                                                        
  when: sssd_conf_users.changed or sssd_conf_groups.changed                   
  service: name=sssd state=restarted                                          

- name: Flush NSCD cache                                                    
  when: sssd_conf_users.changed or sssd_conf_groups.changed                   
  shell: "for db in /var/db/nscd/*; do nscd -i $(basename $db); done"         

- name: Flush SSSD cache                                                     
  when: sssd_conf_users.changed or sssd_conf_groups.changed                   
  command: /usr/sbin/sss_cache -E        

Antwort2

Auf PAM-Ebene:
Sie müssen lediglich einen Benutzer in LDAP ignorieren. Richten Sie also den von Ihnen verwendeten LDAP-Client ein (in CentOS wäre dies sssd), um einen benutzerdefinierten LDAP-UID/GID-Lookup-Filter zu verwenden, der den „mysql“-Eintrag ignoriert. Auf einem vorhandenen System müssen Sie dann den SSDD-Cache leeren und neu starten, und der Benutzer ist weg. Durch die Neuinstallation von MariaDB wird dann ein lokaler MySQL-Benutzer erstellt.

Auf Paketebene:
Richten Sie irgendwo im Netzwerk ein benutzerdefiniertes Yum-Repository ein, das ein Paket mit einem Post-Install-Skript enthält, das das MySQL-Benutzerproblem behebt. Sie müssen auch das MariaDB-Paket in dieses Repository einfügen. Definieren Sie dann eine Paketgruppe, die dieses Paket und MariaDB enthält, und installieren Sie sie. Alternativ
können Sie das MariaDB-Paket mit einem aktualisierten, intelligenteren Post-Install-Skript neu erstellen, das sich um die Erstellung des MySQL-Benutzers kümmert.

Ich würde A nehmen – B ist etwas unklar :)

Antwort3

Folgendes verwende ich derzeit als Workaround. Ich habe es zu meiner Kickstart-Datei hinzugefügt, damit es ausgeführt wird %post– bevor ich LDAP aktiviere/einrichte:

# Install and de-install mariadb-server to create mysql
# user before LDAP is enabled.
yum -d1 -e1 -y install yum-plugin-remove-with-leaves mariadb-server
yum -d1 -e1 -y erase mariadb-server --remove-leaves

Ich wollte es manuell ausführen, nachdem ich die Spezifikationsdatei useraddgelesen hatte :mariadb-serverhttp://pkgs.fedoraproject.org/cgit/mariadb.git/tree/mariadb.spec

%pre server
/usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 || :
/usr/sbin/useradd -M -N -g mysql -o -r -d %{mysqluserhome} -s /sbin/nologin \
  -c "MySQL Server" -u 27 mysql >/dev/null 2>&1 || :

...aber ich fühle mich wohler, wenn ich es direkt von der RPM-Installation nehme.

Auch damit bin ich nicht ganz zufrieden, denn wenn ich zufällig eine Datei mit der LDAP-Benutzer-ID „mysql“ finde, verunreinigt die umgekehrte Suche nach der Benutzer-ID nscd oder sssd mit dem falschen „mysql“-Benutzer.

Antwort4

Wenn Sie keine LDAP-Benutzer auflösen möchten, bearbeiten Sie /etc/nsswitch.conf und entfernen Sie aus den Benutzer- und Gruppeneinträgen die Einträge sssd (oder ldap). Leeren Sie dann den NSCD-Cache.

verwandte Informationen