Une autre méthode, que j'ai rencontrée il y a quelque temps dans ce billet de blog de Brendan Gregg, consiste à utiliser le traceur de capacités - capable .
Voici un exemple de sortie :
$ 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
Il présente l'avantage significatif d'enregistrer les vérifications de capacité effectuées par le noyau pour un processus donné. Cela permet de profiler l'application par rapport aux capacités dont elle a réellement besoin, par ex. pour restreindre les privilèges et l'exécuter en tant qu'utilisateur non privilégié.
Tandis que pscap permet de lister les efficaces capacités de tous les processus en cours d'exécution, il n'offre pas de méthode fiable pour vérifier quelles capacités sont en fait requises par le processus, car :
- Un processus peut avoir la capacité X dans son ensemble autorisé et ne l'élever à l'ensemble effectif que pendant une courte période pour effectuer une opération privilégiée.
- Un processus aurait pu démarrer avec un ensemble plus large de fonctionnalités, effectuer l'initialisation nécessitant des privilèges élevés et supprimer certaines (ou toutes) fonctionnalités (par exemple, ping ouvrant un socket brut).
- Cela ne fonctionne que pour les processus qui s'exécutent déjà de manière basée sur les capacités. Et si vous deviez déterminer l'ensemble de fonctionnalités minimal requis pour votre application nouvellement développée ?
- Il ne permet pas de corréler les vérifications de privilèges effectuées pour l'application avec les opérations qu'elle effectue, avec capable vous obtenez des horodatages pour chaque vérification unique.
Les sources pour capable sont disponibles sur github. Instructions d'installation pour BCC (y compris capable ) sont disponible ici.
Remarque :je ne suis pas l'auteur et je ne suis en aucun cas affilié aux développeurs de l'outil. Je voulais juste l'apporter à un public plus large, car je l'ai personnellement utilisé pour développer un profil de capacités pour une application de surveillance complexe qui nécessitait auparavant des privilèges root complets pour s'exécuter, et j'ai trouvé ce traceur d'une aide précieuse.
Il s'avère que c'est plus facile que prévu. Installez libcap-ng (https://people.redhat.com/sgrubb/libcap-ng/) et utilisez pscap
.
Dans Ubuntu 16.04, il peut être installé avec :
sudo apt-get install libcap-ng-utils
Exemple d'extrait de sortie :
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
Basé sur la récente mise à jour de libcap2
1 :(Option courte) :getpcaps
Description :
À partir d'ici :
getpcaps affiche les capacités des processus indiqués par la ou les valeurs pid données sur la ligne de commande.
Exemple :
$ 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 :(Option un peu plus longue) :/proc status et capsh
Description :
proc est un pseudo-système de fichiers d'informations sur les processus ou, en d'autres termes, un répertoire dans lequel vous pouvez afficher des informations sur tous les processus.
À propos de capsh :
La prise en charge et l'utilisation des fonctionnalités Linux peuvent être explorées et limitées avec cet outil. Cet outil fournit un wrapper pratique pour certains types de test de capacité et de création d'environnement.
Il fournit également des fonctionnalités de débogage utiles pour résumer l'état des capacités.
Exemple :
$ cat /proc/<PID>/status | grep Cap
Et vous obtiendrez (sur la plupart des systèmes) :
CapInh: 00000000a80425fb (Inherited capabilities)
CapPrm: 0000000000000000 (Permitted capabilities)
CapEff: 0000000000000000 (Effective capabilities)
CapBnd: 00000000a80425fb (Bounding set)
CapAmb: 000000000000000 (Ambient capabilities set)
Utilisez le capsh
utilitaire pour décoder les nombres hexadécimaux dans le nom des capacités :
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
(*) Vous pouvez télécharger capsh
avec :sudo apt-get install git libpcap-dev
.