Script BASH, su www-data per comando singolo


26

Sto lavorando per automatizzare la creazione di repository sovversivi e siti Web associati come descritto in questo post sul blog che ho scritto . Sto riscontrando problemi proprio attorno alla parte in cui faccio richiesta all'utente www-data per eseguire il comando seguente:

svnadmin create /svn/repository

C'è un segno di spunta all'inizio dello script per assicurarsi che sia in esecuzione come root o sudo, e tutto ciò che segue un comando deve essere eseguito come root. C'è un buon modo per eseguire quell'unico comando come www-data e poi tornare alla radice per finire?

Risposte:


24

Basta usare su - www-data -c 'svnadmin create /svn/repository'nel tuo script eseguito da root. In modo che solo questo comando venga eseguito dall'utente www-data.


Aggiornamento per futuri spettatori :

Nel caso in cui ricevi un "This account is currently not available"errore, considera l'utilizzo di:

su - www-data -s /bin/bash -c 'svnadmin create /svn/repository'

(La preziosa menzione di @Petr su -sflag per soddisfare www-datala politica di non accesso dell'utente)


1
Sì, sembra che ho dimenticato una regola base di scripting ... RTFM. Grazie!
Brendon Dugan,

15
Provando questo, ricevo l'erroreThis account is currently not available.
rubo77

Ottengo anche questo errore, ma la risposta di futbolsalas15 qui sotto funziona bene.
Andrew,

18
Usa su - www-data -s /bin/bash -c 'your_command'per far funzionare questo. L'utente www-data ha la shell, /usr/sbin/nologinquindi senza il -sparametro porta al messaggio di errore.
Petr

63

Con 'su' è probabilmente quella richiesta una password e www-data non ha password. Consiglio il comando sudo:

 sudo -u www-data command

La condizione è che l'utente debba essere root o configurato nel file sudoers


4
Wow, perché non è questa la risposta selezionata? Mi ci è voluto troppo tempo per trovarlo.
Capitano Hypertext

3

Utilizzare su:

   su [options] [username]

   The options which apply to the su command are:

   -c, --command COMMAND
       Specify a command that will be invoked by the shell using its -c.

2
Va notato che i comandi su non funzionano con account che hanno accessi disabilitati (come www-data). Dovrai usare sudo.
Frantumn,

2

2 Possibili approcci :


1) sudocomando:

Nella maggior parte dei casi avrai accesso al sudocomando e quindi la soluzione è semplicemente:

sudo -u target_user target_command


2) sucomando (se sudo non installato. Ex. alpine-linux images):

su - target_user -c 'target_command'

Nel caso in cui venga visualizzato l' errore "Questo account non è attualmente disponibile" , l'utente ha una politica di non accesso (accesso alla shell) attiva. In tal caso, considera l'utilizzo di:

su - target_user -s /bin/bash -c 'target_command'

(Basato sul prezioso commento di @Petr sul -sflag per soddisfare www-datala politica di non accesso dell'utente)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.