Estou usando o Kubernetes e gostaria de executar um contêiner como usuário não root.
Se estou escrevendo meu próprio Dockerfile, posso useradd
, chmod 777
e executar com docker --user <username>
.
Mas em alguns casos, a lista de arquivos que precisam ser chmod
editados pode ser longa e desconhecida, tornando-se um processo tedioso, podendo mudar com o tempo e causar erros que só são encontrados em tempo de execução.
Existe uma prática recomendada? Como você lidaria com pastas como /var/log
e /var/run
? Uma opção é touch/mkdir e usar setfacl
.
O mais fácil é apenas chmod 777 -R /var/log
.
777
Mas isso também daria acesso ao contêiner no host? Como ele é mapeado quando o contêiner possui um conjunto de permissões, mas o host possui outro?
Responder1
Usar chmod 777
basicamente nunca é a solução certa. Descubra como definir suas permissões corretamente. As permissões quase sempre devem ser as menores possíveis para atingir seu objetivo.
Como você faz isso depende muito do contexto da imagem específica e do software que você está executando.
Mas isso também daria ao contêiner 777 acesso ao host?
Depende se o caminho que você está alterando as permissões é ou será uma montagem de ligação.
Responder2
Achei isso relevante para minha própria pergunta:
O sistema de arquivos de sobreposição monta um diretório inferior e, em seguida, anexa um diretório superior ao ponto de montagem mesclado. Quando um processo grava em um novo arquivo no diretório mesclado, o novo arquivo é gravado no diretório superior. Quando um processo modifica um arquivo existente no diretório inferior, o kernel copia o arquivo do diretório inferior para o diretório superior e permite que o processo modifique o arquivo no diretório superior.
Portanto, chown
em um diretório de sobreposição (superior) não deve ter efeito no diretório host (inferior).
Mas acho que chmod 777
poderia permitir que outros usuários acessassem o sistema de arquivos de sobreposição no host.