Перейти к основному содержимому
Управлять правами доступа в файловом хранилище на уровне файловой системы
Последнее изменение:

Управлять правами доступа в файловом хранилище на уровне файловой системы

В файловом хранилище с протоколом 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);
  • первый столбец с именами — имена пользователей, которые являются владельцами папки или файла;
  • второй столбец с именами — имена групп, которые являются владельцами папки или файла;
  • последний столбец — имена файлов или директорий.

Настроить права доступа для пользователя

Пользователь root может создавать пользователей и выдавать им права на папки. Если создать пользователя, папку и назначить пользователя владельцем папки, то только у этого пользователя будут полные права на чтение, запись и выполнение файлов в папке.

  1. Примонтируйте файловое хранилище.
  2. Создайте пользователя.
  3. Назначьте пользователя владельцем папки.
  4. Проверьте права пользователя.

1. Примонтировать файловое хранилище к выделенному или облачному серверу

Процесс монтирования зависит от операционной системы на сервере и протокола файлового хранилища: NFSv4 или CIFS SMBv3.

  1. Подключитесь к облачному серверу.

  2. Откройте CLI.

  3. Установите пакет для работы с протоколом NFS:

    sudo apt install nfs-common
  4. Создайте папку для монтирования хранилища:

    sudo mkdir -p /mnt/nfs
  5. Примонтируйте файловое хранилище:

    sudo mount -vt nfs "<filestorage_ip_address>:/shares/share-<mountpoint_uuid>" /mnt/nfs

    Укажите:

    • <filestorage_ip_address> — IP-адрес файлового хранилища. Можно посмотреть в панели управления в разделе Облачная платформаФайловое хранилище → страница хранилища → вкладка Настройки → поле IP;
    • <mountpoint_uuid> — ID точки монтирования. Можно посмотреть в панели управления в разделе Облачная платформаФайловое хранилище → страница хранилища → блок Подключение → вкладка GNU/Linux.

2. Создать пользователя

  1. Создайте пользователя:

    sudo useradd <user_name> -u <user_id>

    Укажите:

    • <user_name> — имя пользователя;
    • опционально: <user_id> — ID пользователя, например 1000.

    Пользователь будет автоматически добавлен в первичную группу (Primary Group) с таким же именем, как у пользователя.

  2. Проверьте, что пользователь создан:

    grep <user_name> /etc/passwd

    Укажите <user_name> — имя пользователя.

    Пример ответа:

    firstuser:x:1000:1000::/home/firstuser:/bin/sh

    Здесь:

    • firstuser — имя пользователя;
    • первое значение 1000 — ID пользователя;
    • второе значение 1000 — ID первичной группы пользователя;
    • /home/firstuser — домашняя папка пользователя.

3. Назначить пользователя владельцем папки

  1. Создайте папку для пользователя:

    sudo mkdir -p /mnt/nfs/<directory_name>

    Укажите <directory_name> — имя папки.

  2. Назначьте пользователя владельцем папки:

    chown <user_name>:<group_name> <directory_name>

    Укажите:

    • <user_name> — имя пользователя;
    • <group_name> — имя первичной группы пользователя, совпадает с именем пользователя;
    • <directory_name> — имя папки.

4. Проверить права пользователя

  1. Перейдите в созданную папку:

    cd /mnt/nfs/<directory_name>

    Укажите <directory_name> — имя папки.

  2. Проверьте, что пользователь является владельцем папки:

    ls -al

    Пример ответа:

    drwxr-xr-x 2 firstuser firstuser 22 Jun 14 15:15 .
    drwxrwxrwx 3 root root 37 Jun 14 15:14 ..

    Здесь у пользователя firstuser и первичной группы firstuser есть права на чтение, запись и выполнение файлов в папке. Подробнее о формате прав доступа.

  3. Переключитесь на созданного пользователя:

    su <user_name>

    Укажите <user_name> — имя пользователя.

  4. Создайте файл от имени пользователя:

    touch file.txt
  5. Проверьте, что пользователь имеет права доступа к файлу:

    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 является владельцем этого файла. У всех остальных пользователей есть права только на чтение этого файла. Подробнее о формате прав доступа.

Настроить права доступа для группы

Пользователь root может создавать вторичные группы пользователей (Secondary Groups) и выдавать группам права на папки. Все пользователи в группе будут обладать одинаковыми правами доступа. Любой пользователь из группы сможет создавать файлы, а также изменять файлы, которые создал другой пользователь группы.

к сведению

Если вы создали файловое хранилище до 9 августа 2024 года, для включения опции разграничения прав на вторичные группы создайте тикет. После включения опции нужно будет отмонтировать и примонтировать его заново.

  1. Примонтируйте файловое хранилище.
  2. Создайте вторичную группу пользователей.
  3. Назначьте вторичную группу пользователей владельцем папки.
  4. Проверьте права вторичной группы пользователей.

1. Примонтировать файловое хранилище к выделенному или облачному серверу

Процесс монтирования зависит от операционной системы на сервере и протокола файлового хранилища: NFSv4 или CIFS SMBv3.

  1. Подключитесь к облачному серверу.

  2. Откройте CLI.

  3. Установите пакет для работы с протоколом NFS:

    sudo apt install nfs-common
  4. Создайте папку для монтирования хранилища:

    sudo mkdir -p /mnt/nfs
  5. Примонтируйте файловое хранилище:

    sudo mount -vt nfs "<filestorage_ip_address>:/shares/share-<mountpoint_uuid>" /mnt/nfs

    Укажите:

    • <filestorage_ip_address> — IP-адрес файлового хранилища. Можно посмотреть в панели управления в разделе Облачная платформаФайловое хранилище → страница хранилища → вкладка Настройки → поле IP;
    • <mountpoint_uuid> — ID точки монтирования. Можно посмотреть в панели управления в разделе Облачная платформаФайловое хранилище → страница хранилища → блок Подключение → вкладка GNU/Linux.

2. Создать вторичную группу пользователей

  1. Создайте вторичную группу (Secondary Group):

    sudo groupadd <group_name> -u <group_id>

    Укажите:

    • <group_name> — имя вторичной группы пользователей;
    • опционально: <group_id> — ID вторичной группы пользователей, например 2000.
  2. Добавьте пользователей во вторичную группу:

    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 — имена пользователей. Теперь помимо своей первичной группы оба пользователя добавлены в созданную вторичную группу.

  3. Проверьте, что пользователи добавлены в группу:

    grep <group_name> /etc/group

    Укажите <group_name> — имя вторичной группы пользователей.

    Пример ответа:

    users:x:2002:firstuser,seconduser

    Здесь:

    • users — имя вторичной группы пользователей;
    • 2002 — ID вторичной группы пользователей;
    • firstuser, seconduser — имена пользователей.

3. Назначить вторичную группу пользователей владельцем папки

  1. Создайте папку для вторичной группы пользователей:

    sudo mkdir -p /mnt/nfs/<directory_name>

    Укажите <directory_name> — имя папки.

  2. Назначьте группу пользователей владельцем папки:

    chown nobody:<group_name> <directory_name>

    Укажите:

    • <group_name> — имя вторичной группы пользователей;
    • <directory_name> — имя папки.
  3. Установите права чтения, записи и выполнения файлов в папке от имени группы пользователей, которая является владельцем папки (примените setgid):

    chmod g+srwx <directory_name>

    Укажите <directory_name> — имя папки.

  4. Запретите доступ на запись и выполнение файлов другим пользователям, не входящим во вторичную группу:

    chmod 474 <directory_name>

    Укажите <directory_name> — имя папки.

4. Проверить права вторичной группы пользователей

  1. Проверьте, что вторичная группа пользователей является владельцем папки:

    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. У всех остальных пользователей есть права только на чтение файлов в этой папке. Подробнее о формате прав доступа.

  2. Переключитесь на пользователя, добавленного во вторичную группу:

    su <user_name_1>

    Укажите <user_name_1> — имя первого пользователя.

  3. Перейдите в созданную папку:

    cd /mnt/nfs/<directory_name>

    Укажите <directory_name> — имя папки.

  4. Создайте файл от имени пользователя:

    touch file1.txt
  5. Проверьте, что пользователь имеет права доступа к файлу:

    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 является владельцем этого файла. У всех остальных пользователей есть права только на чтение этого файла. Подробнее о формате прав доступа.

  6. Проверьте, что второй пользователь из вторичной группы может создавать файлы в папке и изменять файлы, которые создал первый пользователь группы. Для этого переключитесь на второго пользователя, добавленного в группу:

    su <user_name_2>

    Укажите <user_name_2> — имя второго пользователя.

  7. Внесите изменения в файл, который создал первый пользователь:

    echo 'anytext' > file1.txt
  8. Создайте файл от имени второго пользователя:

    touch file2.txt
  9. Проверьте, что пользователь имеет права доступа к файлу:

    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 — второго. У всех остальных пользователей есть права только на чтение этого файла. Подробнее о формате прав доступа.