2016-02-17 10 views
5

Ich bin in einer schwierigen Situation, in der ich nicht weiß, welche Linux-Fähigkeiten ein Prozess benötigt, um zu arbeiten. Was ist der beste Weg, oder um herauszufinden, welche Kappe benötigt wird?Wie finde ich heraus, welche Linux-Fähigkeiten ein Prozess benötigt, um zu arbeiten?

Das einzige, woran ich gerade denken kann, ist Capsh zu verwenden und alle Caps auf einen Prozess zu setzen. Der Prozess schlägt fehl und ich fange an, Obergrenzen hinzuzufügen (indem ich --drop = CAP_XZY entferne), bis es funktioniert.

Haben Sie bessere Vorschläge?

+0

Ich würde erwarten, dass das Installationsprogramm die erforderlichen Funktionen konfiguriert. – Barmar

+0

Vielleicht, wenn Sie genau erklärt haben, was der Prozess tut ...? – Paul

+0

@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

Antwort

0

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.

+0

Das ist eine tolle Antwort. Vielen Dank! – rand0m

3

Stellt sich heraus, es ist einfacher als erwartet. Installieren Sie libcap-ng (https://people.redhat.com/sgrubb/libcap-ng/) und verwenden Sie pscap.

sudo apt-get install libcap-ng-utils 

Beispielausgabe Auszug:

In Ubuntu 16.04, kann es mit installiert werden

ppid pid name  command   capabilities 
1  468 root  systemd-journal chown, dac_override, dac_read_search, fowner, setgid, setuid, sys_ptrace, sys_admin, audit_control, mac_override, syslog, audit_read 
1  480 root  lvmetad   full 
1  492 root  systemd-udevd  full 
1  1040 root  rpc.idmapd  full 
1  1062 root  rpc.gssd   full 
1  1184 messagebus dbus-daemon  audit_write + 
1  1209 root  NetworkManager dac_override, kill, setgid, setuid, net_bind_service, net_admin, net_raw, sys_module, sys_chroot, audit_write 
Verwandte Themen