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

时间:2019-11-20 08:53:12  来源:igfitidea点击:

问题

在执行" 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.

原因

在/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

$ 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-get命令前后要执行的命令。

重新执行apt-get命令

现在重新执行重装命令:

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

那么实际的操作过程是:

  1. mount -o remount,exec /tmp
  2. apt-get --reinstall install linux-generic linux-headers-generic linux-image-generic
  3. mount -o remount,rw,noexec,nosuid,nodev /tmp