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.