PHP进程无法删除`/ var / run /`中的文件

时间:2011-02-07 05:03:04

标签: php unix permissions unlink

我有一个PHP流程:

  • 以root身份启动
  • 写入并关闭/var/run/
  • 中的pid文件
  • chown() s表示将pid文件发送给其他用户
  • 通过posix_setuid()
  • 更改该用户
  • 尝试在流程结束时删除pid文件

现在,即使我{p}将pid文件chown()发送给当前用户,也无法删除unlink()来电中声称“权限被拒绝”的文件。这意味着即使有效用户拥有该文件,并且该文件未在当前(或任何)进程中打开,仍然没有足够的权限。

在预感中,我尝试将pid文件位置移动到我的主目录,这没有问题。请注意,该进程的用户不是我的个人用户,因此有效用户对我的主目录没有写权限,只有一个特定文件。

那么,为什么我不能删除/var/run/中的pid文件?

1 个答案:

答案 0 :(得分:1)

问题是用户需要对目录具有写权限才能删除该文件。对文件本身的写权限不允许它们删除文件。这就是为什么当你将文件移动到他们的主目录时它可以工作的原因,他们已经为:)编写了perms。也许在通过posix_setuid()更改用户之前将文件移动到他们的家中是一种可能的解决方案?

有关Linux权限的更多信息,请参阅this article

编辑:我刚刚重新阅读您的帖子,并意识到您声明没有将文件移动到用户的实际家中。但是,移动文件的/ home / dir必须向用户授予写入权限,以便他们删除文件。我的预感是,您将文件移动到的目录已写入授予用户所属的组所有者或已为所有人授予的写入权限。 “ls -l”应该向您显示此信息。