Какие разрешения должны иметь файлы / папки моего веб-сайта на веб-сервере Linux?

311

Это канонический вопрос о правах доступа к файлам на веб-сервере Linux.

У меня есть веб-сервер Linux под управлением Apache2, на котором размещены несколько веб-сайтов. У каждого сайта есть своя папка в / var / www /.

/var/www/contoso.com/
/var/www/contoso.net/
/var/www/fabrikam.com/

Базовый каталог / var / www / принадлежит root: root. Apache работает как www-data: www-data. Веб-сайт Fabrikam поддерживается двумя разработчиками, Алисой и Бобом. Оба сайта Contoso поддерживаются одним разработчиком, Евой. Все сайты позволяют пользователям загружать изображения. Если веб-сайт скомпрометирован, воздействие должно быть максимально ограничено.

Я хочу знать, как лучше настроить разрешения, чтобы Apache мог обслуживать контент, веб-сайт был защищен от атак, а разработчики все еще могли вносить изменения. Один из веб-сайтов имеет следующую структуру:

/var/www/fabrikam.com
    /cache
    /modules
    /styles
    /uploads
    /index.php

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

Nic
источник
6
Это должно быть каноническим ответом на все вопросы, которые мы получаем о разрешениях на сайте.
Nic
«Я где-то читал, что вы никогда не должны использовать разрешения 777 на веб-сайте, но я не понимаю ...» - тогда читатель сможет понять или хотя бы сравнить достоинства ответов здесь? Любое решение должно основываться на конкретных требованиях - требования здесь недостаточно конкретны (какова модель угрозы)
symcbean
6
Мне нравится, что вы спрашиваете об Apache, но используете домены, которые Microsoft обычно использует в качестве примеров.
gWaldo
Вы можете обратиться сюда для получения полной информации о разрешении, которое требуется для размещения файлов и папок на веб-сайте linux serverfault.com/questions/124800/…

Ответы:

342

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

Прошедшие проверку пользователи имеют учетную запись на сервере, и им могут быть предоставлены определенные привилегии. Обычно это системные администраторы, разработчики и учетные записи служб. Они обычно вносят изменения в систему, используя SSH или SFTP.

Анонимные пользователи - это посетители вашего сайта. Хотя у них нет прав доступа к файлам напрямую, они могут запросить веб-страницу, и веб-сервер действует от их имени. Вы можете ограничить доступ анонимных пользователей, внимательно следя за тем, какие разрешения имеет процесс веб-сервера. Во многих дистрибутивах Linux Apache работает как www-dataпользователь, но может отличаться. Используйте ps aux | grep httpdили, ps aux | grep apacheчтобы увидеть, какой пользователь Apache использует в вашей системе.


Примечания о разрешениях Linux

Linux и другие POSIX-совместимые системы используют традиционные разрешения Unix. В Википедии есть отличная статья о разрешениях Файловой системы, поэтому я не буду здесь все повторять. Но есть несколько вещей, о которых вы должны знать.

Бит выполнения
Интерпретируемые сценарии (например, Ruby, PHP) работают нормально без разрешения на выполнение. Только исполняемые файлы и сценарии оболочки нуждаются в бите выполнения. Чтобы пройти (войти) в каталог, вам необходимо иметь разрешение на выполнение для этого каталога. Веб-серверу необходимо это разрешение для просмотра каталога или обслуживания любых файлов внутри него.

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

Значения разрешений по умолчанию зависят от вашего umask. Umask вычитает разрешения из вновь созданных файлов, поэтому общее значение 022 приводит к созданию файлов с 755. При совместной работе с группой полезно изменить Umask на 002, чтобы создаваемые вами файлы могли быть изменены членами группы. И если вы хотите настроить права доступа для загружаемых файлов, вам нужно либо изменить umask для apache, либо запустить chmod после загрузки файла.


Проблема с 777

Когда вы chmod 777ваш сайт, у вас нет никакой безопасности вообще. Любой пользователь в системе может изменить или удалить любой файл на вашем сайте. Но если серьезно, помните, что веб-сервер действует от имени посетителей вашего сайта, и теперь веб-сервер может изменять те же файлы, которые он выполняет. Если на вашем веб-сайте есть какие-либо программные уязвимости, их можно использовать для порчи вашего веб-сайта, вставки фишинговых атак или кражи информации с вашего сервера, даже если вы об этом не узнаете.

Кроме того, если ваш сервер работает на общеизвестном порту (который должен препятствовать тому, чтобы пользователи без полномочий root создавали службы прослушивания, доступные во всем мире), это означает, что ваш сервер должен быть запущен пользователем root (хотя любой нормальный сервер будет немедленно отброшен). на менее привилегированную учетную запись, когда порт привязан). Другими словами, если вы запускаете веб-сервер, где основной исполняемый файл является частью системы управления версиями (например, приложение CGI), оставляя свои разрешения (или, в этом отношении, разрешения содержащего каталог, так как пользователь может переименовать (777) позволяет любому пользователю запускать любой исполняемый файл от имени пользователя root.


Определите требования

  • Разработчикам необходим доступ на чтение и запись к файлам, чтобы они могли обновлять веб-сайт
  • Разработчики должны читать / писать / выполнять каталоги, чтобы они могли просматривать
  • Apache нужен доступ для чтения к файлам и интерпретируемым скриптам
  • Apache нужен доступ на чтение / выполнение к обслуживаемым каталогам
  • Apache нужен доступ для чтения / записи / выполнения к каталогам для загруженного контента

Поддерживается одним пользователем

Если за обслуживание сайта отвечает только один пользователь, установите его в качестве владельца пользователя в каталоге веб-сайта и предоставьте пользователю полные разрешения rwx. Apache все еще нуждается в доступе, чтобы он мог обслуживать файлы, поэтому установите www-data в качестве владельца группы и предоставьте группе разрешения rx.

В вашем случае, Eve, чье имя пользователя может быть eve, является единственным пользователем, который поддерживает contoso.com:

chown -R eve contoso.com/
chgrp -R www-data contoso.com/
chmod -R 750 contoso.com/
chmod g+s contoso.com/
ls -l
drwxr-s--- 2 eve      www-data   4096 Feb  5 22:52 contoso.com

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

chmod g+w uploads
ls -l
drwxrws--- 2 eve      www-data   4096 Feb  5 22:52 uploads

Преимущество этой конфигурации заключается в том, что другим пользователям в системе становится труднее (но не невозможно *) шпионить, поскольку только пользователи и владельцы групп могут просматривать каталог вашего веб-сайта. Это полезно, если у вас есть секретные данные в ваших файлах конфигурации. Будь осторожен с маской! Если вы создадите новый файл здесь, значения разрешений, вероятно, будут по умолчанию равны 755. Вы можете запустить, umask 027чтобы новые файлы по умолчанию равнялись 640 ( rw- r-- ---).


Поддерживается группой пользователей

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

groupadd dev-fabrikam
usermod -a -G dev-fabrikam alice
usermod -a -G dev-fabrikam bob

В предыдущем примере мы использовали владельца группы для предоставления прав Apache, но теперь это используется для группы разработчиков. Поскольку владелец пользователя нам больше не нужен, установка его в root - это простой способ убедиться, что никакие привилегии не пропущены. Apache все еще нуждается в доступе, поэтому мы предоставляем доступ для чтения остальному миру.

chown -R root fabrikam.com
chgrp -R dev-fabrikam fabrikam.com
chmod -R 775 fabrikam.com
chmod g+s fabrikam.com
ls -l
drwxrwxr-x 2 root     dev-fabrikam   4096 Feb  5 22:52 fabrikam.com

Если у вас есть папки, которые должны быть доступны для записи Apache, вы можете сделать Apache владельцем или пользователем группы. В любом случае, у него будет все необходимое для доступа. Лично я предпочитаю сделать его владельцем, чтобы разработчики все еще могли просматривать и изменять содержимое папок загрузки.

chown -R www-data uploads
ls -l
drwxrwxr-x 2 www-data     dev-fabrikam   4096 Feb  5 22:52 uploads

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

Вы можете съесть свой торт и съесть его тоже

Это может быть улучшено в дальнейшем. Для владельца совершенно законно иметь меньше привилегий, чем для группы, поэтому вместо того, чтобы тратить владельца пользователя, назначив его пользователю root, мы можем сделать Apache владельцем пользователя для каталогов и файлов на вашем веб-сайте. Это аннулирование сценария с одним сопровождающим, но он работает одинаково хорошо.

chown -R www-data fabrikam.com
chgrp -R dev-fabrikam fabrikam.com
chmod -R 570 fabrikam.com
chmod g+s fabrikam.com
ls -l
dr-xrwx--- 2 www-data  dev-fabrikam   4096 Feb  5 22:52 fabrikam.com

Если у вас есть папки, которые должны быть доступны для записи Apache, вы можете просто изменить значения разрешений для владельца пользователя, чтобы у www-данных был доступ для записи.

chmod u+w uploads
ls -l
drwxrwx--- 2 www-data  dev-fabrikam   4096 Feb  5 22:52 fabrikam.com

С этим решением следует быть осторожным: пользователь, которому принадлежат новые файлы, будет соответствовать создателю, а не устанавливать www-data. Поэтому любые новые файлы, которые вы создаете, не будут доступны для чтения Apache, пока вы не создадите их.


* Разделение привилегий Apache

Ранее я упоминал, что другие пользователи могут просматривать ваш сайт независимо от того, какие привилегии вы используете. По умолчанию все процессы Apache выполняются как один и тот же пользователь www-данных, поэтому любой процесс Apache может читать файлы со всех других веб-сайтов, настроенных на том же сервере, а иногда даже вносить изменения. Любой пользователь, который может заставить Apache запускать скрипт, может получить тот же доступ, что и сам Apache.

Для решения этой проблемы в Apache существуют различные подходы к разделению привилегий . Однако каждый подход имеет свои недостатки в производительности и безопасности. По моему мнению, любой сайт с более высокими требованиями безопасности должен быть запущен на выделенном сервере, а не на виртуальных хостах на общем сервере.


Дополнительные соображения

Я не упоминал об этом раньше, но обычно это плохая практика, когда разработчики редактируют сайт напрямую. Для более крупных сайтов вам лучше иметь какую-то систему выпуска, которая обновляет веб-сервер из содержимого системы контроля версий. Подход с одним сопровождающим, вероятно, идеален, но вместо человека у вас есть автоматизированное программное обеспечение.

Если ваш веб-сайт позволяет загружать файлы, которые не нужно обслуживать, эти загрузки должны храниться где-то за пределами корневого веб-каталога. В противном случае вы можете обнаружить, что люди скачивают файлы, которые должны были быть секретными. Например, если вы разрешите учащимся отправлять задания, они должны быть сохранены в каталоге, который не обслуживается Apache. Это также хороший подход для файлов конфигурации, которые содержат секреты.

Для веб-сайта с более сложными требованиями вы можете изучить использование списков контроля доступа . Это позволяет гораздо более сложный контроль над привилегиями.

Если ваш веб-сайт имеет сложные требования, вы можете написать сценарий, который устанавливает все разрешения. Проверьте это полностью, затем сохраните это в безопасности. Это может быть на вес золота, если вам по какой-то причине понадобится перестроить ваш сайт.

Nic
источник
10
msgstr "chmod -R 775 fabrikam.com". Очень мало файлов внутри большинства веб-сайтов должны быть исполняемыми; Например, PHP-скрипт может быть 0640, если веб-сервер может их прочитать. chmod -R a + X fabrikam.com предоставит всем исполняемые права только на каталоги.
7
Обратите внимание, что Apache работает как пользователь apacheв системах, производных от Red Hat.
Майкл Хэмптон
Это превосходно, но было одно, чего я не понимал: я не понимаю цели или преимущества стратегии превращения apache в пользователя / владельца каталога файла, если он уже владеет группой над файлом.
идиотпрограммист
Этот ответ, хотя и является исчерпывающим, касается только разрешений ЦАП. Я думаю, что разрешения MAC также должны быть рассмотрены.
Дауд
1
Это отличный пост. Вот мой вклад: Недостаток использования www-данных в качестве владельца и dev-fabrikam в качестве группы (упоминается в разделе « Вы можете получить свой торт и съесть его тоже») также относится (в обратном порядке) к сценарию, предложенному в разделе « Поддерживается одним пользователем» . Сценарий, когда Apache создает папку или файл, у пользователя не будет к нему доступа, поэтому файлы нужно будет переместить обратно первоначальному пользователю. Я не обновил ответ, так как не уверен на 100% в своем утверждении Я бы предпочел, чтобы другие подтвердили это, прежде чем исправлять ответ.
14

Мне интересно, почему так много людей используют (или рекомендуют) «другую» (o) часть прав Linux, чтобы контролировать, что может делать Apache (и / или PHP). Установив для этой правой части что-то другое, чем «0», вы просто позволяете всему миру что-то делать с файлом / каталогом.

Мой подход заключается в следующем:

  • Я создаю двух отдельных пользователей. Один для доступа SSH / SFTP (при необходимости), которому будут принадлежать все файлы, и один для пользователя PHP FastCGI (пользователя, от которого будет работать веб-сайт). Давайте назовем этих пользователей соответственно bob и bob-www .
  • Боб будет иметь полные права ( rwx на папки, rw- на файлы), чтобы он мог читать и редактировать весь сайт.
  • Процесс PHP FastCGI требует прав rx для папок и прав r- для файлов, за исключением очень специфических папок, таких как cache/or uploads/, где также необходимо разрешение «запись». Чтобы дать PHP FastCGI эту возможность, он будет работать как bob-www , а bob-www будет добавлен в автоматически созданную группу bob .
  • Теперь мы удостоверимся, что владельцем и группой всех каталогов и файлов является bob bob .
  • Чего-то не хватает: даже мы используем FastCGI, но Apache все еще нуждается в доступе для чтения, для статического содержимого или файлов .htaccess, которые он будет пытаться прочитать, если для AllowOverrideнего установлено другое значение None. Для того, чтобы избежать использования уплотнительной части прав, я добавляю WWW-данные пользователя в бобе группы.

В настоящее время:

  • Для того, чтобы контролировать то , что разработчик может сделать, мы можем играть с ˙U части прав (но это ниже ноты).
  • Для того, чтобы контролировать то , что Apache и PHP может сделать, мы можем играть с г части прав.
  • Часть o всегда имеет значение 0, поэтому никто другой на сервере не может читать или редактировать веб-сайт.
  • Нет проблем, когда пользователь bob создает новые файлы, так как он автоматически будет принадлежать своей основной группе ( bob ).

Это резюме, но в этой ситуации Бобу разрешен SSH. Если не должно быть пользователей, которым разрешено изменять сайт (например, клиент изменяет сайт только через административную панель CMS и не имеет знаний о Linux), в любом случае создайте двух пользователей, но также предоставьте /bin/falseоболочку для bob , и отключить свой логин.

    adduser --home /var/www/bobwebsite --shell /bin/bash bob
    adduser --no-create-home --shell /bin/false --disabled-login --ingroup bob bob-www
    adduser www-data bob
    cd /var/www/bobwebsite
    chown -R bob:bob .
    find -type d -exec chmod 750 {} \;
    find -type f -exec chmod 640 {} \;

Примечание: люди склонны забывать, что ограничение прав u (владельца) в большинстве случаев бесполезно и небезопасно, поскольку владелец файла может выполнить chmodкоманду, даже если права равны 000.

Скажите, есть ли в моем подходе проблемы с безопасностью, потому что я не уверен на 100%, но это то, что я использую.

Я думаю, что у этого конфига есть проблема: когда PHP / Apache создает новый файл (например, upload), он будет принадлежать bob-www: bob , и bob сможет только прочитать его. Может быть, setuid в каталоге может решить проблему.

Лиса
источник
Linux игнорирует setuid. Новые файлы всегда принадлежат создателю.
Пол
Я чего-то не понимаю Похоже, это не учитывает ситуацию, когда на сайте одновременно работает больше разработчиков, так как единственным пользователем является bob. Как ты с этим справляешься? Например. через ssh оба пользователя входят как bob. Боб (1) чувствует, что он / она не может вспомнить пароль и меняет его на другой, но все еще в безопасности. bob (2) пытается войти в следующий раз, но не может.
n611x007
2
@naxa Ни в одной из хороших систем никогда не должно быть разработчиков, которые бы напрямую модифицировали сайт. В идеале, сайт находится под контролем версий, так что учетная запись пользователя «bob» автоматически извлекает и развертывает каждый (стабильный) выпуск. Таким образом, разработчики занимаются разработкой вне сайта, и изменения внедряются после их отправки на сервер развертывания. 'bob' - системный пользователь, у которого должны быть очень ограниченные сетевые разрешения, которые не включают удаленный вход в систему; iptables фактически позволяет вам фильтровать по UID для подобных вещей.
Парфянский выстрел
«Мне интересно, почему так много людей используют (или рекомендуют)« другую »(о) часть» - тогда, возможно, вам следовало бы опубликовать это как вопрос, а не как ответ. Нередко преднамеренно запускать веб-сервер (как наиболее уязвимую часть системы) с самым низким уровнем привилегий, в то время как поддержка, разработка и учетные записи администраторов также нуждаются в ином доступе
symcbean
@ParthianShot, вы не можете заставить это третьим лицам (если сайт не поддерживается вами, но папка существует на вашем сервере). Иногда единственное, что они знают, что делать, это использовать ftp.
Peregring-lk
9

Учитывая рейтинг Google на приведенном выше отличном ответе, я думаю, что есть одна вещь, которую следует отметить, и я не могу оставить заметку после ответа.

Продолжая этот пример, если вы планируете использовать www-data в качестве владельца и dev-fabrikam в качестве группы с 570 разрешениями на каталог (или файл), важно отметить, что Linux игнорирует setuid , поэтому все новые файлы будут принадлежать Пользователь, который их создал. Это означает, что после создания новых каталогов и файлов вам придется использовать что-то похожее на:

chown -R www-data /newdirectory/
chmod -R 570 /newdirectory/

В Ubuntu 12.04 для Rackspace OpenStack у меня была странная проблема, когда я не мог получить разрешения 570 для работы, пока я не перезагрузил сервер, что волшебным образом решило проблему. Потеря волос с возрастающей скоростью по этой, казалось бы, простой проблеме ...

Павел
источник
Пожалуйста, дайте ему погуглить: в Raspbian (он же на Raspberry Pi, если вы хотите изменить владельца / var / www в lighttpd (или другом веб-браузере), вы ДОЛЖНЫ перезагрузиться
gbronner
@gbronner Если вам сложно найти решение, вы можете разместить его в виде вопроса и дать ответ на вопрос. Тем не менее, это, вероятно, больше подходит для другого сайта SE Q & A. Я предполагаю, что Unix и Linux могут быть хорошим местом для этого.
Пол
1
Есть также raspberrypi.stackexchange.com; кажется, что сайты SE немного фрагментируют знания.
gbronner
@gbronner лол. Я не знал об этом! У тега Raspbian на U & L есть что-то вроде 120 вопросов.
Пол
3

Я собираюсь с этой конфигурацией:

  1. Все каталоги, кроме загрузки одного набора для владельца rootи группы root, разрешения для 0755.
  2. Все файлы установлены для владельца rootи группы root, разрешения для 0644.
  3. Загружает каталог с указанием владельца root, группы www-data, прав доступа 1770. Заклепка не позволяет владельцу группы удалять или переименовывать каталог и файлы внутри.
  4. Внутри папки загрузок находится новый каталог с www-dataвладельцем пользователя и группой, а также 0700разрешения для каждого www-dataпользователя, который загружает файлы.
  5. Конфигурация Apache:

Запретить AllowOverrideи Indexв каталоге загрузки, чтобы Apache не читал .htaccessфайлы, а пользователь Apache не может индексировать содержимое папки загрузки:

<Directory /siteDir>
   Options -Indexes
</Directory>

<Directory /siteDir/uploadDir>
   AllowOverride none
</Directory>

6. php.iniКонфигурация:

open_basedir = /siteDir:/tmp:/usr/share/phpmyadmin
post_max_size = 5M
file_uploads = On
upload_max_filesize = 3M
max_file_uploads = 20

При такой конфигурации www-dataпользователь не сможет получить доступ к каталогам, кроме siteDir/ /tmpи /usr/share/phpmyadmin. Также вы можете контролировать максимальный размер файла, максимальный размер сообщения и максимальный размер файлов для загрузки в одном запросе.

Маноло
источник
3

Если у вас есть пользователь FTP с именем «leo», необходимо загрузить файлы в веб-каталог example.com, а также, чтобы ваш пользователь «apache» мог создавать файлы uploa-files / session / cache в каталоге кеша, выполните следующие действия:

Эта команда назначает leo как владельца и группу как apache для example.com, пользователь apache является частью группы apache, поэтому он унаследует права доступа группы apache

chown -R leo: apache example.com

Еще одна команда, которая обеспечивает правильное разрешение и выполняет также вопросы безопасности.

chmod -R 2774 example.com

Здесь первый номер 2 предназначен для каталога и гарантирует, что каждый новый созданный файл останется в той же группе и разрешениях владельца. 77 для владельца и группы означает, что они имеют полный доступ. 4 для других означает, что они могут читать только через.

Следующее полезно, чтобы понять номера разрешений

Number  Octal Permission Representation
0   No permission
1   Execute permission
2   Write permission
3   Execute and write permission: 1 (execute) + 2 (write) = 3
4   Read permission
5   Read and execute permission: 4 (read) + 1 (execute) = 5
6   Read and write permission: 4 (read) + 2 (write) = 6
7   All permissions: 4 (read) + 2 (write) + 1 (execute) = 7
Кришан Гопал
источник
1

ИМО нужно учитывать:

  • Вы доверяете процессу, который читает ваши файлы? например. PHP?

Предположим, у вас есть сервер, на котором различные данные находятся под тестом пользователя.

Там у «тестового» пользователя есть:

  • его данные в $HOMEDIR
  • его почта в $MAIL
  • его данные для сети в /var/www/test

Теперь давайте подумаем о:

  • веб-приложение работает под testпользователем (PHP-FPM) - оно может удалить любой из его файлов!
  • веб-приложение работает в testгруппе (PHP-FPM) - оно может удалить любой из своих файлов, где в каталоге указано «w» для группы, и может изменить любой файл, в котором есть «r» для группы; и он все еще может их прочитать - например, ваши ssh-ключи!

Давайте предположим, что PHP глючит, и вы доверяете ему open_basedir? Есть ли у вас chrootпроцесс PHP? Что вы не делаете, хотите, чтобы он сканировал всю файловую систему?

Процесс вашего веб-приложения, например. PHP-FPM, то должен:

  • быть ограниченным определенным путем через chroot
  • не должен запускаться с правами основного пользователя или основной группы владельца данных

Таким образом, вы можете сделать:

  • тестовый пользователь: test:test
  • тестовый пользователь находится во вторичной группе, например. test-www
  • веб-приложение (PHP-FPM) работает под test-www:test-www
  • Тестовый пользователь, если он хочет, чтобы веб-приложение могло читать его файлы, сделает: chmod u=rwX,g=rX,o= /var/www/test/public
  • Тестовый пользователь, если он хочет, чтобы веб-приложение могло записывать его путь к веб-данным: chmod u=rwX,g=rwXs,o= /var/www/test/public/upload (таким образом, приложение создаст новые файлы как: test-www:test-www- у него будет группа test-www из-за setgid в каталоге!)

Таким образом, если процесс веб-приложения будет фальшивым, он будет просто читать определенные файлы, которые будут иметь групповое чтение, и он сможет записывать uploadтолько в каталог. Я настоятельно рекомендую иметь эту директорию uploadв файловой системе с noexec,nodev,nosuid mountпараметрами и иметь постоянный мониторинг любых новых файлов bizzare в этом каталоге, а также следить за любыми новыми процессами под test-wwwuid.

В Linux можно использовать ACL для лучшей настройки разрешений. Если более чем один человек должен загружать веб-данные, было бы лучше отделить учетную запись человека от учетной записи, используемой для загрузки файлов веб-данных, т.е. создать новую учетную запись, например. test-uploadи тестовый пользователь будет управлять ssh-ключами, чтобы ограничить, какой человек может использовать ssh / sftp. sshd_configзнает ExposeAuthInfoпараметры, поэтому он может быть настроен на запись, какой ключ ssh использовался для загрузки данных.

Я действительно сомневаюсь, что большинство служб веб-хостинга заботятся о разделении привилегий, когда они пишут «безопасно» без какой-либо информации о том, что вы получаете, я бы сказал, что они лгут.

Иржи Б
источник
php-fpm позволяют chrootи user, groupчтобы быть установленным для пула. но я бы не стал доверять php_admin_value[open_basedir]варианту. Я также читал, что лучше иметь отдельного мастера PHP-FPM для каждого пользователя, см. Ma.ttias.be/a-better-way-to-run-php-fpm. Создать экземпляр демона легко в большинстве дистрибутивов Linux и * BSD.
Иржи Б