Настройка списков
Настройка списка системных пользователей
Пользователи, 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
,
а также в конфигурационных файлах в директориях /etc/limitedfs/files.d
и /etc/limitedfs/symlinks.d
. Эти конфигурационные файлы
вместе формируют «белый список» директорий и файлов, которые доступны пользователям внутри LimitedFS.
Также есть «чёрный список» директорий (empty dirs
), который позволяет скрыть содержимое любой директории (или поддиректории)
внутри директорий из «белого списка».
«Чёрный список» директорий хранится в конфигурационных файлах по пути /etc/limitedfs/empty-dirs.d
.
Директория /etc/limitedfs/empty-dirs.d
может содержать любое число конфигурационных файлов, которые содержат
пути к директориям, которые надо скрыть из LimitedFS.
При указании путей в этих конфигурационных файлах можно использовать маски (wildcards).
Для скрытия содержимого директории, поверх неё автоматически монтируется пустая директория с помощью 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
Далее приведён пример использования масок (wildcards).
Чтобы запретить пользователям доступ внутри LimitedFS к некоторым директориям внутри /usr/lib
,
нужно выполнить команды:
$ sudo bash -c "echo '/usr/lib/sys*' > /etc/limitedfs/empty-dirs.d/new.conf"
$ sudo lfsctl --mount-lfs
После выполнения этих команд доступ к следующим директориям внутри LimitedFS будет запрещён:
/usr/lib/sysctl.d
/usr/lib/sysimage
/usr/lib/systemd
/usr/lib/sysusers.d
Предупреждение
Использовать маски при указании путей в конфигурационных файлах нужно осторожно, поскольку со временем в реальной файловой системе могут появиться новые файлы и директории, которые могут удовлетворять маске. В результате, ограничение доступа, или наоборот, предоставление доступа, может затронуть файлы и директории, которых не было на момент создания конфигурационных файлов.
Чёрный список файлов
Директория /etc/limitedfs/empty-files.d
может содержать произвольное число конфигурационных файлов, которые содержат пути к файлам,
доступ к которым должен быть запрещён внутри LimitedFS. Каждая строка файла должна иметь следующий вид:
path,mode
path
– это абсолютный путь к файлу, доступ к которому нужно запретить;mode
– это строка, которая задаёт режим ограничения доступа:custom
,perm
илиfalse
.
Например:
/usr/sbin/fdisk,false
/usr/sbin/swapon,perm
/usr/sbin/useradd,custom
В режиме perm
поверх пути path
монтируется пустой файл с правами 0
(все операции запрещены) и владельцем и группой root:root
.
В результате, при попытке доступа к файлу, пользователь получает ошибку прав доступа Permission denied
.
В режиме false
поверх пути path
монтируется бинарный исполняемый файл /usr/bin/false
.
В результате, когда пользователь запускает файл (команду) path
, на самом деле будет запущена утилита /usr/bin/false
,
поэтому никаких существенных действий выполнено не будет и процесс вернёт ошибочный код завершения.
В режиме custom
поверх пути path
монтируется файл, заданный в параметре BlackFilePath
конфигурационного файла /etc/limitedfs/limitedfs.json
.
В результате, когда пользователь запускает файл (команду) path
, на самом деле будет запущена утилита, указанная в параметре BlackFilePath
.
Таким способом можно смонтировать, например, скрипт для логирования попыток доступа к файлам из чёрного списка:
$ sudo cat /etc/limitedfs/limitedfs.json
{ "BlackFilePath": "/root/black-file-logger.sh" }
$ sudo cat /root/black-file-logger.sh
#!/bin/bash
/usr/bin/logger "${0} file executed"
exit 1
Режим false
следует использовать для ограничения доступа к исполняемым файлам, а режим perm
подходит
для ограничения доступа к любым файлам (и исполняемым, и файлам данных).
После изменения файлов конфигурации в директории /etc/limitedfs/empty-files.d
для применения изменений, следует выполнить следующую команду:
$ sudo lfsctl --mount-lfs
При указании путей в конфигурационных файлах черного списка файлов, можно использовать маски (wildcards). Например, чтобы внутри LimitedFS запретить пользователям запускать /usr/sbin/fdformat и /usr/sbin/fdisk, можно выполнить команды:
$ sudo bash -c "echo '/usr/sbin/fd*,false' > /etc/limitedfs/empty-files.d/new.conf"
$ sudo lfsctl --mount-lfs
Предупреждение
Использовать маски при указании путей в конфигурационных файлах нужно осторожно, поскольку со временем в реальной файловой системе могут появиться новые файлы и директории, которые могут удовлетворять маске. В результате, ограничение доступа, или наоборот, предоставление доступа, может затронуть файлы и директории, которых не было на момент создания конфигурационных файлов.
Белый список файлов и директорий
Директория /etc/limitedfs/files.d
может содержать произвольное число конфигурационных файлов. Эти файлы содержат пути к файлам и директориям, которые должны
быть видны в LimitedFS. При указании путей в этих конфигурационных файлах можно использовать маски (wildcards).
Если путь, указанный в конфигурационном файле внутри директории /etc/limitedfs/files.d
,
является файлом или символической ссылкой, то такой путь копируется внутрь LimitedFS.
Если же путь является директорией, то такой путь монтируется внутрь LimitedFS с параметром ro
(только для чтения).
Использование монтирования вместо копирования позволяет оптимизировать процесс формирования 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
Маски файлов можно использовать следующим образом:
$ sudo bash -c "echo '/etc/vi*' > /etc/limitedfs/files.d/new.conf"
$ sudo lfsctl --update
После выполнения этих команд доступ к следующим файлам внутри LimitedFS будет разрешён:
/etc/vimrc
/etc/virc
Чтобы добавить эту маску в исключения, требуется посимвольное совпадение маски:
$ sudo bash -c "echo '-/etc/vi*' > /etc/limitedfs/files.d/new2.conf"
$ sudo lfsctl --update
А вот так исключение не сработает (нет посимвольного совпадения):
$ sudo bash -c "echo '-/etc/vi*c' > /etc/limitedfs/files.d/new2.conf"
$ 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
(только для чтения).
Использование монтирования вместо копирования позволяет оптимизировать процесс формирования 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. При указании путей в этих конфигурационных файлах можно использовать маски (wildcards).
Пути, на которые указывают такие символические ссылки, не добавляются в LimitedFS, то есть переход по ним не происходит.
Предполагается, что путь, на который указывает символическая ссылка, уже добавлен в LimitedFS каким-либо другим способом. В этом
состоит отличие конфигурационной директории /etc/limitedfs/symlinks.d
от директории /etc/limitedfs/files.d
,
где переход по символическим ссылкам выполняется (путь, на который указывает символическая ссылка,
целиком добавляется в LimitedFS, т.е. cтановится виден в LimitedFS).
Предупреждение
Использовать маски при указании путей в конфигурационных файлах нужно осторожно, поскольку со временем в реальной файловой системе могут появиться новые файлы и директории, которые могут удовлетворять маске. В результате, ограничение доступа, или наоборот, предоставление доступа, может затронуть файлы и директории, которых не было на момент создания конфигурационных файлов.