Ich habe ein sehr sensibles Netzwerk-Setup und möchte es nicht vermasseln. Mein Netzwerk besteht aus einer Reihe von Benutzern mit Sudo-Rechten.
Ich möchte sie davon abhalten zu rennen
service NetworkManager restart
service network restart
befehle.
Kann ich das auf irgendeine Weise erreichen?
networking
undnetwork-manager
? Warum haben Ihre Benutzersudo
Zugriff? Sie sollten es nicht tun, es sei denn, Sie möchten, dass sie über vollständige Root-Berechtigungen verfügen.Antworten:
Die Verwendung von CmndAlias
ALL
wird niemals sicher seinEs gibt 1000 Möglichkeiten,
service network restart
ohne es zu tunsudo service network restart
. Hier ist ein Beispiel, was ein ungezogener Benutzer versuchen könnte:Wenn Sie Benutzern den
ALL
Befehlsalias bereitstellen und dann versuchen, eine schwarze Liste zu erstellen, können sie sich immer daran orientieren. Blacklist Bash, und sie werden Python verwenden. Blacklist Python, und sie werden Perl verwenden. Blacklist Perl, und sie werden PHP verwenden. Niemand will das!Wenn Sie nicht wirklich jemand etwas tun wollen, sollten Sie tun , wie Thomas sagt, und erstellen Sie eine weiße Liste von Dingen , die sie sind erlaubt zu tun.
Einrichten einer Whitelist mit einer Ausnahme
Ein Beispiel für eine kleine Whitelist mit einem Ausschluss befindet sich unten in
man sudoers
:(Tatsächlich ist dieses Beispiel auf der Manpage unsicher und kann ausgenutzt werden, um das root-Passwort zu ändern. Siehe die Kommentare unten für wie.)
Wir können versuchen, dies an Ihren Fall anzupassen, um der Stabgruppe alle
service
Befehle anzubieten , aber die Sie betreffenden Befehle ausschließenservice network
:(Die
ALL
in dieser Position bezieht sich auf die Host_Alias, nicht die Cmnd_Alias - verwirrend, nicht wahr?)Der Benutzer kann
sudo bash
odersudo tee
odersudo wget
oder nicht ausführensudo /path/to/malicious_script
. Sie können weitere Administrationsbefehle für Ihre Benutzer auf die Positivliste setzen, wenn Sie vorsichtig sind. Sei einfach konkret!Hinweis: Ich habe das
*
vor demnetwork
obigen Wort hinzugefügt , nur für den Fall, dass demservice
Tool in Zukunft jemals ein harmloses Flag hinzugefügt wird. Stellen wir uns vor, dass--verbose
in Zukunft ein Flag hinzugefügt wurde, dann könnten die Benutzer Folgendes ausführen:Wir müssen also
*
alle Flags vor dem Dienstnamen konsumieren. Der einzige Nachteil ist , dass diese andere Dienste blockieren könnten , die Sie eigentlich gar nicht genannt Benutzer ausgeführt wird , zB ein Dienst dagegensafe-network
odernetwork-monitor
auch abgelehnt werden würde.Ermöglichen Sie Benutzern das Bearbeiten einer Datei mit Gruppenberechtigungen
Im Folgenden finden Sie verschiedene Versuche, mit
rnano
Hilfesudo
von eine oder mehrere Dateien zu bearbeiten. Aber in Wirklichkeit sind sie komplexer und gefährlicher als sie sein sollten.Eine viel einfachere und sicherere Lösung besteht darin, die Gruppenberechtigungen für die spezifischen Dateien zu ändern, für die Sie Bearbeitungsrechte öffnen möchten. Hier einige Beispiele:
Wenn Sie eine differenziertere Steuerung benötigen (z. B. Zugriff für nur 3 Benutzer, aber nicht alle Mitarbeiter), können Sie mit dem
addgroup
Befehl eine neue Gruppe erstellen und dieser nur wenige Benutzer hinzufügen.Lassen Sie Benutzer eine Datei bearbeiten
sudo
Der Rest dieser Antwort wurde zu einer Untersuchung darüber, wie einfach es ist, Lücken in Ihrer
sudo
Konfiguration zu hinterlassen, wenn Sie Ihren Benutzern Flexibilität bieten möchten. Folgendes würde ich nicht empfehlen!Wenn Sie Ihren Benutzern den Zugriff zum Bearbeiten einer bestimmten Datei gewähren möchten, können Sie versuchen, Folgendes zu verwenden
rnano
:rnano
Lässt sie nur die angegebene Datei bearbeiten. Dies ist wichtig, um zu verhindern, dass ein böswilliger Benutzer beispielsweise einen anderen Startdienst bearbeitet/etc/init.d/urandom
und eine Zeile hinzufügt, die ausgeführt wirdservice network restart
.Leider habe ich keinen Weg gefunden, um
rvim
ausreichend einzuschränken (der Benutzer kann noch jede Datei mit öffnen:e
), so dass wir bei stecken bleibennano
.Leider ist es viel schwieriger, Benutzern das Bearbeiten mehrerer Dateien zu ermöglichen ...
Lassen Sie die Benutzer mehrere Dateien bearbeiten (viel schwieriger als es sein sollte)
1. Unsichere Ansätze
Passen Sie auf Wildcards auf! Wenn Sie zu viel Flexibilität bieten (oder eine beliebige Flexibilität), kann dies ausgenutzt werden:
In diesem Fall kann ein böswilliger Benutzer ein beliebiges anderes Skript für den Upstart-Dienst bearbeiten und dann ausführen:
(Sudo verhindert
.
und..
erweitert den Befehl, aber leider nicht die Argumente.)Ich hatte gehofft, dass so etwas funktioniert, aber es ist immer noch unsicher:
Da
sudo
derzeit nur Glob- Muster angeboten werden ,*
die zu nichts passen, handelt es sich nicht um einen regulären Ausdruck!(Edit: Ich habe darüber nachgedacht, ob Sie in Ihrer Situation mit dem oben Gesagten durchkommen könnten , da sich keine Unterordner darunter befinden
sites-available
. Wir haben verlangt, dass ein Zeichen nach dem Ordner abgeglichen wird und/..
nach einem Dateinamen fehlschlägt. Dies ist jedoch kein praktikable Lösung, darnano
mehrere Argumente akzeptiert werden. Und im Allgemeinen wäre dies in einem Ordner mit Unterordnern immer noch unsicher !)Selbst wenn wir keine Unterordner haben und alle Zeilen ausschließen
/../
, die einen*
Glob enthalten , kann die Regel, die einen Glob anbietet, dennoch ausgenutzt werden, darnano
mehrere Argumente akzeptiert werden (durchlaufen<C-X>
, und das Leerzeichen wird vom*
Glob gerne akzeptiert .2. Schieben des Umschlags (auch letztendlich unsicher)
Was ist, wenn wir Zeilen ablehnen, die Leerzeichen enthalten, oder versuchen zu erreichen
/..
? Dann könnte eine endgültige praktikable Lösung sein:Wir nehmen alles „unter“ dem Ordner , aber wir lehnen auch alle Anrufe an ,
rnano
wenn/..
oder/.
oderweitergegeben werden, oder wenn der Ordner direkt angestrebt. (Technisch
/.
macht der/..
Ausschluss den Ausschluss überflüssig, aber ich habe beide aus Gründen der Klarheit belassen.)Ich habe den Ordner gefunden, und die
/.
Ausschlüsse wurden benötigt, da der Benutzer sonst auf den Ordner selbst abzielen könnte. Jetzt könnten Sie denken,rnano
würde blockieren, wenn auf einen Ordner verwiesen, aber Sie wären falsch. Tatsächlich startet meine Version (2.2.6-1ubuntu1) mit einer milden Warnung und einer leeren Datei, und<C-X>
fordert mich dann auf , einen beliebigen Dateinamen einzugeben, unter dem ich speichern möchte. Dadurch wird ein neuer Angriffsvektor geöffnet! Nun, zumindest hat es sich geweigert, eine vorhandene Datei zu überschreiben (in dem einen Test, den ich durchgeführt habe). Wie auch immer, da es keine Möglichkeit gibt, Unterordner mit sudo auf die schwarze Liste zu setzen, müssen wir den Schluss ziehen, dass dieser Ansatz erneut unsicher ist. Sorry Benutzer!Diese Entdeckung ließ mich an der Gründlichkeit des
nano
"eingeschränkten" Modus zweifeln . Sie sagen, eine Kette sei nur so stark wie ihr schwächstes Glied. Ich fange an, die Kombination vonsudo
schwarzer Magie zu spüren und binrnano
vielleicht nicht sicherer als eine Kette von Gänseblümchen.3. Sichere, aber begrenzte Ansätze
Globs sind sehr eingeschränkt - sie lassen uns nicht mehrere Male mit einer Charakterklasse übereinstimmen. Sie können mehrere Dateibearbeitungen anbieten, wenn alle Dateinamen dieselbe Länge haben (in diesem Fall
host
gefolgt von einer einzelnen Ziffer):Wenn Sie dem Benutzer jedoch den Zugriff zum Bearbeiten verschiedener Dateien gewähren möchten, müssen Sie möglicherweise jede einzelne Datei explizit angeben:
Seien Sie zu
*
keinem Zeitpunkt versucht , azu verwenden. Lesen Sie in den Abschnitten 1. und 2. nach, warum! Denken Sie daran: Ein kleiner Fehler kann das gesamte Superuser-Konto und das gesamte System gefährden.4. Schreiben Sie Ihren eigenen Argumentationsprüfer (Sicherheit liegt jetzt in Ihrer Verantwortung)
Ich hoffe, dass sie in Zukunft die Unterstützung für reguläre Ausdrücke erweitern
sudo
werden. es könnte eine Menge Probleme lösen, wenn es richtig verwendet wird. Möglicherweise müssen wir aber auch die Eigenschaften von Argumenten überprüfen können (um nur Dateien, nur Ordner oder nur bestimmte Flags zuzulassen).Es gibt jedoch eine Alternative, um in sudo Flexibilität zu schaffen. Übergeben Sie das Geld:
Schreiben Sie dann ein eigenes
staffedit
Skript oder eine ausführbare Datei, um zu überprüfen, ob die vom Benutzer übergebenen Argumente zulässig sind, und führen Sie die Anforderung nur aus, wenn dies der Fall ist.quelle
ALL=(ALL:ALL) ALL
zu wenig Semantik gibt, aber ich bin immer davon ausgegangen, dass es irgendwo einen anständigen Argumentationsprüfer gibt ... ich habe mich geirrt. Es ist wirklich sehr begrenzt. Sogar der in der Manpage angebotene passwd-Root-Ausschluss kann mit einem einfachen Befehlszeilenargument aufgehoben werdensudo passwd -q root
. Nun, die Autoren von sudo listen [einige Alternativen] (sudo.ws/sudo/other.html) auf ihrer Website auf. Ich hoffe, sie werden in Zukunft RegExp-Unterstützung hinzufügen.rnano
in Ihrer Beschreibung hier speziell , weil es sich um eine Version von Nano handelt, der eine Funktion zum Speichern unter fehlt? Ich bin mit dem Programm nicht vertraut.$ man nano
dann/-R<Enter>
-q
müssen kommen danach:sudo passwd root -q
. Das Petebeispiel kann durch Ausschließen gehärtet werden*root*
.sudoedit
von, um die Dateimodifikation mit sicher zu aktivierensudo
.Öffnen Sie zunächst die sudoers-Datei mit
sudo visudo
. Das Hinzufügen vonuser ALL=!/usr/sbin/service
Willen, IIRC, verbietet dasservice
Befehl für den Benutzer nicht zugelassenuser
.Quellen: http://nixcraft.com/showthread.php/15132-Sudo-Exclude-Commands-And-Disable-sudo-su-Bash-Shell
quelle
Ich habe die Lösung gefunden.
Ich habe das Terminal geöffnet und mit in den Root-Benutzer
su -
gewechseltvisudo
, dann habe ich zum Bearbeiten getippt .dann habe ich am ende zeilen wie geschrieben
Dann habe ich gespeichert & geschlossen und auch neu gestartet.
Wenn ich schreibe als
service network restart
oderservice NetworkManager restart
dann ist es mir nicht erlaubt und ich gebe einen Fehler wieund ähnlich für
service network restart
Befehl auch.quelle
sudo cp -p /etc/init.d/network /etc/init.d/network-not-in-sudo
und dannsudo /etc/init.d/network-not-in-sudo restart
). Aus diesem Grund ist es weitaus sicherer, Einschlüsse anstelle von Ausschlüssen in der sudoers-Datei zu erstellen, z. B. anzugeben, mit welchen Diensten sie interagieren dürfen.Die wirkliche Antwort darauf ist, dass Sie dies nicht wirklich verhindern können. Mit den in den anderen Antworten beschriebenen Methoden können Sie möglicherweise verhindern, dass jemand, der nicht böswillig ist, diesen Befehl versehentlich ausführt. Wenn jemand ihn jedoch wirklich ausführen möchte und auf der Liste der Sudoer steht, kann er ihn ausführen. Sie könnten beispielsweise Folgendes tun:
joe@box:~$ sudo bash root@box:~# service network restart
Oder ein anderer lustiger Befehl, mit dem die Einschränkungen in der sudoers-Datei umgangen werden können:
sudo visudo
Kurz gesagt, wenn Sie sudo können und nicht nur bestimmte Befehle ausführen können, können Sie so ziemlich alles tun, was Sie wollen. Selbst wenn Sie sie auf einen bestimmten Befehlssatz beschränken, müssen Sie sicherstellen, dass es dem Benutzer nicht möglich ist, einen anderen Befehl, den er ausführen möchte, auf denselben Namen zu kopieren, für den er die Berechtigung zum Ausführen hatte ( B. durch Überschreiben des Befehls, zu dessen Ausführung sie berechtigt sind.)
quelle
Verwenden Sie firejail, um Benutzer mit Sandboxen einzuschränken.
https://github.com/netblue30/firejail/
Setzen Sie firejail für jeden Benutzer, den Sie einschränken möchten, als Shell anstelle von bash in / etc / passwd. Es ist sehr einfach zu bedienen und hat eine gute Dokumentation.
Beispiel:
quelle