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.