Настройки монтирований

Настройка монтирований LimitedFS

Для управления системой изоляции используются конфигурационные файлы, расположенные внутри директории /etc/limitedfs. Список монтирований задаёт множество директорий, которые монтируются из реальной системы в LimitedFS и будут доступны пользователю внутри LimitedFS. Помимо директорий, указанных в конфигурационных файлах монтирований, пользователю внутри LimitedFS доступны его домашняя директория и директория /var/www/php-bin/$USERNAME (если она существует).

Директория /etc/limitedfs/mounts.d может содержать произвольное число конфигурационных файлов, которые содержат пути к директориям, которые монтируются в LimitedFS. Эти директории будут доступны пользователям в LimitedFS. В каждой строке файла указывается только один путь монтирования. Директории, не существующие в реальной системе, игнорируются (не монтируются). Список файлов в директории /etc/limitedfs/mounts.d сортируется по алфавиту перед загрузкой. Если один и тот же путь содержится в нескольких файлах, то будет использован путь из файла, который загружен последним (по алфавиту).

Внутри директории /etc/limitedfs/mounts.d есть файл mounts.conf, который содержит список монтирований по умолчанию, доступных пользователю. Содержимое файла выглядит следующим образом:

!/bin
/dev
!/etc
!/lib
!/lib64
/opt
/run
!/sbin
!/usr
/var
@/tmp,700
@/var/tmp,700
@/var/run/screen,777
@/var/php/apm/db,777
@/var/cache/php-eaccelerator,777

При желании администратор может изменить список монтирований, добавив новые пути или удалив существующие. Для этого нужно создать новый файл в директории /etc/limitedfs/mounts.d. Редактировать существующий файл /etc/limitedfs/mounts.d/mounts.conf, который содержит список монтирований по умолчанию и может изменяться при обновлении rpm-пакета limited-fs, не нужно!

Все монтирования выполняются с опцией nosuid, чтобы исключить повышение прав пользователем и повысить безопасность. Повышение прав с помощью бита setuid на исполняемых файлах, а также с помощью привилегий Linux (Linux capabilities) внутри LimitedFS отключено. По умолчанию директории монтируются с доступом для чтения и записи (read-write). Если же строка файла монтирований начинается с восклицательного знака (!), то директория, указанная в строке, монтируется в LimitedFS только для чтения (read-only), что дополнительно повышает безопасность, исключая модификацию файлов пользователем даже в случае некорректных прав на файлы и директории. Строки, которые начинаются с символа (#), считаются комментариями (игнорируются). Если путь к директории начинается со знака минус (-), то такая директория не монтируется в LimitedFS, даже если указана в каком-либо другом конфигурационном файле в директории /etc/limitedfs/mounts.d. Таким образом, чтобы убрать, например, путь /sbin (который есть в списке монтирований по умолчанию) из списка монтирований, достаточно создать файл /etc/limitedfs/mounts.d/mounts2.conf со следующим содержимым:

-/sbin

Допустим, нужно переопределить параметры монтирования для пути /opt, чтобы этот путь монтировался не для чтения и записи как в конфигурации по умолчанию (read-write), а только для чтения (read-only). Для этого достаточно добавить в созданный файл /etc/limitedfs/mounts.d/mounts2.conf следующую строку:

!/opt

Чтобы применить изменения конфигурации монтирований, нужно выполнить следующую команду:

$ sudo ,lfsctl  --mount-lfs

Персональные монтирования пользователя

В LimitedFS каждый пользователь может иметь свои персональные монтирования, доступные только ему и недоступные для других пользователей. Например, домашняя директория пользователя является персональным монтированием этого пользователя и она не видна для других пользователей. Домашняя директория пользователя монтируется в LimitedFS всегда, это поведение нельзя изменить.

В LimitedFS можно создавать дополнительные персональные монтирования для пользователей при помощи конфигурационного файла монтирований, который был описан ранее. Строка персонального монтирования в конфигурационном файле начинается с символа @, после которого указывается путь к директории (монтированию), а затем через запятую указываются права этой директории в восьмеричной форме. Для таких монтирований владельцем и группой владельца является сам пользователь и первичная группа этого пользователя соответственно.

Например, строка @/tmp,700 создаёт в LimitedFS персональную изолированную директорию /tmp для каждого пользователя, которая будет доступна только самому пользователю.

$ ls -ld /tmp
drwx------. 2 user2111 user2111 6 июл 18 09:26 /tmp

По умолчанию в LimitedFS пользователи имеют следующие персональные, изолированные директории (помимо домашней директории):

@/tmp,700
@/var/tmp,700
@/var/run/screen,777
@/var/php/apm/db,777
@/var/cache/php-eaccelerator,777

Если какого-либо пути, указанном в файле монтирований, не существует в реальной файловой системе, то такое монтирование игнорируется (не создаётся). Например, если в реальной файловой системе нет директории /var/cache/php-eaccelerator, то и внутри LimitedFS этой директории не будет (монтирование /var/cache/php-eaccelerator не будет создано).

Персональные монтирования пользователя физически располагаются в домашней директории пользователя по пути ~/.limitedfs/$MNT_PATH, где MNT_PATH — это путь к персональному монтированию пользователя, указанный в файле конфигурации монтирований. Поэтому на использование дискового пространства внутри персональных монтирований пользователя действует ограничение дисковой квоты, если такое ограничение настроено для домашней директории пользователя.

Очистка временных файлов в /tmp-директориях пользователей

Временные файлы могут накапливаться в системе и занимать дисковое пространство. Для удаления временных файлов в LimitedFS предусмотрен механизм tmpwatch. Следующая команда выполняет очистку временных файлов для всех пользователей внутри LimitedFS.

$ sudo lfsctl  --tmpwatch

Эта команда удаляет файлы, к которым не было обращения или которые не модифицировались в течение заданного времени. Команда выполняется раз в сутки по крону:

$ sudo cat /etc/cron.d/limitedfs-cron
0 4 * * * root /usr/bin/flock -n /var/run/limitedfs.cron.lock /usr/share/limitedfs/bin/cron.daily &> /dev/null

$ sudo cat /usr/share/limitedfs/bin/cron.daily
#!/usr/bin/bash
/usr/bin/ionice -c 3 /usr/sbin/lfsctl --tmpwatch
exit 0