Зробіть власником новостворених файлів і папок www-data замість суперпользователя / адміністратора


13

Я досі боровся з дозволами, і розмістив ще одне запитання, але визначив, у чому проблема, без жодного способу її вирішити.

Моя установка:

  • Ubuntu Desktop з стеком LAMP
  • 5 "користувачів" Я створив користувачів, яких я створюю на сервері ubuntu, використовуючи sudo useradd -r -s /bin/false USERNAMEі які використовуються для доступу до спільних папок локальної мережі, тобто для комп'ютерів у моїй мережі для підключення до папки / var / www, спільно використовуваної Samba.
  • EDIT: Метою є створення свого роду "master localhost", де всі комп'ютери в моїй локальній мережі можуть працювати на одному веб-сайті, локально (я не маю статичної IP-адреси, тому сервер не можна отримати з іншого місця) .

Моя проблема:

В даний час, коли я створюю нову папку на /var/www/html(наприклад: Створення папки / var / www / html / testingite1) за допомогою будь-якого комп'ютера в мережі, цією папкою автоматично належить boris:www-data("boris" є головним користувачем адміністратора на моїй установці на робочому столі ubuntu , і це показує дійсно boris: www-data під час роботи ls -lв новоствореній папці), що спричиняє проблеми з моїм поточним налаштуванням (здебільшого використовуючи модуль Duplicator для Wordpress від LifeInTheGrid). Однак і моє, /var/wwwі моє /var/www/htmlналежатьwww-data:www-data

Отже, я хотів би знати, як я можу:

  • Змініть право власності на www-data: www-дані всіх файлів І каталогів нижче / var / www та / var / www / html

  • Переконайтесь, що будь-який файл або папка, яку я створитиму з будь-яким з користувачів моєї мережі, автоматично матимуть www-data: www-data (Це включає файли, автоматично створені за допомогою php-скриптів, оскільки це те, що робить плагін Duplicator, якщо я не помиляється).

Чи є спосіб це зробити?

Примітка: Я супер новачок із речами, пов’язаними з Linux та командними рядками, але швидко наздоганяю.

Примітка 2: umask вже встановлений як 0002

Редагувати:

Спробував це:

sudo chown -R www-data:www-data /var/www/

А потім встановіть setuid та setgid біти, виконавши це:

sudo chmod u+s /var/www/html
sudo chmod g+s /var/www/html

Потім вийшов із системи, перезапустив апаш і спробував створити нову папку за допомогою Mac, підключеного до мого сервера через мережевий IP (локальний IP, не статичний).

Я побіг

ls -l on /var/www/html

Результат все ще:

drwxr-sr-x 2 boris   www-data  testsite1

Примітка:

Я вже перевірив свою конфігурацію apache раніше і envvars, вона вже встановлена ​​на:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

EDIT: Я спробував це назад, наприклад, встановивши все, що належить boris: www-data, і встановив конфігурацію apvvars apache для boris: www-data. ЦЕ СПРАЦЮВАЛО!

Ось що я зробив:

Поміняв анверсив на

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Побіг

sudo chown -R boris:www-data /var/www/

Перезавантажив Apachem, створив нову папку, додав мої файли, запустив плагін, тепер каже, що це добре !!!


Дуже поганою ідеєю для безпеки є встановлення файлів, які належать користувачеві або групі даних www, хоча в рідкісних випадках це може знадобитися для певних файлів, яким веб-сервер потребує запису. Чого ви намагаєтесь досягти?
thomasrutter

Відповіді:


11

Відповідь на запитання №1: рекурсивнаchown

Рекурсивна chownдопоможе вам встановити право власності та групувати те, що ви хочете /var/www/.... Це команда, яку ви повинні використовувати:

sudo chown -R www-data:www-data /var/www/

З цим кожен файл і папка будуть встановлені як такі всередині, з тими правами власності.


Напіввідповідь на запитання №2: setgidбіт

Якщо ви хочете мати групове право власності на файли, встановіть setgidбіт у /var/www/htmlпапці. Потім слід створити нові файли з цією групою, як зазначено в папці.

sudo chmod g+s /var/www/html

Вам потрібно буде встановити дозволи на запис, якщо будь-який інший користувач, ніж www-dataпише в каталоги, і це може відкрити вам дірку або безпеку, якщо ви не будете обережні.

Ви отримуєте дозволи $USER:www-data; щоб змінити власника, ви використовуєте, chownяк зазначено в способі №1 (при цьому в правильній установці для доступу до веб-файлів слід покладатися на групові дозволи, а не на права власника користувача).


Проблема копіювача PHP Wordpress

Проблема з дозволами полягає в тому, що користувач / група PHP запускається в міру необхідності запису та читання та, ймовірно, +xу каталозі редагувати структуру dir тощо.

PHP працює www-dataза замовчуванням в установках Ubuntu, які використовують конфігурації за замовчуванням. В ідеалі вищезазначені кроки вирішили б проблему, оскільки ви застрягли, що плагін Duplicator є плагіном PHP.

В ідеалі ви також повинні перевірити документацію на плагін Duplicator, щоб перевірити, які дозволи потрібно запускати та працювати.


Мені подобається встановлений метод :)
Rinzwind

Це саме те, що я шукав !!!! Єдина проблема: це не спрацювало :-( Я створив папку на своєму mac (тобто НЕ з настільним комп'ютером ubuntu), звернувшись до свого сервера через локальний IP-адрес. дані: - /
Борис Шевро

Це тому, що я встановлюю право власності на файли, а не на папки? Це лише тому, що папці, яку я створюю CANNOT, автоматично належить www-data: www-data?
Борис Шевро

Mac відрізняється від Linux, і якщо вам по-справжньому не пощастило, цей метод не працюватиме, і вам доведеться зіпсувати набагато більше, ніж просто прості дозволи (наприклад, ACL та інші речі), щоб налаштувати файли за замовчуванням . Крім того, "не працювало" неоднозначно. визначити, що не працювало, і включити результати як зміни до питання.
Thomas Ward

1
setid, застосований до каталогів, завжди ігнорується в Linux,
iirc

6

Щоб переконатися, що будь-який файл або папка, яку ви створюєте, /var/www/htmlавтоматично перебуває у власності www-даних, якими ви можете скористатися inotify, це як cron, але відстежує папки / файли для змін у атрибутах, створеннях файлів, модифікацій та багато іншого.

Спочатку встановіть його:

$ sudo apt-get install incron

Дозволити використання root incron, відкривши /etc/incron.allow:

$ sudo vim /etc/incron.allow

і додайте rootу файл, а потім збережіть та закрийте.

Відредагуйте свою вкладку за допомогою:

$ sudo incrontab -u root -e

і додайте до нього наступний рядок:

/var/www/html IN_CREATE /bin/chown -R www-data:www-data /var/www/html/

зберегти та вийти.

Тепер, як тільки файл буде створений в /var/www/htmlдирекції, він автоматично встановить повноваження www-data:www-data.

Пояснення рядка у вкладці:

/var/www/html - це каталог, за яким буде здійснюватися моніторинг.

IN_CREATEбуде дивитися створені файли. Це маска зміни файлів .

/bin/chown -R www-data:www-data /var/www/html/ це команда / дія для виконання.


Вони можуть домогтися чогось подібного, не ініціюючи та встановивши жорсткість - право власності користувачів, швидше за все, не повинно змінюватися часто, і вони можуть самостійно скинути право власності на користувачів ... або використовувати ACL, які можуть бути болем
Thomas Ward

Вся мета цього сервера полягає в тому, щоб ми використовували його як "головний локальний хост", наприклад створити веб-сайти localhost і мати можливість легко та легко редагувати / замінювати / переміщувати та створювати тестові сайти. Якщо мені доведеться скинути все вручну, це вбиває цілі цілі: - /
Борис Шевро

Це єдиний спосіб "інкрон"? Я не розумію, чому це має бути таким складним. Що я шукаю - це простий спосіб для всіх моїх комп'ютерів у мережі створити веб-сайт на цьому сервері. Зрештою, оскільки у мене немає статичного IP (отже, безпека не є проблемою), чи є ще один поворот, який ви мали б на увазі?
Борис Шевро

дякую, працює як шарм!
trurl

3

Змініть право власності на www-data: www-дані всіх файлів І каталогів нижче / var / www та / var / www / html

cd /var/www/
chown -R  www-data:www-data /var/www/
  • ./html тут мається на увазі (як частина / var / www /)
  • -Rробить його рекурсивним (тому він буде проходити через всі каталоги /var/www/).

Переконайтесь, що будь-який файл або папка, яку я створитиму з будь-яким з користувачів моєї мережі, автоматично матимуть www-data: www-data

  • Всередині / var / www / html / я б припустив?

Встановіть налаштування apache на www-data. Побачити/etc/apache2/envvars

# envvars - default environment variables for apache2ctl

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Вам потрібно перезапустити apache після редагування цього ( sudo service apache restart).

Це включає в себе файли, автоматично створені за допомогою php-скриптів, оскільки це те, що робить плагін Duplicator, якщо я не помиляюся).

Проблема тут, ймовірно, не в плагіні, а в PHP. Користувач повинен виконувати той самий процес, під яким працює PHP. Тому, ймовірно, потрібно встановити це також на www-data, якщо це ваш користувач та група ( /etc/php5/apache2/php.ini).


www-dataЯ вважаю, що за замовчуванням Ubuntu запускаються процеси PHP / працівники , як і Debian.
Thomas Ward

Крім того, проблемою /var/www/htmlє також групове право власності та читання / запис приватних осіб. Інша проблема полягає в тому, що вони хочуть, щоб будь-який файл, створений користувачем, мав www-data:www-data, і я гадаю, що це користувачі мережі , а не користувачі Wordpress, тому вам доведеться піти на дозвіл файлів Linux.
Thomas Ward

Це дійсно користувачі мережі, це користувачі, яких я створюю на сервері ubuntu, використовуючи sudo useradd -r -s / bin / false USERNAME і які використовуються для доступу до загальних папок локальної мережі
Борис Шевро

Що робити, якщо я зміняю право власності і записую дозволи на всі папки та файли назад до boris: www-data, а потім змінять envvars для apache, щоб бути boris: www-data? Чи може це вирішити проблему, оскільки коли-небудь я створюю новий файл, він встановлюється як власник: boris: www-data?
Борис Шевро

2

Я це вирішив! Я все ще думаю, що це була проблема Apache envvars, але не впевнена, чи це саме те, що вирішило проблему ... У будь-якому випадку, ось що я зробив:

Поміняв анверсив на

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Побіг

sudo chown -R boris:www-data /var/www/

Зараз це працює поки що. Буде тестувати далі ...

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