У мене досить стандартний сервер, налаштований під управлінням Apache та PHP. Додаток, який я запускаю, створює файли, якими володіє користувач Apache www-data. Файли, які я завантажую через SFTP, належать моєму власному користувачеві charlesr. Усі файли входять до www-dataгрупи. Моя проблема полягає в тому, що я не можу змінювати або перезаписувати жоден файл через SFTP, який належить www-data, хоча він charlesrє частиною www-dataгрупи. Я можу змінити файли без проблем через сеанс SSH.
Тож я не впевнений, що робити. Як я можу надати дозволу на сеанс SFTP для зміни www-dataвласних файлів?
Трохи тла це нотатки, які я написав для себе під час налаштування сервера:
Now set up permissions on `/var/www` where your files are served from by
default:
$ sudo adduser $USER www-data
$ sudo chgrp -R www-data /var/www
$ sudo chmod -R g+rw /var/www
$ sudo chmod -R g+s /var/www
Now log out and log in again to make the changes take hold.
The previous set of commands does the following:
1. adds the current user ($USER) to the `www-data` group;
2. changes `/var/www` to belong to the `www-data` group;
3. adds read/write permissions to the group that `/var/www` belongs to;
4. sets the SGID bit on `/var/www`; this final point bears some explaining.
А потім продовжую пояснювати собі, що означає встановлення біта SGID (тобто всі файли, створені в, автоматично /var/wwwстають частиною www-dataгрупи).
ОНОВЛЕННЯ
Здається, що проблему спричинив сам додаток або, точніше, рамки програми ( Kohana ), встановивши певні файли, на які він пише 0644 (rw-r - r--); тобто не підлягає запису на групу. Це в поєднанні з тим, що вони також належать до www-dataтого, що я не можу редагувати файли через SFTP під час входу як charlesr. Я не впевнений, чому я міг редагувати файли через SSH. Я здогадуюсь, що я повинен був використовувати судо.
Ось стратегія дозволів, яку я зараз використовую завдяки невтомній допомозі Марті Фрід , який вказав на недоліки в моїй попередній стратегії, а також допоміг мені маринувати у світі дозволів Linux, поки я нарешті не заграв її. Дякую Марти!
Огляд
- Файли та каталоги в Росії
/var/wwwповинні належатиroot:webmasters - Усі розробники повинні бути членами
webmastersгрупи - Усі каталоги в:
/var/wwwслід встановити на:2775абоu=rwx,g=rwxs,o=rx(rwxrwx-rx) - Усі файли в файлі
/var/wwwповинні бути встановлені на:0664абоug=rw,o=r(rw-rw-r--)
Ним слід володіти www-data:webmasters(тобто це каталоги, до яких Apache повинен мати змогу писати):
- додаток / кеш
- додаток / журнали
- завантажити
- client_helpers / upload
ЯК
Щоб налаштувати дозволи на те, /var/wwwзвідки файли подаються за замовчуванням:
sudo addgroup webmasterssudo adduser $USER webmasterssudo chown -R root:webmasters /var/wwwsudo find /var/www -type f -exec chmod 664 {} \;sudo find /var/www -type d -exec chmod 775 {} \;sudo find /var/www -type d -exec chmod g+s {} \;sudo chown -R www-data:webmasters application/cache/[тощо ...]
Тепер вийдіть із системи та увійдіть знову, щоб зміни відбулися.
Попередній набір команд виконує наступні дії:
- Створіть нову групу під назвою
webmasters; всі користувачі, яким потрібен доступ для запису до файлів додатків, будуть додані до цієї групи. - додає поточного користувача (
$USER) доwebmastersгрупи. - змінює власника
/var/wwwдоrootта групу наwebmastersгрупу. - додає 664 дозволи (-rw-rw-r--) до всіх файлів у
/var/www. - додає 775 дозволів (drwxrwxr-x) до всіх каталогів у
/var/www. - встановлює біт SGID
/var/wwwі всі каталоги в ньому; цей заключний пункт містить деякі пояснення. Зауважте також, що ви можете також поставити 2 у передній частині вашої чмоподібної вічки (наприклад, 2644), щоб зробити те саме. - встановлює власника
www-data(користувач Apache) та групу наданого каталогуwebmaster. Це забезпечує те, що Apache та будь-хто вwebmastersгрупі може мати доступ до каталогу . Зробіть те саме для всіх інших каталогів, які потребують запису.
/var/wwwбез додавання його до цієї групи?