Wenn dies eine normale Binärdatei wäre, könnten Sie setuid durch Ausführen festlegen
# chmod u+s /path/to/binary
Leider können Skripte nicht gesetzt werden. (Nun, Sie können, aber es wird ignoriert). Der Grund dafür ist, dass die erste Zeile des Skripts dem Betriebssystem mitteilt, unter welchem Interpreter das Skript ausgeführt werden soll. Zum Beispiel, wenn Sie ein Skript hatten mit:
#!/bin/bash
Du würdest tatsächlich rennen
/bin/bash /path/to/script
Natürlich müsste der Interpreter setuid sein, was dann bedeuten würde, dass alle Skripte setuid sind. Das wäre schlecht.
Sie können dies mit sudo tun, indem Sie Folgendes in Ihre / etc / sudoers-Datei einfügen, indem Sie visudo ausführen.
ALL ALL=NOPASSWD: /path/to/script
Und jetzt kann jeder Benutzer laufen
$ sudo /path/to/script
Auf diese Weise können sie das Skript ausführen, ohne ihr Kennwort eingeben zu müssen.
Es gibt eine Alternative, für die im Befehl kein sudo erforderlich ist. Dazu muss eine kleine setuided-Binärdatei erstellt werden, die Ihr Skript ausführt. Jede zusätzliche setuid-Binärdatei fügt jedoch ein weiteres potenzielles Sicherheitsproblem hinzu.
ALL
durch einen Benutzernamen, damit nur dieser eine Sudoer ohne Eingabe eines Kennworts ausgeführt werden kann.Ich musste diese Zeile am Ende von / etc / sudoers einfügen:
ALL ALL = NOPASSWD: <filename>
Anscheinend%admin ALL=(ALL) ALL
erforderte eine spätere Überschreibung ein Passwort für Administratorbenutzer.Es gibt kein Sicherheitsproblem, das das Ausführen eines Skripts als Root zulässt, solange das Skript eine genau festgelegte, harmlose und zulässige Aktion ausführt und wenn Werte für Parameter nicht zu einem Fehlverhalten des Skripts führen können.
Aber es gibt eine Gotcha ...
Verwenden Sie immer vollständige Pfade in Befehls- und Dateinamen. Wenn Sie so etwas wie
echo Hello world!
in schreibenmyrootscript
, könnte jemand ein schreiben~/bin/echo script
undmyrootscript
als root ausführen, was auch immer darin enthalten ist./bin/echo "Hoping this will keep you safe"
:-)quelle
Standardmäßig dürfen Mitglieder der
wheel
Gruppesudo
jeden Befehl alsroot
. Dies ist wahrscheinlich, wie Siesudo
bisher verwenden.Um einen anderen Benutzer zuzulassen, müssen Sie eine
sudoers
Regel erstellen . Zum Beispiel:Kann der Benutzer
mickey.mouse
den Befehl auszuführen ,/usr/local/bin/test.sh
wie ,root
ohne dass eine zusätzliche Passwortabfrage.Sie sollten dieses Dokument lesen , um weitere Informationen zu erhalten.
quelle
Verwenden Sie,chmod +s <filename>
um das Suid-Bit zu sehen. Dies bedeutet, dass die Datei bei ihrer Ausführung mit den Berechtigungen des Eigentümers der Datei ausgeführt wird (also an root übergeben, damit sie so ausgeführt wird).Dies kann jedoch bei so etwas wie Bash-Skripten SEHR gefährlich sein, da ein Benutzer einen Weg findet, dies zu ändern, und leicht eine Root-Shell erhalten kann. Stellen Sie sicher, dass niemand außer root darauf schreiben kann.Unter Linux können Sie keine Skripte festlegen. Dazu müssen Sie es als Programm kompilieren. Stattdessen können Sie die sudoers-Datei (/ etc / sudoers) verwenden und eine Zeile wie diese hinzufügen.
<username> ALL = NOPASSWD: /path/to/script
quelle
Eine andere Alternative: Sie können einen kleinen Setuid-C-Wrapper um dieses Skript erstellen
Ein bisschen wie Ihre eigene Teilmenge der vielfältigen Fähigkeiten von
sudo
.quelle