GNU/Linux >> Linux Esercitazione >  >> Linux

Come gestire le capacità dei file Linux

Tradizionalmente, un processo Linux è privilegiato (in esecuzione come root) o non privilegiato. I processi privilegiati non sono soggetti ai controlli dei permessi del kernel e quindi hanno pieno potere su un sistema. Una funzionalità è un privilegio distinto e indipendente che può essere utilizzato da un processo per aggirare determinati controlli di autorizzazione. Le funzionalità sono state introdotte per la prima volta in Linux 2.2 e molte altre sono state aggiunte nelle versioni successive. Di solito sono impostati su file eseguibili e vengono automaticamente concessi al processo quando viene eseguito un file con una capacità. Le funzionalità essenzialmente dividono il potere dell'utente root in privilegi separati, il che migliora la sicurezza limitando l'accesso che un utente malintenzionato otterrebbe sfruttando o abusando di un servizio.

Questa guida introdurrà alcune funzionalità comunemente utilizzate e dimostrerà come possono essere visualizzate e modificate.

Capacità comuni

Il kernel Linux implementa una moltitudine di funzionalità. Alcuni di loro sono:

  • CAP_SYS_ADMIN:consente un'ampia gamma di operazioni. Questa capacità dovrebbe essere evitata a favore di capacità più specifiche.
  • CAP_CHOWN:apporta modifiche all'ID utente e all'ID gruppo dei file 
  • CAP_DAC_READ_SEARCH:ignora la lettura del file e la lettura/esecuzione dei controlli della directory. Un programma con questa capacità può essere utilizzato per leggere qualsiasi file sul sistema.
  • CAP_DAC_OVERRIDE:ignora DAC (Discretionary Access Control), ovvero ignora i controlli di autorizzazione di lettura/scrittura/esecuzione. Questa capacità garantisce a un eseguibile la possibilità di accedere e modificare qualsiasi file sul filesystem.
  • CAP_NET_BIND_SERVICE:consente il collegamento a numeri di porta inferiori a 1024.
  • CAP_KILL:ignora i controlli di autorizzazione per l'invio di segnali a processi come SIGHUP e SIGKILL.
  • CAP_SYS_NICE:modifica, tra gli altri, il valore della gentilezza e la priorità di pianificazione dei processi.
  • CAP_SYS_RESOURCE:consente di ignorare vari limiti sulle risorse di sistema, come le quote del disco, i limiti di tempo della CPU, ecc.

L'elenco completo è disponibile nella pagina di manuale delle capacità(7).

Ai file possono essere assegnate capacità in 3 diversi set:consentito, ereditabile ed effettivo. I thread hanno 2 set aggiuntivi:ambiente e delimitazione. Ciascun set può contenere zero o più capacità, ad eccezione del set effettivo per i file, che in realtà è un singolo bit. Questi set definiscono comportamenti complessi del kernel che esulano dallo scopo di questa guida. Quando assegniamo funzionalità ai file, nella maggior parte dei casi utilizzeremo i set consentiti ed effettivi.

NOTA:SELinux può interferire con le funzionalità. Sui sistemi con SELinux in modalità di applicazione, potrebbe impedire ai processi di sfruttare le loro capacità.

Strumenti obbligatori

Esistono due diversi pacchetti per la gestione delle capacità:libcap e libcap-ng. Quest'ultimo è progettato per essere più semplice del primo. Entrambi sono trattati in questa guida.

libcap fornisce getcap e setcap per la visualizzazione e l'impostazione delle capacità dei file, mentre libcap-ng consolida entrambe le funzioni in un unico strumento, filecap.

libcap

Installazione

Su Debian, Ubuntu e altre distribuzioni basate su Debian, le utilità libcap possono essere installate con:

apt update
apt install libcap2-bin

Per installare su CentOS, usa il seguente comando:

yum install libcap

Per installare su Fedora, usa il seguente comando:

dnf install libcap

Per installare su Arch, utilizzare il seguente comando:

pacman -Sy libcap

Utilizzo

getcap mostra semplicemente le capacità assegnate a un file, se presenti. Usa la seguente sintassi:

getcap /path/to/binary

Ad esempio:

Getcap può anche cercare ricorsivamente con il flag -r. Ad esempio:

NOTA:2>/dev/null viene utilizzato per evitare di ingombrare l'output con errori "Operazione non supportata", che si verificano quando getcap tenta di ottenere le capacità dei file in /sys, /proc, ecc. Questi speciali filesystem virtuali non supportano capacità.

Per impostare le capacità dei file con setcap, usa la seguente sintassi:

setcap CAP+set filename

Ad esempio, per aggiungere CAP_CHOWN e CAP_DAC_OVERRIDE agli insiemi consentiti ed effettivi, utilizzare:

setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1

Per rimuovere le funzionalità da un file, usa il flag -r:

setcap -r filename

Ecco alcuni esempi aggiuntivi:

libcap-ng

Installazione

Per installare su Debian, Ubuntu e altre distribuzioni basate su Debian:

apt update
apt install libcap-ng-utils

Per installare su CentOS:

yum install libcap-ng-utils

Per installare su Fedora:

dnf install libcap-ng-utils

Per installare su Arch:

pacman -Sy libcap-ng

Utilizzo

  • Il programma filecap fa riferimento a capacità senza il prefisso "CAP_" (ad esempio, NET_ADMIN invece di CAP_NET_ADMIN).
  • filecap non funziona con percorsi relativi, si aspetta il percorso completo quando si passano file o directory come argomenti.
  • filecap non ti consente di specificare set di funzionalità, utilizza sempre le funzionalità consentite ed efficaci durante l'impostazione.

Per visualizzare le capacità assegnate a un file:

filecap /full/path/to/file

Per cercare una directory in modo ricorsivo, usa:

filecap /full/path/to/dir

Per cercare nell'intero filesystem con filecap, utilizzare uno dei seguenti comandi:

filecap /
filecap -a

Ecco alcuni esempi di utilizzo di filecap per esaminare file e directory:

Per impostare una funzionalità su un file, usa la sintassi:

filecap /full/path/to/file cap_name

Ad esempio:

filecap /usr/bin/tac dac_override

Per rimuovere le funzionalità, usa questa sintassi:

filecap /full/path/to/file none

Ecco alcuni esempi di impostazione e rimozione di funzionalità utilizzando filecap:

Conclusione

Le funzionalità sono una potente funzionalità del kernel con ampie applicazioni di sicurezza. Dovrebbero essere sostituiti con privilegi completi e SUID root quando possibile.


Linux
  1. Come gestire la password dell'account in Linux

  2. Come creare uno scambio in Linux

  3. Come rinominare un file in Linux?

  4. Come gestire una partizione di scambio in Linux

  5. Come montare un file iso in Linux

Come rinominare uno o più file in Linux

Come gestire il file system Linux su Ubuntu Server

Come collegare simbolicamente un file in Linux

Come crittografare file su Linux

Come disabilitare lo scambio in Linux

Come usare gzip in Linux?