Настройки монтирований
Настройка монтирований 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