Каким пользователем должны быть запущены 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.