Capabilities sind ein praktischer Weg, um in Linux vereinzelt Rechte für einzelne Programme zu vergeben (z.B. um an Port 80 zu binden). Darüber findet man im Internet sehr viele Informationen. Weil ich aber immer wieder alles mögliche davon vergesse und manche Details in dem ganzen AI-Slop heutzutage schwierig zu finden sind, hier eine kleine Zusammenstellung für mich selber:
Capabilities eines Prozesses herausfinden
cat /proc/<PID>/status | grep Cap
Dann kriegt man etwas wie
CapInh: 0000000000000000
CapPrm: 000001f3f5fcffff
CapEff: 000001f3f5fcffff
CapBnd: 000001f3f5fcffff
CapAmb: 0000000000000000
Das kann man dann z.B. mit capsh entschlüsseln:
capsh --decode=000001f3f5fcffff
Was diese ganzen Capabilities bedeuten findet man auf der capabilities-Manpage (man 7 capabilities).
Was bedeuten die verschiedenen Zeilen?
Wichtig: Ich schreibe das hier für mich selbst auf, nach meinem aktuellen Verständnis. Das hier kann also falsch oder irreführend sein. Wenn ihr mich korrigieren wollt, schreibt mich gerne an.
CapInhsind „Inheritable Capabilities“. Child-Prozesse können die erben.CapPrmsind „Permitted Capabilities“. Die sind einem Executable zugeordnet und werden dem Prozess zugeordnet, wenn er gestartet wird (?)CapEffsind „Effective Capabilities“. Das ist eine Untermenge vonCapPrmund sind die Capabilities, die ein Prozess zu einem Zeitpunkt tatsächlich hat.CapBnd(„Bounding Set“) ist, was der Prozess maximal an Capabilities haben kann. Wir z.B. gerne als Sicherheitsmechanismus verwendet, um einzuschränken, was ein Prozess darf (z.B. von SystemD).CapAmbsind „Ambient Capabilities“ sind capabilities, die an Kindprozesse weitergegeben werden können, selbst wenn die executables für die Kindprozesse die Capability nicht haben.