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

15

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

WWW-данные

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

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

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

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

Pixel Developer
источник

Ответы:

12

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

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

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

Кристапу
источник
1
Хороший ответ, я создал нового пользователя, новые папки, все скопировал, применил правильные права доступа и привязал пользователя. Работает красиво. Спасибо.
Pixel Developer
Могу ли я просто добавить своего пользователя FTP в www-dataгруппу вместо создания выделенного пользователя? Решает ли это проблему @ ThePixelDeveloper? Благодарю.
Владислав Турак
2

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

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

Benoit
источник
10
Причиной для www-данных является то, что это учетная запись с нулевыми привилегиями - она ​​не может записывать в любой файл во всей файловой системе, не читать ни в какие файлы, кроме общедоступных файлов. Раньше для этого вы использовали встроенного пользователя «никто». Однако, создавая «www-данные», вы имеете возможность разрешить этому пользователю записывать в некоторые файлы, не делая эти файлы доступными для записи во всем мире (что плохо). Верен основной принцип, согласно которому «www-данные» столь же привилегированы, как и «никто».
Томасруттер
@thomasrutter, насколько я понимаю, я должен запустить Nginx и PHP-FPM под пользователем www-data, который входит в группу www-data. Если я хочу этого пользователя , чтобы иметь возможность readи writeв какую - нибудь папку, я должен дать ему необходимые разрешения. В большинстве случаев это будет корневая папка /var/www/htmlи 755разрешение. Я прав? Благодарность!
Владислав Турак
1

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

Эд Блум
источник
9
не могли бы вы уточнить это?
Карусселл