Für den Befehl /bin/ping würde dies bedeuten, dass er nicht
mehr SetUID-root wäre, sondern lediglich die Capability
CAP_NET_RAW erhalten würde. Dies erlauben die
Filesystem-Capabilities. Diese benötigen für Ihre Funktion einen
Kernel-Patch. Dieser wurde von Serge E. Hallyn
auf der
linux-security-module-Mailingliste veröffentlicht
und befindet sich
auch auf der CD (fsposixcaps.diff). Zusätzlich benötigen Sie für die
Funktion die entsprechenden Befehle. Eine modifizierte Bibliothek
libcap für Fedora Distributionen mit den entsprechenden Befehlen findet sich auf
http://www.kaigai.gr.jp/ und auf der CD
(libcap-1.10-25.kg.3.i386.rpm).
Wurde die Unterstützung für die Filesystem-Capabilities installiert, so kann anschließend der Befehl /bin/ping entsprechend angepasst werden. Hierzu entfernen Sie zunächst dsas SetUID-Bit von dem Befehl:
[spenneb@supergrobi ~]$ ls -l /bin/ping -rwsr-xr-x 1 root root 41652 12. Apr 10:56 /bin/ping [spenneb@supergrobi ~]$ ping -c 1 localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.314 ms --- localhost ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.314/0.314/0.314/0.000 ms [spenneb@supergrobi ~]$ sudo chmod 755 /bin/ping [spenneb@supergrobi ~]$ ping -c 1 localhost ping: icmp open socket: Die Operation ist nicht erlaubtBei dem anschließenden Test darf ein einfacher Benutzer den Befehl /bin/ping nicht mehr ausführen. Nun setzen wir die Capability CAP_NET_RAW im effektiven (e) und erlaubten (p) Capability-Set für den Befehl. Anschließend darf der Benutzer wieder den Befehl /bin/ping benutzen. Mit dem Befehl attr kann man sich die zusätzlich zur Datei gespeicherten erweiterten Attribute anzeigen lassen.
[spenneb@supergrobi ~]$ sudo setfcaps cap_net_raw=ep /bin/ping [spenneb@supergrobi ~]$ ping -c 1 localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.314 ms --- localhost ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.314/0.314/0.314/0.000 ms [spenneb@supergrobi ~]$ attr -l /bin/ping Attribute "capability" has a 16 byte value for /bin/ping
Chris Friedhoff hat auf seiner Webseite http://www.friedhoff.org/fscaps.html weitergehende Hinweise zur Konfiguration der Filesystem-Capabilities zusammengetragen.
Achtung. Mit dem Filesystem-Capabilities können Sie die Fähigkeiten eines Benutzers erweitern. Wenn Sie zum Beispiel dem Befehl modprobe die Capability CAP_SYS_MODULE zuweisen, kann jeder Benutzer mit diesem Befehl Kernel-Module nachladen. Dies kann von Vorteil sein, aber kann auch Sicherheitslücken erzeugen. Ein großer Vorteil von AppArmor und SELinux ist, dass jede Überprüfung, ob ein Vorgang erlaubt ist, von zwei Access-Control-Systemen durchgeführt wird. Sie müssen als normaler Linux-Benutzer zunächst die Rechte besitzen und das MAC muss auch den Zugriff erlauben. Mit AppArmor oder SELinux können Sie nicht über das DAC-System hinaus weitergehende Rechte zuweisen. Bei Verwendung der Filesystem-Capabilities können Sie das Linux-Rechte-System aushebeln.
Ralf Spenneberg 2007-11-13