Ich habe Sinn, dies zu schreiben für eine Weile, hatte aber einen Beitrag von go auf einem der SecurityFocus Mailinglisten, die mich motiviert, um es tun. Die Post fragte: "Wie können Sie einschränken sudo so dass der Benutzer nicht löschen kann die ganze Festplatte?". Die kurze Antwort ist, es ist extrem schwierig.
Sudo ist ein Sicherheits-Tool innerhalb der UNIX-und Linux-Welt eingesetzt. Es erlaubt dem Administrator den Zugriff auf High-Level-Befehle zu beschränken. Es unterscheidet sich von dem Befehl su in diesem su sofort gibt dem Benutzer Root-Zugriff. Sudo erlaubt es dem Administrator die Feinabstimmung, die root-Befehle tatsächlich zugegriffen werden kann. Darüber hinaus schafft sudo einem Audit-Trail aller ausgeführten Befehlen.
Das Problem mit sudo ist, dass es keine Sichtbarkeit ist, wenn ein Werkzeug erlaubt eine Kommando-Shell, um hervorgebracht werden. Dies bedeutet, ein Benutzer kann auf dem System schlecht benehmen, während die Erzeugung eines Audit-Trail, der es den Anschein, sie haben nichts falsch gemacht macht.
Probieren Sie es selbst
Ich werde Sie durch ein Beispiel zu Fuß, so dass Sie genau das, was ich meine erleben können. Sie benötigen ein Linux-System für diese. Wenn Sie noch kein Konto haben handlich, Backtrack sollte gut funktionieren. Das Testsystem Ich verwende basiert auf Fedora , aber sie sind ziemlich ähnlich.
Schritt # 1: Fügen Sie der Gruppe Benutzer
Verwenden Sie Ihre Lieblings-Texteditor, um die / etc / group-Datei bearbeiten. Achten Sie auf die Gruppe "Benutzer" und fügen Sie Ihren Account-Namen. In diesem Beispiel habe ich den Namen des Kontos "cbrenton" aufgenommen.
Benutzer: x: 100: cbrenton
Schritt # 2: Erstellen Sie einen Eintrag sudousers
Als nächstes müssen wir die / etc / sudoers Datei bearbeiten, um zu definieren, was die User-Gruppe erlaubt ist, zu tun. Wir müssen visudo für diesen Einsatz, was einen Text-Editor basiert auf der vi-Editor . Wenn Sie sind komfortabel mit vi, geben Sie den Befehl "visudo" und fügen Sie diese Zeile an das Ende der Datei:
% Users ALL = / usr / bin / less
Wenn Sie nicht wissen, vi, gebe ich Ihnen die genaue Befehle. Denken Sie daran, alles ist Groß-und Kleinschreibung:
visudo
G
o <- Kleinbuchstabe O
% Users ALL = / usr / bin / less
<Esc> <Esc>
: Wq
Schritt 3: Monitor sudo Aktivität
Öffnen Sie eine zweite Terminal-Fenster und nutzen "su -" Root-Rechte zu übernehmen. Geben Sie den folgenden Befehl ein:
tail-f / var / log / secure
Dies wird uns erlauben, alle sudo-Aktivität zu überwachen.
Schritt 4: Führen Sie einen Befehl sudo
Zurück in die erste Terminal-Fenster geben Sie folgenden Befehl ein:
sudo less / etc / hosts
Sie werden nach Ihrem Passwort gefragt werden (Passwort, nicht das root-Passwort). Sobald Sie geben Ihr Passwort sollten Sie den Inhalt der / etc / hosts-Datei zu sehen. In der zweiten Terminal-Fenster sollten Sie nun ein Log-Eintrag ähnlich dem folgenden:
18. August 16.07.58 fubar sudo: cbrenton: TTY = pts / 4; PWD = / home / cbrenton; USER = root; COMMAND = / usr / bin / less / etc / hosts
So können wir sehen, Datum / Uhrzeit, der den Befehl ausgeführt, welches Endgerät sie auf, in welchem Verzeichnis sie sich befanden, welche Berechtigungen Ebene wurden sie verwendet haben, und was sie Befehl einschließlich aller Befehlszeilenoptionen (in diesem Fall die Angabe der Datei) ausgeführt . So weit, so gut.
Schritt 5: Bust a shell
In den ersten Terminal-Fenster (mit dem Befehl less) geben:
! Eingabetaste
Sie sollten nun in einer root-Eingabeaufforderung zu suchen. Um zu überprüfen, Sie sind in der Tat root, geben Sie folgenden Befehl ein:
whoami
Beachten Sie, dass die Eingabe in den Befehl "whoami" nicht erzeugen eine Sicherheit Log-Eintrag. Mit anderen Worten, wenn wir eine Kommando-Shell mit dem Befehl less hervorgebracht, können wir tun, was wir wollen und sudo nicht protokollieren.
Schritt 6: Zusätzliche Überprüfung
In den ersten Terminal-Fenster, wo "weniger" ist in den Hintergrund, geben Sie folgenden Befehl ein:
Top-
Dieser druckt Statistiken über das laufende System.
In der zweiten Terminal-Fenster beachten Sie das Terminal im Einsatz. Im obigen Beispiel Log-Eintrag des Terminals ist "TTY = pts / 4" aber verkaufen könnte anders sein. Notieren Sie sich das Terminal. Jetzt, in diesem zweiten Fenster drücken:
<CTRL>-C
zu töten den Befehl tail. Nun führen Sie den Befehl:
ps ax | grep 'pts / 4'
Das Austauschen von "pts / 4" mit dem, was Terminal Namen, den Sie zur Kenntnis genommen. Sie sollten eine Ausgabe ähnlich der folgenden:
17330 pts / 4 Ss 00.00 bash
18392 pts / 4 S 00.00 less / etc / hosts
18410 pts / 4 S 0:00 / bin / bash
18432 pts / 4 S + 00.00 top
Dies sagt uns, dass wir zwei Schalen, die auf das Terminal zu haben. Die erste findet in der Hosts-Datei suchen, während der zweite läuft den Befehl top. So das System tatsächlich sieht, dass wir spielen um in die zweite Schale, kann sein, dass nur sudo nicht protokollieren.
Einige andere Root-Ebene Befehle, die Sie versuchen, das wird nicht schaden kann alles:
iptables-L
ifconfig
lsof-i
Wenn Sie überzeugt sind, haben Sie vollen Root-Zugriff, gehen Sie zurück und überprüfen Sie das Protokoll zu überprüfen, ob sudo hat noch nichts protokolliert:
tail / var / log / secure
Wenn Sie mit der Schale sind in den ersten Terminal-Fenster geschehen, geben Sie in:
Ausfahrt
q
Was haben wir gelernt?
Wir haben gelernt, dass wir nicht zulassen, Anwendern die volle sudo Zugriff auf das System haben und tatsächlich halten einen Audit-Trail, was sie tun. Access hat auf Tools, die nicht unterstützen Aufruf einer Shell beschränkt werden. Wenn wir unsicher sind, ihre einfach eine Frage der Überprüfung der Manpages. Versuchen Sie folgendes:
Mann weniger
/
Schale
Der Befehl "man weniger" bringt das Handbuch für die Verwendung des "less"-Befehl. Durch Drücken der Backslash-Taste öffnet sich die Suchfunktion. Als wir in das Wort "Shell" ein und drücken Sie die Enter-Taste, man springt in die erste Instanz der String "shell" und hebt jede Instanz. Beachten Sie den Abschnitt Mann sprang zu beschreibt, wie weniger kann eine Shell aufzurufen. Jetzt wissen wir, wir können nicht zulassen, sudo Zugriff auf den Befehl "less". Eine bessere Option können Sie den Befehl "cat", die nicht unterstützt Aufruf einer Shell werden.
Eine andere Möglichkeit ist, einfach ein anderes Werkzeug. Zum Beispiel das Werkzeug op wurde speziell entwickelt, um einige der Sicherheitsmängel in sudo, einschließlich der Möglichkeit, Shell-Adresse.
Exec Zusammenfassung
Sudo ist ein großer Sicherheits-Tool, vorausgesetzt, Sie verwenden sie weise. Einer der häufigsten Fehler, mit sudo gemacht benutzt es, um Zugang zu allen Root-Level-Werkzeuge ermöglichen. Sudo erzeugen kann eine wirksame Audit-Trail, aber nur, wenn es um Werkzeuge, die keine Shell-Fähigkeit beschränkt.

