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

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

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

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

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

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

Ответов (7)

Решение

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

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

chcon -t tmp_t загружает

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

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

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

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

Шаги:

* предварительные шаги:
    * базовая подготовка сервера,
    * создать пользователя dev
        который будет владельцем "/ var / www / html",
    * 
    * установить nginx,
    * 
* 
* создать пользователя 'front'
    sudo useradd -d / home / front -s / bin / bash front
    sudo passwd передняя часть

    # создать домашнюю папку, если еще не существует,
    sudo mkdir / home / front
    # установить владельца новой домашней папки,
    sudo chown -R передний: передний / домашний / передний

    # переключиться на пользователя,
    вс - перед

    # скопируйте .bashrc, если он еще не существует,
    cp /etc/skel/.bashrc ~ front /
    cp /etc/skel/.profile ~ front /

    # включить цвет,
    vi ~ front / .bashrc
    # раскомментируйте строку, начинающуюся с "force_color_prompt",

    # пользователь выхода
    выход
* 
* добавить в группу 'dev',
    sudo usermod -a -G dev front
* сменить владельца веб-каталога,
    sudo chown -R dev: dev / var / www
* изменить разрешение веб-каталога,
    chmod 775 $ (найти / var / www / html -type d)
    chmod 664 $ (найти / var / www / html -type f)
* 
* повторно авторизуйтесь как 'front'
    чтобы группа вступила в силу,
* 
* тестовое задание
* 
* Ok
* 

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

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

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

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

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