Установка правильных разрешений для загрузки файлов

12

У меня есть php-скрипт, который загружает файл в каталог под названием «uploads». Единственный способ заставить загрузку работать, если я это сделаю:

chmod 777 uploads

Я знаю, что это неправильно, но я не знаю, что я должен делать, чтобы заставить его работать.

Информация о сервере: T1-Micro Amazon Linux AMI 2013.03 на Amazon EC2

Вопросы:

  • Как мне узнать, к каким пользователям нужен доступ ... например, как называется имя пользователя для Apache или веб-сервера?

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

Благодаря!

Изменить: я нашел много ответов на переполнение стека, которые я буду исследовать. Например

/programming/3642241/php-file-upload-permissions

/programming/10842880/setting-permissions-in-php-on-server

/programming/8948537/permission-denied-when-attempting-to-upload-file-with-php

благодаря

fun_programming
источник

Ответы:

20

Попробуйте запустить:

ps -ef | grep apache

и посмотрите на самый левый столбец, соответствующий серверу Apache. Это пользователь, который запускает Apache, и по наследству также PHP.

Измените владельца каталога загрузки на этого пользователя и немного ограничьте права доступа, например, если пользователь веб-сервера www-dataпринадлежит группе с тем же именем (используя пример пути /var/www/uploads):

sudo chown www-data:www-data /var/www/uploads
sudo chmod 755 /var/www/uploads

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

Если вы уже загрузили файлы / каталоги, вы можете изменить владельца и права доступа к ним. Чтобы сделать это, перейдя 777к более разумным разрешениям, вы можете запустить:

sudo chown -R www-data:www-data /var/www/uploads
sudo chmod -R 755 /var/www/uploads
sudo find /var/www/uploads -type f -exec chmod -x {} \;

Не «вслепую» запускайте команды, если вы не понимаете каждую их часть. Проверьте manстраницы, если что-то неясно (это должно быть довольно просто).

Даниэль Андерссон
источник
Спасибо. Это очень помогло. apache это пользователь. Команды sudo chown и sudo chmod работают.
fun_programming
Ясное и простое решение, большое спасибо. Теперь мне больше не нужно рискованное разрешение 777
lhrec_106