BASH Scripting, su para www-data para comando único

25

Estou trabalhando na automação da criação de repositórios do subversion e sites associados, como descrito em esta postagem do blog que eu escrevi . Eu estou correndo em problemas ao redor da parte onde eu su para o usuário www-data para executar o seguinte comando:

svnadmin create /svn/repository

Existe uma verificação no início do script que garante que ele está sendo executado como root ou sudo, e tudo após esse comando precisa ser executado como root. Existe uma boa maneira de executar esse comando como www-data e depois voltar para a raiz para terminar?

    
por Brendon Dugan 10.05.2012 / 20:03

4 respostas

18

Use apenas su - www-data -c 'svnadmin create /svn/repository' no seu script executado pelo root. De modo que apenas este comando é executado pelo usuário www-data.

Atualização para futuros espectadores :

Caso você receba um erro "This account is currently not available" , considere usar:

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

(a menção valiosa do @Petr sobre o -s sinalizador para acomodar a política de login do usuário no www-data )

    
por 10.05.2012 / 20:07
57

Com 'su' é provável que solicite uma senha, e www-data não tem senha. Eu recomendo o comando sudo :

 sudo -u www-data command

A condição é que seu usuário seja root ou configurado no arquivo sudoers

    
por 10.01.2014 / 21:04
3

Use 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.
    
por 10.05.2012 / 20:07
0

2 possíveis abordagens :

1) Comando sudo :

Na maioria dos casos, você terá acesso ao comando sudo e, portanto, a solução é simplesmente:

sudo -u target_user target_command

2) Comando su (se o sudo não estiver instalado. Ex. alpine-linux images ):

su - target_user -c 'target_command'

Caso você receba um erro 'Esta conta não está disponível atualmente' , o usuário não tem uma política de login (acesso ao shell) em vigor. Em caso afirmativo, considere usar:

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

(Baseado no comentário valioso do @Petr sobre -s flag para acomodar a política de login do usuário no www-data )

    
por 06.05.2018 / 15:39