Какой пользователь лучше всего управляет веб-сервером? [дубликат]

На веб-сервере Apache у меня есть пользователь www-data , а все файлы в / var / www принадлежат www-data . Разве это не для безопасности? Иногда мне нужно загрузить файлы через FTP в / var / www / * , но с моим собственным пользователем у меня нет прав на запись в него.

Допустим, я использую WordPress, который рекомендует разрешение 644 для файлов и 755 для папок. Как лучше всего сделать это безопасно? Мне все еще нужно иметь возможность загружать файл через FTP.

1
задан 9 May 2018 в 09:08
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 Запустите php-fpm с отдельным пользователем / uid и группой в linux . Существуют учебные пособия, такие как HowtoForge Использование PHP-FPM с Apache в Ubuntu 16.04 , в котором не используется PHP-FPM для повышения безопасности за счет разделения пользователей, а также руководство по использованию одного сокета FPM на сервере.

7
ответ дан 3 December 2019 в 16:32

Том заслуживает медали за этот ответ на 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 им.

0
ответ дан 3 December 2019 в 16:32

Теги

Похожие вопросы