diff --git a/backend/hooks/base.go b/backend/hooks/base.go index b6cefee..0a2c9e5 100644 --- a/backend/hooks/base.go +++ b/backend/hooks/base.go @@ -381,8 +381,10 @@ func Init(serverVersion string) { pluginNo++ go waitPlugin(process, logicalID, socketPath, launchSpec) if limitErr := applyPluginResourceLimits(process); limitErr != nil { - log.Warnf("[%s] Plugin resource limits could not be applied", logicalID) - _ = process.Kill() + log.WithError(limitErr).Warnf("[%s] 插件资源限制应用失败,插件未启用", logicalID) + if killErr := process.Kill(); killErr != nil && !errors.Is(killErr, os.ErrProcessDone) { + log.WithError(killErr).Errorf("[%s] 插件终止失败,请检查服务权限", logicalID) + } continue } diff --git a/deploy/systemd/smail.service b/deploy/systemd/smail.service index 6f951a0..9366d79 100644 --- a/deploy/systemd/smail.service +++ b/deploy/systemd/smail.service @@ -35,7 +35,8 @@ RuntimeDirectoryMode=0750 NoNewPrivileges=true AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER # 主进程需要读取 smail 用户权限保护的配置和数据目录,同时保留插件隔离能力。 -CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_SYS_CHROOT CAP_SETUID CAP_SETGID CAP_CHOWN CAP_SYS_ADMIN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER +# 跨用户限制资源和终止降权插件分别需要资源管理与信号能力;插件本身不继承有效能力。 +CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_SYS_CHROOT CAP_SETUID CAP_SETGID CAP_CHOWN CAP_SYS_ADMIN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SYS_RESOURCE CAP_KILL PrivateTmp=true ProtectHome=true ProtectSystem=full