Процесс PHP не может удалить файл в `/ var / run /` - PullRequest
2 голосов
/ 07 февраля 2011

У меня есть процесс PHP, который:

  • запускается от имени пользователя root
  • , а затем закрывает файл pid в /var/run/
  • chown() sуказанный файл pid другому пользователю
  • изменяет этого пользователя с помощью posix_setuid()
  • пытается удалить файл pid в конце процесса

Теперь, даже если яchown() отправляя файл pid текущему пользователю, он не может удалить файл с требованием «Отказано в доступе» при вызове unlink().Это означает, что даже если эффективный пользователь владеет файлом, и файл НЕ открыт в текущем (или любом) процессе, разрешения все еще недостаточно.

На догадке я попытался переместить расположение файла pidв мой домашний каталог, и это работает без проблем.Обратите внимание, что пользователь процесса не является моим личным пользователем, поэтому эффективный пользователь не имеет прав записи в моем домашнем каталоге, только один конкретный файл.

Итак, почему я не могу удалить файл pid, когдаэто в /var/run/?

1 Ответ

1 голос
/ 07 февраля 2011

Проблема заключается в том, что пользователю необходимы разрешения на запись в каталог, чтобы удалить файл.Права на запись самого файла не позволяют им удалить файл.Вот почему это работает, когда вы перемещаете файл в их домашнюю директорию, для которой у них есть права на запись :).Может быть, возможно переместить файл к себе домой, прежде чем сменить пользователя с помощью posix_setuid (), -

См. эту статью для получения дополнительной информации о разрешениях Linux.* Редактировать: Я просто перечитал ваш пост и понял, что вы заявили, что не перемещаете файл в реальный дом пользователя.Тем не менее, каталог / home / dir, в который вы перемещаете файл, должен предоставить пользователю право на запись для удаления файла.Я догадываюсь, что каталог, в который вы перемещаете файл, либо имеет права на запись, предоставленные владельцу группы, членом которого является пользователь, либо имеет права на запись для всех."ls -l" должен показать вам эту информацию.

...