Linux Capabilities

Ciao lista,

recentemente ho scoperto una nuova feature supportata da Linux che non conoscevo, le Capabilities: http://man7.org/linux/man-pages/man7/capabilities.7.html

Praticamente si tratta di un insieme di "permessi" che un file binario eseguibile puo' avere, in aggiunta ai piu' noti rwx a livello di owner, group e other, e ai setuid e setgid che e' possibile assegnare con chmod. Le capabilities non appaiono quando si listano i file con `ls -l` e servono dei comandi appositi per leggerle e scriverle: setcap e getcap.

Nel concreto, gli esempi piu' chiari che ho trovato sono due:

1. quello di assegnare la capability CAP_NET_BIND_SERVICE per permettere a un eseguibile (lanciato da un utente non root) di aprire un socket su una porta inferiore alla 1024.

2. per permettere a un utente di creare un socket raw (non tcp o udp), si puo' assegnare la capability CAP_NET_RAW.

In entrambi i casi, un binario che possiede le suddette capabilities e' in grado di effettuare certe operazioni che normalmente solo root puo' fare senza avere setuid o setgid e la ownership di root.

Quello che non mi e' chiaro e': **nel concreto** quando si devono/possono usare queste capabilities? Qualcuno ha degli esempi concreti di applicazioni che necessitano di avere delle capabilities? In che casi e perche' bisognerebbe assegnare una capability piuttosto che assegnare setuid?

Saluti
Giulio