Какой самый лучший пользователь для управления веб-сервером?
В веб-сервере Apache у меня есть пользователь www-data
и все файлы в /var/www
принадлежат www-data
, Разве это не для безопасности? Иногда мне нужно загрузить файлы через FTP на /var/www/*
, но с моим собственным пользователем у меня нет разрешения на запись в него.
Допустим, я использую WordPress, который рекомендует разрешение быть 644
для файлов и 755
для папок. Каков наилучший способ сделать это безопасно? Мне все еще нужно быть в состоянии загрузить файл через FTP.
2 ответа
Каков наилучший способ обработки разрешений для пользовательских 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 Run php-fpm с отдельным user/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
## отображать группы для пользователяИзмените владельца всего в /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 для мира (включая пользователя apache www-data)Установка битового идентификатора группы ([SETGID][2]) (2) приводит к тому, что группа (www-pub) копируется во все новые файлы / папки, созданные в этой папке. Другие варианты: SETUID (4) для копирования идентификатора пользователя и STICKY (1), который, я думаю, позволяет только владельцу удалять файлы.
Есть
-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. Установка этого значения (путем редактирования
umask
линия в нижней части/etc/profile
в моем случае) означает, что файлы, созданные одним пользователем, будут доступны для записи другим пользователям в группе www без необходимостиchmod
их.