Припускаючи, що "веб-додаток" працює на сервері (наприклад, apache, nginx тощо) і написаний якоюсь динамічною мовою сценаріїв (наприклад, PHP, Ruby тощо), ви нерозумієте, хто такий "користувач".
Користувач не є людиною, яка увійшла у вашу програму - це, і їх роль у програмі (адміністратор тощо) абсолютно не має значення для сценарію. Користувач - це користувач системи Linux, під яким працює процес. Код вашого веб-сайту виконується лише одним користувачем - він може бути користувачем вашого веб-сервера (що насправді не дуже добре), або він може бути специфічним для вашого сайту (що набагато краще).
У Linux Linux користувачі належать до груп - ми можемо додати користувача до іншої групи та призначити привілеї цій групі.
Хороша настройка дозволить вашому серверу працювати як один користувач (назвемо цього користувача «веб-сервер»), а ваш динамічний сценарій мови (наприклад, через FastCGI) як власний користувач (один користувач на сайті - давайте назвемо першого користувача «site1») .
Щоб обслуговувати ваші файли, веб-серверу потрібен доступ до них, а мова сценарію потребує доступу до них. Це означає: 'site1' та 'webserver' повинні мати можливість читати ваші файли. Тільки одна з них, однак, може "володіти" файлами. Власник - це «користувач» (у користувачі, групі, іншому). Нам також потрібна наша мова сценаріїв, щоб мати можливість записувати в каталог (і читати файли, написані ним). Отже, користувачеві 'site1' потрібні дозволи читання та запису. Оскільки ми хочемо, щоб групові та інші дозволи були максимально обмежуючими, нашим "власником" буде "site1", а відповідні дозволи користувачів будуть прочитані та записані.
Оскільки ми не можемо вказати дозволи для нашого веб-сервера як іншого "користувача", ми додамо "веб-сервер" до групи "site1" (можна, звичайно, створити іншу групу з "site1" і "webserver" у ній. Все) членам цієї групи будуть надані однакові дозволи. Найбільш розслаблені дозволи (користувача, групи, іншого набору) будуть застосовані до будь-якого користувача для визначення їх дозволів.
Варто відзначити, що для гарної установки не потрібно, щоб файли мали дозволи на виконання динамічної мови. Файли не запускаються безпосередньо, а скоріше читаються в інтерпретаторі - для запуску типового сценарію (той, що нічого не пише) потрібні лише дозволи на читання.
Дозвіл 'Execute' на каталоги має інше значення - він дозволяє пройти, не маючи можливості читати вміст. Для того, щоб мати можливість читати файл у каталозі, користувач повинен мати дозволи "виконати" у ВСІМ каталозі над ним.
Для веб-програми кожен файл повинен мати дозволи на читання власника, інакше це досить безглуздий файл. Незалежно від того, чи користувач або адміністратор завантажує файли (через веб-додаток), "власнику" (тобто динамічній мові) потрібні дозволи на запис. Ефективна установка намагатиметься подавати статичні файли безпосередньо через веб-сервер, оскільки динамічні мови мають тенденцію повільно читати великі файли та повторювати вміст. Тому веб-серверу потрібен доступ для читання до ваших статичних файлів.
Тому мінімальні права доступу до файлів можуть бути:
- Файл у каталозі, де користувач завантажив статичні файли (файли images / swf / js), міститиме: 640
- Файл у каталозі, куди адміністратор завантажив статичні файли (файли images / swf / js), міститиме: 640
- Файл у каталозі, де знаходяться бібліотеки, які використовуються у програмі: 400 (або 440)
- Файл у каталозі, де розміщуються виконувані / переглядаються скрипти на стороні сервера: 400 (або 440)
- Файл у каталозі, де вже наявні файли (txt або xml) будуть редаговані за кодом на стороні сервера: 640 або 600
- (залежить від того, чи буде відображатись веб-сервер, не змінений часом)
Незважаючи на те, що мінімальні права доступу до каталогу можуть бути:
- Каталог, де користувач завантажив статичні файли (файли images / swf / js), міститиме: 750
- Каталог, де адміністратор завантажив статичні файли (файли images / swf / js), розміщуватиметься: 750
- Каталог, де перебувають бібліотеки, які використовуються в додатку: 500 (або 550) [має бути не менше 510]
- Каталог, де розміщуватимуться виконувані / проглядаються серверні скрипти: 500 (або 550) [має бути не менше 510]
- Каталог, де вже наявні файли (txt або xml) будуть редаговані за кодом на стороні сервера: 750 або 700
- (залежить від того, чи буде веб-сервер подавати файли звідси, не змінені часом)
Ще раз - ваш веб-сервер повинен мати "виконувати" дозволи на кожен каталог вище того, до якого йому потрібен доступ, - тому навіть якщо веб-сервер не обслуговуватиме файли з заданої директорії, ми повинні надати йому виконання дозволів.
Досить поширеним є надання веб-серверу читання доступу до більшості файлів (тому змініть ці 500 на 550). За дозволом "дещо захищені" дозволи зазвичай 755 для каталогів і 644 для файлів - не мають дозволів на виконання, кожен може читати, і лише користувач може писати - ви зауважите, що переважна більшість файлів у системі Linux мають ці права.
Майте на увазі, що "інші" дозволи стосуються будь-якого користувача системи, який не є власником або в групі (тобто всіх інших користувачів системи). Зберігати ваші "інші" дозволи обмежувально добре, оскільки ці користувачі невідомі - ви прямо не давали їм дозволу. Іншими дозволами часто найпростіше скористатись компрометованою системою (наприклад, одна з причин, чому / tmp є загальною ціллю).
У контексті вищесказаного я не думаю, що ваші останні два запитання є такими актуальними. Встановіть права доступу до каталогу на 550 (а для файлів - 440), а потім надайте користувачеві дозволи на запис для будь-яких каталогів, до яких буде писати ваша програма (тобто каталог: 750; файл: 640).
(Очевидно, вам знадобляться дозволи на запис для завантаження файлів, - але якщо ви хочете, ви можете їх видалити після цього - можливо, якщо хтось пише в каталог, в який може писати лише власник - ваш обліковий запис було порушено - який є одним причин збереження обмежувальних дозволів).