Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP进程可以';t在`/var/run中删除文件/`_Php_Unix_Permissions_Unlink - Fatal编程技术网

PHP进程可以';t在`/var/run中删除文件/`

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文件位置移动到我的主目录,这样做没有问题。请注意,进程的用户不是我的个人用户,因此有效用

我有一个PHP进程:

  • 以根开始
  • 写入并关闭
    /var/run/
  • chown()
    s将所述pid文件发送给另一个用户
  • 通过
    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上启用,它还负责文件安全。