
Es gibt (vielleicht) eine Änderung zwischen CentOS 7 und 8 in Bezug auf systemd und selinux. Ich weiß noch nicht, wie ich damit umgehen soll.
Aus irgendeinem Grund (Cross-Distribution-Kompatibilität) verwenden wir PostgreSQL 9.6 vonEnterpriseDB. Das Installationsprogramm funktioniert einwandfrei unter CentOS 7aber nicht mehr auf CentOS 8. Das Installationsprogramm erstellt einen systemd-Dienst, der als Benutzer postgres ausgeführt wird (in meinem Fall uid=1004).
[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres
...
Am Ende des Installers wird der Dienst mit systemctl gestartet. Dies schlägt jetzt unter CentOS 8 fehl. Wenn ich einen systemctl-Status ausführe, sehe ich Folgendes:
postgresql.service: Failed to execute command: Permission denied
Im Dateisystem und bezüglich der Benutzerberechtigungen ist alles vollkommen in Ordnung.
Sobald ich SELinux deaktiviere, funktioniert es!
Dies war unter CentOS 7 nicht erforderlich. Kann mir jemand sagen, was ich jetzt tun kann, BEVOR ich das Installationsprogramm aufrufe, damit seine Ausführung funktioniert?
Nachtrag
Ich habe vielleicht den wahren Grund für das Problem gefunden. Ich installiere auf einer anderen Festplatte und nicht im Root-Dateisystem. Das Installationsprogramm funktioniert, wenn ich auf dem Root-Dateisystem installiere.Sobald sich die ausführbare Datei mit der Anweisung „ExecStart“ aus der Systemd-Servicedatei auf einer anderen Festplatte befindet, funktioniert sie nicht mehr.Wie sage ich dem System, dass es dies zulassen soll???
Vielen Dank für die Aufklärung.
Antwort1
Eine andere Festplatte, also ein anderer Teil der Dateihierarchie?
Mit SElinux müssen Sie sich mit Selinux auskennen und wissen, wie man Dateikontextübersetzungen erstellt! Probieren Sie aus, was passiert, wenn Sie beispielsweise die Konfigurationsdatei von ntpd und die Protokolldateien von ntp an einen anderen Speicherort wie /services/ntpd/ntp.conf und /services/ntpd/ntp.log ändern!
Antwort2
Vor einer Woche habe ich endlich die Lösung für mein Problem gefunden. In meiner Frage war das vorher nicht erwähnt worden, weil ich dachte, das wäre nicht wichtig.
Ich habe die Installation auf einer neuen und leeren separaten Festplatte durchgeführt. Nicht auf dem Root-Dateisystem. Ich habe festgestellt, dass die Installation auf dem Root-Dateisystem funktioniert.
Ich habe dann eine
restorecon -r /Einhängepunkt-der-neuen-Festplatte
und danach fing es an zu funktionieren!
Ich glaube, dies war für CentOS 7 nicht nötig
Antwort3
Sie haben die Hierarchie vom Stammverzeichnis (/) und nach unten auf eine aktuell gemountete Festplatte kopiert (d. h. gemountet als /tmp/tmp_mnt)?
Der restorecon -r setzt den Kontext von Dateien zurück... also ist ls -Z Ihr Freund
Interessant ist ls -Z in den Systemd-Unit-Dateien für Postgres und die Postgres-Binärdatei.
Es ist wahrscheinlich, dass sich die SElinux-Richtlinie zwischen CentOS7 und CentOS8 unterscheidet.