2011-01-21 2 views
1

У меня есть простая архитектура на данный момент, который выглядит немного что-то вроде этого:PHP: Создание файлов и сохранение прав доступа к файлам

Пользователя отправляет по электронной почте> Postfix> Procmail> PHP Script> Написать в Интернет третьей стороны App

Стороннее веб-приложение является CMS (я использую его API для создания записей).

Проблема, с которой я сталкиваюсь, заключается в том, что пользователи отправляют электронные письма пользователю «поддержки», где, когда веб-сервер работает на пользователе «apache».

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

Я понимаю, что PHP имеет функции chown и chmod, однако при попытке выполнить эти команды даже из командной строки я не могу передать права собственности на файлы пользователю «apache».

Есть ли простой способ сохранить права доступа к файлам на основе каталога создания? Это что-то мне нужно изменить с php.ini? Или, может быть, мне нужно переосмыслить архитектуру?

Спасибо за помощь!

ответ

0

Вы можете решить эту проблему на уровне файловой системы, если вы работаете в Linux, делая это:

  • Чаун поддержка: апач Foo
  • CHMOD 775 Foo
  • CHMOD G + S Foo

где foo - папка, в которой вы сохраняете файлы.

Теперь все (вновь созданные) файлы должны принадлежать поддержке: apache. Если вы создадите файлы как 664, то оба места могут его прочитать и записать.

Это не единственный (и, возможно, даже самый лучший) способ решить проблему, но это, вероятно, самый простой.

0

Я думаю, вам, возможно, нужно подумать о своей архитектуре и придумать способ для стороннего приложения, работающего под именем apache, для создания файлов. Один из способов - иметь скрипт setuid для вызова API.

chown, как правило, не может работать, кроме как root, потому что использование права пользователя, не использующего root, для кого-то другого, часто является дырой в безопасности.

0

Чтобы обойти эту проблему, я в конечном итоге сделал немного изворотливый.

После создания файлов в качестве другого пользователя я запускал команды chgrp и chmod (с PHP API), и все это было honkie dory. Спасибо за ответы.