
Eu tenho uma imagem base compatível com o benchmark CIS. Extrair isso para diferenciar uma imagem imutável para meu aplicativo, se eu tentar fazer
apt-get install -y docker.io
Eu recebo um erro
==> amazon-ebs: Can't exec "/tmp/docker.io.config.NzitwJ": Permission denied at /usr/share/perl/5.26/IPC/Open3.pm line 178.
==> amazon-ebs: open2: exec of /tmp/docker.io.config.NzitwJ configure failed: Permission denied at /usr/share/perl5/Debconf/ConfModule.pm line 59.
Isso ocorre porque as imagens compatíveis com CIS foram noexec
definidas no /tmp
sistema de arquivos.
Alguém conhece uma linha de comando ou maneira equivalente de fazer o apt-get usar um sistema de arquivos diferente para scripts de instalação, ou terei que agendar tarefas para instalar a partir do código-fonte? Observe que isso não afeta apenas docker.io
, mas também outros. Estou procurando uma apt-get
solução em nível, não um método de pacote específico do aplicativo.
Responder1
Eu adicionei o código deesta postagemno script que (insira o orquestrador de pipeline) é executado para extrair a imagem base e instalar o software específico da imagem.
Como o script estava usando o sudo, e porque por padrão ele não adota a conta root, a execução do sudo adotou o usuário padrão do ubuntu, então ele configura o arquivo tmp no lugar errado e não funciona. Como apt-get
precisa de root para executá-lo, adicionei isto para garantir que apenas root pudesse executar meu script:
if [[ ${EUID} -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
Em seguida, removi o prefixo sudo dos comandos em meu script bash e executei todo o script com um sudo para fazer o orquestrador executar meu script como usuário root, o que significa que o orquestrador criou o arquivo tmp corretamente na máquina de compilação.
Crédito a @djdomi.