2015-03-23 2 views
0

Я реализую загрузку файла в symfony2. Мой объект File принадлежит пользователю и представляет загруженный файл. Загруженные файлы не должны быть доступны для всех, кроме администраторов и владельца. Для решения этой проблемы (кроме защиты контроллера) я сохраняю их в каталоге, который не находится под/web /. Я назвал этот каталог/private_files/(и находится в корневом каталоге проекта).Позволяет веб-серверу удалять загруженные файлы, как?

Чтобы разрешить веб-сервер для записи в этот каталог я побежал это (я на Mac OS X Mavericks):

$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" private_files/ 

$ sudo chmod +a "www allow delete,write,append,file_inherit,directory_inherit" private_files/ 

загрузка работает отлично. Однако при попытке удалить файлы через контроллер с

unlink($path) 

Я получаю ошибку «Warning: Разорвать связь (путь/к/файлу): Доступ запрещен».

При перечислении файлов на терминале с ls -al, я получаю

drwxr-xr-x+ 3 myuser staff  204 Mar 23 11:59 . 
drwxr-xr-x 24 myuser staff  816 Mar 21 19:51 .. 
-rw-r--r-- 1 _www  wheel 7395585 Mar 23 11:59 uploaded_file_1 

где я замечаю, что загруженные файлы не имеют разрешения на исполнение и «+», который представляет списки управления доступом.

Каков правильный подход, позволяющий удалить эти файлы с помощью метода unlink? Должны ли файлы наследовать ACL (и если да, то как)? Или должен ли применяться chmod в каталоге? Большое спасибо.

+1

Я думаю, это потому, что ваша папка не принадлежит пользователю Apache, который обрабатывает php. –

+0

ОК, так что меняя владельца и группу с 'sudo chown www: wheel private_files' сделал трюк, но я все еще удивляюсь, почему одни и те же ACL работают с приложением/кешем, а не с моей папкой uploads. – picheto

+0

Я думаю, потому что вы создали папку/private_files/с другим пользователем, не являющимся пользователем apache, приложение/кеш создано программно, поэтому он владеет им и может создавать/удалять. я обновлю его как ответ –

ответ

1

Я думаю, это потому, что ваша папка не принадлежит пользователю apache, который обрабатывает php.

потому что вы создали папку/private_files/с другим пользователем, у которого нет пользователя apache, так как приложение/кеш создается программно, поэтому он имеет его и может создавать/удалять. я буду обновлять его как ответ

Смежные вопросы