修复Linux加固服务无法读取初始化网卡地址
This commit is contained in:
parent
d46e84865a
commit
5573c64b20
@ -202,7 +202,8 @@ func renderUnitFile(options Options) (string, error) {
|
|||||||
"RestrictSUIDSGID=yes",
|
"RestrictSUIDSGID=yes",
|
||||||
"RemoveIPC=yes",
|
"RemoveIPC=yes",
|
||||||
"SystemCallArchitectures=native",
|
"SystemCallArchitectures=native",
|
||||||
"RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6",
|
// 初始化证书枚举本机网卡需要 NETLINK_ROUTE,空能力集仍禁止网络管理操作。
|
||||||
|
"RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK",
|
||||||
)
|
)
|
||||||
if len(normalized.ReadWritePaths) > 0 {
|
if len(normalized.ReadWritePaths) > 0 {
|
||||||
quotedPaths := make([]string, 0, len(normalized.ReadWritePaths))
|
quotedPaths := make([]string, 0, len(normalized.ReadWritePaths))
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
package servicehost
|
package servicehost
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
@ -53,7 +54,7 @@ func TestRenderUnitFileIncludesExecutableConfigurationAndWorkDir(t *testing.T) {
|
|||||||
"RestrictSUIDSGID=yes",
|
"RestrictSUIDSGID=yes",
|
||||||
"RemoveIPC=yes",
|
"RemoveIPC=yes",
|
||||||
"SystemCallArchitectures=native",
|
"SystemCallArchitectures=native",
|
||||||
"RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6",
|
"RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK",
|
||||||
"ReadWritePaths=\"/var/lib/scert\" \"/var/log/scert\"",
|
"ReadWritePaths=\"/var/lib/scert\" \"/var/log/scert\"",
|
||||||
"[Install]",
|
"[Install]",
|
||||||
"WantedBy=multi-user.target",
|
"WantedBy=multi-user.target",
|
||||||
@ -64,6 +65,30 @@ func TestRenderUnitFileIncludesExecutableConfigurationAndWorkDir(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPackagedUnitAllowsInterfaceDiscoveryWithoutCapabilities(t *testing.T) {
|
||||||
|
content, err := os.ReadFile(filepath.Join("..", "..", "..", "deploy", "systemd", "Scert.service"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
for _, expected := range []string{
|
||||||
|
"RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK",
|
||||||
|
"CapabilityBoundingSet=",
|
||||||
|
"AmbientCapabilities=",
|
||||||
|
"NoNewPrivileges=yes",
|
||||||
|
"User=Scert",
|
||||||
|
} {
|
||||||
|
found := false
|
||||||
|
for _, line := range strings.Split(string(content), "\n") {
|
||||||
|
if strings.TrimSpace(line) == expected {
|
||||||
|
found = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !found {
|
||||||
|
t.Errorf("发布服务缺少安全配置:%s", expected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestUnitFilePathRejectsPathTraversal(t *testing.T) {
|
func TestUnitFilePathRejectsPathTraversal(t *testing.T) {
|
||||||
for _, name := range []string{"", ".", "..", "../Scert", "a/b", `a\\b`} {
|
for _, name := range []string{"", ".", "..", "../Scert", "a/b", `a\\b`} {
|
||||||
if _, err := unitFilePath(name); err == nil {
|
if _, err := unitFilePath(name); err == nil {
|
||||||
|
|||||||
@ -38,7 +38,8 @@ RestrictSUIDSGID=yes
|
|||||||
RemoveIPC=yes
|
RemoveIPC=yes
|
||||||
SystemCallArchitectures=native
|
SystemCallArchitectures=native
|
||||||
ReadWritePaths=/ssl /scert/conf /scert/data /scert/log /scert/backups
|
ReadWritePaths=/ssl /scert/conf /scert/data /scert/log /scert/backups
|
||||||
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
|
# 初始化临时证书读取本机网卡地址需要 NETLINK_ROUTE,不授予网络管理能力。
|
||||||
|
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user