Wie kann man su mit dpkg-statoverride härten?


8

Ich lese eine Ubuntu 14-Härtungsanleitung und dies ist einer der Vorschläge:

Es scheint im Allgemeinen eine vernünftige Idee zu sein, sicherzustellen, dass nur Benutzer in der sudo-Gruppe den Befehl su ausführen können, um als root zu fungieren (oder zu root zu werden):

dpkg-statoverride --update --add root sudo 4750
/ bin / su

Ich habe den dpkg-statoverrideBefehl nachgeschlagen, kann aber immer noch nicht genau herausfinden, was der obige Befehl tut.

Es scheint zu implizieren, dass Ubuntu 14 standardmäßig jedem erlaubt, zu sudo. Zum Testen habe ich einen neuen Benutzer erstellt, mich als dieser Benutzer angemeldet, versucht zu sudo und es ist fehlgeschlagen - was gut ist.

Was ist der Zweck des obigen Vorschlags?


4
Wenn der Leitfaden nicht erklärt, was Sie tun und warum, sollten Sie dies vermeiden. Das Hauptproblem bei Ubuntu-Foren, Blogs, Anleitungen, Tutorials usw. besteht darin, dass ein Großteil davon von anderen Stellen kopiert wurde und der ursprüngliche Kontext verloren gegangen ist. Wenn dies bei jeder Installation angemessen wäre, wäre dies bereits in der Standardinstallation geschehen.
Simon Richter

Antworten:


18

Der Zweck besteht darin, zu verhindern, dass normale Benutzer den Befehl su ausführen (su ähnelt sudo, mit dem Unterschied, dass sudo einen Befehl ausführt. Su startet eine neue Sitzung als neuer Benutzer, die so lange dauert, bis dieser Benutzer exit ausführt.)

Der Standardmodus von su ist 4755 oder rwsr-xr-x. Das "s" bedeutet, dass der Befehl set-UID ist (was bedeutet, dass er immer als der Benutzer ausgeführt wird, dem er gehört, und nicht als der Benutzer, der ihn gerade ausführt. In diesem Fall gehört su root und wird daher immer mit Root-Rechten ausgeführt.

su verfügt über eigene Sicherheitsmaßnahmen, um sicherzustellen, dass der Benutzer, der es ausführt, die Berechtigung hat, ein anderer Benutzer zu werden (normalerweise indem er nach dem Kennwort des anderen Benutzers fragt). Es ist jedoch denkbar, dass in su eine Sicherheitslücke besteht, die einen Angreifer zulässt es irgendwie davon zu überzeugen, etwas anderes ohne Autorität zu tun.

Durch Ändern des Modus auf 4750 wird verhindert, dass normale Benutzer (andere Benutzer als root und Benutzer der sudo-Gruppe) ihn überhaupt lesen oder ausführen, sodass ein Angreifer entweder den Besitz dieser Datei ändern oder ändern muss den Modus der Datei oder ändern Sie ihre eigene effektive UID / GID, bevor sie überhaupt versuchen könnten, diese theoretische Sicherheitsanfälligkeit in su auszunutzen.

Der Befehl dpkg-statoverride ist in diesem Fall nützlich, da er den Paketmanager anweist, diese Besitz- / Moduswerte für diese Datei zu verwenden, selbst wenn sie durch eine neuere Version ersetzt wird (dh über ein apt-Upgrade). Mit anderen Worten, es macht es dauerhafter als nur ein Chown und ein Chmod.

Hier ist eine allgemeine Taktik, die ich für diese Instanz empfehle: Immer wenn ich die Konfiguration von su / sudo oder einer Authentifizierungskomponente auf einem Linux / UNIX-Computer optimiere, öffne ich eine weitere ssh / putty-Sitzung auf diesem Server und melde mich als an den Root-Benutzer, und lassen Sie diese Sitzung einfach in einem anderen Fenster geöffnet. Auf diese Weise habe ich bereits eine Anmeldesitzung, in der ich alles reparieren kann, was ich kaputt gemacht habe, wenn ich etwas vermassle und mich aussperre.


3
+1 für sekundäre Root-Sitzung. Ich habe es einmal geschafft, den dynamischen Linker zu borken. Übrigens sind sowohl sudo als auch su auf meinem Computer dynamisch miteinander verbunden.
TLW

2
Ich denke, Sie meinten für ein Ubuntu-System wahrscheinlich eher "apt-get / aptitude / synaptic" als "yum"?
Toby Speight

Hat sich das Verhalten für Ubuntu 16.04 LTS geändert? PS Erstaunliche Antwort!
Cristian E.

3

Abhängig von Ihren Benutzern kann dies eine gute oder schlechte Idee sein.

Der suBefehl kann von normalen Benutzern verwendet werden, um sich bei jedem anderen Konto anzumelden, nicht nur beim Superuser, sofern sie das Kennwort des Kontos kennen.

Dies ist z. B. nützlich, wenn zwei Benutzer an einem Projekt zusammenarbeiten, einer von ihnen (BenutzerA) angemeldet ist und eine Datei lesen muss, auf die nur der andere Benutzer (BenutzerB) zugreifen kann. Einfach laufen

su -c 'cat /home/userB/file' userB >file

kann verwendet werden, um die Datei in das Ausgangsverzeichnis des angemeldeten Benutzers zu kopieren. Dies ist jedoch nur möglich, wenn Benutzer A den suBefehl ausführen darf .

Auf PostgreSQL-Datenbankservern können Datenbankadministratoren normalerweise zum postgresBenutzer wechseln, um einige Wartungsaufgaben auszuführen, die nicht möglich sind, während der Datenbankserver aktiv ist. Damit dies funktioniert, müssen sie laufen können su - postgres.

Die gleichen Überlegungen gelten für den sudoBefehl (der anders und weitaus komplexer ist als su- es ist nur die Standardkonfiguration, die den Befehl in erster Linie für die sudoersGruppe nützlich macht , da diese Gruppe jeden Befehl wie folgt ausführen darf root. Wenn Sie jedoch hinzufügen Bei benutzerdefinierten Regeln, z. B. wenn ein Benutzer updatedbohne Argumente sudoersausgeführt werden darf, benötigen Benutzer außerhalb der Gruppe die Ausführungsberechtigung für sudo.

Auch gibt es nicht nur sudas Setuid - es gibt auch

  • sg (Ermöglicht den vorübergehenden Beitritt zu einer Gruppe, wenn ein Gruppenkennwort festgelegt ist.)
  • passwd (ermöglicht das Ändern des Passworts)
  • chfn (ermöglicht das Ändern von Benutzerinformationen)
  • chsh (Ermöglicht das Ändern der Standard-Shell)

und mehrere andere. Diese Tools teilen viel Code mit dem suBefehl, so dass das Ändern des Modus von /bin/suallein Ihnen nicht viel kostet, und das Ändern des Modus von allen wird Ihre Benutzer sicherlich ärgern, insbesondere im Fall von passwd.


1

Auf einem gehärteten Server möchten Sie so wenige setuid / setgid-Binärdateien wie möglich, insbesondere solche, die von einem Benutzerkonto ausgeführt werden können, das das jeweilige Tool nicht benötigt - aus einem einfachen Grund:

Sie vertrauen diesen Tools nicht unbedingt, um zu überwachen, was jemand mit ihnen macht. Fehler in solchen Programmen oder deren Abhängigkeiten, die es Benutzern ermöglichten, eine solche Überwachung zu umgehen, werden häufig gefunden und von Sicherheitsforschern und Angreifern aktiv gesucht. Eine Fehlkonfiguration (das Verhalten von su hängt von der Konfiguration der PAM-Bibliothek ab) kann das gleiche Problem verursachen. Daher ist jede setuid / setgid-Binärdatei, die ein bestimmtes Konto (Dienst oder Benutzer) ausführen kann, ein potenzieller Vektor, um unerwünschten Root-Zugriff zu erhalten.

Während bekannte Probleme in solcher Software normalerweise dazu führen, dass Patches / Updates schnell verfügbar sind, kann die schnelle Installation zu Störungen führen - und einige Lücken sind möglicherweise nicht jedem bekannt, einschließlich dem Hersteller.

Um die Wahrscheinlichkeit zu minimieren, dass ein dringendes Problem gelöst werden kann, ist es sinnvoll, etwas wie /programming/2189976/find-suid-and-gid-files-under-root zu tun und dann zu untersuchen, welches dieser Probleme vorliegt kann beseitigt werden (die meisten davon, wenn Sie einen speziell entwickelten Server ausführen und wissen, was Sie tun), vorzugsweise mithilfe von Methoden wie dpkg-statoverride, die Ihre Paketverwaltungssysteme unterstützen, um solche Änderungen dauerhaft zu erhalten.

Es gibt noch einen weiteren Grund, den Zugriff auf "su" in bestimmten Setups mit NFS der alten Schule einzuschränken. Sie können aus im Wesentlichen politischen Gründen die Verwendung des Root-Kontos (das einige Benutzer möglicherweise aus politischen Gründen erhalten. Trotzdem schlechte Praxis) einschränken su trivial, da es das root_squash-Flag eines NFS-Mount umgeht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.