У мене досить стандартний сервер, налаштований під управлінням 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 webmasters
sudo adduser $USER webmasters
sudo chown -R root:webmasters /var/www
sudo 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
без додавання його до цієї групи?