it-swarm.com.de

Kann ich ein Skript immer als root ausführen lassen?

Wie kann man ein Skript als root ausführen lassen, egal wer es ausführt?

Ich habe über setuid gelesen, bin mir aber nicht sicher, wie ich das machen soll.

Ich benutze Linux, Ubuntu 12.04 LTS.

27
HappyDeveloper

Vorsicht: Mit setuid kombinierte Skripte sind gefährlich!

Bitte werfen Sie zunächst einen Blick auf diese Frage/answers , insbesondere auf diese Antwort und Sicherheitswarnung .

Wenn Sie Ihr Skript dennoch mit gesetztem setuid ausführen möchten, können Sie ein kurzes C-Programm als Wrapper schreiben und das Bit setuid in der kompilierten Binärdatei setzen.

Wrapper-Beispiel:

int main(void) {        
    setuid(0);
    clearenv();
    system("/absolute/path/to/your/script.sh");
}

Eine andere Lösung mit Sudo (erwähnt hier ):

  1. Verhindern Sie als Root den schreibenden (und möglicherweise anderen) Zugriff auf Ihr Skript:

    chown root /absolute/path/to/your/script.sh[.____.₱chmod 700 /absolute/path/to/your/script.sh
    
  2. Stellen Sie sicher, dass niemand außer root das Skript ersetzen kann, z. durch Ändern der Zugriffsrechte des übergeordneten Ordners:

     chown root /absolute/path/to/your/[.____.₱chmod 755 /absolute/path/to/your/
    
  3. Ändern Sie die Sudo-Zugriffsrechte in /etc/sudoers mit visudo:

     ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
    

    Weitere Details zu den Einstellungen (z. B. Einschränken 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:

Sudo /absolute/path/to/your/script.sh

Dies ähnelt der oben beschriebenen Wrapper/Setuid-Lösung.

29
speakr

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.

4
Tadas

Ich weiß nicht, ob dies nützlich sein kann, aber um das Skript nur als root auszuführen, können Sie diesen Shebang in der ersten Zeile des Skripts verwenden:

#!/bin/su root
0
alexandre1985