[Unit] Description=lchat connect broker (OAuth relay + token exchange) After=network-online.target Wants=network-online.target [Service] # /data/connect.env holds LCHAT_ADMIN_TOKEN + the DNSimple OAuth client_id/secret # + the registered redirect_uri. Required (no leading '-'): a misconfigured broker # breaks connecting services fleet-wide, so it must fail to boot rather than start # silently broken. EnvironmentFile=/data/connect.env ExecStart=/opt/lchat/connect --addr /run/lchat/connect.sock --db /data/connect.db Restart=always RestartSec=1 # --- hardening (see docs/instance-router.md ยง Hardening) --- User=lchat Group=lchat CapabilityBoundingSet= NoNewPrivileges=yes ProtectSystem=strict ProtectHome=yes ReadWritePaths=/data /run/lchat PrivateTmp=yes PrivateDevices=yes ProtectClock=yes ProtectHostname=yes ProtectKernelTunables=yes ProtectKernelModules=yes ProtectKernelLogs=yes ProtectControlGroups=yes ProtectProc=invisible RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX RestrictNamespaces=yes RestrictRealtime=yes RestrictSUIDSGID=yes LockPersonality=yes MemoryDenyWriteExecute=yes SystemCallFilter=@system-service SystemCallErrorNumber=EPERM SystemCallArchitectures=native MemoryMax=256M TasksMax=256 [Install] WantedBy=multi-user.target