Настройки для систем лимитирования и изоляции

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