USER
A instrução USER
em um Dockerfile é usada para especificar o usuário sob o qual os comandos subsequentes serão executados no contêiner. Isso é importante para segurança, pois a execução de processos como o usuário root (o padrão) pode expor o sistema a riscos. Definir um usuário não-root ajuda a minimizar os privilégios e limitar o impacto potencial de falhas de segurança.
Sintaxe Básica
usuário
: O nome ou o ID do usuário que será usado.grupo
(opcional): O nome ou o ID do grupo ao qual o usuário pertence. Se não for especificado, o grupo principal do usuário será usado.
Funcionalidades do USER
USER
Segurança: Executar processos com um usuário de privilégios limitados é uma prática recomendada para reduzir riscos de segurança.
Personalização: Você pode criar e configurar usuários específicos para diferentes tarefas no contêiner, ajustando permissões conforme necessário.
Exemplos de Uso
Usando um Usuário Não-Root Existente
Neste exemplo, todos os comandos subsequentes serão executados pelo usuário nobody
, que é um usuário padrão de baixíssimo privilégio em sistemas Unix.
Especificando Usuário e Grupo
Aqui, o contêiner executará comandos como o usuário www-data
do grupo www-data
, comum em servidores web como Apache e NGINX.
Criando e Usando um Novo Usuário
Neste exemplo:
Um novo grupo
meugrupo
é criado.Um novo usuário
meuusuario
é adicionado e associado ao grupomeugrupo
.Os comandos subsequentes serão executados pelo usuário
meuusuario
.
Considerações de Segurança
Evitar o Uso de Root: Sempre que possível, evite usar o usuário root, especialmente para serviços de longa duração ou expostos ao público. Executar contêineres com privilégios de root aumenta o risco de uma falha de segurança comprometer o sistema host.
Privilégios Mínimos: Aplique o princípio do menor privilégio. O usuário definido pelo
USER
deve ter apenas as permissões necessárias para executar a aplicação, minimizando os riscos em caso de comprometimento.
Impacto no Dockerfile
Instruções Sucessivas: Após definir
USER
, todas as instruções seguintes (comoRUN
,CMD
,ENTRYPOINT
) serão executadas sob esse usuário, até que oUSER
seja alterado novamente, se necessário.Permissões de Arquivos: Se você definir um usuário não-root antes de operações de cópia de arquivos (
COPY
,ADD
), certifique-se de que o usuário tenha as permissões necessárias para acessar e modificar esses arquivos.
Exemplo Avançado
Configuração de um Contêiner para um Serviço Web
Neste exemplo:
Um usuário
nginxuser
e um gruponginxgroup
são criados.O contêiner executa o NGINX como
nginxuser
.Os arquivos da aplicação são copiados com as permissões corretas.
Resumo
USER
define o usuário sob o qual os comandos subsequentes serão executados, aumentando a segurança e controlando os privilégios.Evitar Root: Execute processos com um usuário não-root sempre que possível para minimizar riscos de segurança.
Flexibilidade: Você pode definir e configurar usuários e grupos específicos para diferentes necessidades dentro do contêiner.
Laboratório
Na execução do container, o usuário logado é o root que é o super-usuário da distribuição Linux.
Boa prática: criar um usuário para a execução do container
Criação e definição do usuário
A ordem no Dockerfile é importante, pois em determinados pontos estão sendo executados comandos de atualização, instalação etc.
USER marcelo
altera o usuário logado
useradd
não adiciona uma camada ao filesystem, mas é utilizado como metadado:
COPY com definição do usuário criado
Last updated