Предоставьте пользователю права на доступ к www-данным / var / www

У меня есть простая настройка веб-сервера для некоторых веб-сайтов, с макетом что-то вроде:

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

У меня есть ранее использовал пользователя root для управления файлами, а затем вернул их обратно www-data, когда я закончил (сайты WordPress, необходимые для работы WP Uploads). Это, вероятно, не лучший способ.

Я пытаюсь найти способ создать другого пользователя (назовем его user1), у которого есть разрешение на редактирование файлов на сайте site1, но не на site2, и который не останавливает владение файлами www-data. Есть ли для меня способ сделать это?

36
задан 3 April 2017 в 16:55

6 ответов

Если мы проверим владение 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
[ 1120] Выводом должен быть список, похожий на что-то вроде:

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, группа site1. Пользователь root и группа site1 имеют права на запись (плюс права на чтение и выполнение) в каталог. Любой пользователь, принадлежащий группе site1, будет пользоваться всеми привилегиями, предоставленными этой группе.

Теперь войдите в систему как user1, перейдите в каталог site1 и попробуйте создать файл в этом каталоге,

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

Это не удалось, поскольку, скорее всего, основная группа user1 не является site1. Итак, перейдите в эту группу.

newgrp - site1

Попробуйте воссоздать файл (помните, что вы переместились в домашний каталог user1 после смены группы), теперь это должно работать. Так как созданные файлы будут иметь мировое разрешение на чтение, apache (или ваш веб-сервер) не должен сталкиваться с какими-либо проблемами при доступе к ним.

РЕДАКТИРОВАТЬ

Также, как указано в комментарии dan08 , необходимо добавить www-данные в группу site1.

sudo adduser www-data site1

Во многих (не во всех) дистрибутивах www-data - это пользователь, под которым работает веб-сервер Apache. Это также означает, что все, что делает Apache (особенно включая скрипты PHP), будет выполнено с разрешениями пользовательских www-данных (а также групповыми www-данными) по умолчанию. WordPress использует пользовательские www-данные для записи файлов.

Если вы хотите увидеть, как работает веб-сервер apache, введите команду

ps aux | grep apache2 | less
0
ответ дан 3 April 2017 в 16:55

Создайте две группы: 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 имеет разрешения пользователя и группы на обоих сайтах, и каждый пользователь имеет разрешения группы для своего соответствующего сайта.

0
ответ дан 3 April 2017 в 16:55

Вы должны создать новую группу для так называемого «нового пользователя», а затем добавить в эту группу 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 не сможет получить доступ к site2, потому что он не будет принадлежать к группе www-data, которой принадлежит site2.

0
ответ дан 3 April 2017 в 16:55

Для тех, у кого есть их корневая папка Wordpress под их домашней папкой:

Ubuntu/апач

  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. Каталог изменения к yourWebSiteFolder

    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.

4
ответ дан 3 April 2017 в 16:55

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

# usermod -aG www-data username

для существующего пользователя или

# adduser username www-data

для вновь созданного

0
ответ дан 3 April 2017 в 16:55

Однако все это работает только в том случае, если разрешения по умолчанию при создании новых файлов включают групповое разрешение на запись. Разрешения по умолчанию в большинстве (Linux) систем дают разрешение на запись только владельцу файла. Это означает, что если либо www-data, либо пользователь создает файл или каталог, другие не смогут в него писать.

Я ломал голову над этой проблемой в течение нескольких лет, единственное решение, которое я придумал, это использовать ACL и сбрасывать их для всего дерева через определенные промежутки времени.

0
ответ дан 5 February 2021 в 15:13

Другие вопросы по тегам:

Похожие вопросы: