---
title: 'Управлять правами доступа в файловом хранилище на уровне файловой системы'
sidebar_label: 'Управлять правами доступа на уровне файловой системы'
sidebar_position: 3
description: 'Как управлять правами доступа к файлам и папкам в файловом хранилище на уровне файловой системы'
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import MountStorageToCloudServer from '@site/docs/_partials/file-storage/mount-storage-to-cloud-server.mdx'

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

:::info

В этой инструкции описаны настройки прав доступа к файловому хранилищу для облачного сервера с ОС на базе Linux.

:::

В файловом хранилище с протоколом NFSv4 можно управлять правами доступа к файлам и папкам на уровне файловой системы.

## Принцип работы \{#principle-of-operation}

Файлы и папки в файловом хранилище с протоколом NFSv4 поддерживают стандартное разграничение прав доступа как в Unix-системах. Доступ на чтение, запись и выполнение файлов реализован через Identity Mapping (IDM) — права доступа проверяются на основе ID пользователя и ID группы пользователей.

Группа пользователей — это пользователи с одинаковыми правами доступа. Группы делятся на два типа:

* первичная группа (Primary Group) – группа, которую операционная система присваивает пользователю;
* вторичная группа (Secondary Group) — одна или несколько групп, к которым также принадлежит пользователь.

Каждого пользователя можно добавить максимум в 16 групп: в одну первичную и 15 вторичных групп.

По умолчанию права на чтение, запись и выполнение файлов есть только у пользователя `root`. У остальных пользователей есть права только на чтение. От имени `root` можно [настроить права доступа к папкам и файлам для пользователей](#configure-permissions-for-user) и для [групп пользователей](#configure-permissions-for-group).

## Формат прав доступа \{#permission-formats}

Пример прав доступа:

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

## Настроить права доступа для пользователя \{#configure-permissions-for-user}

:::info

В этой инструкции описана настройка прав доступа пользователей к файловому хранилищу с протоколом NFSv4.

:::

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

1. [Примонтируйте файловое хранилище](#mount-file-storage-for-user-permissions).

2. [Создайте пользователя](#create-user).

3. [Назначьте пользователя владельцем папки](#set-user-as-owner).

4. [Проверьте права пользователя](#check-user-permissions).

### 1. Примонтировать файловое хранилище к серверу \{#mount-file-storage-for-user-permissions}

1. [Подключитесь к облачному серверу](/cloud-servers/manage/connect-to-server.mdx) или [выделенному серверу](/dedicated/manage/connect-to-server.mdx).

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

   ```bash
   sudo apt install nfs-common
   ```

3. Создайте папку для монтирования хранилища:

   ```bash
   sudo mkdir -p /mnt/nfs
   ```

4. Примонтируйте файловое хранилище:

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

   Укажите:

   * `<filestorage_ip_address>` — IP-адрес файлового хранилища. Можно посмотреть в [панели управления](https://my.selectel.ru/vpc/default/file-storage/): в верхнем меню нажмите **Продукты** → **Файловое хранилище** → страница хранилища → вкладка **Настройки** → поле **IP**;
   * `<mountpoint_uuid>` — ID точки монтирования. Можно посмотреть в [панели управления](https://my.selectel.ru/vpc/default/file-storage/): в верхнем меню нажмите **Файловое хранилище** → страница хранилища → блок **Подключение** → вкладка **GNU/Linux**.

### 2. Создать пользователя \{#create-user}

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

   ```bash
   sudo useradd <user_name> -u <user_id>
   ```

   Укажите:

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

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

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

   ```bash
   grep <user_name> /etc/passwd
   ```

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

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

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

   Здесь:

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

### 3. Назначить пользователя владельцем папки \{#set-user-as-owner}

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

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

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

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

   ```bash
   chown <user_name>:<group_name> <directory_name>
   ```

   Укажите:

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

### 4. Проверить права пользователя \{#check-user-permissions}

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

   ```bash
   cd /mnt/nfs/<directory_name>
   ```

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

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

   ```bash
   ls -al
   ```

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

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

   Здесь у пользователя `firstuser` и первичной группы `firstuser` есть права на чтение, запись и выполнение файлов в папке. Подробнее о [формате прав доступа](#permission-formats).

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

   ```bash
   su <user_name>
   ```

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

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

   ```bash
   touch file.txt
   ```

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

   ```bash
   ls -al
   ```

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

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

## Настроить права доступа для группы \{#configure-permissions-for-group}

:::info

Если вы создали файловое хранилище до 9 августа 2024 года, для включения опции разграничения прав на вторичные группы [создайте тикет](https://my.selectel.ru/tickets/create/). После включения опции нужно будет отмонтировать и примонтировать его заново. В этой инструкции описана настройка прав доступа для группы к файловому хранилищу с протоколом NFSv4.

:::

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

1. [Примонтируйте файловое хранилище](#mount-file-storage-for-group-permissions).

2. [Создайте вторичную группу пользователей](#create-group).

3. [Назначьте вторичную группу пользователей владельцем папки](#set-group-as-owner).

4. [Проверьте права вторичной группы пользователей](#check-group-permissions).

### 1. Примонтировать файловое хранилище к серверу \{#mount-file-storage-for-group-permissions}

1. [Подключитесь к облачному серверу](/cloud-servers/manage/connect-to-server.mdx) или [выделенному серверу](/dedicated/manage/connect-to-server.mdx).

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

   ```bash
   sudo apt install nfs-common
   ```

3. Создайте папку для монтирования хранилища:

   ```bash
   sudo mkdir -p /mnt/nfs
   ```

4. Примонтируйте файловое хранилище:

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

   Укажите:

   * `<filestorage_ip_address>` — IP-адрес файлового хранилища. Можно посмотреть в [панели управления](https://my.selectel.ru/vpc/default/file-storage/): в верхнем меню нажмите **Продукты** → **Файловое хранилище** → страница хранилища → вкладка **Настройки** → поле **IP**;
   * `<mountpoint_uuid>` — ID точки монтирования. Можно посмотреть в [панели управления](https://my.selectel.ru/vpc/default/file-storage/): в верхнем меню нажмите **Файловое хранилище** → страница хранилища → блок **Подключение** → вкладка **GNU/Linux**.

### 2. Создать вторичную группу пользователей \{#create-group}

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

   ```bash
   sudo groupadd <group_name> -u <group_id>
   ```

   Укажите:

   * `<group_name>` – имя вторичной группы пользователей;
   * опционально: `<group_id>` – ID вторичной группы пользователей, например `2000`.

2. Добавьте пользователей во вторичную группу:

   ```bash
   sudo gpasswd -a <user_name_1> <group_name>
   sudo gpasswd -a <user_name_2> <group_name>
   ```

   Укажите:

   * `<user_name_1>` и `<user_name_2>` – имена пользователей;
   * `<group_name>` – имя вторичной группы пользователей.

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

   ```bash
   Adding user firstuser to group users
   Adding user seconduser to group users
   ```

   Здесь `firstuser` и `seconduser` — имена пользователей. Теперь помимо своей первичной группы оба пользователя добавлены в созданную вторичную группу.

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

   ```bash
   grep <group_name> /etc/group
   ```

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

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

   ```bash
   users:x:2002:firstuser,seconduser
   ```

   Здесь:

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

### 3. Назначить вторичную группу пользователей владельцем папки \{#set-group-as-owner}

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

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

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

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

   ```bash
   chown nobody:<group_name> <directory_name>
   ```

   Укажите:

   * `<group_name>` – имя вторичной группы пользователей;
   * `<directory_name>` – имя папки.

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

   ```bash
   chmod g+srwx <directory_name>
   ```

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

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

   ```bash
   chmod 474 <directory_name>
   ```

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

### 4. Проверить права вторичной группы пользователей \{#check-group-permissions}

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

   ```bash
   ls -al
   ```

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

   ```bash
   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`. У всех остальных пользователей есть права только на чтение файлов в этой папке. Подробнее о [формате прав доступа](#permission-formats).

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

   ```bash
   su <user_name_1>
   ```

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

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

   ```bash
   cd /mnt/nfs/<directory_name>
   ```

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

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

   ```bash
   touch file1.txt
   ```

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

   ```bash
   ls -al
   ```

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

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

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

   ```bash
   su <user_name_2>
   ```

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

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

   ```bash
   echo 'anytext' > file1.txt
   ```

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

   ```bash
   touch file2.txt
   ```

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

   ```bash
   ls -al
   ```

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

   ```bash
   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` – второго. У всех остальных пользователей есть права только на чтение этого файла. Подробнее о [формате прав доступа](#permission-formats).

<Formbricks />
