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
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
Pakete: libcap-ng-utils
pscap