Итак, я погружаюсь в тонкости 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
становятся недоступными и пустыми для процессов, вызываемых этим устройством. . Если установлено значение « только для чтения
», вместо этого три каталога становятся доступными только для чтения
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 и очень глубокое понимание этого, а также вам, вероятно, потребуется владеть политиками Многоуровневой безопасности .