У меня есть простая настройка веб-сервера для некоторых веб-сайтов, с макетом что-то вроде:
site1: /var/www/site1/public_html/
site2: /var/www/site2/public_html/
У меня есть ранее использовал пользователя root для управления файлами, а затем вернул их обратно www-data
, когда я закончил (сайты WordPress, необходимые для работы WP Uploads). Это, вероятно, не лучший способ.
Я пытаюсь найти способ создать другого пользователя (назовем его user1), у которого есть разрешение на редактирование файлов на сайте site1, но не на site2, и который не останавливает владение файлами www-data
. Есть ли для меня способ сделать это?
Если мы проверим владение 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
Создайте две группы: 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
имеет разрешения пользователя и группы на обоих сайтах, и каждый пользователь имеет разрешения группы для своего соответствующего сайта.
Вы должны создать новую группу для так называемого «нового пользователя», а затем добавить в эту группу 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.
Для тех, у кого есть их корневая папка Wordpress под их домашней папкой:
Ubuntu/апач
Добавьте своего пользователя к группе www-данных:
КРЕДИТ, Дающий разрешения записи группе www-данных
Вы хотите звонить usermod
на Вашем пользователе. Таким образом, это было бы:
sudo usermod -aG www-data yourUserName
Принятие www-data
группа существует
Проверьте, что Ваш пользователь находится в www-data
группа:
groups yourUserName
Необходимо получить что-то как:
yourUserName : yourUserGroupName www-data
yourUserGroupName обычно подобен Вам имя пользователя
Рекурсивно измените владение группы папки, сохраняющей Ваше пользовательское владение
chown yourUserName:www-data -R yourWebSiteFolder/*
Каталог изменения к yourWebSiteFolder
cd yourWebSiteFolder
Рекурсивно измените предварительные миссии группы папок и подпапок для включения полномочий записи:
find . -type d -exec chmod -R 775 {} \;
режим /home/yourUserName/yourWebSiteFolder/'
измененный от 0755 (rwxr-xr-x)
кому: 0775 (rwxrwxr-x)
Рекурсивно измените предварительные миссии группы файлов и субфайлов для включения полномочий записи:
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.
Предполагая, что все файлы уже принадлежат пользователю www-data
(вы можете проверить это с помощью команды ls -slah
), который принадлежит к группе www-data
(следующий столбец после имени пользователя в списке файлов), вы можете просто добавить своего пользователя к тому же www-data
группа, позволяющая редактировать эти файлы
# usermod -aG www-data username
для существующего пользователя или
# adduser username www-data
для вновь созданного
Однако все это работает только в том случае, если разрешения по умолчанию при создании новых файлов включают групповое разрешение на запись. Разрешения по умолчанию в большинстве (Linux) систем дают разрешение на запись только владельцу файла. Это означает, что если либо www-data, либо пользователь создает файл или каталог, другие не смогут в него писать.
Я ломал голову над этой проблемой в течение нескольких лет, единственное решение, которое я придумал, это использовать ACL и сбрасывать их для всего дерева через определенные промежутки времени.