Настройка списков

Настройка списка системных пользователей

Пользователи, UID которых менее 1000, считаются системными и к ним не применяется изоляция. Однако, бывают случаи, когда системный пользователь, под которым работает какой-то системный сервис или база данных, имеет UID больше 1000. Для таких случаев предусмотрена возможность отключения LimitedFS для системных пользователей, указав имя такого пользователя в конфигурационном файле.

Для этих целей существует директория /etc/limitedfs/exclude-users.d, которая может содержать произвольное число конфигурационных файлов. Эти файлы содержат список имён системных пользователей, которые используются системными службами и не должны быть изолированы от основной системы. В каждой строке указывается одно имя пользователя. Файл /etc/limitedfs/exclude-users.d/system-users.conf содержит следующий список системных пользователей по умолчанию:

nobody
nfsnobody
exim
mysql
postgres
systemd-bus-proxy
systemd-network
systemd-coredump
systemd-oom
roundcube_sysuser
avahi-autoipd
clamav
colord
varnish
nagios
saslauth
apache
lsadm
nginx
unbound
polkitd
firebird
libstoragemgmt
dovecot
dovenull
saslauthd
chrony
sssd
setroubleshoot
pipewire
openvpn
nm-openvpn
nm-openconnect
dnsmasq

Администратор может изменить список системных пользователей, добавив новые имена пользователей или удалив существующие. Для этого нужно создать новый файл в директории /etc/limitedfs/exclude-users.d. Редактировать существующий файл /etc/limitedfs/exclude-users.d/system-users.conf, который содержит список системных пользователей по умолчанию и может изменяться при обновлении rpm-пакета limited-fs, не нужно.

Например, чтобы добавить нового системного пользователя sysuser в список, необходимо создать файл /etc/limitedfs/exclude-users.d/users2.conf со следующим содержимым:

sysuser

Если строка файла начинается со знака минус (-), то имя пользователя игнорируется, даже если присутствует в другом файле конфигурации. Поэтому, чтобы удалить системного пользователя postgres из списка по умолчанию, нужно создать файл /etc/limitedfs/exclude-users.d/users2.conf со следующим содержимым:

-postgres

Чёрный список директорий

Директории, доступные в LimitedFS, перечислены в конфигурации монтирований внутри директории /etc/limitedfs/mounts.d. Это «белый список» директорий, который был описан ранее. Также есть «чёрный список» директорий (empty dirs), который позволяет скрыть содержимое любой директории (или поддиректории) внутри директорий из «белого списка». «Чёрный список» директорий хранится в конфигурационных файлах по пути /etc/limitedfs/empty-dirs.d. Директория /etc/limitedfs/empty-dirs.d может содержать любое число конфигурационных файлов, которые содержат пути к директориям, которые надо скрыть из LimitedFS. Для скрытия содержимого директории, поверх неё автоматически монтируется пустая директория с помощью mount --bind.

Существует файл с чёрным списком директорий по умолчанию — /etc/limitedfs/empty-dirs.d/empty-dirs.conf. Этот файл сейчас пустой, в будущем в него, возможно, будут добавлены пути, которые нужно скрыть по умолчанию. Этот файл конфигурации перезаписывается при каждом обновлении rpm-пакета limited-fs, поэтому редактировать его нельзя. Для изменения конфигурации нужно создать новый файл, например /etc/limitedfs/empty-dirs.d/empty-dirs-new.conf.

Например, чтобы скрыть в LimitedFS директорию /opt/rh, нужно создать конфигурационный файл со следующим содержимым:

/opt/rh

Если указать в начале строки файла конфигурации знак минус (-), то путь из этой строки файла не будет скрыт, даже если этот путь указан в другом файле конфигурации (например, в файле конфигурации по умолчанию):

-/opt/rh

После изменения настроек «белого» или «чёрного» списка нужно выполнить следующую команду для применения изменений:

$ sudo lfsctl  --mount-lfs

Чёрный список файлов

Директория /etc/limitedfs/empty-files.d может содержать произвольное число конфигурационных файлов, которые содержат пути к файлам, доступ к которым должен быть запрещён внутри LimitedFS. Каждая строка файла должна иметь следующий вид:

path,mode
  • path – это абсолютный путь к файлу, доступ к которому нужно запретить;

  • mode – это строка, которая задаёт режим ограничения доступа: perm или false.

Например:

/usr/sbin/fdisk,false
/usr/sbin/swapon,perm

В режиме perm поверх пути path монтируется пустой файл с правами 0 (все операции запрещены) и владельцем и группой root:root. В результате, при попытке доступа к файлу, пользователь получает ошибку прав доступа Permission denied.

В режиме false поверх пути path монтируется бинарный исполняемый файл /usr/bin/false. В результате, когда пользователь запускает файл (команду) path, на самом деле будет запущена утилита /usr/bin/false, поэтому никаких существенных действий выполнено не будет и процесс верн`т ошибочный код завершения.

Режим false следует использовать для ограничения доступа к исполняемым файлам, а режим perm подходит для ограничения доступа к любым файлам (и исполняемым, и файлам данных).

После изменения файлов конфигурации в директории /etc/limitedfs/empty-files.d для применения изменений, следует выполнить следующую команду:

$ sudo lfsctl  --mount-lfs

Белый список файлов и директорий

Директория /etc/limitedfs/files.d может содержать произвольное число конфигурационных файлов. Эти файлы содержат пути к файлам и директориям, которые должны быть видны в LimitedFS. Если путь, указанный в конфигурационном файле внутри директории /etc/limitedfs/files.d, является файлом или символической ссылкой, то такой путь копируется внутрь LimitedFS. Если же путь является директорией, то такой путь монтируется внутрь LimitedFS с параметрами ro,nosuid (только для чтения, без возможности запуска suid программ). Использование монтирования вместо копирования позволяет оптимизировать процесс формирования LimitedFS, а также автоматически поддерживает актуальность содержимого смонтированных директорий внутри LimitedFS (нет рассинхронизации с содержимым директории в реальной файловой системе). А файлы, которые скопированы внутрь LimitedFS, обновляются (синхронизируются с реальной файловой системой) командой lfsctl --update, которая выполняется раз в сутки по заданию крон. Также эта команда обновляет персональные файлы /etc/passwd, /etc/group, /etc/shadow, /etc/gshadow для всех пользователей.

Директория /etc/limitedfs/files.d содержит файлы конфигурации, которые содержат пути к файлам и директориям, доступными по умолчанию в LimitedFS. Эти конфигурационные файлы перезаписываются при обновлении rpm-пакета limited-fs. Поэтому для изменнения настроек по умолчанию, нужно не редактировать эти файлы, а создать новые файлы конфигурвции в директории /etc/limitedfs/files.d.

Администратор может изменить белый список файлов и директорий, которые будут видны внутри LimitedFS. Для этого нужно создать новый файл в директории /etc/limitedfs/files.d.

Например, чтобы добавить файл /etc/zshrc в LimitedFS, необходимо создать файл /etc/limitedfs/files.d/custom.conf со следующим содержимым:

/etc/zshrc

Если строка файла начинается со знака минус (-), то путь из этой строки игнорируется, даже если присутствует в другом файле конфигурации. Поэтому, чтобы удалить файл /etc/vimrc из LimitedFS, нужно создать файл /etc/limitedfs/files.d/custom.conf со следующим содержимым:

-/etc/vimrc

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

$ sudo lfsctl  --update

Изоляция директории /etc для пользователей

По умолчанию в LimitedFS директория /etc изолирована таким образом, что каждый пользователь имеет свои собственные файлы /etc/passwd, /etc/group, /etc/shadow, /etc/gshadow, отличные от этих файлов в реальной корневой файловой системе. В этих файлах присутствуют системные пользователи и группы, которые указаны в конфигурационных файлах в директориях /etc/limitedfs/etc-users.d (список системных пользователей) и /etc/limitedfs/etc-groups.d (список системных групп). В персональном файле /etc/passwd пользователя присутствует сам пользователь (или несколько пользователей с таким же UID, в случае, когда такие есть). Других пользователей в /etc/passwd нет. В персональном файле /etc/group для пользователя кроме системных групп есть группы, в которые входит этот пользователь (или какие-либо пользователи с таким же UID, если такие есть). В списках членов групп перечислены только такие пользователи, даже если в файле /etc/group в реальной системе в группу входит много других пользователей. Файлы /etc/shadow и /etc/gshadow в LimitedFS заменены на файлы-заглушки, поскольку пользователь не имеет прав на их чтение, следовательно содержимое файлов внутри LimitedFS пользователя не имеет значение.

Директория /etc внутри LimitedFS содержит только ограниченное подмножество файлов из директории /etc реальной файловой системы. Список файлов и директорий, которые должны быть в директории /etc внутри LimitedFS, приводится в конфигурационных файлах в директории /etc/limitedfs/files.d. Каждый путь должен быть абсолютным (начинаться с /).

Если путь, указанный в конфигурационном файле внутри директории /etc/limitedfs/files.d, является файлом или символической ссылкой, то такой путь копируется внутрь LimitedFS. Если же путь является директорией, то такой путь монтируется внутрь LimitedFS с опциями ro,nosuid (только для чтения, без возможности запуска suid программ). Использование монтирования вместо копирования позволяет оптимизировать процесс формирования LimitedFS, а также автоматически поддерживает актуальность содержимого смонтированных директорий внутри LimitedFS (нет рассинхронизации с содержимым директории в реальной файловой системе). А файлы, которые скопированы внутрь LimitedFS, обновляются (синхронизируются с реальной файловой системой) командой lfsctl --update, которая выполняется раз в сутки по заданию крон. Также, эта команда обновляет персональные файлы /etc/passwd, /etc/group, /etc/shadow, /etc/gshadow для всех пользователей.

По умолчанию директория /etc не указана в конфигурационных файлах монтирований внутри директории /etc/limitedfs/mounts.d. В этом случае изоляция директории /etc включена и выполняется формирование содержимого директории /etc внутри LimitedFS, как описано выше. Если же директория /etc указана в конфигурационных файлах монтирований внутри директории /etc/limitedfs/mounts.d, то изоляция (формирование персональных директорий) /etc для пользователей внутри LimitedFS отключается. При этом внутрь LimitedFS монтируется директория /etc из реальной файловой системы целиком, что менее правильно с точки зрения безопасности.

Для того, чтобы выключить изоляцию /etc, нужно создать файл внутри директории /etc/limitedfs/mounts.d, например /etc/limitedfs/mounts.d/mounts2.conf, добавить в него строку !/etc и затем выполнить команду lfsctl  --mount-lfs. Включить изоляцию /etc обратно можно, удалив этот файл и выполнив команду lfsctl  --mount-lfs.