W:TMPDIR已挂载noexec,将不缓存运行脚本错误和解决方案

时间:2020-01-09 10:38:04  来源:igfitidea点击:

我使用nodev,nosuid和noexec选项挂载/tmp,以提高基于Linux的Web服务器的安全性。
而且,每当我执行" apt-get install"或" apt-get upgrade"命令时,都会出现以下错误:

apt-get install linux-generic linux-headers-generic linux-image-generic 
..... 
.... 
.. 
Generating grub.cfg ... 
Found linux image: /boot/vmlinuz-3.2.0-43-generic 
Found initrd image: /boot/initrd.img-3.2.0-43-generic 
.... 
ldconfig deferred processing now taking place 
Processing triggers for initramfs-tools ... 
update-initramfs: Generating /boot/initrd.img-3.2.0-43-generic 
W: TMPDIR is mounted noexec, will not cache run scripts. 
.... 
... 

如何解决此问题而又不损害数据或Web服务器的安全性?

解决方法:您可以通过在/etc/fstab文件中设置以下两个标志来使/tmp不可执行:

  • noexec不允许直接在/tmp挂载的文件系统上执行任何二进制文件或脚本。
  • nosuid不允许SUID或SGID位生效。
  • nodev不要解释字符或阻止文件系统上的特殊设备。

这将保护您的服务器免受各种攻击。
但是,apt-get upgrade命令可能会失败,并显示以下消息:

W: TMPDIR is mounted noexec, will not cache run scripts.

apt-get命令使用/tmp放置脚本,由于/tmp上的noexec标志,脚本无法执行。
要解决您的问题,请编辑或创建文件/etc/apt/apt.conf(,输入:

# vi /etc/apt/apt.conf

或者

$ sudo vi /etc/apt/apt.conf

输出示例:

DPkg::Pre-Invoke{"mount -o remount,exec /tmp";};
DPkg::Post-Invoke {"mount -o remount,rw,noexec,nosuid,nodev /tmp";};

保存并关闭文件。

apt.conf是APT工具套件的主要配置文件。
如果任何失败的APT将中止,则使用/bin/sh按顺序调用命令。
其中:

  • DPkg :: Pre-Invoke {" mount -o remount,exec/tmp";};这是要在dpkg命令之前运行的Shell命令的列表。在此示例中,从/tmp删除noexec标志,以便可以执行脚本。
  • DPkg :: Post-Invoke {" mount -o remount,rw,noexec,nosuid,nodev/tmp";};这是在dpkg之后运行的shell命令的列表。在此示例中,在/tmp上设置noexec和其他安全标志

如何重新安装并重新执行软件包?

按照上述说明应用解决方案后,您可以按照以下说明重新安装程序包以运行脚本:

$ sudo apt-get --reinstall install linux-generic linux-headers-generic linux-image-generic

在这个例子中

  • 首先,将按照apt.conf中的定义由apt-get运行" mount -o remount,exec/tmp"命令以放宽对/tmp的许可。
  • 接下来,将执行您实际的apt-get/dpkg命令以重新安装内核软件包。
  • 最后,apt-get将运行mount -o remount,rw,noexec,nosuid,nodev/tmp命令以保护/tmp。