Итак, я погружаюсь в тонкости systemd и его способности измерять ресурсы с помощью контрольных групп, таких как cpu, io и memory.
Есть ли способ контролировать каталоги, к которым процесс имеет доступ с помощью systemd? Например, /usr/bin
обычно отмечается o+rX
, и я бы хотел, чтобы процесс веб-сервера был заблокирован вне этого каталога. Было довольно много программных эксплойтов, с помощью которых вы можете читать произвольные файлы с диска, это улучшило бы многоуровневый подход к безопасности.
Я уверен, что это можно было бы сделать с некоторыми действительно причудливыми разрешениями файловой системы, но мне было интересно, есть ли лучший способ. Спасибо за ошибку сервера!
На самом деле у вас есть несколько параметров, которые вы можете определить в файле (файлах) модуля для ваших услуг. Все они работают по одному и тому же принципу, используя привязку монтирования в пространстве имен, которое systemd настраивает для службы. Некоторые части файловой системы монтируются только для чтения или становятся полностью невидимыми / недоступными при монтировании пустого каталога.
PrivateTmp
возможно, самый распространенный.
Включение PrivateTmp
устанавливает новое пространство имен файловой системы для выполняемых процессов и монтирует частные /tmp
и /var/tmp
каталоги внутри него, которые не используются процессами за пределами пространства имен.
ProtectSystem
Если true
, монтирует /usr
и /boot
каталоги только для чтения для процессов, запускаемых этим модулем.
Если установлено на full
, то /etc
каталог также монтируется только для чтения. Если установлено значение "strict", вся иерархия файловой системы монтируется только для чтения, за исключением поддеревьев файловой системы API / dev, / proc и / sys.
ProtectHome
Принимает логический аргумент или «только для чтения». Если true
, каталоги /home
, /root
и /run/user
делаются недоступными и пустыми для процессов, вызываемых этим модулем. Если установлено значение "read-only
", вместо этого три каталога будут доступны только для чтения
ProtectKernelTunables
Если true, переменные ядра доступны через /proc/sys
, /sys
, /proc/sysrq-trigger
, /proc/latency_stats
, /proc/acpi
, /proc/timer_stats
, /proc/fs
и /proc/irq
будет доступен только для чтения.
ReadOnlyPaths
Пути, указанные в ReadOnlyPaths=
доступны только для чтения, запись будет отклонена, даже если обычные средства управления доступом к файлам позволят это.
InaccessiblePaths
Пути, указанные в InaccessiblePaths=
будут недоступны для процессов внутри пространства имен (вместе со всем, что находится ниже них в иерархии файловой системы).
Хотя может быть и больше вариантов.
Для более многоуровневой политики доступа, вероятно, потребуется SELinux и очень глубокое понимание этого, а также вам, вероятно, потребуется Многоуровневая безопасность политики.