Auf welcher Linux-Distribution arbeiten Sie? Oder sogar Unix?
Slhck
@slhck Linux, Ubuntu 12
HappyDeveloper
3
setuidfunktioniert nicht mit Skripten - aus Sicherheitsgründen ist es heutzutage auf den meisten * nix-Distributionen deaktiviert. Sie können es einstellen, aber es wird ignoriert. Vielleicht können Sie mehr über Ihr tatsächliches Problem erklären, damit wir Ihnen bei der Lösung dieses Problems helfen können? Um welches Drehbuch handelt es sich? Warum muss es als root ausgeführt werden? Verwenden Sie sudoeine Alternative?
Slhck
Hast du es versucht sudo -s?
Nam Phung
Antworten:
29
Seien Sie sehr vorsichtig: Skripte in Kombination mit setuid sind gefährlich!
Wenn Sie Ihr Skript trotzdem mit setuidset ausführen möchten, können Sie ein kurzes C-Programm als Wrapper schreiben und das setuidBit in der kompilierten Binärdatei setzen.
Wrapper-Beispiel:
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Die spezifischen Gefahren sind nicht sehr offensichtlich, aber sie drehen sich stark um die Umwelt. Im Gegensatz zu den meisten Programmen kann das Verhalten eines Shell-Skripts durch Dutzende von Umgebungsvariablen erheblich geändert werden, sodass ein solches Skript ohne umfangreiche Sicherheitsmaßnahmen leicht dazu gebracht werden kann, beliebigen Code auszuführen.
Stephanie
1
Sie sollten clearenv () vor dem Systemaufruf in diesem Wrapper einen Aufruf hinzufügen, der die Umgebung vollständig zerstört, damit keine bösen Einstellungen zur Manipulation des Skripts vorhanden sind. kernel.org/doc/man-pages/online/pages/man3/clearenv.3.html
Stephanie
@Stephanie Ich muss etwas falsch machen, denn all das sieht zu verrückt für eine gemeinsame Aufgabe aus. Folgendes
HappyDeveloper
@HappyDeveloper Nicht allzu verrückt nach einem Setuid-Skript, da ein schlecht abgesichertes ein Root-Pfad für jeden ist, der es schafft, es auszuführen.
Stephanie
4
sudokann verwendet werden, um allen Benutzern Zugriff auf ein bestimmtes Programm (oder Skript) zu gewähren. In diesem Sinne fungiert es als ausgefallener Setuid-Wrapper. Es scheint, als wäre dies in der Regel die bessere Wahl, als einen eigenen Setuid-Wrapper zu schreiben.
JJLIN
4
Am einfachsten und sichersten ist es, SETUID-Bits in Dateiberechtigungen zu verwenden. Auf diese Weise werden die Befehlsberechtigungen auf die Dateieignerberechtigungen erhöht.
Um zu verhindern, dass das Skript in der Edition ausgeführt wird, setzen Sie das Schreiben nicht für alle Bits.
Ich weiß nicht, ob dies nützlich sein kann, aber um das Skript nur als root auszuführen, können Sie diesen Befehl in der ersten Zeile des Skripts verwenden:
setuid
funktioniert nicht mit Skripten - aus Sicherheitsgründen ist es heutzutage auf den meisten * nix-Distributionen deaktiviert. Sie können es einstellen, aber es wird ignoriert. Vielleicht können Sie mehr über Ihr tatsächliches Problem erklären, damit wir Ihnen bei der Lösung dieses Problems helfen können? Um welches Drehbuch handelt es sich? Warum muss es als root ausgeführt werden? Verwenden Siesudo
eine Alternative?sudo -s
?Antworten:
Seien Sie sehr vorsichtig: Skripte in Kombination mit setuid sind gefährlich!
Schauen Sie sich zunächst diese Frage / Antwort an , insbesondere diese Antwort und die Sicherheitswarnung .
Wenn Sie Ihr Skript trotzdem mit
setuid
set ausführen möchten, können Sie ein kurzes C-Programm als Wrapper schreiben und dassetuid
Bit in der kompilierten Binärdatei setzen.Wrapper-Beispiel:
Eine andere Lösung mit
sudo
( hier erwähnt ):Verhindern Sie als Root den schreibenden (und möglicherweise anderen) Zugriff auf Ihr Skript:
Stellen Sie sicher, dass niemand außer root das Skript ersetzen kann , z. B. indem Sie die Zugriffsrechte des übergeordneten Ordners ändern :
Ändern Sie die sudo-Zugriffsrechte
/etc/sudoers
mitvisudo
:Weitere Details zu den Einstellungen (z. B. Einschränkung des Zugriffs auf bestimmte Benutzer oder Gruppen) finden Sie in der sudoers-Manpage.
Danach können alle Benutzer das Skript als root ohne Passwort ausführen:
Dies ähnelt der oben beschriebenen Wrapper / Setuid-Lösung.
quelle
sudo
kann verwendet werden, um allen Benutzern Zugriff auf ein bestimmtes Programm (oder Skript) zu gewähren. In diesem Sinne fungiert es als ausgefallener Setuid-Wrapper. Es scheint, als wäre dies in der Regel die bessere Wahl, als einen eigenen Setuid-Wrapper zu schreiben.Am einfachsten und sichersten ist es, SETUID-Bits in Dateiberechtigungen zu verwenden. Auf diese Weise werden die Befehlsberechtigungen auf die Dateieignerberechtigungen erhöht.
Um zu verhindern, dass das Skript in der Edition ausgeführt wird, setzen Sie das Schreiben nicht für alle Bits.
quelle
Ich weiß nicht, ob dies nützlich sein kann, aber um das Skript nur als root auszuführen, können Sie diesen Befehl in der ersten Zeile des Skripts verwenden:
quelle