systemdサービスで実行されているFlask Webサーバーのセキュリティを向上させようとしています。
[Unit]
Description=Configuration Server
[Service]
Type=simple
ExecStart=/usr/bin/configui
ProtectSystem=full
ProtectHome=yes
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
ReadWritePaths=/var/lib/configui/
NoNewPrivileges=yes
PrivateTmp=yes
PrivateDevices=yes
DevicePolicy=closed
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
RestrictRealtime=yes
RestrictSUIDSGID=yes
MemoryDenyWriteExecute=yes
LockPersonality=yes
[Install]
WantedBy=multi-user.target
/var/lib/configui/data.json.new
しかし、アプリケーションが一時ファイルに書き込もうとすると問題が発生します。これが完了すると、アプリケーションが上書き/var/lib/configui/data.json
されます。 Pythonで権限拒否エラーが発生します。このディレクトリの内容:
root@XXXXXX:/var/lib/configui# ls -ll
total 16
-rw-r----- 1 userA userA 589 Jul 30 2020 data.json
CAP_DAC_OVERRIDE を追加することで動作させることができますが、これは読み書き操作を制限する目的を失います。