fix(P19): sudoers hardening — remove apt-get/dpkg (REQ-134, F22)
---ci--- project: orca phase: 19 milestone: v0.12 status: execute ---/ci--- apt-get/dpkg removed from sudoers entirely (NOEXEC breaks maintainer scripts; operator runs apt-get/dpkg out-of-band). Only pct + qm remain (both NOEXEC). Tests updated. Build green.
This commit is contained in:
@@ -449,9 +449,9 @@ func sudoersContent(user string) string {
|
||||
# pvesh is EXCLUDED (AD-020: pvesh can bypass NOEXEC via API execute).
|
||||
%s ALL=(root) NOPASSWD: NOEXEC: /usr/bin/pct
|
||||
%s ALL=(root) NOPASSWD: NOEXEC: /usr/bin/qm
|
||||
%s ALL=(root) NOPASSWD: NOEXEC: /usr/bin/apt-get
|
||||
%s ALL=(root) NOPASSWD: NOEXEC: /usr/bin/dpkg
|
||||
`, user, user, user, user)
|
||||
|
||||
|
||||
`, user, user)
|
||||
}
|
||||
|
||||
// writeSudoers writes the /etc/sudoers.d/orca file on the remote host
|
||||
|
||||
@@ -33,17 +33,11 @@ func TestSudoersContent(t *testing.T) {
|
||||
t.Error("missing NOEXEC on qm (AD-020)")
|
||||
}
|
||||
|
||||
if !strings.Contains(content, "NOPASSWD: /usr/bin/apt-get") {
|
||||
t.Error("missing NOPASSWD on apt-get")
|
||||
if strings.Contains(content, "apt-get") {
|
||||
t.Error("apt-get must NOT be in sudoers (REQ-134/F22: operator runs apt-get out-of-band)")
|
||||
}
|
||||
if !strings.Contains(content, "NOPASSWD: /usr/bin/dpkg") {
|
||||
t.Error("missing NOPASSWD on dpkg")
|
||||
}
|
||||
if strings.Contains(content, "NOEXEC: /usr/bin/apt-get") {
|
||||
t.Error("apt-get must NOT have NOEXEC (breaks maintainer scripts)")
|
||||
}
|
||||
if strings.Contains(content, "NOEXEC: /usr/bin/dpkg") {
|
||||
t.Error("dpkg must NOT have NOEXEC (breaks maintainer scripts)")
|
||||
if strings.Contains(content, "dpkg") {
|
||||
t.Error("dpkg must NOT be in sudoers (REQ-134/F22: operator runs dpkg out-of-band)")
|
||||
}
|
||||
|
||||
for _, line := range strings.Split(content, "\n") {
|
||||
|
||||
Reference in New Issue
Block a user