setpriv wil per capability een eigen teken
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 16m58s
All checks were successful
Deploy server-up (dev) / deploy (push) Successful in 16m58s
`+chown,dac_override,fowner` kwam door elke stringtest heen maar werd door setpriv geweigerd met "bad capability string", waarna de container niet meer opstartte. Alleen de CI-stap in een echte container zag dit. - CAPS is nu +chown,+dac_override,+fowner - de test laat de echte setpriv over de string oordelen in plaats van hem te vergelijken met een verwachte tekst; met de oude waarde faalt hij Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q9eqpADJSRs49SoGGr4NAy
This commit is contained in:
parent
94364973ff
commit
a7b00fc82b
2 changed files with 32 additions and 3 deletions
|
|
@ -99,7 +99,10 @@ fi
|
|||
#
|
||||
# Alle drie zitten al in de standaardset van Docker; er komt hier dus geen
|
||||
# enkel recht bij dat de container niet al had. Wat weggaat is de rest van root.
|
||||
CAPS="chown,dac_override,fowner"
|
||||
#
|
||||
# Elke capability krijgt zijn eigen teken: setpriv leest "+a,b" niet als "+a,+b"
|
||||
# maar weigert het met "bad capability string".
|
||||
CAPS="+chown,+dac_override,+fowner"
|
||||
|
||||
if ! command -v setpriv >/dev/null 2>&1; then
|
||||
log "setpriv ontbreekt in dit image; ik draai als root verder."
|
||||
|
|
@ -109,4 +112,4 @@ fi
|
|||
log "Server Up draait als $GEBRUIKER ($SU_UID:$SU_GID)."
|
||||
export HOME=/data
|
||||
exec setpriv --reuid "$SU_UID" --regid "$SU_GID" --init-groups \
|
||||
--inh-caps "+$CAPS" --ambient-caps "+$CAPS" "$@"
|
||||
--inh-caps "$CAPS" --ambient-caps "$CAPS" "$@"
|
||||
|
|
|
|||
|
|
@ -147,10 +147,36 @@ def test_afzakken_zet_klaar_en_geeft_de_juiste_rechten(nep_omgeving, tmp_path):
|
|||
assert "--reuid 1000" in setpriv[0] and "--regid 1000" in setpriv[0]
|
||||
# Zonder ambient caps verliest het proces bij het afzakken precies de
|
||||
# rechten die het voor verhuizen en backups nodig heeft.
|
||||
assert "--ambient-caps +chown,dac_override,fowner" in setpriv[0]
|
||||
assert "--ambient-caps" in setpriv[0]
|
||||
assert "chown" in setpriv[0] and "dac_override" in setpriv[0]
|
||||
assert "echo APP-GESTART" in setpriv[0], "de app wordt niet doorgegeven"
|
||||
|
||||
|
||||
def _caps_uit_het_script() -> str:
|
||||
for regel in SCRIPT.read_text(encoding="utf-8").splitlines():
|
||||
if regel.startswith("CAPS="):
|
||||
return regel.split("=", 1)[1].strip().strip('"')
|
||||
raise AssertionError("geen CAPS= in het entrypoint")
|
||||
|
||||
|
||||
@pytest.mark.skipif(shutil.which("setpriv") is None,
|
||||
reason="setpriv niet aanwezig; in het image wél (Dockerfile)")
|
||||
def test_setpriv_snapt_de_capability_string():
|
||||
"""De echte setpriv laten oordelen in plaats van de tekst te vergelijken.
|
||||
|
||||
`+chown,dac_override` zag er goed uit en kwam door elke stringtest heen,
|
||||
maar setpriv wil per capability een teken en weigerde het met "bad
|
||||
capability string" — waarna Server Up niet meer opstartte. Dat is precies
|
||||
wat een vergelijking op tekst niet ziet en dit wel.
|
||||
"""
|
||||
caps = _caps_uit_het_script()
|
||||
r = subprocess.run([shutil.which("setpriv"), "--inh-caps", caps, "true"],
|
||||
capture_output=True, text=True, timeout=30)
|
||||
# Toepassen mag mislukken (dat mag alleen root); de string moet leesbaar zijn.
|
||||
assert "bad capability string" not in r.stderr, \
|
||||
f"setpriv weigert '{caps}': elke capability wil zijn eigen + of -"
|
||||
|
||||
|
||||
def test_de_gid_van_de_docker_socket_wordt_overgenomen(nep_omgeving, tmp_path):
|
||||
"""Die verschilt per host; hardcoderen in compose werkt daarom niet."""
|
||||
sok = tmp_path / "docker.sock"
|
||||
|
|
|
|||
Loading…
Reference in a new issue