Другая проблема с правами доступа к файлам - PullRequest
0 голосов
/ 14 августа 2010

У меня есть сайт объявлений, и когда пользователи публикуют новые объявления, они могут загружать изображения.

Мой php-код берет выбранное изображение, загружает его в папку с изображениями и присваивает ему соответствующие имена.

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

У меня вопрос, на что должны быть установлены разрешения?И любые идеи, почему он не работает, если не 777?

Если вам нужно больше информации, просто дайте мне знать ...

Спасибо

ОБНОВЛЕНИЕ

У меня есть пользователь (Дэнни), у которого есть root-доступ ... Папка, в которую загружаются изображения, а также файл "image_upload.php", который делает магию, принадлежат пользователю "Дэнни",Тогда я просто попытался установить их в chmod 764, но когда я это сделал, у меня возникла проблема.

Видите, кажется, я должен установить права доступа r + w + e для "public", чтобы все работало.

Не могу понять, почему ...

Еще раз спасибо

Ответы [ 3 ]

1 голос
/ 14 августа 2010

Забудьте откровения, 777 - это истинное число зверя: -)

Вы почти никогда не должны устанавливать разрешения таким образом. Конечно, ваши изображения создаются в каталоге под одним идентификатором пользователя, например php.

Если это так (и так должно быть), вам просто нужно добавить этого пользователя в определенную группу этого каталога и разрешить доступ для записи группы, 764 скорее всего, хотя последняя цифра может измениться в зависимости от других потребностей .

Вероятно, вы можете выяснить, какой пользователь работает, изменив скрипт загрузки на:

system ("id >/tmp/id.txt")

или любой другой эквивалент в PHP для запуска инструмента командной строки.

Затем проверьте файл /tmp/id.txt для деталей. У вас будет что-то вроде:

uid=1000(php) gid=1000(phpgrp) groups=1000(phpgrp)

Как только вы это выясните (php), определите группу этого каталога images:

pax> ls -ald images
drwxr-xr-x 4 pax paxgrp 4096 2010-06-14 16:38 images

Это будет paxgrp из приведенного выше стенограммы. Затем убедитесь, что пользователь php добавлен в группу paxgrp. Обычно это можно сделать в /etc/group, изменив, например:

paxgrp:x:1027:bob,george

в

paxgrp:x:1027:bob,george,php

затем убедитесь, что разрешения на доступ к каталогам разрешают групповые (но не world) записи.


И, исходя из вашего обновления, на самом деле не имеет значения, кто владеет вашим PHP-файлом, просто кто запускает , и это может вообще не быть danny.

В противном случае я мог бы удалить любой файл на жестком диске, поскольку rm принадлежит root: -)

Самый быстрый способ узнать этого пользователя наверняка - это изменить этот файл так, чтобы он выводил информацию id, как я предлагал.

1 голос
/ 14 августа 2010

А есть идеи, почему он не работает?

Кроме разрешений, обязательно укажите правильные настройки для:

  • file_uploads
  • upload_max_filesize
  • memory_limit
  • max_execution_time
  • post_max_size

См .:

Также убедитесь, что:

  • Вы указали enctype="multipart" в form
  • Проверьте массив файлов с помощью print_r($_FILES);
0 голосов
/ 14 августа 2010

Ответы здесь замечательные, я просто хотел добавить еще одну возможность. Вы упомянули, что у пользователя «Дэнни» есть root-доступ, а у этого Дэнни есть файлы / каталоги. С PHP-сценарием, не относящимся к CLI, пользователь веб-сервера должен владеть сценарием, тогда вам не понадобится публика для чтения, записи и выполнения (если честно, если вы все сделаете правильно, вы сможете установить права на 700 и все еще будет в порядке - хотя обычно это никогда не ограничивается).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...