Каким пользователем должны быть запущены NGinx и PHP?

Разрешения - это то, что меня некоторое время путало с Linux. Итак, в тот момент, когда мои экземпляры NGinx и PHP-FPM работают с пользователем и группой:

WWW-данные

Это стандарт? У меня проблемы с загрузкой файлов.

Например, файл будет загружен как с пользователем, так и с группой www-data. Теперь, из-за того, как я установил разрешения (0440) в своем веб-приложении, я не могу войти через ssh с моей обычной учетной записью для загрузки этих файлов. Это не может быть изменено.

Я думал об изменении своего экземпляра nginx и php, чтобы сохранить группу, но поменял их для запуска под моим именем пользователя.

Какой правильный способ обработки разрешений здесь? Благодарю вас.

3 ответа

Решение

Вот как это работает: когда вы входите через FTP/SSH и загружаете файлы, они создаются с вашими разрешениями. Возможно, ваш webroot доступен для записи во всем мире (0777), что небезопасно - каждый пользователь в системе может что-то там написать. PHP работает с различными привилегиями пользователя (они указаны в конфигурации PHP-FPM, а не в конфигурации nginx), и, поскольку каталог доступен для записи всем пользователям, пользователь PHP (www-data) также может писать туда. Но владельцем этого файла являются www-данные, а не ваша учетная запись. Это две разные учетные записи на уровне разрешений файловой системы.

Я предлагаю вам создать выделенного пользователя с наименьшими возможными привилегиями, который бы владел каталогом webroot и использовался для загрузки по FTP/SSH, а также запускал php. Вы должны изменить конфигурацию PHP-FPM, в рабочем разделе есть запись пользователя и конфигурация NGINX, чтобы вы могли сделать файлы вашего сайта нечитаемыми и более безопасными.

Не запускайте PHP с привилегированным пользователем (права sudo, права на запись за пределами docroot), что может привести к нарушению безопасности сервера.

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

Если пользователь должен управлять веб-службами, вы должны добавить пользователя в соответствующую группу (www-данные) или разрешить ему su (или sudo) соответствующему пользователю (все еще www-данные).

В целях безопасности я стараюсь не запускать скрипты nginx/php, принадлежащие как www-data.

Другие вопросы по тегам