linux - 目录具有 777 权限,但如果是 root 或用户拥有,则行为不同

标签 linux ubuntu permissions directory 32-bit

这是一位同事刚刚发现的一件奇怪的事情。如标题所示,/var/tmp 的权限为 777。我们有一个必须使用的库(但没有源访问权限,令人失望),它在使用时会创建一个临时文件来完成其工作(不知道它实际上对该文件做了什么),然后立即删除它。至少,这就是应该发生的事情。 当/var/tmp 为 root:root 所有时,这些文件永远不会被删除,也永远不会关闭。如果我们将所有者更改为 user:user ,它会完美运行,文件的创建和删除速度比检测到它们的速度要快。 这只发生在他的 Ubuntu 14.04 32 位机器上。我们还有 Ubuntu 12.04 64 位、Debian 7 32 和 64 位、CentOS6 32 和 64 位以及 CentOS5 32 位,这种行为在其他任何操作系统上都没有出现,无论谁拥有/var/tmp,它们都完全按照预期工作

这是一个问题,因为在该库执行大约 1000 次操作后,该进程会达到文件限制并拒绝继续。

谁能想到一种情况,目录可以拥有 777 权限(尽管由 root 拥有),允许用户进程创建文件,但随后无法删除该文件?

非常感谢!

编辑:进程以/var/tmp 被 chowned 的用户身份运行,以使其正常工作。

$ ls -ltrd /var/tmp/*
drwxr-xr-x 2 user user 4096 Oct  7  2013 /var/tmp/audacity-user
drwx------ 2 root root 4096 Nov 28  2013 /var/tmp/kdecache-root
drwx------ 3 user user 4096 Apr 25 18:07 /var/tmp/kdecache-user
-rw------- 1 root root    3 Jul  3 11:07 /var/tmp/zhanceqDC3256C54D298DEE.dat
-rw------- 1 user user    3 Jul  3 14:25 /var/tmp/homjeaocAADD02BC6EDB687D.tmp

当问题发生时,我试图让我的同事提供类似的目录列表,但他突然走了出去,可能要到明天才能回来。

最佳答案

没关系,问题已经被发现了。不知道事件的完整顺序,但问题是“zhanceqDC3256C54D298DEE.dat”文件。显然这个库也创建了这个文件并可能删除了它:当该目录由root拥有时,即使有777权限也无法删除该文件。当目录由用户拥有时,它可以。 修复它的另一种方法是简单地 sudo rm 文件并让库自行创建它。 这个过程只能以用户身份运行,而不是以root身份运行,但为了测试它,我以root身份(和第三个用户)运行它,并且在每种情况下,它都会创建一个具有相关用户所有权的不同文件(我猜是某种用户绑定(bind)的guid),所以这个人如何设法进入这种情况可能永远未知。

关于linux - 目录具有 777 权限,但如果是 root 或用户拥有,则行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24555055/

相关文章:

r - 如何更改 sqlite 在 Ubuntu Linux R 上创建 etilqs 文件的临时文件夹?

linux - 如何在linux(centOS)下设置apache的所有权?

java - 在 Linux 中将 Java URL 转换为有效的文件路径

linux - 将 yocto 中的默认 rootfs 文件权限更改为 750 而不是 755

c - linux 驱动程序间通信

ubuntu - 在 Linux 上使用 QT creator 编译基于 portaudio 的 C 代码

Docker 入门第 3 部分 "Connection refused"使用 "docker stack deploy"时, "docker-compose up"有效

http - 什么决定下载的文件应该保存为只读还是读写?

Android 谷歌地图我的位置权限

linux - 反向 ssh 隧道