Fragen zu Rechten auf Dateien und Verzeichnisse bei stunnel
Hallo,
ich habe ein Problem bzw. Frage zu dem Rechtesystem von Linux.
Soweit ich weiß soll man aus Sicherheitsgründen Dienste mit niedrigeren Rechten laufen lassen. Normalerweise laufen diese soweit ich weiß mit root-Rechten.
Installiert man z.B das Paket Stunnel4 aus dem Repo, dann legt dieses Paket auch gleich den User als auch die Gruppe stunnel4 an.
Im Config-File von stunnel setzt man die Optionen setuid und setguid entsprechend auf stunnel4.
Nun habe ich ein Verzeichnis in dem Zertifikate abgelegt sind.
Die Dateien liegen unter
/etc/openvpn/easy-rsa/pki/issued
Alle Ordner haben als Eigentümer root
etc hat als Gruppe root
openvpn hat als Gruppe vpnuser
etc und openvpn haben Zugriffsrecht x für other
easy-rsa, pki und issued haben als Gruppe ssl-cert, als Rechte drwxr-x---
die Dateien in issued sind root:ssl-cert mit Rechten -rwxr-x---
User stunnel4 ist Mitglied in Gruppe ssl-cert
Dennoch kann stunnel nicht auf die besagten Dateien zugreifen.
Wenn ich easy-rsa, pki und issued bei Other auch ein x setzte, dann findet stunnel die Dateien. Alternativ funktioniert es auch wenn ich setuid und setguid in der stunnel-Config auskommentiere
Ein x für Other sollte aber doch gar nicht nötig sein, oder?
Der User stunnel 4 wurde in die Gruppe ssl-cert aufgenommen.
Warum kann der User stunnel4 dann nicht auf die Dateien zugreifen wenn stunnel4 doch Mitglied der Gruppe ssl-cert ist und diese Gruppe rw auf die Dateien hat?
Vielen Dank.
In Syslog sieht man wenn sich ein Client verbinden will ob er das Zertfikat in besagtem Ordner gefunden hat oder nicht.
ich habe ein Problem bzw. Frage zu dem Rechtesystem von Linux.
Soweit ich weiß soll man aus Sicherheitsgründen Dienste mit niedrigeren Rechten laufen lassen. Normalerweise laufen diese soweit ich weiß mit root-Rechten.
Installiert man z.B das Paket Stunnel4 aus dem Repo, dann legt dieses Paket auch gleich den User als auch die Gruppe stunnel4 an.
Im Config-File von stunnel setzt man die Optionen setuid und setguid entsprechend auf stunnel4.
Nun habe ich ein Verzeichnis in dem Zertifikate abgelegt sind.
Die Dateien liegen unter
/etc/openvpn/easy-rsa/pki/issued
Alle Ordner haben als Eigentümer root
etc hat als Gruppe root
openvpn hat als Gruppe vpnuser
etc und openvpn haben Zugriffsrecht x für other
easy-rsa, pki und issued haben als Gruppe ssl-cert, als Rechte drwxr-x---
die Dateien in issued sind root:ssl-cert mit Rechten -rwxr-x---
User stunnel4 ist Mitglied in Gruppe ssl-cert
Dennoch kann stunnel nicht auf die besagten Dateien zugreifen.
Wenn ich easy-rsa, pki und issued bei Other auch ein x setzte, dann findet stunnel die Dateien. Alternativ funktioniert es auch wenn ich setuid und setguid in der stunnel-Config auskommentiere
Ein x für Other sollte aber doch gar nicht nötig sein, oder?
Der User stunnel 4 wurde in die Gruppe ssl-cert aufgenommen.
Warum kann der User stunnel4 dann nicht auf die Dateien zugreifen wenn stunnel4 doch Mitglied der Gruppe ssl-cert ist und diese Gruppe rw auf die Dateien hat?
Vielen Dank.
In Syslog sieht man wenn sich ein Client verbinden will ob er das Zertfikat in besagtem Ordner gefunden hat oder nicht.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 600117
Url: https://administrator.de/contentid/600117
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
12 Kommentare
Neuester Kommentar
Moin.
Der Grund hier ist das setgid den stunnel-Daemon zwar in diese eine Gruppe (stunnel4) setzt, jedoch wird dadurch nur diese eine Gruppe für den Prozess gesetzt, keine vererbten Mitgliedschaften in anderen Gruppen. Die setgid() Funktion arbeitet dabei wie folgt
Beachte das clear all other groups. Effektiv arbeitet der Daemon also nur mit der "stunnel4" Gruppe und die ist bei deinen ACLs dann mit die "other" Identität weil dem Prozess die "ssl-cert" Gruppenmitgliedschaft fehlt, eben weil diese "supplemental groups" durch "setgid" entfernt wurden.
Siehe auch auf der Konsole die man-pages
man credentials
oder
Group memberships and setuid/setgid processes
hth
k.
Der Grund hier ist das setgid den stunnel-Daemon zwar in diese eine Gruppe (stunnel4) setzt, jedoch wird dadurch nur diese eine Gruppe für den Prozess gesetzt, keine vererbten Mitgliedschaften in anderen Gruppen. Die setgid() Funktion arbeitet dabei wie folgt
setgid = GROUP (Unix only)
Unix group id
As a global option: setgid() to the specified group in daemon mode and clear all other groups.
Siehe auch auf der Konsole die man-pages
man credentials
oder
Group memberships and setuid/setgid processes
hth
k.
Zitat von @blacksun:
In welchen Fällen muss ein Benutzer/Gruppe auf die Ordner über der Datei das Lesen-, ich welchen das Auflisten-Recht haben um das Entsprechende auf die Datei ausführen zu können?
(X) Execute-Rechte werden immer benötigt um überhaupt in den Ordner hineinzuwechseln / (R) Leserechte brauchst du wenn du die Dateien im Ordner auch auflisten willst. Du kannst ja mal selbst versuchen einem User nur mal (X) Execute Rechte auf einen Ordner zu geben und keine Leserechte. Du wirst sehen das der User den Ordner-Inhalt nicht mit ls auflisten kann, in den Pfad hineinwechseln oder die Datei direkt über den vollen Pfad ansprechen und bswp. über cat ausgeben lassen funktioniert trotzdem problemlos so lange er auf die Datei selbst in dem Ordner entsprechende Leserechte hat.In welchen Fällen muss ein Benutzer/Gruppe auf die Ordner über der Datei das Lesen-, ich welchen das Auflisten-Recht haben um das Entsprechende auf die Datei ausführen zu können?
Execute-Rechte haben also auf den Ordner angewendet eine andere Bedeutung als auf Dateien. Lese-Rechte auf Ordnern brauchst du nur wenn du auch die Dateien auflisten willst, für den Zugriff auf die Dateien darin ist es nicht nötig so lange die selbigen über entsprechende Rechte verfügen.
Dann noch eine Frage mehr in Richtung der Services:
Wenn ich mir mal anschauen möchte welcher Service mit welchem Benutzer läuft, wie mache ich das am besten?
topWenn ich mir mal anschauen möchte welcher Service mit welchem Benutzer läuft, wie mache ich das am besten?
ps aux
Wenn ich den Stunnel-Dienst neu starte, dann sagt mir syslog dass er die pem-Dateien lesen konnte.
Das ist in dem Fall normal. Stunnel wird erst mal von systemd gestartet, dies läuft in dem Moment noch mit den Rechten die systemd zum Start definiert hat, damit lädt stunnel die Zertifikate in den Speicher, dann "forkt" der Prozess in den mit den in der config angegebenen Rechten, die Zertifikate sind aber weiterhin verfügbar und müssen nicht erneut mit den geringeren Rechten eingelesen werden. Forking bedeutet der Elterprozess beendet sich und ein Child-Prozess läuft weiter. Für die Dienstüberwachung wird dann meist ein sogenanntes PID-File benutzt.Du siehst nicht jeder Daemon unter Unix arbeitet gleich, es gibt wie hier und da immer ein paar Ausnahmen was das Starten betrifft, aber generell gilt weiterhin das oben genannte Verhalten.
Zitat von @blacksun:
Auf eines habe ich leider mit Googlen noch keine Antwort gefunden. Kann stunnel eigentlich auch über einen https-Proxy laufen?
Keinen transparenten, sondern einen den man angibt.
Würde ich mir mal die Config Optionen protocolHost, protocolUsername, und protocolPassword anschauenAuf eines habe ich leider mit Googlen noch keine Antwort gefunden. Kann stunnel eigentlich auch über einen https-Proxy laufen?
Keinen transparenten, sondern einen den man angibt.
https://linux.die.net/man/8/stunnel
Stunnel ist primär dafür geschaffen worden um unverschlüsselte Protokolle durch einen zusätzlichen Layer sicher zu machen.
DPI setzt voraus das du das Zertifikat des Man in the Middle Devices welches die Verbindung aufbrechen soll auch als vertrauenswürdig erklärst, da solche Zertifikate selbstsigniert sind wird das dem geschulten Anwender aber sowieso auffallen.
Wenn also ein Anwender so blöd ist und ein fremdes z.B. auf Google ausgestelltes Zertifikat das sein Browser als ungültig erklärt so sang und klanglos akzeptiert ist er selbst schuld wenn seine Daten abgehört werden.
DPI setzt voraus das du das Zertifikat des Man in the Middle Devices welches die Verbindung aufbrechen soll auch als vertrauenswürdig erklärst, da solche Zertifikate selbstsigniert sind wird das dem geschulten Anwender aber sowieso auffallen.
Wenn also ein Anwender so blöd ist und ein fremdes z.B. auf Google ausgestelltes Zertifikat das sein Browser als ungültig erklärt so sang und klanglos akzeptiert ist er selbst schuld wenn seine Daten abgehört werden.
Klar, wenn du ihm sagst akzeptiere sämtliche CAs dann ist das natürlich ein Himmelfahrtskommando und öffnet MitM und Angreifern natürlich Tür und Tor. Sowas macht man nur für Testzwecke im LAB, im Produktivbetrieb sollte das natürlich immer gecheckt werden.