如何将/tmp目录设置为可执行?

我有Ubuntu 12.04 LTS,尝试升级到Ubuntu 12.10。当我点击“更新管理器升级”时,出现了一个消息框:
无法运行升级。这通常是由于/tmp被挂载为noexec引起的。请重新挂载为非noexec并再次运行升级。
我尝试在终端中使用以下命令使/tmp可执行:
mount -o remount,exec /tmp /var/tmp

我按下了Enter键,然后在终端上看到了以下信息:
mount: only root can do that

现在我应该怎么做才能使 /tmp 可执行并升级操作系统?

2欢迎来到Ask Ubuntu!您能在问题中包含cat /proc/mounts的输出吗?这样可以确保了解您系统的配置情况。 - gertvdijk
5个回答

你需要具备管理员权限。为此,在命令前面加上sudo
sudo mount -o remount,exec /tmp

当你被要求输入密码时,只需输入你平常使用的用户密码即可。

5这个命令对我不起作用。相反,我遇到了一个“mount: /tmp未挂载或选项错误”的错误。 - Dark Star1
1这对我也不起作用。 - Andrew Thaddeus Martin

显示您的 /tmp 目录已挂载为 noexec,因此请尝试使用 exec 选项重新挂载它,以使升级工作正常运行。
exec / noexec - Permit/Prevent the execution of binaries from the filesystem.

打开/etc/fstab文件作为root用户,例如运行
sudoedit /etc/fstab

将下面的行(我的fstab上的/tmp条目看起来像这样)更改为
tmpfs /tmp tmpfs defaults,noatime,mode=1777,nosuid,size=512M,noexec 0 0

tmpfs /tmp tmpfs defaults,noatime,mode=1777,nosuid,size=512M,exec 0 0

或者,如果您的行看起来不同,只需将第四列中的noexec删除并替换为exec
保存该文件,然后重新启动系统。现在尝试再次升级。

你会试一下这个命令吗?在我的情况下,这个方法有效。
sudo mount -t tmpfs -o exec tmpfs /tmp

然后,检查它是否起作用。

mount

这对我有用,非常感谢! - n1nsa1d00

在Linux中,特权和权限可能会令人困惑。我建议在开始使用sudo之前阅读this。一旦你理解了root、sudo和普通用户之间的区别,你就能更好地掌握为什么会发生这个错误(以及*nix系统一般情况下)。还可以参考chown和chmod的man页面。

其他答案告诉你如何临时使/tmp目录可执行。为了保持这个设置:
1. 编辑/etc/systemd/system/tmp.mount文件(sudo systemctl edit tmp.mount --full)。 2. 找到包含挂载选项的行(例如Options=mode=1777,relatime,nodev,nosuid,noexec)。 3. 删除noexec选项。
从现在开始,即使重新启动,你的/tmp目录也将保持可执行状态!

对于那些给我点踩的人:我知道可能存在安全隐患。/tmp 目录被设置为 noexec 有其原因,或许是出于某种考虑。我并不打算与此争论。我只是在回答问题。如果某人已经决定将其设置为可执行,我们又有什么资格去评判呢?这里是我找到提到 tmp.mount systemd 单元的答案链接 - madhead
我很想了解这个问题的背景 - 我的(Lubuntu 20.04)系统没有/etc/systemd/system/tmp.mount这个文件(在Ubuntu采用systemd之前问这个问题的人也不会有),但是这个网站最需要的是及时更新的答案,所以这并不是批评。/tmpmount中没有被提及,因此似乎没有自己的挂载选项。你使用的是什么系统? - Zanna
@Zanna,Ubuntu 20.04 - madhead
我刚刚意识到我在这个问题中给出了两个相同的答案。对此我感到很抱歉。 - madhead
1谢谢...有趣...这不是你的错误 - 当你在两个不同的问题中发布完全相同的答案时,我们会收到一个标记(另一个问题没有给出临时解决方案的答案 - 阅读页面上的内容并进行调整如果重新发布!)- 我合并了这两个问题(将答案从一个移动到另一个),因为它们是重复的,另一个问题的细节较少,而Avinash的答案似乎值得移动。 - Zanna