Получите возможности сервера CentOS в удобочитаемой форме, используя Python - PullRequest
1 голос
/ 25 октября 2019

Я пытаюсь проанализировать возможности, связанные с моим сервером 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.

Есть ли более простой процесс преобразования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...