2010-07-02 7 views
39

Ho un file che è uno script di bash che richiede il funzionamento di SUDO.Come chiamare lo script di shell da php che richiede SUDO?

Posso eseguirlo dalla riga di comando utilizzando SUDO ma verrà richiesto di inserire la password SUDO.

Voglio eseguire questo script da php tramite shell_exec ma io se chiamo SUDO, non è come una riga di comando in cui posso essere richiesto per la password. C'è un modo per passare la password per sudo con la chiamata sudo?

Come posso fare questo?

+0

A proposito, lo sto eseguendo sul mio dispositivo ubunto 10.04 con apache2 e php5 –

+0

Si dovrebbe prendere in considerazione la modifica delle autorizzazioni dello script. Ad esempio, è possibile modificare il gruppo per l'utente apache (www-data) e assegnare al gruppo le autorizzazioni di esecuzione: 'chgrp www-data script.sh && chmod g + x script.sh'. –

+0

@danilo non è il file stesso che richiede al SUDO ciò che i file chiamano, che è 'svn commit', ma prima devo' cd/var/www' per chiamare svn commit dalla copia di lavoro. C'è un modo per aggiungere autorizzazioni per farlo per l'utente di apache www-admin? –

risposta

41

Modificare il file sudoers (con visudo) e aggiungere una regola che consenta all'utente del server Web di eseguire il comando senza password. Per esempio:

www-data ALL=NOPASSWD: /path/to/script 
+0

funziona anche per nginx? –

5

È possibile aggiungere qualcosa di simile al file sudoers:

username ALL=NOPASSWD: /path/to/script 

Ciò consentirà quel particolare utente a chiamare sudo su quel particolare script senza che venga richiesto di inserire una password.

+1

Questo ha senso, ma una parte mi confonde ... Dove esattamente metto la riga 'username ALL = NOPASSWD:/percorso/a/script 'Qual è il mio file sudoers? –

+1

In '/ etc/sudoers', anche se di solito si usa il comando' visudo' per modificare quel file. –

8

Esistono varie soluzioni per questo problema.

  • Prima di tutto, pensare di cambiare i permessi di script, se la ragione per cui si desidera sudo è semplicemente un problema di autorizzazione (vedi il commento che ho aggiunto alla domanda di cui sopra).

  • Un altro approccio potrebbe essere l' setuid bit. [Modifica: Sembra che setuid non funzioni bene con gli script. Per spiegazioni, vedere this link.]

  • Un terzo, ma molto poco sicuro, è quello di leggere la password da un file di password. Attenzione: Questo è molto insicuro, se c'è qualche altra possibilità, non farlo. E se lo fai, prova a nascondere il file della password da qualche parte nella gerarchia delle cartelle.

    <?php 
    shell_exec('sudo -u root -S bash script.sh < /home/[user]/passwordfile'); 
    ?> 
    
  • E una quarta possibilità è quella di utilizzare il NOPASSWD tag nel file sudoers. Dovresti limitare questa potenza ai comandi specifici di cui hai bisogno.

+0

La modifica dell'autorizzazione allo script non verrà eseguita come root e setuid non funziona sugli script – Brian

+0

No, non verrà eseguito come root, ma risolverà il problema se il motivo per l'utilizzo di sudo è semplicemente lo script non essere eseguibile E a proposito della cosa setuida, sembra che tu abbia ragione. In tal caso, scusate la mia disinformazione. Ho trovato un link utile su questo argomento: http://www.faqs.org/faqs/unix-faq/faq/part4/section-7.html –

+1

omg. NON RISPONDERE MAI DI UNA PASSWORD CHE HA ACCESSO AL ROOT! Questa non è mai stata una buona forma. @ La risposta di Brian è molto meglio: nessuna password usata. – cmroanirgo

Problemi correlati