Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
ping mit capability statt suid-Bit
Statt einem Programm über das SETUID-Bit alle Systemrechte zu geben, ist es sinnvoller, nur die Fähigkeiten (capabilities) zu geben, die das Programm zur Erfüllung seines Zwecks benötigt. Das setzt allerdings die Unterstützung des Kernels voraus, welches bestimmte Capabilities bereitstellt, die dann den Programmen gegeben werden können.
Mittels man capabilities kann man die vom verwendeten Kernel angebotenen Capabilities auflisten.
cat /usr/bin/ping > PING ./PING 9.9.9.9
als root
setcap cap_net_raw=p ./PING getcap ./PING
als user
./PING 9.9.9.9
Unter Debian nicht update-fest:
Moderne Kernel (oder eine andere black magick) erlauben
ping auch ohne Capabilities.
sysctl -a | grep ping
setcap cap_net_raw,cap_net_admin=pe /usr/sbin/tcpdump
Danach kann jeder User tcpdump benutzen
einer (root) shell eine Capability entziehen
capsh startet eine neue Shell mit veränderten Capabilities.
capsh --drop=cap_chown,cap_net_raw -- chown kurt /etc/passwd ping 9.9.9.9
Welcher Prozess hat welche Capabilities?
Pakete: libcap-ng-utils
pscap getpcap <pid>
low level
grep ^Cap /proc/<pid>/status CapInh: 0000000000000000 CapPrm: 000001ffffffdffe CapEff: 000001ffffffdffe CapBnd: 000001ffffffdffe CapAmb: 0000000000000000 capsh --decode=000001ffffffdffe
