processkapabiliteter
Vad är processkapabiliteter i Linux?
Processkapabiliteter är en mekanism i Linux som gör det möjligt att ge en process specifika privilegier utan att behöva köra den som **root**. Istället för att en process har alla rättigheter som användaren **root**, kan den ges en begränsad uppsättning privilegier som behövs för dess funktion.
Varför finns processkapabiliteter?
Traditionellt har systemadministratörer behövt ge program **setuid root**, vilket innebär att programmet körs med alla rättigheter som root-användaren. Detta innebär dock en säkerhetsrisk om ett program utnyttjas av en angripare. Kapabiliteter gör det möjligt att bryta ner **root**-rättigheter i separata delar så att en process bara får de rättigheter den behöver.
Hur fungerar processkapabiliteter?
Varje process har tre kapabilitetsuppsättningar:
- Permitted (Tillåtna) – Anger vilka kapabiliteter processen har rätt att använda.
- Effective (Effektiva) – Anger vilka kapabiliteter som faktiskt är aktiva vid exekvering.
- Inheritable (Arvbara) – Anger vilka kapabiliteter som kan ärvas av barnprocesser vid `exec()`.
Utöver dessa finns även:
- Bounding set (Begränsningsuppsättning): Bestämmer den maximala kapabiliteten som en process och dess barn kan få.
- Ambient set (Omgivande uppsättning): Kapabiliteter som kan ärvas vid exekvering av nya program.
Exempel på kapabiliteter
Linux har en lista av kapabiliteter som kan tilldelas processer. Här är några vanliga:
Kapabilitet | Beskrivning |
---|---|
CAP_NET_ADMIN | Tillåter nätverkskonfiguration. |
CAP_SYS_ADMIN | Ger många administrativa rättigheter. |
CAP_CHOWN | Tillåter ändring av filägare. |
CAP_SETUID | Tillåter byte av användar-ID (UID). |
CAP_KILL | Tillåter att skicka signaler till andra processer. |
CAP_DAC_OVERRIDE | Överstyr standard filåtkomstkontroller. |
Den fullständiga listan finns i **man capabilities(7)**.
Hur används kapabiliteter?
Visa kapabiliteter för en process
getcap /bin/ping
Exempelutdata:
/bin/ping = cap_net_raw+ep
Detta betyder att `ping` har `CAP_NET_RAW`, vilket tillåter den att skicka råa nätverkspaket.
Sätta kapabiliteter på en fil
sudo setcap cap_net_admin+ep /usr/bin/example
Detta ger `example` rättigheten `CAP_NET_ADMIN`.
Ta bort alla kapabiliteter från en fil
sudo setcap -r /usr/bin/example
Köra ett program med specifika kapabiliteter
capsh --caps="cap_net_admin+ep" -- -c "/bin/bash"
Startar ett nytt skal med `CAP_NET_ADMIN`.
Fördelar med processkapabiliteter
- Ökad säkerhet: Minskar behovet av att köra program som **root**.
- Finjusterad åtkomstkontroll: Ger program exakt de rättigheter de behöver.
- Mindre attackyta: Om en process komprometteras har den inte alla root-rättigheter.
Sammanfattningsvis är **processkapabiliteter ett kraftfullt säkerhetsverktyg i Linux**, och de används ofta i moderna system för att begränsa privilegier och förbättra säkerheten.