如何停止 apt-get 使用 /tmp 安装脚本

如何停止 apt-get 使用 /tmp 安装脚本

我有一个符合 CIS 基准测试的基础镜像。如果我尝试执行以下操作,则拉取此镜像来区分我的应用程序的不可变镜像

apt-get install -y docker.io

我收到错误

==> 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.

这是因为文件系统noexec上已经设置了符合 CIS 的图像/tmp

是否有人知道命令行或等效方法可以让 apt-get 使用不同的文件系统来安装脚本,或者我必须安排任务从源代码安装?请注意,这不仅会影响docker.io,还会影响其他人。我正在寻找一个apt-get-level 解决方案,而不是特定于应用程序的包方法。

答案1

我添加了代码这个帖子在运行的脚本中(插入管道编排器)提取基础映像并安装特定于映像的软件。

由于脚本一直使用 sudo,并且默认情况下不采用 root 帐户,因此运行 sudo 会采用默认的 ubuntu 用户,因此它会在错误的位置设置 tmp 文件,并且不起作用。因为apt-get需要 root 才能运行它,所以我添加了这个以确保只有 root 才能运行我的脚本:

if [[ ${EUID} -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

然后,我删除了 bash 脚本中命令的 sudo 前缀,并使用 sudo 运行整个脚本,以使编排器以 root 用户身份运行我的脚本,这意味着编排器在构建机器上正确创建了 tmp 文件。

感谢@djdomi。

相关内容