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。