GNU/Linux >> Linux Esercitazione >  >> Linux

Come scoprire quali funzionalità Linux richiede un processo per funzionare?

Un altro metodo, che mi sono imbattuto qualche tempo fa in questo post sul blog di Brendan Gregg, è usare il tracciatore delle capacità - capable .

Di seguito è riportato un esempio di output:

$ 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

Ha un vantaggio significativo nel registrare i controlli di capacità effettuati dal kernel per un dato processo. Ciò consente di profilare l'applicazione rispetto alle capacità che effettivamente richiede, ad es. per restringere i privilegi ed eseguirlo come utente senza privilegi.

Mentre pscap permette di elencare gli efficaci capacità di tutti i processi in esecuzione, non offre un metodo affidabile per verificare quali capacità sono effettivamente richieste dal processo, perché:

  • Un processo può avere la capacità X nel suo set consentito e portarla al set effettivo solo per un breve periodo di tempo per eseguire un'operazione privilegiata.
  • Un processo potrebbe essere iniziato con un insieme più ampio di capacità, eseguire l'inizializzazione che richiede privilegi elevati e abbandonare alcune (o tutte) le capacità (ad es. ping all'apertura di un raw socket).
  • Funziona solo per i processi che sono già in esecuzione in modalità basata sulle capacità. E se dovessi determinare il set di funzionalità minimo richiesto per la tua applicazione appena sviluppata?
  • Non consente di correlare i controlli dei privilegi effettuati per l'applicazione con le operazioni che esegue, con capacità ottieni timestamp per ogni singolo controllo.

Le fonti per capable sono disponibili su github. Istruzioni di installazione per BCC (incluso capable ) sono disponibili qui. Per ulteriori descrizioni fare riferimento al post del blog menzionato all'inizio, si noti inoltre che la capacità richiede il kernel 4.4+, un'alternativa per i kernel precedenti è disponibile anche nel post del blog.

Nota:non sono l'autore, né sono in alcun modo affiliato con gli sviluppatori dello strumento. Volevo solo portarlo a un pubblico più ampio, dal momento che l'ho usato personalmente per sviluppare un profilo di funzionalità per un'applicazione di monitoraggio complessa che in precedenza richiedeva privilegi di root completi per essere eseguita, e ho trovato questo tracciante di grande aiuto.


Si scopre che è più facile del previsto. Installa libcap-ng (https://people.redhat.com/sgrubb/libcap-ng/) e usa pscap .

In Ubuntu 16.04, può essere installato con:

sudo apt-get install libcap-ng-utils

Esempio di estratto dell'output:

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

Basato sul recente aggiornamento di libcap2

1:(opzione breve):getpcaps

Descrizione:

Da qui:

getpcaps visualizza le capacità sui processi indicati dai valori pid forniti nella riga di comando.

Esempio:

$ 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:(Opzione un po' più lunga):/proc status e capsh

Descrizione:

proc è uno pseudo-filesystem di informazioni sui processi o, in altre parole, una directory in cui è possibile visualizzare le informazioni su tutti i processi.

Informazioni su capsh:

Il supporto e l'uso delle capacità di Linux possono essere esplorati e limitati con questo strumento. Questo strumento fornisce un pratico wrapper per alcuni tipi di test di capacità e creazione dell'ambiente.
Fornisce inoltre alcune funzioni di debug utili per riassumere lo stato delle capacità.

Esempio:

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

E otterrai (sulla maggior parte dei sistemi):

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

Usa il capsh utility per decodificare i numeri esadecimali nel nome delle capacità:

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

(*) Puoi scaricare capsh con:sudo apt-get install git libpcap-dev .


Linux
  1. Come scoprire cosa fa un comando Linux

  2. Come scoprire quale server DNS è configurato sulla tua macchina? Linux/Finestre/OSX

  3. Linux:come scoprire quali dischi rigidi ci sono nel sistema?

  4. Linux:come scoprire lo spazio dei nomi di un particolare processo?

  5. Come faccio a scoprire quale processo ha un blocco su un file in Linux?

Come trovare un nome di processo utilizzando il numero PID in Linux

Come trovare quali dispositivi sono collegati alla rete in Linux

Come scoprire la versione del kernel Linux in esecuzione sul tuo PC

Come scoprire da quanto tempo è in esecuzione un processo in Linux

Linux:scopri quale processo sta usando tutta la RAM?

Come scoprire lo spazio dei nomi di un particolare processo?