暂时重命名 /tmp 然后创建到不同位置的 tmp 符号链接是否安全?

Is it safe to temporarily rename /tmp and then create a tmp symlink to a different location?

情况是此应用程序在 /tmp 中需要更多 space。目前我的 tmp 文件夹在 root 的分区中。临时创建指向不同分区的 tmp 符号链接是否安全,只是为了利用更大的 space?

如果它是一个繁忙的或任务关键的服务器,我不会这样做,因为可能有一个重要的程序试图在 /tmp 丢失时创建一个文件。或者它可能想要重命名文件。但是在中等使用的服务器上,尤其是当你可以暂停应用程序的时候你可以试试。

在目录中打开sockets/fifos可能有一些问题。这有点取决于 Linux 分布有多少仍在使用 /tmp。 X11、屏幕、kde/gnome 之类的东西是候选对象。所以你最好先用lsof检查一下。

如果 /tmp 是挂载点,您可能不会重命名它。

最安全的方法是以单用户模式启动或从外部启动媒体进行更改。那么就相当安全了(只要你不使用SELinux)。

这取决于...

您更好的选择可能是在启动您的应用程序之前设置 TMPDIR 环境变量以指向此位置。您的应用程序可能会考虑此变量(但您需要进行测试)。应用程序本身也可能有一些设置或一些其他变量来设置临时位置(查看手册)。

至于创建符号链接,在 /tmp 中打开文件的运行应用程序不应感知此更改(i-node 编号不会更改;即使您删除 /tmp,打开的文件也会在它们被当前打开它们的所有进程关闭后释放。

如果另一个应用程序希望在 /tmp 中找到某些内容(例如将尝试打开 /tmp/.X11-unix),则可能会出现问题。这样的应用程序会出错。在创建符号链接之前,您可以尝试通过从新 tmp 到原始 tmp 中的文件创建符号链接来克服这个问题(符号链接必须正确 after /tmp 已重命名)。它可能不适用于注重安全或有缺陷的应用程序。

但仍然有机会停止(重命名和符号链接不是原子操作,因此某些应用程序在删除时仍然可以访问 /tmp,但尚未创建符号链接)。

所以这取决于你在这台机器上有什么运行。

如果您可以重新启动机器并可以访问它的控制台(物理访问、LOM、虚拟机控制台或类似的),您可以采用 OS 到 "single user" 模式(telinit 1), 创建符号链接并重启。或者您可以编辑 /etc/fstab 以执行 mount --bind.

如果您有 Redhat/CentOS 或派生发行版,则启用 SElinux 可能会出现问题。

除了重命名 and/or 符号链接,您还可以:

mount --bind /path/to/dir/with/plenty/of/space /tmp

完成后 umount /tmp

如果您在关键任务服务器上,您可以在执行上述操作之前检查是否有任何程序当前正在使用 /tmp lsof /tmp

注意:运行 所有命令都是 root。