Надати користувачеві дозволи на веб-дані, що належать / var / www


36

У мене є просте налаштування веб-сервера для деяких веб-сайтів, з макетом приблизно так:

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

Раніше я користувався кореневим користувачем для управління файлами, а потім повертав їх назад, www-dataколи я закінчив (WordPress сайти, необхідні для роботи WP-завантажень). Це, мабуть, не найкращий спосіб.

Я намагаюся знайти спосіб створити іншого користувача (дозволить назвати його користувачем1), який має дозвіл редагувати файли в site1, але не site2, і не зупиняє їх "власник" www-data. Чи є мені спосіб це зробити?

Відповіді:


70

Якщо ми перевіримо право власності на site1, то знайдемо щось подібне,

ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/

Це означає, що каталог належить користувачу root, root root. У той час як корінь користувача має дозвіл на запис (плюс дозволи на читання та виконання) до каталогу, корінь групи має лише права читання та виконання.

Ми хочемо змінити право власності групи на іншу (нову) групу та додати user1 до цієї конкретної групи. Ми також дамо дозвіл на написання для цієї групи.

Створіть нову групу,

sudo addgroup site1

Додайте user1 до новоствореної групи,

sudo adduser user1 site1

Перевірте, що user1 дійсно в цій групі,

groups user1

Вихід повинен бути списком щось на зразок,

user1 : <other-groups> site1

Тепер ми можемо змінити групове право власності на ваш призначений каталог.

sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1

Надати дозвіл на написання цього нового власника групи,

sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)

Перевірте, чи всі зміни дійсно є,

ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/

Отже, каталог зараз належить користувачеві root, group site1. І кореневий користувач, і група site1 мають дозвіл на запис (плюс права читання та виконання) у каталог. Будь-який користувач, що належить до групового сайту1, буде користуватися всіма привілеями, наданими цій групі.

Тепер увійдіть як user1, перейдіть до каталогу site1 і спробуйте створити файл у цій директорії,

echo "My User1 Site" > index.html 
bash: index.html: Permission denied

Це не вдалося, оскільки, швидше за все, первинною групою користувача1 є не сайт1. Отже, переходьте до тієї групи.

newgrp - site1

Спробуйте відтворити файл (будьте обережні, що ви перемінили в домашній каталог user1 після зміни групи), це має працювати зараз. Оскільки створені файли матимуть дозвіл на читання у всьому світі, apache (або ваш веб-сервер) не повинні стикатися з будь-якими проблемами доступу до них.

EDIT

Крім того, як вказав dan08 у коментарі, вам потрібно додати www-дані до site1 групи.

sudo adduser www-data site1

У багатьох (не всіх) дистрибутивах www-data - це користувач, під яким працює веб-сервер Apache. Це також означає, що все, що робиться Apache (особливо, включаючи PHP-скрипти), буде виконано з дозволами www-даних користувача (а також групувати www-data) за замовчуванням. WordPress використовує користувацькі www-дані для запису файлів.

Якщо ви хочете побачити, як працює веб-сервер apache, видайте команду,

ps aux | grep apache2 | less

1
Вам також потрібно додати www-дані до групи site1. Під час завантаження та зміни файлів у веб-інтерфейсі Wordpress. Зміни здійснюються Apache за допомогою користувача www-data. тож читання привілеїв не є достатньою частиною часу.
День

3
Permission deniedПовідомлення не пов'язане з «основної групи», а ще не на самому ділі бути в цій групі (наскільки OS стурбований). Якщо ви вийдете з системи та знову ввійдете в систему, вона працюватиме як очікувалося (без запуску newgrp - site1).
0b10011

Чим саме це буде відрізнятися від надання www-dataдозволу на групове письмове запитання, якщо ви все-таки повинні додавати їх www-dataдо site1будь-якого?
Метт

@MattBorja Ваш запит не дуже зрозумілий. Ви запитуєте, що не так у наданні групі з назвою www-data' write permissions? If that is the question, www-data? Це не група, це користувач. Будь ласка, повідомте мене, якщо я неправильно зрозумів ваше запитання.
Массор

Я думаю, це не безпечна конфігурація, оскільки користувачі можуть отримувати доступ до сайтів один одного через скрипт php, наприклад, менеджер файлів php.
qdinar

7

Створіть дві групи: site1grpіsite2grp

sudo groupadd site1grp && sudo groupadd site2grp

Додати www-dataдо обох груп.

sudo adduser www-data site1grp && sudo adduser www-data site2grp

Додайте user1 та user2 до відповідних груп

sudo adduser user1 site1grp && sudo adduser user2 site2grp

Змініть дозвіл папок свого сайту, щоб власник користувача був www-data, а власник групи був відповідною групою

sudo chown -R www-data:site1grp /var/www/site1  && sudo chown -R www-data:site2grp /var/www/site2

Тепер www-dataмає права користувача та групи на обох сайтах, і кожен користувач має групові дозволи для відповідного сайту.


4

Для тих, хто має свою кореневу папку wordpress під домашньою папкою:

Ubuntu / apache

  1. Додайте свого користувача до групи даних www:

    КРЕДИТ Надання дозволу на запис до групи даних www

    Ви хочете зателефонувати usermodсвоєму користувачеві. Так це було б:

    sudo usermod -aG www-data yourUserName
    

    Якщо припустити, що www-dataгрупа існує

  2. Перевірте, чи користувач у www-dataгрупі:

    groups yourUserName
    

    Ви повинні отримати щось на кшталт:

    yourUserName : yourUserGroupName www-data
    

    yourUserGroupName зазвичай схоже на ваше ім’я користувача

  3. Рекурсивно змінюйте групове право власності на папку, зберігаючи право власності користувача

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. Змініть каталог на вашWebSiteFolder

    cd yourWebSiteFolder
    
  5. Рекурсивно змінюйте групові умови папок і підпапок, щоб дозволити записувати:

    find . -type d -exec chmod -R 775 {} \;
    

    режим /home/yourUserName/yourWebSiteFolder/'змінено з 0755 (rwxr-xr-x)на0775 (rwxrwxr-x)

  6. Рекурсивно змінюйте групові припущення щодо файлів і під-файлів, щоб дозволити записувати:

    find . -type f -exec chmod -R 664 {} \;
    

    Результат повинен виглядати приблизно так:

    WAS:
    -rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    CHANGED TO:
    -rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    

    Дорівнює:

    chmod -R ug+rw foldername
    

    Дозвіл буде приблизно 664 або 775.


3

Ви повинні створити нову групу для, так званого, "нового користувача", а потім додати в цю групу www-дані та "нового користувача":

sudo gpasswd -a new_user new_group

Тоді ви можете змінити власника new_userта згрупувати його на new_group:

sudo chown -R new_user:new_group /var/www/site1

Тоді вам потрібно буде надати груповий доступ до сайту1. www-data все ще матимуть доступ до сайту, оскільки він належить до new_group, тоді як new_user не зможе отримати доступ до сайту2, оскільки він не буде належати до групи даних www, що належить сайту2.


Ваша відповідь є заплутаною, маючи на увазі "надання групового доступу до сайту1", ви мали на увазі "зміну групи site1 на new_group" або зміну режиму ( chmod)? Ваша відповідь ніде не згадує режим, який може змінити безпеку (або зламати речі).
Лекенштейн

Я мав на увазі зміни режиму ( chmod), скасувавши всі дозволи для ОСОБИ.
errikos

1

Якщо припустити, що всі файли вже належать www-dataкористувачеві (ви можете перевірити це за допомогою ls -slahкоманди), хто належить до www-dataгрупи (наступний стовпець після імені користувача у списку файлів), ви можете просто додати користувача до тієї самої www-dataгрупи, щоб дозволити редагувати ці файли

# usermod -aG www-data username

для існуючого користувача, або

# adduser username www-data

для новоствореного

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