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/mariadb
dies 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 mysql
Benutzer 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- mysql
Benutzer 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 mysql
aus 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:
mysql
Ich habe festgestellt , dass es funktioniert, wenn ich den lokalen " " Benutzer hinzufüge , es sei denn, ich habe Dateien, die der Benutzer-ID des LDAP- mysql
Benutzers " " gehören. Wenn ich ls -la
die 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- mysql
Benutzer " " 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 useradd
gelesen hatte :mariadb-server
http://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.