Seien Sie sehr vorsichtig: Mit setuid kombinierte Skripte sind gefährlich!
Bitte schauen Sie sich zuerst diese Frage / Antworten an, insbesondere diese Antwort und Sicherheitswarnung .
Wenn Sie Ihr Skript weiterhin mit setuid
set ausführen möchten, können Sie ein kurzes C-Programm als Wrapper schreiben und das setuid
Bit 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
( 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, indem Sie z. B. die Zugriffsrechte des übergeordneten Ordners ändern :
chown root / absolute / Pfad / zu / Ihrem / chmod 755 / absolut / pfad / zu / ihr /
Ändern Sie Sudo-Zugriffsrechte
/etc/sudoers
mitvisudo
:ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
Weitere Details zu den Einstellungen (z. B. Beschrä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:
sudo /absolute/path/to/your/script.sh
Dies ähnelt der Verwendung der Wrapper / Setuid-Lösung oben.