Posso fare uno script sempre eseguire come root?

Come eseguire uno script come root, indipendentemente da chi lo esegue?

Ho letto su setuid ma non sono sicuro di come farlo.

Sto utilizzando Linux, Ubuntu 12.04 LTS.

Essere molto attenti: gli script combinati con setuid sono pericolosi!

Innanzitutto, si prega di dare un'occhiata a questa domanda / risposte , in particolare su questa risposta e sull'avviso di sicurezza .

Se si desidera ancora eseguire lo script con setuid set, allora è ansible scrivere un breve programma C come wrapper e impostare il bit setuid sul binario compilato.

Esempio Wrapper:

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

Un'altra soluzione che utilizza il sudo (menzionato qui ):

  1. Come root, impedisce l'accesso al tuo script (e forse altro):

      root chown /absolute/path/to/your/script.sh
     chmod 700 /absolute/path/to/your/script.sh
    
  2. Verificare che nessuno, tranne la radice, può sostituire lo script , ad esempio modificando i diritti di accesso della cartella principale:

     root di chown / absolute / path / to / your /
     chmod 755 / absolute / path / to / your /
    
  3. Modificare i diritti di accesso sudo in /etc/sudoers con visudo :

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

    Ulteriori dettagli sulle impostazioni (ad es. Limitazione dell'accesso a utenti o gruppi specifici) possono essere trovati nella manpage sudoers.

In seguito, 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 è usare i bit SETUID nelle autorizzazioni di file. in questo modo le autorizzazioni di command saranno elevate ai permessi del proprietario di file.

per evitare lo script da edizione non impostare scrivere per tutti i bit.