Hervorragende Software und praktische Tutorials
Was ist der Setcap-Befehl?
Detaillierte Erklärung des Setcap-Befehls, unter Linuxsetcap-BefehlDie gängigste Methode besteht darin, die Verwendung von Ports über 1024, auch als privilegierte Ports bezeichnet, einzuschränken. Diese Einschränkung kann ohne Firewall erfolgen. Der Hauptzweck besteht darin, die Berechtigungen des Root-Benutzers aufzuteilen, d. h. die Root-Berechtigungen in verschiedene Funktionen aufzuteilen, von denen jede eine bestimmte privilegierte Operation darstellt.
Die Grundidee von Capabilities besteht darin, die Berechtigungen des Root-Benutzers aufzuteilen, d. h. die Root-Berechtigungen in verschiedene Capabilities aufzuteilen, wobei jede Capabilities eine bestimmte privilegierte Operation repräsentiert. Beispiel: Die Capabilities CAP_SYS_MODULE repräsentieren die privilegierte Operation, mit der der Benutzer das Kernelmodul laden (oder entladen) kann, und CAP_SETUID repräsentieren die privilegierte Operation, mit der der Benutzer die Benutzeridentität des Prozesses ändern kann. In Capabilities führt das System die Zugriffskontrolle für privilegierte Operationen basierend auf den Capabilities des Prozesses durch.
In Capilities verfügen nur Prozesse und ausführbare Dateien über Capabilities. Jeder Prozess besitzt drei Capabilities-Sätze: cap_effective, cap_inheritable und cap_permitted (abgekürzt als: pE, pI und pP). Dabei repräsentiert cap_permitted den maximalen Capabilities-Satz des Prozesses; cap_effective den aktuell verfügbaren Capabilities-Satz des Prozesses, der als Teilmenge von cap_permitted betrachtet werden kann; und cap_inheitable den Capabilities-Satz, den der Prozess an seine Kindprozesse weitergeben kann. Die Zugriffskontrolle erfolgt auf Basis des cap_effective-Capabilities-Satzes des Prozesses. cap_effective ist eine Teilmenge von cap_permitted. Der Prozess kann einige seiner Privilegien aufgeben, indem er einige Capabilities in cap_effective löscht. Ausführbare Dateien besitzen ebenfalls drei Capabilities-Sätze, die den drei Capabilities-Sätzen der Prozesse entsprechen: cap_effective, cap_allowed und cap_forced (abgekürzt als fE, fI, fP). Dabei stellt cap_allowed den Fähigkeitssatz dar, der aus cap_inheritable des ursprünglichen Prozesses integriert werden kann, wenn das Programm ausgeführt wird, cap_forced stellt den Fähigkeitssatz dar, der vorhanden sein muss, wenn die Datei ausgeführt wird, um ihren Dienst abzuschließen, und cap_effective stellt die Fähigkeiten dar, die verwendet werden können, wenn die Datei ausgeführt wird.
1. Implementierungsmechanismus von Capabilities im Linux-Kernel
Das Konzept und der Mechanismus der Capabilities sind seit Version 2.2 im Linux-Kernel integriert und wurden mit jedem Versions-Upgrade schrittweise verbessert. Unter Linux sind Root-Berechtigungen in die folgenden 29 Capabilities unterteilt:
CAP_CHOWN: Ändern Sie die Berechtigungen des Dateibesitzers
CAP_DAC_OVERRIDE: Ignoriere die DAC-Zugriffsbeschränkungen der Datei
CAP_DAC_READ_SEARCH: Ignoriere DAC-Zugriffsbeschränkungen für Dateilesen und Verzeichnissuche
CAP_FOWNER: Ignorieren Sie die Einschränkung, dass die Dateibesitzer-ID mit der Prozessbenutzer-ID übereinstimmen muss
CAP_FSETID: Ermöglicht das Setzen des Setuid-Bits einer Datei
CAP_KILL: Ermöglicht das Senden von Signalen an Prozesse, die Ihnen nicht gehören
CAP_SETGID: Ermöglicht das Ändern der Gruppen-ID eines Prozesses
CAP_SETUID: Ermöglicht das Ändern der Benutzer-ID eines Prozesses
CAP_SETPCAP: Ermöglicht die Übertragung von Fähigkeiten auf andere Prozesse und das Entfernen von Fähigkeiten aus anderen Prozessen
CAP_LINUX_IMMUTABLE: Ermöglicht die Änderung der IMMUTABLE- und APPEND-Attributflags einer Datei
CAP_NET_BIND_SERVICE: Ermöglicht die Bindung an Ports kleiner als 1024
CAP_NET_BROADCAST: Ermöglicht Netzwerk-Broadcast und Multicast-Zugriff
CAP_NET_ADMIN: Ermöglicht Ihnen die Durchführung von Netzwerkadministrationsaufgaben
CAP_NET_RAW: Ermöglicht die Verwendung von Raw-Sockets
CAP_IPC_LOCK: Ermöglicht das Sperren gemeinsam genutzter Speichersegmente
CAP_IPC_OWNER: IPC-Eigentümerprüfung ignorieren
CAP_SYS_MODULE: Ermöglicht das Einfügen und Entfernen von Kernelmodulen
CAP_SYS_RAWIO: Ermöglicht den direkten Zugriff auf /devport, /dev/mem, /dev/kmem und Raw-Block-Geräte
CAP_SYS_CHROOT: Ermöglicht die Verwendung des Systemaufrufs chroot()
CAP_SYS_PTRACE: Ermöglicht die Verfolgung aller Prozesse
CAP_SYS_PACCT: Ermöglicht die BSD-artige Prüfung von Prozessen
CAP_SYS_ADMIN: Ermöglicht Ihnen die Durchführung von Systemadministrationsaufgaben, wie etwa das Laden oder Entladen von Dateisystemen, das Festlegen von Datenträgerkontingenten usw.
CAP_SYS_BOOT: Ermöglicht den Neustart des Systems
CAP_SYS_NICE: Ermöglicht das Erhöhen der Priorität von Prozessen und das Festlegen der Priorität anderer Prozesse
CAP_SYS_RESOURCE: Ressourcenlimits ignorieren
CAP_SYS_TIME: Ermöglicht das Ändern der Systemuhr
CAP_SYS_TTY_CONFIG: Ermöglicht die Konfiguration von TTY-Geräten
CAP_MKNOD: Ermöglicht die Verwendung des Systemaufrufs mknod()
CAP_LEASE: Ermöglicht die Änderung des FL_LEASE-Flags der Dateisperre
Beispiel:
Bei der Installation von Wireshark besteht ein Schritt darin, Dumpcap die Berechtigung zum Lesen der Netzwerkkarte zu erteilen, sodass auch normale Benutzer Wireshark zum Erfassen von Paketen verwenden können.
# setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/sbin/dumpcap
Verwenden Sie SetUID chmod u+s /Pfad/zur/Anwendung
Verwenden Sie als Root-Benutzer den Befehl „setcap“, um der ausführbaren Datei „/bin/ping“ die Berechtigungen „cap_net_admin,cap_net_raw+ep“ hinzuzufügen, damit normale Benutzer Ping verwenden können.
#setcap 'cap_net_admin,cap_net_raw+ep' /bin/ping
Überprüfen:
[root@rhel671 ~]# getcap /bin/ping
/bin/ping = cap_net_admin,cap_net_raw+ep
Hinweis: setcap wird im Allgemeinen für ausführbare Binärdateien verwendet. setcap ist ungültig, wenn es für Skriptdateien verwendet wird (z. B. Skriptdateien, die mit #!/bin/python beginnen).
Ports innerhalb von 1024:
setcap cap_net_bind_service=+eip /home/tengine/nginx/tengine/sbin/nginx
-r dient zum Löschen zusätzlicher Berechtigungen:
setcap -r nginx
Stellen Sie TOMCAT so ein, dass Nicht-ROOT-Benutzer Ports unter 1024 starten können
setcap cap_net_bind_service=+eip /opt/tomcat/bin/startup.sh