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


26

Estoy trabajando en automatizar la creación de repositorios de subversión y sitios web asociados como se describe en esta publicación de blog que escribí . Me encuentro con problemas en la parte en la que le pido al usuario de www-data que ejecute el siguiente comando:

svnadmin create /svn/repository

Hay una comprobación al comienzo del script que asegura que se está ejecutando como root o sudo, y que todo lo que sigue a ese comando debe ejecutarse como root. ¿Hay una buena manera de ejecutar ese comando como www-data y luego volver a la raíz para terminar?

Respuestas:


24

Simplemente utilícelo su - www-data -c 'svnadmin create /svn/repository'en su script ejecutado por root. Para que solo este comando sea ejecutado por el usuario de www-data.


Actualización para futuros espectadores :

En caso de que reciba un "This account is currently not available"error, considere usar:

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

(La valiosa mención de @Petr sobre la -sbandera para adaptarse a www-datala política de inicio de sesión sin usuario)


1
Sí, parece que olvidé una regla básica de secuencias de comandos ... RTFM. ¡Gracias!
Brendon Dugan

15
Al intentar esto, This account is currently not available.
aparece

También recibo este error, pero la respuesta de futbolsalas15 a continuación funciona bien.
Andrew

18
Use su - www-data -s /bin/bash -c 'your_command'para hacer que esto funcione. El usuario www-data tiene shell, /usr/sbin/nologinpor lo que sin el -sparámetro conduce al mensaje de error.
Petr

63

Con 'su' es probable que solicite una contraseña, y www-data no tiene contraseña. Recomiendo el comando sudo:

 sudo -u www-data command

La condición es que su usuario debe ser root o estar configurado en el archivo sudoers


44
Wow, ¿por qué no es esta la respuesta seleccionada? Me llevó demasiado tiempo encontrar esto.
Capitán Hipertexto

3

Uso 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
Cabe señalar que los comandos su no funcionan con cuentas que tienen inicios de sesión deshabilitados (como www-data). Tendrás que usar sudo.
Frantumn

2

2 Posibles enfoques :


1) sudocomando:

En la mayoría de los casos, tendrá acceso al sudocomando, por lo que la solución es simplemente:

sudo -u target_user target_command


2) sucomando (si sudo no está instalado Ex. alpine-linux images):

su - target_user -c 'target_command'

En caso de que reciba el error 'Esta cuenta no está disponible actualmente' , el usuario tiene una política de no inicio de sesión (acceso de shell) vigente. Si es así, considere usar:

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

(Basado en el valioso comentario de @Petr sobre la -sbandera para acomodar www-datala política de inicio de sesión del usuario)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.