На этот вопрос уже есть ответ здесь:
На веб-сервере Apache у меня есть пользователь www-data
, а все файлы в / var / www
принадлежат www-data
. Разве это не для безопасности? Иногда мне нужно загрузить файлы через FTP в / var / www / *
, но с моим собственным пользователем у меня нет прав на запись в него.
Допустим, я использую WordPress, который рекомендует разрешение 644
для файлов и 755
для папок. Как лучше всего сделать это безопасно? Мне все еще нужно иметь возможность загружать файл через FTP.
В то время как Каков наилучший способ обработки разрешений для пользовательских www-данных Apache 2 в / var / www? довольно хорошо обсуждают проблему с разрешениями, прошло уже почти 9 лет старый и не соответствует текущим лучшим практикам. Я отвечу на вопрос: Как лучше всего сделать это безопасно?
Как обсуждал в мета, перемещенная и улучшенная версия этого ответа находится здесь .
Иметь отдельного пользователя для каждого сайта , т.е. не обслуживать все сайты, использующие www-data
. Это важно, так как с вашим WordPress (или любой другой CMS) ваш Apache не обслуживает файлы статического содержимого, а запускает PHP.Если у вас есть проблема с безопасностью на одном сайте, она может распространиться на все сайты, работающие от имени одного и того же пользователя.
Загрузка файлов через FTP небезопасна , поскольку отправляет пароли и содержимое в виде обычного текста. Например. WordPress, который вы размещаете, имеет информацию для входа в базу данных в wp-config.php
. Вместо этого вы должны использовать протокол передачи файлов SSH (SFTP).
Таким образом, вы также можете добавить открытые ключи администраторов вашего сайта в ~ / .ssh / uthorized_keys
, что сделает им не нужно знать пароль пользователя, на котором запущен сайт. (См. Как настроить ключи SSH в Ubuntu 16.04 ). Персональный открытый ключ SSH может использоваться на нескольких сайтах для легкого и быстрого доступа, уменьшая дополнительную нагрузку, связанную с наличием нескольких учетных записей.
Используйте PHP-FPM . Это текущий подход к запуску PHP от имени пользователя. Создайте новый пул для каждого пользователя, то есть по одному пулу на каждый сайт. Это лучший вариант как для безопасности, так и для производительности, поскольку вы также можете указать, сколько ресурсов может потреблять один сайт.
См., Например, NeverEndingSecurity's Запустите php-fpm с отдельным пользователем / uid и группой в linux . Существуют учебные пособия, такие как HowtoForge Использование PHP-FPM с Apache в Ubuntu 16.04 , в котором не используется PHP-FPM для повышения безопасности за счет разделения пользователей, а также руководство по использованию одного сокета FPM на сервере.
Том заслуживает медали за этот ответ на ServerFault.
Установка идентификатора группы так, как он объясняет, заставила это работать!
Создайте новую группу (www- pub) и добавьте пользователей в эту группу
groupadd www-pub
usermod -a -G www-pub usera
## необходимо использовать -a для добавления в существующие группы
usermod -a -G www-pub userb
groups usera
## display groups for userИзмените владельца всего в / var / www на root: www-pub
chown -R root: www-pub / var / www
## -R для рекурсивногоИзмените права доступа для всех папок на 2775
chmod 2775 / var / www
## 2 = установить идентификатор группы, 7 = rwx для владельца (root ), 7 = rwx для группы (www-pub), 5 = rx для мира (включая www-data apache user)Установить идентификатор группы ([SETGID] [2]), бит (2) заставляет группу (www-pub) копироваться во все новые файлы / папки, созданные в этой папке. разное параметры: SETUID (4) для копирования идентификатора пользователя и STICKY (1), который я think позволяет только владельцу удалять файлы.
Есть рекурсивный параметр
-R
, но он не делает различий между файлами и папками, поэтому вам нужно [использовать find] [3], например:
find / var / www -type d -exec chmod 2775 {} +
Замените все файлы на 0664
find / var / www -type f -exec chmod 0664 {} +
Измените umask для ваших пользователей на 0002
. umask контролирует разрешения на создание файлов по умолчанию, 0002 означает, что файлы будут иметь 664, а каталоги 775. Установка этого (by редактируя строку
umask
внизу/ etc / profile
в моем случае) означает, что файлы, созданные одним пользователем, будут доступны для записи другим пользователям в www-group без необходимостиchmod
им.