Управлять правами доступа в файловом хранилище на уровне файловой системы
В этой инструкции описаны настройки прав доступа к файловому хранилищу для облачного сервера с ОС на базе Linux.
В файловом хранилище с протоколом NFSv4 можно управлять правами доступа к файлам и папкам на уровне файло вой системы.
Принцип работы
Файлы и папки в файловом хранилище с протоколом NFSv4 поддерживают стандартное разграничение прав доступа как в Unix-системах. Доступ на чтение, запись и выполнение файлов реализован через Identity Mapping (IDM) — права доступа проверяются на основе ID пользователя и ID группы пользователей.
Группа пользователей — это пользователи с одинаковыми правами доступа. Группы делятся на два типа:
- первичная группа (Primary Group) — группа, которую операционная система присваивает пользователю;
- вторичная группа (Secondary Group) — одна или несколько групп, к которым также принадлежит пользователь.
Каждого пользователя можно добавить максимум в 16 групп: в одну первичную и 15 вторичных групп.
По умолчанию права на чтение, запись и выполнение файлов есть только у пользователя root. У остальных пользователей есть права только на чтение. От имени root можно настроить права доступа к папкам и файлам для пользователей и для групп пользователей.
Формат прав доступа
Пример прав доступа:
drwxrwxrwx 3 root root 21 Jun 13 14:00 .
drwxr-xr-x 4 root root 4096 Jun 13 13:44 ..
drwxr-xr-x 2 root root 6 Jun 13 14:00 directory
-rw-rw-r-- 1 first first 0 Jun 13 09:45 file.txt
Здесь:
- первый символ:
d— флаг директории;-— флаг файла;
- тройки символов вида
rwx:- первая тройка символов вида
rwx— права пользователя; - вторая тройка символов вида
rwx— права группы; - третья тройка символов вида
rwx— права всех остальных, кто не является пользователем или не входит в группу; r— права на чтение (read);w— права на запись (write);x— права на выполнение (execute);
- первая тройка символов вида
- первый столбец с именами — имена пользователей, которые являются владельцами папки или файла;
- второй столбец с именами — имена групп, которые являются владельцами папки или файла;
- последни й столбец — имена файлов или директорий.
Настроить права доступа для пользователя
В этой инструкции описана настройка прав доступа пользователей к файловому хранилищу с про токолом NFSv4.
Пользователь root может создавать пользователей и выдавать им права на папки. Если создать пользователя, папку и назначить пользователя владельцем папки, то только у этого пользователя будут полные права на чтение, запись и выполнение файлов в папке.
1. Примонтировать файловое хранилище к серверу
-
Установите пакет для работы с протоколом NFS:
sudo apt install nfs-common -
Создайте папку для монтирования хранилища:
sudo mkdir -p /mnt/nfs -
Примонтируйте файловое хранилище:
sudo mount -vt nfs "<filestorage_ip_address>:/shares/share-<mountpoint_uuid>" /mnt/nfsУкажите:
<filestorage_ip_address>— IP-адрес файлового хранилища. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Файловое хранилище → страница хранилища → вкладка Настройки → поле IP;<mountpoint_uuid>— ID точки монтирования. Можно посмотреть в панели управления: в верхнем меню нажмите Файловое хранилище → страница хранилища → блок Подключение → вкладка GNU/Linux.
2. Создать пользователя
-
Создайте пользователя:
sudo useradd <user_name> -u <user_id>Укажите:
<user_name>— имя пользователя;- опционально:
<user_id>— ID пользователя, например1000.
Пользователь будет автоматически добавлен в первичную группу (Primary Group) с таким же именем, как у пользователя.
-
Проверьте, что пользователь создан:
grep <user_name> /etc/passwdУкажите
<user_name>— имя пользователя.Пример ответа:
firstuser:x:1000:1000::/home/firstuser:/bin/shЗдесь:
firstuser— имя пользователя;- первое значение
1000— ID пользователя; - второе значение
1000— ID первичной группы пользователя; /home/firstuser— домашняя папка пользователя.
3. Назначить пользователя владельцем папки
-
Создайте папку для пользователя:
sudo mkdir -p /mnt/nfs/<directory_name>Укажите
<directory_name>— имя папки. -
Назначьте пользователя владельцем папки:
chown <user_name>:<group_name> <directory_name>Укажите:
<user_name>— имя пользователя;<group_name>— имя первичной группы пользователя, совпадает с именем пользователя;<directory_name>— имя папки.
4. Проверить права пользователя
-
Перейдите в созданную папку:
cd /mnt/nfs/<directory_name>Укажите
<directory_name>— имя папки. -
Проверьте, что пользователь является владельцем папки:
ls -alПример ответа:
drwxr-xr-x 2 firstuser firstuser 22 Jun 14 15:15 .
drwxrwxrwx 3 root root 37 Jun 14 15:14 ..Здесь у пользователя
firstuserи первичной группыfirstuserесть права на чтение, запись и выполнение файлов в папке. Подробнее о формате прав доступа. -
Переключитесь на созданного пользователя:
su <user_name>Укажите
<user_name>— имя пользователя. -
Создайте файл от имени пользователя:
touch file.txt -
Проверьте, что пользователь имеет права доступа к файлу:
ls -alПример ответа:
drwxr-xr-x 2 firstuser firstuser 22 Jun 14 15:15 .
drwxrwxrwx 3 root root 37 Jun 14 15:14 ..
-rw-rw-r-- 1 firstuser firstuser 0 Jun 14 15:15 file.txtЗдесь у пользователя
firstuserи первичной группыfirstuserесть права на чтение и запись файлаfile.txt. Пользовательfirstuserявляется владельцем этого файла. У всех остальных пользователей есть права только на чтение этого файла. Подробнее о формате прав доступа.
Настроить права доступа для группы
Если вы создали файловое хранилище до 9 августа 2024 года, для включения опции разграничения прав на вторичные группы создайте тикет. После включения опции нужно будет отмонтировать и примонтировать его заново. В э той инструкции описана настройка прав доступа для группы к файловому хранилищу с протоколом NFSv4.
Пользователь root может создавать вторичные группы пользователей (Secondary Groups) и выдавать группам права на папки. Все пользователи в группе будут обладать одинаковыми правами доступа. Любой пользователь из группы сможет создавать файлы, а также изменять файлы, которые создал другой пользователь группы.
1. Примонтировать файловое хранилище к серверу
-
Установите пакет для работы с протоколом NFS:
sudo apt install nfs-common -
Создайте папку для монтирования хранилища:
sudo mkdir -p /mnt/nfs -
Примонтируйте файловое хранилище:
sudo mount -vt nfs "<filestorage_ip_address>:/shares/share-<mountpoint_uuid>" /mnt/nfsУкажите:
<filestorage_ip_address>— IP-адрес файлового хранилища. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Файловое хранилище → страница хранилища → вкладка Настройки → поле IP;<mountpoint_uuid>— ID точки монтирования. Можно посмотреть в панели управления: в верхнем меню нажмите Файловое хранилище → страница хранилища → блок Подключение → вкладка GNU/Linux.
2. Создать вторичную группу пользователей
-
Создайте вторичную группу (Secondary Group):
sudo groupadd <group_name> -u <group_id>Укажите:
<group_name>— имя вторичной группы пользователей;- опционально:
<group_id>— ID вторичной группы пользователей, например2000.
-
Добавьте пользователей во вторичную группу:
sudo gpasswd -a <user_name_1> <group_name>
sudo gpasswd -a <user_name_2> <group_name>Укажите:
<user_name_1>и<user_name_2>— имена пользователей;<group_name>— имя вторичной группы пользователей.
Пример ответа:
Adding user firstuser to group users
Adding user seconduser to group usersЗдесь
firstuserиseconduser— имена пользователей. Теперь помимо своей первичной группы оба пользователя добавлены в созданную вторичную группу. -
Проверьте, что пользователи добавлены в группу:
grep <group_name> /etc/groupУкажите
<group_name>— имя вторичной группы пользователей.Пример ответа:
users:x:2002:firstuser,seconduserЗдесь:
users— имя вторичной группы пользователей;2002— ID вторичной группы пользователей;firstuser,seconduser— имена пользователей.
3. Назначить вторичную группу пользователей владельцем папки
-
Создайте папку для вторичной группы пользователей:
sudo mkdir -p /mnt/nfs/<directory_name>Укажите
<directory_name>— имя папки. -
Назначьте группу пользователей владельцем папки:
chown nobody:<group_name> <directory_name>Укажите:
<group_name>— имя вторичной группы пользователей;<directory_name>— имя папки.
-
Установите права чтения, записи и выполнения файлов в папке от имени группы пользователей, которая является владельцем папки (примените setgid):
chmod g+srwx <directory_name>Укажите
<directory_name>— имя папки. -
Запретите доступ на запись и выполнение файлов другим пользователям, не входящим во вторичную группу:
chmod 474 <directory_name>Укажите
<directory_name>— имя папки.
4. Проверить права вторичной группы пользователей
-
Проверьте, что вторичная группа пользователей является владельцем папки:
ls -alПример ответа:
drwxr-xr-x 3 root root 4096 Jun 14 16:10 .
drwxr-xr-x 3 root root 4096 Jun 14 16:07 ..
dr--rwsr-- 2 nobody users 4096 Jun 14 16:10 directoryЗдесь у вторичной группы пользователей
usersесть права на чтение, запись и выполнение файлов в папкеdirectory. У всех остальных пользователей есть права только на чтение файлов в этой папке. Подробнее о формате прав доступа. -
Переключитесь на пользователя, добавленного во вторичную группу:
su <user_name_1>Укажите
<user_name_1>— имя первого пользователя. -
Перейдите в созданную папку:
cd /mnt/nfs/<directory_name>Укажите
<directory_name>— имя папки. -
Создайте файл от имени пользователя:
touch file1.txt -
Проверьте, что пользователь имеет права доступа к файлу:
ls -alПример ответа:
dr--rwsr-- 2 nobody users 4096 Jun 14 16:13 .
drwxr-xr-x 3 root root 4096 Jun 14 16:10 ..
-rw-rw-r-- 1 firstuser users 0 Jun 14 16:13 file1.txtЗдесь у пользователя
firstuserи вторичной группыusersесть права на чтение и запись файлаfile1.txt. Пользовательfirstuserявляется владельцем этого файла. У всех остальных пользо вателей есть права только на чтение этого файла. Подробнее о формате прав доступа. -
Проверьте, что второй пользователь из вторичной группы может создавать файлы в папке и изменять файлы, которые создал первый пользователь группы. Для этого переключитесь на второго пользователя, добавленного в группу:
su <user_name_2>Укажите
<user_name_2>— имя второго пользователя. -
Внесите изменения в файл, который создал первый пользователь:
echo 'anytext' > file1.txt -
Создайте файл от имени второго пользователя:
touch file2.txt -
Проверьте, что пользователь имеет права доступа к файлу:
ls -alПример ответа:
dr--rwsr-- 2 nobody users 4096 Jun 14 16:19 .
drwxr-xr-x 3 root root 4096 Jun 14 16:10 ..
-rw-rw-r-- 1 firstuser users 4 Jun 14 16:19 file1.txt
-rw-rw-r-- 1 seconduser users 0 Jun 14 16:19 file2.txtЗдесь у пользователя
seconduserи вторичной группы users есть права на чтение и запись файловfile1.txtиfile2.txt. Пользовательfirstuserявляется владельцем первого файла, аseconduser— второго. У всех остальных пользователей есть права только на чтение этого файла. Подробнее о формате прав доступа.