Настройки для систем лимитирования и изоляции
Расположение файлов и директорий LimitedFS
Конфигурационные файлы LimitedFS находятся в директории /etc/limitedfs
.
Файловая система и точки монтирования для пользователей находятся в директории /srv/limitedfs
.
Настройка MIN_UID для систем лимитирования и изоляции
LimitedFS, а также система лимитирования, работают с пользователями, UID
которых больше или равен MIN_UID
.
По умолчанию значение MIN_UID
равно 1000
.
Просмотреть или изменить MIN_UID
можно с помощью следующих команд.
Команда задаёт
MIN UID
пользователей для LimitedFS.$ sudo lfsctl --set-min-uid
Команда отображает текущий установленный MIN UID.
$ sudo lfsctl --get-min-uid
Настройка MIN_UID
используется, чтобы разграничить пользователей,
которые должны быть ограничены при помощи систем лимитирования и изоляции,
и пользователей, к которым не должны применяться эти ограничения.
Пользователи, UID
которых меньше чем MIN_UID
, не будут ограничиваться системами лимитирования и изоляции.
Настройка MIN_UID
хранится в бинарном (двоичном) формате в файле /etc/limitedfs/ls.min.uid
.
При этом, если значение MIN_UID
равно значению по умолчанию (1000
), то файл /etc/limitedfs/ls.min.uid
удаляется (не существует).
Изоляция процессов пользователей (PID namespace)
При выключенной изоляции процессов, пользователь может видеть все процессы в системе (работающие как внутри LimitedFS, так и вне её).
Параметр монтирования директории /proc
, называемый hidepid
, позволяет скрыть от пользователя процессы других пользователей.
Параметр hidepid
используется при монтировании /proc
внутри LimitedFS, чтобы пользователь внутри LimitedFS видел только свои процессы.
Но если от имени пользователя работают процессы вне LimitedFS, то такие процессы тоже будут видны этому пользователю, если выполнить команду ps aux
внутри LimitedFS.
Функция изоляции процессов пользователей (PID namespace) предоставляет улучшенную изоляцию (ограничение видимости) процессов пользователя внутри LimitedFS. При включённой изоляции процессов, пользователь внутри LimitedFS видит только те свои процессы, которые работают внутри LimitedFS этого пользователя.
Для включения изоляции процессов выполните следующие команды:
$ sudo touch /etc/limitedfs/pid.ns.enable
$ sudo lfsctl --mount-lfs
Для выключения изоляции процессов выполните следующие команды:
$ sudo rm -f /etc/limitedfs/pid.ns.enable
$ sudo lfsctl --mount-lfs
На текущий момент изоляция процессов пользователей поддерживается в LimitedFS для сервисов su
, ssh
, cron
.
Конфигурационный файл /etc/limitedfs/limitedfs.json
Конфигурационный файл /etc/limitedfs/limitedfs.json
хранит некоторые настройки LimitedFS и имеет следующий вид (ниже показаны значения по умолчанию):
$ sudo cat /etc/limitedfs/limitedfs.json
{
"TmpwatchCmd": "/usr/sbin/tmpwatch -umlq 30d",
"TmpwatchDirs": [],
"TmpwatchDisable": false,
"CleanTmpfs": false,
"UseLdap": false,
"MountOptions": "",
"UseLS": true,
"BlackFilePath": "/usr/bin/false"
}
Описание параметров:
Параметр
TmpwatchCmd
задаёт команду, которая выполняется для очистки временных файлов.Параметр
TmpwatchDirs
хранит список дополнительных директорий для очистки временных файлов. По умолчанию (если указанный список пуст) очищаются директории/tmp
,/var/tmp
,/var/cache/php-eaccelerator
.Параметр
TmpwatchDisable
отключает очистку временных файлов внутри LimitedFS (true
= отключено,false
= включено).Параметр
CleanTmpfs
: Если включён режим создания изолированных директорий пользователей/tmp
внутри директории/tmp
реальной файловой системы (чтобы персональные директории/tmp
пользователей создавались не в домашней директории пользователя, как по умолчанию, а вtmpfs
), то очистка таких директорий/tmp
отключена по умолчанию. Чтобы включить очистку директорий/tmp
наtmpfs
, нужно прописать параметр"CleanTmpfs" : true
.Параметр
UseLdap
не используется и зарезервирован для будущих разработок.Параметр
MountOptions
задаёт опции монтирования директорий внутри LimitedFS. По умолчанию внутри LimitedFS разрешено выполнениеsuid
программ (например,exim
). Однако, это можно изменить, запретив выполнение всехsuid
программ внутри LimitedFS при помощи опции монтированияnosuid
. Для этого используется опцияMountOptions
в конфигурационном файле/etc/limitedfs/limitedfs.json
. В значении этого параметра через запятую перечисляются опции монтирования, которые должны использоваться внутри LimitedFS. Например, для отключения возможности выполненияsuid
программ внутри LimitedFS для опцииMountOptions
нужно указать значениеnosuid
, а затем выполнить командуlfsctl --mount-lfs
для применения изменений. При этом монтирования выполняются с опциейnosuid
, чтобы исключить повышение прав пользователя и повысить безопасность. Повышение прав с помощью битаsetuid
на исполняемых файлах, а также с помощью привилегий Linux (Linux capabilities
) внутри LimitedFS в этом случае будет отключено.Параметр
UseLS
определяет, будет ли выполняться пересоздание лимитированного окружения (LS) при пересоздании контейнера LimitedFS. По умолчанию, значение этого параметра равноtrue
, то есть выполняется пересоздание LS. Значение параметраfalse
отключает пересоздание LS при пересоздании LimitedFS. Использовать значениеfalse
рекомендуется только при наличии проблем в работе LS или LimitedFS. При обычном использовании этот параметр должен иметь значениеtrue
.Параметр
BlackFilePath
задаёт путь к файлу, который будет монтироваться поверх файлов из чёрного списка (при использовании режима моннтированияcustom
).
Для управления параметрами очистки временных файлов рекомендуется использовать соответствующие команды утилиты lfsctl
, а не редактировать конфигурационный
файл /etc/limitedfs/limitedfs.json
напрямую.
Ограничение доступа к устройствам в LimitedFS
По умолчанию в целях безопасности доступ к устройствам внутри LimitedFS ограничен. В LimitedFS пользователю виден только ограниченный набор устройств:
lrwxrwxrwx 1 root root 13 Jul 6 19:51 fd -> /proc/self/fd
crw-rw-rw- 1 root root 1, 7 Jul 6 19:51 full
lrwxrwxrwx 1 root root 28 Jul 6 19:51 log -> /run/systemd/journal/dev-log
crw-rw-rw- 1 root root 1, 3 Jul 6 19:51 null
crw-rw-rw- 1 root tty 5, 2 Jul 6 19:51 ptmx
drwxr-xr-x 2 root root 0 Jul 6 21:00 pts
crw-rw-rw- 1 root root 1, 8 Jul 6 19:51 random
drwxrwxrwx 2 root root 40 Jul 6 21:15 shm
lrwxrwxrwx 1 root root 15 Jul 6 19:51 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Jul 6 19:51 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Jul 6 19:51 stdout -> /proc/self/fd/1
crw-rw-rw- 1 root tty 5, 0 Jul 6 19:51 tty
crw-rw-rw- 1 root root 1, 9 Jul 6 19:51 urandom
crw-rw-rw- 1 root root 1, 5 Jul 6 19:51 zero
В конфигурации LimitedFS по умолчанию директория /dev/shm
(shared memory) изолирована, то есть является персональной для каждого пользователя.
Каждый пользователь видит только своё содержимое директории /dev/shm
и не видит содержимое директории /dev/shm
других пользователей.
Вы можете настраивать размер /dev/shm
(shared memory) внутри LimitedFS. Для этого используется конфигурационный файл /etc/limitedfs/shm.conf
.
В него записываются параметры монтирования для /dev/shm
в следующем виде:
$ sudo bash -c 'echo "mode=0777,size=100m" > /etc/limitedfs/shm.conf'
$ sudo lfsctl --mount-lfs
В примере выше размер /dev/shm
устанавливается в 100 Mb. Строка mode=0777
задаёт права для директории /dev/shm
и должна
присутствовать обязательно для корректной работы. Поскольку разделяемая память /dev/shm
в LimitedFS изолирована
для каждого пользователя, то права 0777
не являются проблемой безопасности.
Вы можете отключить ограничение доступа к устройствам. Для этого нужно добавить монтирование директории /dev
в
LimitedFS целиком, в этом случае пользователям будут видны все устройства, как и в реальной файловой системе:
$ sudo bash -c 'echo "/dev" > /etc/limitedfs/mounts.d/mounts2.conf'
$ sudo lfsctl —mount-lfs
Также можно отключить только изоляцию для директории /dev/shm
, оставив остальные ограничения доступности устройств по умолчанию.
Для этого достаточно добавить монтирование директории /dev/shm
:
$ sudo bash -c 'echo "/dev/shm" > /etc/limitedfs/mounts.d/mounts2.conf'
$ sudo lfsctl --mount-lfs
Если нужно добавить в LimitedFS какое-то конкретное устройство, чтобы у пользователей был к ним доступ, это можно сделать при помощи
конфигурационного файла в директории /etc/limitedfs/symlinks.d
(или директории /etc/limitedfs/files.d
):
$ sudo bash -c "echo '/dev/console' > /etc/limitedfs/symlinks.d/new.conf"
$ sudo lfsctl --mount-lfs