Eine andere Methode, dass ich in dieser blog post by Brendan Gregg über eine Weile her bin gekommen, zu verwenden Fähigkeiten Tracer - fähig.
Unten finden Sie eine Beispielausgabe:
$ sudo /usr/share/bcc/tools/capable
TIME UID PID COMM CAP NAME AUDIT
11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 1
11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 1
11:31:59 1000 2468 ls 1 CAP_DAC_OVERRIDE 1
11:31:59 1000 2468 ls 2 CAP_DAC_READ_SEARCH 1
11:32:02 0 1421 timesync 25 CAP_SYS_TIME 1
11:32:05 1000 2469 sudo 7 CAP_SETUID 1
11:32:05 0 2469 sudo 6 CAP_SETGID 1
Es hat einen wesentlichen Vorteil von Kernel für einen bestimmten Prozess gemacht Fähigkeit überprüft Aufnahme. Dies ermöglicht es, die Anwendung gegen die Fähigkeiten zu profilieren, die sie tatsächlich benötigt, z. um die Privilegien einzugrenzen und sie als unprivilegierter Benutzer auszuführen.
Während pscap die wirksame Fähigkeiten aller laufenden Prozesse auflisten können, ist es nicht eine zuverlässige Kontrolle bieten, die Fähigkeiten in der Tat durch den Prozess erforderlich sind, denn:
- Verfahren kann die Fähigkeit X in ihrer erlaubten Menge haben und sie nur für eine kurze Zeit auf die effektive Menge erhöhen, um eine privilegierte Operation durchzuführen.
- Ein Prozess könnte mit einem breiteren Satz von Funktionen gestartet worden sein, die Initialisierung erfordert erhöhte Privilegien und einige (oder alle) Funktionen (z. B. ping opening a raw socket) fallen lassen.
- Es funktioniert nur für Prozesse, die bereits funktionsfähig ausgeführt werden. Was wäre, wenn Sie den für Ihre neu entwickelte Anwendung erforderlichen minimalen Funktionsumfang ermitteln müssten?
- Es nicht erlaubt, Berechtigungen Prüfungen für die Anwendung mit den Operationen korreliert zu korrelieren, mit Sie erhalten Zeitstempel für immer einzelne Prüfung.
Die Quellen für fähig sind auf github zur Verfügung. Installationsanweisungen für BCC (einschließlich in der Lage) sind verfügbar here. Weitere Informationen finden Sie in dem eingangs erwähnten Blog-Beitrag. Bitte beachten Sie auch, dass funcient Kernel 4.4+ benötigt, eine Alternative für ältere Kernel ist auch im Blog-Post verfügbar.
Hinweis: Ich bin nicht der Autor, noch bin ich in irgendeiner Weise mit den Werkzeugentwicklern verbunden.Ich wollte es nur einem breiteren Publikum zugänglich machen, da ich es persönlich dazu benutzt habe, ein Fähigkeitsprofil für eine komplexe Überwachungsanwendung zu entwickeln, für das früher vollständige root-Berechtigungen erforderlich waren, und dass dieser Tracer eine enorme Hilfe war.
Ich würde erwarten, dass das Installationsprogramm die erforderlichen Funktionen konfiguriert. – Barmar
Vielleicht, wenn Sie genau erklärt haben, was der Prozess tut ...? – Paul
@Paul ok lass uns ein konkretes Beispiel machen: '# capsh --drop = cap_net_raw - -c" ping localhost " ping: icmp offener Socket: Operation nicht erlaubt' In diesem Fall setze ich die für ping erforderliche Cap und führe dann einen Ping aus. Natürlich funktioniert es nicht. Wie kann ich herausfinden, dass ping cap_net_raw benötigt? Es gibt Situationen, in denen ein Prozess etwas tut, das eine bestimmte Obergrenze erfordert. Wie kann ich herausfinden, welche? – rand0m