


Criar uma ferramenta de contêineres sem root, com bloqueios e downloads de imagens verificados
Use ao criar uma ferramenta de contêineres sem root. A IA bloqueia os contêineres durante mudanças, verifica cada camada de imagem baixada, não copia o ambiente do host, encerra árvores de processos inteiras e rejeita caminhos perigosos ao restaurar backups.
Para usar estas regras de IA
## Usar só a biblioteca padrão no núcleo e detectar hosts móveis
Mantenha o ambiente de execução principal livre de dependências de terceiros e prefira os recursos nativos da linguagem em vez de recorrer ao shell para consultas do sistema, downloads, arquivos e inspeção da plataforma.
### Política de dependências
- Use a biblioteca padrão para verificar recursos do terminal, obter dados de usuários e grupos, inspecionar binários, detectar arquiteturas, trabalhar com HTTP e manipular arquivos.
- Execute somente o ambiente de execução de contêineres necessário para o isolamento real.
- Se esse ambiente não estiver presente em um sistema hospedeiro compatível, ofereça a instalação somente em um terminal interativo e apenas após o consentimento do usuário.
- Quando apropriado, execute o ambiente por meio da substituição do processo atual, em vez de adicionar uma camada de shell.
- Mantenha o manifesto do pacote como fonte oficial da versão, com uma alternativa documentada para árvores de código-fonte não instaladas.
- Encaminhe todos os aliases de comando e pontos de entrada do console para uma única função principal canônica.
### Detecção de plataforma
- Detecte um sistema hospedeiro móvel especializado somente quando pelo menos dois sinais independentes coincidirem: evidências do sistema operacional, variáveis de ambiente específicas e um prefixo de plataforma acessível.
- Calcule o resultado uma única vez e use-o de forma consistente para caminhos, ambiente padrão, opções disponíveis, montagens e extensões do ambiente de execução.
- Em sistemas hospedeiros comuns, adote por padrão as convenções normais de diretórios-base, sem montagens específicas para dispositivos móveis.
## Identificar contêineres pelo nome da pasta e tratar à parte sistemas convidados especiais
Trate a identidade do diretório, a presença de metadados, a migração de estruturas legadas e o comportamento do sistema convidado como decisões distintas.
### Modelo de armazenamento
- Use o nome de diretório validado como o único identificador do contêiner.
- Armazene o sistema de arquivos constituído sob esse diretório e mantenha os metadados da imagem em um manifesto separado.
- Permita que instalações provenientes de arquivos simples omitam metadados de imagem quando não houver uma imagem de registro.
- Migre estruturas legadas na primeira operação que exigir a nova estrutura e depois reescreva os links de compatibilidade afetados.
- Derive os locais do ambiente de execução, cache, contêiner, sessão, camada e manifesto de um único módulo de caminhos que considere a plataforma.
- Valide nomes de contêineres em cada ponto de entrada, inclusive aliases derivados de imagens e nomes lidos de arquivos.
### Classificação do sistema convidado
- Detecte um sistema convidado especializado por meio de uma sentinela que deve ser um arquivo, não apenas um caminho existente; sessões simultâneas podem materializar destinos de montagem como diretórios.
- Atribua aos sistemas convidados especializados seus próprios valores-base de diretório pessoal, caminho, prefixo e diretório temporário.
- Nunca monte os diretórios privados nem o prefixo de instalação do aplicativo hospedeiro sobre um sistema convidado que forneça os seus próprios.
- Desative a conversão incompatível de links e as opções que alteram a identidade para esse tipo de sistema convidado.
- Aplique montagens opcionais do sistema hospedeiro somente fora dos modos isolado e mínimo.
- Recuse sistemas convidados especializados de arquitetura cruzada quando um prefixo compartilhado permitir que binários do hospedeiro ocultem os binários do convidado.
## Direcionar bem os comandos e proteger gravações com bloqueios e arquivos temporários
A análise de comandos e a propriedade dos bloqueios devem permanecer corretas durante interrupções, reentrância, substituição de processos, desacoplamento e atividade simultânea do cache.
### Fluxo da CLI
1. Encaminhe sinais secundários de saída para o caminho normal de interrupção, para que o progresso e os arquivos parciais sejam limpos de forma consistente.
2. Avise sobre a execução com privilégios elevados sem tornar o aviso fatal e rejeite a invocação aninhada do ambiente de execução de contêineres.
3. Verifique o ambiente de execução somente para os comandos que precisarem dele; permita que comandos de inspeção, de processos e exclusivos de imagens definam requisitos mais restritos.
4. Intercepte a ajuda do comando antes da validação dos argumentos posicionais e rejeite comandos desconhecidos antes da análise geral.
5. Preserve os tokens após o delimitador literal de opções nos comandos que iniciam um programa interno.
6. Exija argumentos obrigatórios de forma centralizada, exceto quando o modo de entrada determinar intencionalmente os requisitos.
7. Aplique o modo silencioso global antes do despacho, preservando os significados específicos de cada comando e sempre exibindo erros e avisos.
### Bloqueios e atomicidade
- Use bloqueios compartilhados para sessões semelhantes a leituras e backups, e bloqueios exclusivos para instalação, remoção, renomeação, redefinição, restauração e gravações no destino.
- Adquira vários bloqueios de contêineres na ordem resultante da ordenação dos caminhos.
- Associe os bloqueios de compilação à imagem de saída e à arquitetura, protegendo os índices de cache compartilhados com seu próprio bloqueio.
- Torne os bloqueios exclusivos reentrantes para comandos que chamem outro comando modificador no mesmo contêiner.
- Permita que os bloqueios de sessão sobrevivam à substituição de processos e desvincule-os do processo original, em vez de liberá-los, quando um descendente desacoplado herdar a propriedade.
- Em caso de conflito de bloqueio, falhe imediatamente e informe o detentor quando for possível identificá-lo.
- Toda rotina que grava cache ou sentinelas deve criar um arquivo temporário, realizar em seguida uma substituição atômica e executar a limpeza em todas as exceções.
## Verificar as camadas de imagem baixadas e proteger as credenciais do registro
Trate referências do registro, autenticação, redirecionamentos, digests, camadas e membros de arquivos como hostis até que sejam validados.
### Download e cache
- Prefira um cache completo e verificado para uso offline; quando faltarem apenas camadas, baixe somente essas camadas.
- Calcule o hash de cada camada baixada durante a transmissão e compare seu digest antes de promovê-la.
- Valide a sintaxe do digest antes de convertê-lo em um caminho do sistema de arquivos, para que referências manipuladas não escapem da raiz do cache.
- Recuse formatos de compactação que a implementação de arquivos não consiga decodificar com segurança.
- Implemente whiteouts opacos e por entrada, filtre destinos de links físicos e rejeite a travessia de diretórios nos nomes dos membros.
### Autenticação e envio
- Exija um formato explícito com nome de usuário e senha antes de encaminhar credenciais Basic a um serviço de tokens.
- Remova os cabeçalhos de autorização em redirecionamentos entre sistemas hospedeiros distintos.
- Restrinja os tokens obtidos às ações solicitadas de download ou envio.
- Antes do envio, converta a configuração armazenada para a forma canônica e compare seu digest com o manifesto.
- Verifique os blobs remotos e envie somente o conteúdo ausente.
- Mantenha fora do escopo os modos de envio e os índices de múltiplas arquiteturas não compatíveis, em vez de tentar aproximá-los.
- Apresente falhas de autorização como erros de permissão sem expor credenciais.
## Informar a arquitetura do sistema convidado e montar do zero o ambiente do processo filho
Os relatórios de arquitetura e os ambientes dos processos filhos devem descrever o sistema convidado, sem herdar acidentalmente o sistema hospedeiro.
### Arquitetura
- Detecte a arquitetura de um sistema convidado instalado a partir dos cabeçalhos binários de executáveis conhecidos.
- Normalize nomes de arquitetura nativos, do registro e com prefixo de plataforma por meio de um único mapeamento.
- Selecione um emulador somente quando a execução nativa não estiver disponível e monte apenas os caminhos do sistema exigidos por seu carregador.
- Informe a arquitetura do sistema convidado e a identidade do kernel emulado, em vez de copiar o valor do sistema hospedeiro.
### Ambiente do processo filho
- Construa o ambiente do processo filho a partir de um mapeamento vazio e passe-o diretamente para a substituição do processo.
- Aplique a precedência de forma deliberada: valores-base, variáveis de imagem filtradas, variáveis permitidas do hospedeiro, substituições do usuário, variáveis de identidade e, por último, variáveis do terminal.
- Aplique variáveis de imagem e do usuário em todos os modos, limitando as variáveis do hospedeiro móvel ao modo comum não isolado.
- No modo mínimo, omita o caminho-base, as variáveis de integração com o hospedeiro e a identidade do usuário, a menos que sejam explicitamente necessárias.
- Valide os nomes das variáveis antes de gravar um perfil de login e coloque os valores entre aspas com segurança.
- Exclua de perfis persistentes as variáveis específicas de sessão, internas do ambiente de execução, do carregador e de identidade.
- Remova as variáveis de pré-carregamento do carregador antes da execução e mantenha os diretórios compartilhados de compatibilidade estáveis durante sessões simultâneas.
## Executar contêineres em segundo plano e encerrar toda a árvore de processos
As operações de execução, desacoplamento, encerramento e compilação devem preservar o comportamento do manifesto, a duração dos bloqueios, a portabilidade e a propriedade dos processos.
### Execução e desacoplamento
- Combine o ponto de entrada e os valores de comando da imagem de acordo com a semântica das imagens de contêiner.
- Respeite uma substituição explícita do diretório de trabalho e, caso contrário, use a configuração da imagem ou a raiz do sistema de arquivos.
- Resolva o modo de pré-visualização do comando antes de qualquer ramificação de desacoplamento.
- Desacople com um fork duplo e uma nova sessão, redirecione os fluxos padrão e registre o processo final do ambiente de execução no processo neto.
- Transmita o identificador do processo final ao primeiro plano e deixe o bloqueio herdado do contêiner em poder do descendente desacoplado.
### Encerramento e compilações seguras
- Resolva alvos de encerramento somente a partir do registro de sessões ativas.
- Encerre toda a árvore de descendentes, não apenas o processo raiz do ambiente de execução.
- Crie um mapa de processos pais resistente a ciclos, nunca envie sinais ao processo atual nem a identificadores de processos críticos do sistema e verifique o executável do processo raiz antes de percorrê-lo.
- Use por padrão um sinal de encerramento controlado e permita uma substituição explícita por nome ou número.
- Analise as etapas de compilação e os argumentos globais antes da execução, valide os alvos antecipadamente e encaminhe operações de metadados, execução, cópia e adição a manipuladores específicos.
- Execute as etapas de compilação de forma isolada e não interativa, a menos que um here-document forneça a entrada.
- Associe as entradas do cache de compilação ao estado pai, à instrução e às entradas extras pertinentes; bloqueie as atualizações do índice de cache.
- Exclua os metadados de compatibilidade do ambiente de execução dos instantâneos portáteis de camadas, preservando o conteúdo do arquivo referenciado.
## Fazer backup e restaurar contêineres rejeitando entradas de arquivo perigosas
Os arquivos e a saída do terminal atravessam limites de confiança e não devem corromper o estado do contêiner nem os prompts interativos.
### Backup e restauração
- Armazene cada contêiner sob uma única raiz de arquivo que contenha metadados opcionais e a árvore do sistema de arquivos.
- Torne as subárvores ilegíveis acessíveis para backup, filtre dispositivos e endpoints de comunicação e normalize os metadados de propriedade.
- Recuse a saída de arquivos binários para um terminal interativo, a menos que seja fornecido um destino de saída explícito.
- Detecte a compactação a partir dos dados do arquivo e dos formatos padrão, inclusive na entrada transmitida por fluxo.
- Reorganize as estruturas legadas de arquivos sob a estrutura atual do contêiner.
- Rejeite membros vazios, do diretório atual, do diretório pai e com nomes de contêiner inválidos.
- Adquira o bloqueio do destino e limpe um sistema de arquivos existente somente quando o primeiro membro válido desse contêiner estiver pronto para restauração.
### Integração do terminal e dos comandos
- Suprima gravações informativas no terminal enquanto um prompt irmão de senha ou de tela inteira controlar o eco ou o modo canônico do terminal.
- Mantenha o conteúdo da ajuda como dados e apresente-o de forma adaptável dentro dos limites de largura documentados.
- Registre cada novo comando no despacho, nos metadados de análise, nos argumentos obrigatórios, nos dados de ajuda e nos mapas de aliases.
- Preserve o cabeçalho de licença do pacote e as convenções de nomenclatura em cada novo arquivo-fonte.
