Який користувач повинен працювати як NGinx та PHP?


15

Дозволи - це те, що мене певний час плутало з Linux. Тож у той час, як мої екземпляри NGinx та PHP-FPM працюють з користувачем та групою:

www-дані

Це стандарт? У мене виникають проблеми, коли я стикаюся з завантаженням файлів.

Наприклад , файл буде завантажений як з даними користувача, так і з групи www. Тепер через те, як я встановлюю дозволи (0440) у своїй веб-програмі, я не можу увійти через ssh зі своїм звичайним обліковим записом, щоб завантажити ці файли. Це неможливо змінити.

Я думав змінити свій екземпляр nginx та php, щоб зберегти групу, але змінив їх на запуск під моїм іменем користувача.

Який тут правильний спосіб обробки дозволів? Дякую.

Відповіді:


12

Ось так це працює: Коли ви входите через FTP / SSH та завантажуєте файли, вони створюються з вашими дозволами. Ймовірно, ваша веб-програма записується у всьому світі (0777), тобто небезпечно - кожен користувач у системі може щось там написати. PHP працює з різними привілеями користувача (вони вказані в конфігурації PHP-FPM, а не в nginx config), і оскільки каталог є доступним для запису у всьому світі, користувач PHP (www-data) також може там писати. Але власник цього файлу - це www-data, а не ваш обліковий запис. Вони є двома різними обліковими записами на рівні дозволу на файлові системи.

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

Не запускайте PHP з привілейованим користувачем (sudo capablities, писати привілеї в аутсайті docroot) користувачем, що може спричинити загрозу безпеці сервера.


1
Приємна відповідь, я створив нового користувача, нові папки, скопіював усе, застосував правильні дозволи та зареєстрував користувача. Працює чудово. Дякую.
Розробник Pixel

Чи можу я просто додати свого користувача FTP до www-dataгрупи замість створення виділеного користувача? Чи вирішує це проблема @ ThePixelDeveloper? Спасибі.
Владислав Турак

2

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

Якщо користувач має керувати веб-службами, слід додати його до відповідної групи (www-data) або дозволити йому su (або sudo) до відповідного користувача (все ще www-data).


10
Причина www-data полягає в тому, що це обліковий запис з нульовими привілеями - він не може записувати в будь-який файл всієї файлової системи, не читати нічого, крім файлів, доступних для читання у світі. Раніше для цього ви використовували б вбудований користувач "ніхто". Однак, створюючи "www-data", ви маєте можливість дозволити цьому користувачу писати в деякі файли, не роблячи ці файли всесвітньо записаними (що погано). Основний принцип, що "www-data" є настільки ж привілейованим, як і "ніхто" в будь-який інший спосіб, справедливо.
thomasrutter

@thomasrutter, наскільки я розумію, я повинен запускати Nginx та PHP-FPM під користувачем www-data, який знаходиться у групі даних www. Якщо я хочу цього користувача , щоб мати можливість readі writeв яку - небудь папку, я повинен дати йому необхідні дозволи. У більшості випадків це веб-коренева папка /var/www/htmlта 755дозвіл. Я правий? Спасибі!
Владислав Турак

1

Я намагаюся уникати, щоб nginx / php виконував сценарії, що належать як www-data з міркувань безпеки.


9
Ви б хотіли детальніше про це?
Karussell
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.