executar script como usuário que possui shell nologin


87

Tudo o que precisa fazer é executar um script específico como um usuário específico que tem o nologin/falseshell indicado no /etc/passwd.

Eu executaria o script como root e isso deveria ser executado como outro usuário. Corrida:

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

funcionaria, mas preciso de um shell válido para o testuser. Eu sei que posso desativar a senha passwd -d testusere deixar o shell /bin/bashdessa maneira para garantir um pouco, mas preciso ter o nologin/falseshell.

Basicamente, o que eu preciso é o que crontabfaz quando configuramos os trabalhos para serem executados como um usuário específico, independentemente deste ter nologin/falseshell.

ps Encontrei este segmento Executando um comando como um usuário nologin , mas não tenho idéia de como executar concatenateo comando su -s /bin/sh $userpara o script.

Respostas:


119

Você pode usar a opção -s para su para executar um shell específico

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

(Anexe sudoao acima se testuserfor um usuário sem senha.)


E se su for root:root -rwsr-x---?
quer

1
E se o usuário não tiver uma senha?
CMCDragonkai

3
@Wesley Descobri que você precisa ser root para executar esse comando para um usuário sem senha.
precisa saber é o seguinte

1
@ain, se o usuário não deve ter um shell, o processo relacionado ao comando não deve ser filho de um processo bash. Portanto, você também deve usar exec para substituir o shell pelo script. E se você gosta de fazer o script uma criança de inicialização, basta usar e, como um exemplosu -s /bin/bash -c 'exec /path/to/your/script &' test
Facundo Victor

1
Como passei os últimos 20 minutos trabalhando para obter o mesmo resultado runuser, gostaria de salientar que o su -s SHELLparâmetro torna o comando runuser praticamente inútil :) Obrigado Jan!
jirka

12

Você pode fazer isso sudo -use tiver instalado:

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

Como você passa parâmetros para sudo -u apache whoami?
CMCDragonkai

@CMCDragonkai Todos os parâmetros após o comando serão repassados. Você pode pensar nisso como "sudo [-u apache] [whoami <param1> <param2>]".
Handyman5

Eu acho que usar sudo -uprovavelmente não é uma boa idéia para executar comandos como um usuário nologin, porque expõe SUDO_USERo ambiente que é o real que chama o comando. Talvez eu esteja apenas pensando demais.
Meow

5

Fornecendo o script como o argumento a ser executado em / bin / sh:

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

2

apercebi-me agora :

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

talvez haja uma maneira melhor ?!


0

na verdade, a melhor maneira de fazer isso é via runuser

veja a página de manual para detalhes

esta ferramenta é usada para lidar com a situação, como o desenvolvedor disse em seu bolg

Sempre que um serviço está sendo executado como root e deseja alterar o UID usando o shell, ele deve usar runuser.

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

eu postei esta resposta em muitos palácios, perdoe-me se você achar isso irritante


Não poste respostas somente para links para evitar a podridão do link. Em vez disso, adicione as informações mais relevantes do link à sua resposta ou, como alternativa, publique o link como um comentário em vez de uma resposta. Consulte este artigo serverfault.com/help/how-to-answer centro de ajuda para obter mais informações.
Federico Galli

@FedericoGalli as informações mais relevantes já foram adicionadas, não há necessidade de copiar e colar o uso, a página de manual fornece informações suficientes
Z-Y00

-1

Use sudo -u para especificar o usuário. Também use o sinalizador -i para definir também variáveis ​​de ambiente do usuário de destino.

sudo -i -u user command

1
isso dáThis account is currently not available.
knocte

-3

Use o comando su com os comandos shell -s e -c. Como mostrado abaixo

 su  exec -l -c '/bin/bash /etc/update_conf.sh' -s /bin/bash

2
Essa é exatamente a solução da resposta mais bem classificada.
Gerald Schneider
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.