Buscar/Criar uma ferramenta de contêineres sem root, com bloqueios e downloads de imagens verificados

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.