На веб-сервере 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's Использование 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)Бит (2) установки идентификатора группы ([SETGID] [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
их.