Я пытаюсь проанализировать возможности, связанные с моим сервером CentOS. У меня есть вывод команды ps aufxwwwZ
и для каждого процесса содержимое /proc/$pid/status
. Это часть дампа конфигурации сервера, которую я хочу проанализировать.
Я знаю, что могу получить возможности от /proc/$pid/status
(строки начинаются с ^ Cap). Я могу использовать capsh --decode
, чтобы получить читабельную форму. Однако я хотел бы реализовать это исключительно на python как часть более крупного скрипта.
Как можно преобразовать маску возможностей в понятный человеку список возможностей, не заставляя пользователей устанавливать специальные инструментыи запуск subprocess
вещи?
Я попытался понять, как выполняется синтаксический анализ, читая linux /abilities.h . Интересные части:
#define CAP_TO_INDEX(x) ((x) >> 5) /* 1 << 5 == bits in __u32 */
#define CAP_TO_MASK(x) (1 << ((x) & 31)) /* mask for indexed __u32 */
Итак, для cap_net_admin
, который определен в этом заголовочном файле для 12
, я использую CAP_TO_MASK
, ((12) & 31)
дает 4096:
printf("%d", 1 << ((12) & 31));
Однако, это не то, что я наблюдаю для этой специфической способности в /proc/pid/status
, то есть 1000
.
Есть ли более простой процесс преобразования?