Настройка списков
Настройка списка системных пользователей
Пользователи, 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
.
Конфигурационная директория /etc/limitedfs/symlinks.d
Директория /etc/limitedfs/symlinks.d
может содержать произвольное число конфигурационных файлов, которые содержат пути к символическим ссылкам,
которые должны быть видны в LimitedFS. Пути, на которые указывают такие символические ссылки, не добавляются в LimitedFS, то есть переход по ним не происходит.
Предполагается, что путь, на который указывает символическая ссылка, уже добавлен в LimitedFS каким-либо иным способом. В этом
состоит отличие конфигурационной директории /etc/limitedfs/symlinks.d
от директории /etc/limitedfs/files.d
, где переход по символическим ссылкам выполняется
(путь, на который указывает символическая ссылка, целиком добавляется в LimitedFS, т.е. cтановится виден в LimitedFS).