Fai molta attenzione:gli script combinati con setuid sono pericolosi!
Innanzitutto, dai un'occhiata a questa domanda/risposte, in particolare a questa risposta e all'avviso di sicurezza.
Se vuoi ancora eseguire il tuo script con setuid
set, allora puoi scrivere un breve programma C come wrapper e impostare setuid
bit sul binario compilato.
Esempio di wrapper:
int main(void) {
setuid(0);
clearenv();
system("/absolute/path/to/your/script.sh");
}
Un'altra soluzione usando sudo
(citato qui):
-
Come root, impedisci l'accesso in scrittura (e forse anche altro) al tuo script:
chown root /absolute/path/to/your/script.sh chmod 700 /absolute/path/to/your/script.sh
-
Verifica che nessuno tranne root possa sostituire lo script , per esempio. modificando i diritti di accesso della cartella principale:
chown root /absolute/path/to/your/ chmod 755 /absolute/path/to/your/
-
Modifica i diritti di accesso sudo in
/etc/sudoers
convisudo
:ALL ALL = (root) NOPASSWD: /absolute/path/to/your/script.sh
Maggiori dettagli sulle impostazioni (ad es. limitazione dell'accesso a utenti o gruppi specifici) sono disponibili nella manpage sudoers.
Successivamente, tutti gli utenti possono eseguire lo script come root senza password:
sudo /absolute/path/to/your/script.sh
Questo è simile all'utilizzo della soluzione wrapper/setuid sopra.
Il modo più semplice e sicuro è utilizzare i bit SETUID nei permessi dei file. In questo modo i permessi dei comandi saranno elevati ai permessi del proprietario dei file.
per evitare che lo script venga modificato, non impostare la scrittura per tutti i bit.