Настройки для систем лимитирования и изоляции
Расположение файлов и директорий 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