Buďte opravdu opatrní:skripty v kombinaci s setuid jsou nebezpečné!
Nejprve se prosím podívejte na tuto otázku/odpovědi, zejména na tuto odpověď a bezpečnostní varování.
Pokud přesto chcete spustit skript s setuid
set, pak můžete napsat krátký program v C jako obal a nastavit setuid
bit na zkompilovaném binárním souboru.
Příklad obálky:
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Jiné řešení pomocí sudo
(zde zmíněno):
-
Jako root zabraňte zápisu (a možná i dalšímu) přístupu k vašemu skriptu:
chown root /absolute/path/to/your/script.sh chmod 700 /absolute/path/to/your/script.sh
-
Ověřte, že skript nemůže nahradit nikdo kromě root , např. úpravou přístupových práv nadřazené složky:
chown root /absolute/path/to/your/ chmod 755 /absolute/path/to/your/
-
Upravte přístupová práva sudo v
/etc/sudoers
svisudo
:ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
Více podrobností o nastavení (např. omezení přístupu na konkrétní uživatele nebo skupiny) lze nalézt v manuálové stránce sudoers.
Poté mohou všichni uživatelé spustit skript jako root bez hesla:
sudo /absolute/path/to/your/script.sh
Je to podobné jako u výše uvedeného řešení wrapper/setuid.
Nejjednodušším a nejbezpečnějším způsobem je použití bitů SETUID v oprávněních souboru. Tímto způsobem budou oprávnění příkazů zvýšena na oprávnění vlastníka souboru.
abyste zabránili skriptu ve vydání, nenastavujte zápis pro všechny bity.