Pregunta Ejecutar script como usuario que tiene shell nologin


Todo lo que necesito hacer es ejecutar un script específico como un usuario particular que tenga el shell nologin / false indicado en / etc / passwd.

Yo ejecutaría el script como root y esto debería ejecutarse como otro usuario. Corriendo:

~# su -c "/bin/touch /tmp/test" testuser

Funcionaría pero necesito un shell válido para el testuser. Sé que puedo deshabilitar la contraseña con passwd -d testuser y dejar el shell a / bin / bash de esta manera aseguraría un poco, pero necesito tener nologin / false shell.

Básicamente, lo que necesito es lo que hace crontab cuando configuramos los trabajos para que se ejecuten como un usuario en particular, independientemente de que este tenga nologin / false shell.

p.s encontré este hilo Ejecutando un comando como usuario nologin pero no tengo idea de cómo "concatenar" el comando su -s /bin/sh $user al script necesito correr

Gracias


78
2018-01-18 13:56


origen




Respuestas:


Puede usar el modificador -s para ejecutar su shell particular

su -s /bin/bash -c '/path/to/your/script' testuser

(Prepend sudo a lo anterior si testuser es un usuario sin contraseña.)


109
2018-01-18 18:49



Que tal si es root:root -rwsr-x--- ? - Patryk
¿Qué pasa si el usuario no tiene una contraseña? - CMCDragonkai
@Wesley Descubrió que necesita ser root para ejecutar ese comando para un usuario sin contraseña. - CMCDragonkai
@lain, si se supone que el usuario no tiene un shell, el proceso relacionado con el comando no debe ser un elemento secundario de un proceso de bash. Por lo tanto, también debe utilizar exec para reemplazar el shell con el script. Y si le gusta hacer que el script sea un hijo de init, simplemente use &, como ejemplo su -s /bin/bash -c 'exec /path/to/your/script &' test - Facundo Victor
Desde que he pasado los últimos 20 minutos trabajando en cómo lograr el mismo resultado usando runuser, Me gustaría señalar que su -s SHELL el parámetro hace que el comando runuser sea bastante inútil :) ¡Gracias Jan! - jirka


Puedes hacer esto con sudo -u Si lo tienes instalado:

# whoami
root
# sudo -u apache whoami
apache
# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

7
2018-01-18 14:03



¿Cómo pasar parámetros a sudo -u apache whoami? - CMCDragonkai
@CMCDragonkai Cualquier parámetro después del comando se transmitirá. Puede pensarlo como "sudo [-u apache] [whoami <param1> <param2>]". - Handyman5
Creo que usando sudo -u Probablemente no sea una buena idea para ejecutar comandos como un usuario nologin, porque expone el SUDO_USER en el entorno quién es el verdadero invoca el comando. Tal vez sólo lo estoy pensando demasiado. - Meow


Al proporcionar el script como argumento para ejecutar a / bin / sh:

su -s "/bin/sh /your/script/location" username

4
2018-01-18 14:01





me acabo de dar cuenta :

su -s "/ bin / bash" -c "/ bin / touch / tmp / testuser" testuser

Tal vez hay una mejor manera?


2
2018-02-16 07:18





En realidad, la mejor manera de hacerlo es a través de. runuser

ver la página de manual para más detalles

Esta herramienta se utiliza para tratar la situación como dijo el desarrollador en su bolg.

Cada vez que un servicio se ejecuta como root y desea cambiar el UID mediante el shell, debe usar el usuario run.

http://danwalsh.livejournal.com/55588.html

He publicado esta respuesta en muchos palacios, perdóname si encuentras esto molesto.


0
2017-12-07 19:19



Por favor, no publique respuestas de solo enlace para evitar la rotura de enlaces. En su lugar, agregue la información más relevante del enlace a su respuesta o, como alternativa, publique el enlace como un comentario en lugar de una respuesta. Mira esto serverfault.com/help/how-to-answer Centro de ayuda del artículo para más información. - Federico Galli
@FedericoGalli ya se ha agregado la información más relevante, no hay necesidad de copiar y pegar el uso, la página man proporciona suficiente información - Z-Y00


Utilice sudo -u para especificar el usuario. También use el indicador -i para establecer las variables de entorno del usuario objetivo también.

sudo -i -u user command

-1



esto da This account is currently not available. - knocte