Seien Sie wirklich vorsichtig:Skripte in Kombination mit setuid sind gefährlich!
Sehen Sie sich bitte zuerst diese Frage/Antworten an, insbesondere diese Antwort und Sicherheitswarnung.
Wenn Sie Ihr Skript trotzdem mit setuid
ausführen möchten set, dann kannst du ein kurzes C-Programm als Wrapper schreiben und die setuid
setzen Bit auf der kompilierten Binärdatei.
Wrapper-Beispiel:
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Eine andere Lösung mit sudo
(hier erwähnt):
-
Verhindern Sie als Root den Schreibzugriff (und möglicherweise andere) auf Ihr Skript:
chown root /absolute/path/to/your/script.sh chmod 700 /absolute/path/to/your/script.sh
-
Stellen Sie sicher, dass niemand außer root das Skript ersetzen kann , z.B. indem Sie die Zugriffsrechte des übergeordneten Ordners ändern:
chown root /absolute/path/to/your/ chmod 755 /absolute/path/to/your/
-
Ändern Sie die sudo-Zugriffsrechte in
/etc/sudoers
mitvisudo
:ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
Weitere Details zu den Einstellungen (z. B. Zugriffsbeschränkung 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 Verwendung der Wrapper/Setuid-Lösung oben.
Der einfachste und sicherste Weg ist die Verwendung von SETUID-Bits in Dateiberechtigungen. Auf diese Weise werden Befehlsberechtigungen zu Dateibesitzerberechtigungen erhöht.
Um zu verhindern, dass das Skript editiert wird, setzen Sie nicht die Write-for-Everyone-Bits.