Espaçamento de nomes do usuário do Docker e sudo

3

Estou tentando fazer com que um contêiner do Docker use o recurso de namespace de usuário e sudo . Se eu criar o contêiner com o sinalizador -u definido para um UID aleatório, então sudo não funcionará e você receberá esta mensagem:

sudo: unknown uid 1234: who are you?

O usuário não está claramente no /etc/passwd , o que está causando um problema para sudo . Eu estou tentando obter essa imagem para trabalhar com as configurações padrão do OpenShift, que são para gerar um UID aleatório, que faz parte do grupo raiz (0), mas eu preciso executar comandos como um usuário fixo mais tarde, então quer usar sudo para fazer isso (e controlar rigidamente quais comandos podem ser executados). Parece funcionar se eu acrescentar uma entrada a /etc/passwd , mas isso parece feio, já que precisaria ser executado em cada inicialização de contêiner (como /etc/passwd não está em um volume).

Alguém tem outras sugestões?

Editar: observe que o OpenShift gera um UID aleatório diferente toda vez que um contêiner é executado.

    
por Arthur Barr 01.06.2017 / 22:37

1 resposta

0

Minhas desculpas, não estou familiarizado com o OpenShift, mas em um ambiente baunilha do Docker, sugiro que você crie uma nova imagem baseada em um contêiner modificado que tenha as alterações desejadas e, em seguida, execute todos os novos contêineres dessa imagem. Você pode facilmente criar outra imagem com base na que você está usando atualmente que tenha seu / etc / passwd modificado, bem como quaisquer outros controles que você queira impor.

Por exemplo (estou usando o ubuntu: mais recente desde que você não mencionou a imagem real da qual está tentando executar). Primeiro, execute um novo contêiner baseado na imagem escolhida e execute apenas um comando para criar um novo usuário e adicioná-lo ao grupo sudo:

$ docker run --name test ubuntu:latest useradd -u 1234 -G sudo newuser

Agora, crie uma nova imagem com base na imagem modificada no novo contêiner:

$ docker commit test test-image
<image id>

Agora você tem uma nova imagem chamada "test-image" da qual você pode executar novos contêineres. Execute um novo contêiner baseado nessa imagem para ver se o novo usuário está em / etc / passwd:

$ docker run --name test2 --rm test-image cat /etc/passwd | grep 1234
newuser:x:1234:1234::/home/newuser:

De agora em diante, toda imagem baseada em "test-image" terá 'newuser' como um usuário válido, já no arquivo / etc / passwd e parte do grupo sudo.

Se você deseja fazer uma personalização mais detalhada, use o seguinte para executar seu contêiner inicial e, quando estiver satisfeito, saia e confirme, conforme mostrado acima:

$ docker run --name test -it ubuntu:latest 

Note que simplesmente adicionar o usuário ao grupo sudo pode não ser suficiente para permitir que ele execute comandos como root. Execute 'visudo' e modifique conforme apropriado. A imagem de exemplo acima do Ubuntu precisa ter o pacote sudo e um editor instalado antes de permitir o sudo.

    
por 02.06.2017 / 01:47

Tags