GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie finde ich heraus, welche Linux-Fähigkeiten ein Prozess benötigt, um zu funktionieren?

Eine andere Methode, auf die ich vor einiger Zeit in diesem Blogbeitrag von Brendan Gregg gestoßen bin, ist die Verwendung von Capabilities Tracer - capable .

Unten ist 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 erheblichen Vorteil, dass es Fähigkeitsprüfungen aufzeichnet, die vom Kernel für einen bestimmten Prozess durchgeführt werden. Dies ermöglicht es, die Anwendung anhand der Fähigkeiten zu profilieren, die sie tatsächlich benötigt, z. um die Privilegien einzugrenzen und als unprivilegierter Benutzer auszuführen.

Während pscap erlaubt, die effektiven aufzulisten Fähigkeiten aller laufenden Prozesse bietet es keine verlässliche Methode, um zu überprüfen, welche Fähigkeiten tatsächlich vom Prozess benötigt werden, weil:

  • Ein Prozess kann die Fähigkeit X in seiner zulässigen Menge haben und sie nur für kurze Zeit auf die effektive Menge erhöhen, um eine privilegierte Operation auszuführen.
  • Ein Prozess hätte mit einem breiteren Satz von Fähigkeiten gestartet, die Initialisierung mit erhöhten Rechten durchführen und einige (oder alle) Fähigkeiten fallen lassen können (z. B. Ping zum Öffnen eines Raw-Sockets).
  • Es funktioniert nur für Prozesse, die bereits funktionsbasiert ausgeführt werden. Was wäre, wenn Sie die für Ihre neu entwickelte Anwendung erforderlichen Mindestfunktionen bestimmen müssten?
  • Es erlaubt nicht, die für die Anwendung durchgeführten Berechtigungsprüfungen mit den Operationen zu korrelieren, die es ausführt, mit capable Sie erhalten Zeitstempel für jeden einzelnen Check.

Die Quellen für fähig sind auf github verfügbar. Installationsanweisungen für BCC (einschließlich fähiger ) sind hier verfügbar. Für eine weitere Beschreibung lesen Sie bitte den eingangs erwähnten Blog-Beitrag, bitte beachten Sie auch, dass Capable Kernel 4.4+ erfordert, eine Alternative für ältere Kernel ist ebenfalls im Blog-Beitrag verfügbar.

Hinweis:Ich bin weder der Autor, noch bin ich in irgendeiner Weise mit den Tool-Entwicklern verbunden. Ich wollte es nur einem breiteren Publikum zugänglich machen, da ich es persönlich verwendet habe, um ein Funktionsprofil für eine komplexe Überwachungsanwendung zu entwickeln, für deren Ausführung zuvor volle Root-Rechte erforderlich waren, und fand, dass dieser Tracer eine enorme Hilfe ist.


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

In Ubuntu 16.04 kann es installiert werden mit:

sudo apt-get install libcap-ng-utils

Beispielausgabeauszug:

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

Basierend auf dem letzten libcap2-Update

1:(Kurze Option):getpcaps

Beschreibung:

Von hier:

getpcaps zeigt die Fähigkeiten der Prozesse an, die durch die in der Befehlszeile angegebenen pid-Werte angegeben werden.

Beispiel:

$ getpcaps <PID>
PID: = cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap+i

2:(Etwas längere Option):/proc status and capsh

Beschreibung:

proc ist ein Prozessinformations-Pseudo-Dateisystem oder mit anderen Worten – ein Verzeichnis, in dem Sie Informationen zu allen Prozessen einsehen können.

Über capsh:

Die Unterstützung und Verwendung von Linux-Funktionen kann mit diesem Tool untersucht und eingeschränkt werden. Dieses Tool bietet einen praktischen Wrapper für bestimmte Arten von Fähigkeitstests und die Erstellung von Umgebungen.
Es bietet auch einige Debugging-Funktionen, die für die Zusammenfassung des Fähigkeitsstatus nützlich sind.

Beispiel:

$ cat /proc/<PID>/status | grep Cap

Und Sie erhalten (auf den meisten Systemen):

CapInh: 00000000a80425fb (Inherited capabilities)
CapPrm: 0000000000000000 (Permitted capabilities)
CapEff: 0000000000000000 (Effective capabilities)
CapBnd: 00000000a80425fb (Bounding set)
CapAmb: 000000000000000  (Ambient capabilities set)

Verwenden Sie die capsh Dienstprogramm zum Decodieren von Hexadezimalzahlen in den Capability-Namen:

capsh --decode=00000000a80425fb
0x00000000a80425fb=cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap

(*) Sie können capsh herunterladen mit:sudo apt-get install git libpcap-dev .


Linux
  1. So finden Sie heraus, was ein Linux-Befehl tut

  2. So finden Sie heraus, welcher DNS-Server auf Ihrem Computer konfiguriert ist Linux/Windows/OSX

  3. Linux – Wie finde ich heraus, welche Festplatten im System sind?

  4. Linux – Wie finde ich den Namensraum eines bestimmten Prozesses heraus?

  5. Wie finde ich heraus, welcher Prozess eine Datei in Linux gesperrt hat?

So finden Sie einen Prozessnamen mithilfe der PID-Nummer in Linux

So finden Sie heraus, welche Geräte in Linux mit dem Netzwerk verbunden sind

So finden Sie heraus, welche Version des Linux-Kernels auf Ihrem PC läuft

So finden Sie heraus, wie lange ein Prozess unter Linux läuft

Wie finden Sie heraus, welcher Prozess eine Datei in Linux verwendet?

Wie finde ich heraus, welche Version von Linux ich verwende?