🖍 Как сделать учетную запись пользователя с доступом только на чтение в CentOS / RHEL

Вопрос: Как создать учетную запись пользователя, которая не сможет писать ни в один файл в системе?

Другими словами, как создать учетную запись пользователя только для чтения в CentOS/RHEL 7?

Linux не обеспечивает классификацию учетных записей на уровне ролей.

Разрешение доступа контролируется на уровне Inode, что подразумевает разрешения для каждого отдельного файла или каталога в отдельности.

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

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

Это позволяет нам использовать несколько альтернативных методов достижения практически одинакового результата.

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

Создать непривилегированный анонимный аккаунт

Каждый файл или каталог в Linux имеет три набора разрешений на чтение/запись/выполнение, по одному на каждого владельца файла, других пользователей в той же группе, что и первоначальный владелец, и всех остальных.

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

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

# useradd -c 'Mostly R/O Account' roaccount

Roaccount будет иметь уникальный назначенный идентификатор пользователя и идентификатор группы, что заставляет любой файл вне его домашнего каталога контролироваться правами доступа для «других пользователей».

У ОС уже есть учетная запись с наименьшими привилегиями nobody, но эта учетная запись специально обрабатывается системой.

Для использования «только для чтения» рекомендуется отдельный аккаунт.

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

Это можно сделать вручную или установив значение umask процесса создания как минимум 0002 (что блокирует установку «другие пользователи» разрешений на запись).

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

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

Наблюдение может быть установлено на системный вызов write, который срабатывает, когда выполняется конкретным пользователем.

Например, настройка:

# auditctl -a always,exit -S write -F auid=1000

будет вызывать запись логов всякий раз, когда идентификатор пользователя 1000 записывает что-либо в любой файл.

Подсистема audit достаточно выразительна в условиях, которые можно отобразить.

Более подробную документацию можно найти на справочной странице audit.rules.

# man audit.rules

Используйте списки контроля доступа (ACL) для переопределения прав.

Некоторые обработчики файловой системы поддерживают списки управления доступом (ACL), которые имеют более точные разрешения, чем позволяют забыть про владельца/группу/других пользователей.

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

Например, мы хотим предоставить userA, userB и userC доступ только на чтение к каталогу /secret-files/ и ниже.

Мы можем сделать это так:

# setfacl -Rd -m u:userA:rx -m u:userB:rx -m u:userC:rx /secret-files# setfacl -R-m u:userA:rx -m u:userB:rx -m u:userC:rx /secret-files
Первая строка устанавливает ACL по умолчанию, который будет применяться ко всем новым файлам или каталогам, созданным в /secret-files в будущем. Второй файл применяет ACL к любому существующему контенту в дереве /secret-files и ниже.

Более подробную информацию об этой функции можно найти на странице aclman.

# man acl

Отправка комментария

0 Комментарии