Каковы правильные разрешения для папки загрузки с PHP / Apache?

Извините за основной вопрос - я разработчик .NET и не имею большого опыта настройки LAMP.

У меня есть сайт PHP, который позволяет загружать файлы в определенную папку. Мне сказали, что эта папка должна принадлежать пользователю веб-сервера, чтобы процесс загрузки работал, поэтому я создал папку, а затем установил разрешения как таковые:

chown apache:apache -R uploads/
chmod 755 -R uploads/

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
53
0
107 036
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

Вы можете создать новую группу, в которой будут участвовать как пользователь apache, так и пользователь FTP, а затем сделать разрешение для папки загрузки 775. Это должно дать пользователям apache и FTP возможность записывать файлы в папке, но оставить всех остальных от их изменения.

Не забывайте, что вы можете избежать тупых магических чисел, перейдя на chmod u+rwX,go+r theFolder!

Kzqai 11.11.2014 00:55

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

Luka Govedič 19.01.2016 16:51

папка загрузки должна содержать только файлы jpg, gif и т. д. Конечно, не, скажем, файлы php, загруженные кем-то, или файлы сценариев оболочки. Есть ли способ избежать того, чтобы сервер apache выполнял файлы php в папке загрузки?

Toskan 14.03.2016 23:13

@Toskan, чтобы не запускать php-файлы в папке загрузки, я обычно так и делаю. создайте файл .htaccess и поместите в него эту строку: php_flag engine off

litux 14.12.2020 11:30

в этом случае злоумышленник может просто перезаписать .htaccess, загрузив его сам

Toskan 15.12.2020 23:29

Я добавлю, что если вы используете SELinux, вам необходимо убедиться, что контекст типа tmp_t. Это можно сделать с помощью утилиты chcon.

chcon -t tmp_t uploads

Я бы согласился с ответом Райана, если вы действительно этого хотите.

В общем, в среде * nix вы всегда хотите ошибиться, отдавая как можно меньше разрешений.

В 9 случаях из 10 755 является идеальным разрешением для этого, поскольку единственным пользователем, имеющим возможность изменять файлы, будет веб-сервер. Измените это значение на 775 с вашим пользователем ftp в группе, если вам ДЕЙСТВИТЕЛЬНО нужно это изменить.

Поскольку вы новичок в php по собственному признанию, вот полезная ссылка для повышения безопасности вашей службы загрузки: move_uploaded_file

Важно то, что пользователь и группа apache должны иметь минимальный доступ read и в некоторых случаях доступ execute. В остальном вы можете предоставить доступ 0.

Это наиболее безопасная настройка.

Помните также CHOWN или chgrp в папке вашего веб-сайта. Попробуйте myusername# chown -R myusername:_www uploads

Я бы поддержал идею создания ftp-группы, которая будет иметь права на загрузку. Однако я не считаю необходимым давать разрешение 775. 7 означает чтение, запись, выполнение. Обычно вы хотите разрешить определенным группам читать и писать, но в зависимости от случая выполнение может не потребоваться.

Основываясь на ответе @Ryan Ahearn, я сделал следующее на Ubuntu 16.04, чтобы создать пользователя front, который имеет разрешение только на веб-каталог nginx /var/www/html.

Шаги:

* pre-steps:
    * basic prepare of server,
    * create user 'dev'
        which will be the owner of "/var/www/html",
    * 
    * install nginx,
    * 
* 
* create user 'front'
    sudo useradd -d /home/front -s /bin/bash front
    sudo passwd front

    # create home folder, if not exists yet,
    sudo mkdir /home/front
    # set owner of new home folder,
    sudo chown -R front:front /home/front

    # switch to user,
    su - front

    # copy .bashrc, if not exists yet,
    cp /etc/skel/.bashrc ~front/
    cp /etc/skel/.profile ~front/

    # enable color,
    vi ~front/.bashrc
    # uncomment the line start with "force_color_prompt",

    # exit user
    exit
* 
* add to group 'dev',
    sudo usermod -a -G dev front
* change owner of web dir,
    sudo chown -R dev:dev /var/www
* change permission of web dir,
    chmod 775 $(find /var/www/html -type d)
    chmod 664 $(find /var/www/html -type f)
* 
* re-login as 'front'
    to make group take effect,
* 
* test
* 
* ok
* 

Другие вопросы по теме