Comment savoir quelles fonctionnalités Linux un processus nécessite pour fonctionner?

Je suis dans une situation difficile où je ne sais pas quelles capacités Linux un processus nécessite pour fonctionner. Quel est le meilleur moyen, ou n’importe quel moyen de savoir quel plafond est requirejs?

La seule chose à laquelle je peux penser en ce moment, c’est d’utiliser capsh et de supprimer toutes les majuscules sur un processus. Le processus échoue alors et je commence à append des majuscules (en supprimant –drop = CAP_XZY) jusqu’à ce qu’il fonctionne.

De meilleures suggestions?

Une autre méthode, que j’ai trouvée il y a quelque temps dans cet article de Brendan Gregg, consiste à utiliser les capacités de traceur de capacités .

Ci-dessous 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 un avantage significatif en ce qui concerne les contrôles de capacité d’enregistrement effectués par le kernel pour un processus donné. Cela permet de profiler l’application en fonction des capacités dont elle a réellement besoin, par exemple pour limiter les privilèges et l’exécuter en tant qu’utilisateur non privilégié.

Bien que pscap permette de répertorier les capacités effectives de tous les processus en cours d’exécution, il n’offre pas une méthode fiable de vérification des capacités requirejses par le processus, car:

  • Un processus peut avoir la capacité X dans son ensemble autorisé et le porter à l’ensemble effectif pendant une courte période pour effectuer une opération privilégiée.
  • Un processus aurait pu démarrer avec un ensemble de fonctionnalités plus large, effectuer l’initialisation nécessitant des privilèges élevés et supprimer certaines fonctionnalités (par exemple, l’ ouverture d’une socket raw ).
  • Il ne fonctionne que pour les processus qui s’exécutent déjà de manière basée sur les capacités. Que faire si vous deviez déterminer le jeu de fonctionnalités minimal requirejs pour votre nouvelle application?
  • Il ne permet pas de corréler les vérifications de privilèges faites pour les applications avec les opérations qu’il effectue, avec des horodatages capables d’ effectuer des vérifications uniques.

Les sources de capacités sont disponibles sur github . Les instructions d’installation pour BCC (y compris les capacités ) sont disponibles ici . Pour plus d’informations, reportez-vous à l’article de blog mentionné au début. Veuillez également noter que le kernel 4.4+ nécessite une alternative pour les kernelx plus anciens.

Note: je ne suis pas l’auteur, je ne suis pas non plus affilié aux développeurs d’outils. Je voulais juste le présenter à un public plus large, car je l’ai personnellement utilisé pour développer un profil de fonctionnalités pour une application de surveillance complexe qui nécessitait auparavant des privilèges root complets, et a trouvé cette aide extrêmement utile.

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 

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