PHP进程可以';t在`/var/run中删除文件/`
我有一个PHP进程:PHP进程可以';t在`/var/run中删除文件/`,php,unix,permissions,unlink,Php,Unix,Permissions,Unlink,我有一个PHP进程: 以根开始 写入并关闭/var/run/ chown()s将所述pid文件发送给另一个用户 通过posix_setuid() 尝试在进程结束时删除pid文件 现在,即使我正在chown()将pid文件发送给当前用户,它也无法删除在unlink()调用中声明“权限被拒绝”的文件。这意味着,即使有效用户拥有该文件,并且该文件未在当前(或任何)进程中打开,权限仍然不足 凭直觉,我试着将pid文件位置移动到我的主目录,这样做没有问题。请注意,进程的用户不是我的个人用户,因此有效用
- 以根开始
- 写入并关闭
/var/run/
s将所述pid文件发送给另一个用户chown()
- 通过
posix_setuid()
- 尝试在进程结束时删除pid文件
chown()
将pid文件发送给当前用户,它也无法删除在unlink()
调用中声明“权限被拒绝”的文件。这意味着,即使有效用户拥有该文件,并且该文件未在当前(或任何)进程中打开,权限仍然不足
凭直觉,我试着将pid文件位置移动到我的主目录,这样做没有问题。请注意,进程的用户不是我的个人用户,因此有效用户对我的主目录没有写权限,只有一个特定的文件
那么,为什么我不能在pid文件位于
/var/run/
中时删除它?问题是用户需要对目录的写入权限才能删除该文件。文件本身的写入权限不允许他们删除文件。这就是为什么当您将文件移动到他们的主目录时它会起作用,而他们的主目录有write perm:)。也许在通过posix_setuid()更改用户之前将文件移动到他们的家中是一种可能的解决方案
有关Linux权限的更多信息,请参阅
编辑:我刚刚重新阅读了你的帖子,意识到你声明没有将文件移动到用户的实际主页。但是,移动文件时使用的/home/dir必须向用户授予写入权限,用户才能删除文件。我的直觉是,您将文件移动到的目录要么已向用户所属的组所有者授予写权限,要么已向所有人授予写权限。“ls-l”应该向您显示此信息。Hmm,这当然回答了为什么它不能从
/var/run/
中删除它,但它们没有后一个目录的写入权限(如我所述),但它们仍然可以从那里删除它?在我完成编辑之前,您发表了评论。。。请阅读我的编辑部分,并在运行ls-lDoesn时告诉我您所确定的情况,这两种情况似乎都不是……奇怪。哦,你回答了我原来的问题,谢谢!没问题。抱歉,这不是一个完整的解决方案。另一方面,SELinux可以在box上启用,它还负责文件安全。