Estou escrevendo um arquivo de serviço systemd para o monitor-fai (8) . Esse daemon escuta em uma única porta, recebe conexões TCP e grava um único arquivo de log com informações interessantes.
Para reduzir a superfície de ataque no sistema, o serviço deve ser executado com o mínimo de privilégios possíveis. Seguindo o conselho das opções para proteger unidades de serviço do systemd , eu criei este arquivo de serviço:
[Unit]
Description=FAI Monitor Daemon
[Service]
Type=simple
ExecStart=/usr/sbin/fai-monitor -l /run/fai-monitor/fai-monitor.log
DynamicUser=true
RuntimeDirectory=fai-monitor
RuntimeDirectoryMode=755
MemoryDenyWriteExecute=true
NoNewPrivileges=true
PrivateTmp=true
PrivateUsers=true
ProtectHome=true
ProtectSystem=strict
PrivateDevices=true
ProtectKernelTunables=true
ProtectControlGroups=true
RestrictAddressFamilies=AF_INET AF_INET6
RestrictRealtime=true
TasksMax=16
MemoryHigh=10M
SystemCallFilter=~@mount @debug @privileged
Embora isso pareça ser bastante restritivo, o arquivo de serviço é relativamente detalhado.
Existe algum outro meio para restringir um serviço ao menor conjunto possível de privilégios? Em particular, algo como RestrictEverything=true
seria interessante com a subseqüente lista de permissões de recursos permitidos.
Tags security systemd privileges sandbox