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

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

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

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

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

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

Ответ 1

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

Ответ 2

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

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

9 раз из 10, 755 - идеальное разрешение для этого - поскольку единственным пользователем с возможностью изменять файлы будет веб-сервер. Измените это на 775 с вашим ftp-пользователем в группе, если вам действительно нужно изменить это.

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

Ответ 3

Или, по крайней мере, 766.

  • read = 4
  • write = 2
  • execute = 1

7 = читать + писать + выполнять

6 = читать + писать

  • первый номер: владелец
  • второй номер: группа
  • третье число: другие пользователи

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

chcon -t tmp_t uploads

Ответ 7

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

Ответ 8

В соответствии с ответом от @Ryan Ahearn ниже показано, что я сделал на Ubuntu 16.04, чтобы создать пользователя front, который имеет только разрешение для nginx web dir /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
*