GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit, jaké schopnosti linuxu proces vyžaduje, aby fungoval?

Další metodou, se kterou jsem se před chvílí setkal v tomto blogovém příspěvku od Brendana Gregga, je použití traceru schopností - schopný .

Níže je ukázkový výstup:

$ 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

Má významnou výhodu v tom, že zaznamenává kontroly schopností prováděné jádrem pro daný proces. To umožňuje profilovat aplikaci podle schopností, které skutečně vyžaduje, např. zúžit oprávnění a spustit jej jako neprivilegovaný uživatel.

Zatímco pscap umožňuje vypsat efektivní schopnosti všech běžících procesů, nenabízí spolehlivou metodu kontroly, které schopnosti jsou ve skutečnosti procesem vyžadovány, protože:

  • Proces může mít schopnost X ve své povolené sadě a zvýšit ji na efektivní sadu pouze na krátkou dobu, aby provedl privilegovanou operaci.
  • Proces mohl začít s širší sadou schopností, provést inicializaci vyžadující zvýšená oprávnění a vypustit některé (nebo všechny) schopnosti (např. příkaz ping otevřít nezpracovaný soket).
  • Funguje pouze pro procesy, které již běží způsobem založeným na schopnostech. Co kdybyste museli určit minimální sadu schopností vyžadovanou pro vaši nově vyvinutou aplikaci?
  • Neumožňuje korelovat kontroly oprávnění provedené pro aplikaci s operacemi, které provádí, s schopným získáte časová razítka pro každou jednotlivou kontrolu.

Zdroje pro schopné jsou k dispozici na githubu. Pokyny k instalaci pro BCC (včetně schopných ) jsou k dispozici zde. Další popis naleznete v příspěvku na blogu uvedeném na začátku, všimněte si také, že schopný vyžaduje jádro 4.4+, alternativa pro starší jádra je k dispozici také v příspěvku na blogu.

Poznámka:Nejsem autorem ani nejsem žádným způsobem spojen s vývojáři nástrojů. Jen jsem ho chtěl přiblížit širšímu publiku, protože jsem ho osobně používal k vývoji profilu schopností pro komplexní monitorovací aplikaci, která dříve ke svému běhu vyžadovala plná oprávnění root, a zjistil jsem, že tento sledovač je ohromným pomocníkem.


Ukázalo se, že je to jednodušší, než se očekávalo. Nainstalujte libcap-ng (https://people.redhat.com/sgrubb/libcap-ng/) a použijte pscap .

V Ubuntu 16.04 jej lze nainstalovat pomocí:

sudo apt-get install libcap-ng-utils

Ukázkový úryvek z výstupu:

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

Na základě nedávné aktualizace libcap2

1:(Krátká možnost):getpcaps

Popis:

Odtud:

getpcaps zobrazuje schopnosti procesů indikovaných hodnotou (hodnotami) thepid zadanou na příkazovém řádku.

Příklad:

$ 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:(Trochu delší možnost):/proc status and capsh

Popis:

proc je pseudosouborový systém s informacemi o procesech nebo jinými slovy - adresář, kde si můžete prohlížet informace o všech procesech.

O caph:

Pomocí tohoto nástroje lze prozkoumat a omezit podporu a použití schopností Linuxu. Tento nástroj poskytuje praktický obal pro určité typy testování schopností a vytváření prostředí.
Poskytuje také některé funkce ladění užitečné pro shrnutí stavu schopností.

Příklad:

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

A dostanete (na většině systémů):

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

Použijte capsh nástroj pro dekódování z hexadecimálních čísel do názvu schopností:

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

(*) Můžete si stáhnout capsh s:sudo apt-get install git libpcap-dev .


Linux
  1. Jak zjistit, co dělá příkaz Linuxu

  2. Linux – Jak zjistit jmenný prostor konkrétního procesu?

  3. Jak zjistím, který proces má zámek na souboru v Linuxu?

  1. Jak zjistím, jakou verzi Linuxu používám?

  2. Linux:zjistěte, jaký proces využívá všechnu RAM?

  3. Co je to příkaz k nalezení priority procesu v Linuxu?

  1. Jak najít a zabít zombie proces v Linuxu

  2. Jak zjistit, jaký DNS server je na vašem počítači nakonfigurován? Linux/Windows/OSX

  3. Jak zjistit jmenný prostor konkrétního procesu?