Como eliminar privilégios em um script dentro de um shell não interativo?

2

Estou usando o Docker para criar imagens que posso executar como contêineres. Estou configurando minha imagem como o usuário root, incluindo a configuração de volumes e outras coisas. Mas uma vez que eu tenho tudo configurado, eu gostaria de deixar privilégios para um usuário não privilegiado para executar o meu aplicativo real. Aqui está o que estou tentando fazer atualmente:

# Do privileged stuff
su myuser -c "myapplicationcommand $@"

No entanto, quando esses contêineres são implantados, estou aparentemente executando em um shell não interativo, porque recebo esse erro:

su: must be run from a terminal

Então, evidentemente, o comando "su" requer que seja executado em um shell interativo. Portanto, minha pergunta é: Como posso descartar privilégios de um shell não interativo para que meu aplicativo possa ser executado como um usuário não raiz dentro do contêiner do Docker?

    
por dsw88 07.11.2014 / 19:19

3 respostas

1

Pergunta antiga, mas não vejo muitas respostas boas, então adicione essa atualização na esperança de que isso ajude os outros:

Você pode usar as opções docker run -t e docker exec-it para alocar pty em sua sessão de execução do docker. Há uma boa pergunta e resposta sobre isso aqui: link

Isso é mais simples: e você não precisa alterar a maneira como cria ou executa o contêiner. Com o docker exec você pode simplesmente usar a opção -u para fazer login no container como usuários diferentes e evitar o uso do su. por exemplo.

$ docker exec -u root -it small_hypatia bash

$ docker exec -u someone-else -it small_hypatia bash

Veja também uma resposta mais geral sobre como resolver "su: deve ser executado a partir de um terminal" aqui. Em particular, é útil saber como 'ssh -t' e 'ssh -tt' podem ser usados. O python pty allocate hack bonito também pode ser usado para obter su trabalhando para alguém com o mesmo problema. link

    
por 26.01.2017 / 12:39
0

Normalmente, su não teria uma dependência em um tty. No entanto, se houver algo na maneira de usar o su, talvez você possa fazer o mesmo com o sudo.

    
por 07.11.2014 / 20:15
0

Você pode usar

RUN adduser myuser
USER myuser
RUN foo
CMD bar

Ambos foo (durante a compilação) e bar (em tempo de execução) serão executados como myuser.

    
por 07.11.2014 / 20:30

Tags