
Tengo una imagen base compatible con el estándar CIS. Tirando de esto para diferenciar una imagen inmutable para mi aplicación, si intento hacer
apt-get install -y docker.io
me sale un error
==> 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.
Esto se debe a que se han configurado imágenes compatibles con CIS noexec
en el /tmp
sistema de archivos.
¿Alguien conoce una línea de comando o una forma equivalente de hacer que apt-get use un sistema de archivos diferente para los scripts de instalación, o tendré que programar tareas para instalar desde la fuente? Tenga en cuenta que esto no sólo afecta a docker.io
, sino también a otros. Estoy buscando una apt-get
solución de nivel, no un método de paquete específico de la aplicación.
Respuesta1
Agregué el código deesta publicaciónen el script que (inserte el orquestador de canalización) se ejecuta para extraer la imagen base e instalar el software específico de la imagen.
Debido a que el script había estado usando sudo, y debido a que de manera predeterminada esto no adopta la cuenta raíz, la ejecución de sudo adoptó el usuario predeterminado de ubuntu, por lo que configura el archivo tmp en el lugar incorrecto y no funciona. Como apt-get
necesita root para ejecutarlo, agregué esto para garantizar que solo root pueda ejecutar mi script:
if [[ ${EUID} -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
Luego eliminé el prefijo sudo de los comandos en mi script bash y ejecuté todo el script con un sudo para que el orquestador ejecutara mi script como usuario root, lo que significaba que el orquestador creó el archivo tmp correctamente en la máquina de compilación.
Credencia para @djdomi.