Дозвіл www-даних?


108

Отже, у мене є каталог в / var / www (званий пиріг), і мені потрібно дозволити www-data писати до нього, але я також хочу писати до нього (без використання sudo). Я боюся змінити дозволи на 777 у випадку, якщо інший користувач на моїй машині (або хакер) намагається змінити файли в цьому каталозі. Як дозволити доступ лише для себе та www-даних Apache?

Відповіді:


168
sudo chown -R yourname:www-data cake

тоді

sudo chmod -R g+s cake

Перша команда змінює власника та групу.

Друга команда додає атрибут s, який зберігатиме нові файли та каталоги в торті, що мають ті ж групові дозволи.


3
Чому chmod g + s рекурсивний?
Бен Рогманс

не знав про g + s. дуже дуже зручно!
FRAGA

1
що може робити користувач з файлами, створеними www-data в самому торті, та файлами, створеними www-data в каталозі, створеному www-data? наприклад, про операції редагування, перейменування, видалення? наскільки я розумію, перейменування та видалення неможливо всередині каталогу, створеного за допомогою www-data, і редагування файлів, створених за допомогою www-data, взагалі неможливо для користувача.
qdinar

49

Як зазначено у статті Slicehost :

Налаштування користувача

Тож почнемо з додавання головного користувача до групи користувачів Apache:

sudo usermod -a -G www-data demo

Це додає користувачу "демонстрацію" до групи "www-data". Переконайтеся, що ви використовуєте параметри -a та -G за допомогою команди usermod, показаної вище.

Вам потрібно буде вийти та знову увійти, щоб дозволити групу змінити.

Перевірте групи зараз:

groups
...
# demo www-data

Тому я є членом двох груп: моя власна (демо) та група Apache (www-data).

Налаштування папок

Тепер нам потрібно переконатися, що папка public_html належить головному користувачеві (демо) та є частиною групи Apache (www-data).

Давайте встановимо це:

sudo chgrp -R www-data /home/demo/public_html

Оскільки ми говоримо про дозволи, я додам швидку примітку щодо команди sudo: корисно використовувати абсолютні шляхи (/ home / demo / public_html), як показано вище, а не відносні шляхи (~ / public_html). Це гарантує, що судо використовується в правильному місці.

Якщо у вас папка public_html з символьними посиланнями, будьте обережні з цією командою, оскільки вона буде слідувати за символьними посиланнями. У цих випадках працюючої папки public_html змініть кожну папку вручну.

Setgid

Добре поки що, але пам’ятайте, що команда, яку ми тільки що дали, впливає лише на існуючі папки. Що про щось нове?

Ми можемо встановити право власності, щоб все нове також було у групі "www-data".

Перша команда змінить дозволи для каталогу public_html, щоб включити біт "setgid":

sudo chmod 2750 /home/demo/public_html

Це забезпечить надання будь-яким новим файлам групи "www-data". Якщо у вас є підкаталоги, вам потрібно запустити цю команду для кожного підкаталогу (цей тип дозволу не працює з '-R'). На щастя, нові підкаталоги будуть створені автоматично з набором біт 'setgid'.

Якщо нам потрібно дозволити доступ до запису до Apache, наприклад, до каталогу завантажень, а потім встановіть дозволи для цього каталогу так:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

Дозволи потрібно встановити лише один раз, оскільки новим файлам автоматично буде призначено правильне право власності.


Це рішення працює для мене. До цього я завжди запускаю сервер з терміналу за допомогою користувача root. За допомогою цього рішення я можу завантажувати файл у каталог, який має дозвіл 770. Це приголомшливо, тому що до цього я можу завантажувати файл лише за допомогою дозволу 777.
Іфан Ікбал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.