2017-01-13 11 views
1

У меня есть программа (https://github.com/raboof/connbeat), которая опирается на /proc/[pid]/fd/*, чтобы найти процессы с использованием (сетевого) inode.Чтение/proc/<pid>/fd/<fd> без полного доступа к корню

/proc/[pid]/fd может быть прочитано только root, но я бы хотел как можно больше отказаться от привилегий для обеспечения безопасности.

Есть ли способ, который я мог бы (эффективно) получить в отношениях между процессами и inodes, не требуя полных прав root? Возможно, какой-то syscall, который я могу выборочно предоставить доступ к возможностям использования?

ответ

1

Чтобы иметь возможность читать ФЗ всех процессов, которые необходимо:

  • CAP_DAC_READ_SEARCH - для доступа к/Proc/[PID]/Fd
  • CAP_SYS_PTRACE - читать символические ссылки в/Proc/[PID ]/fd/*

Вы можете ограничить свою программу только этими двумя возможностями. Затем вы можете получить доступ к информации, о которой идет речь, используя обычные вызовы API, такие как readdir() или readlink() или все, что вы предпочитаете.

Для более широкого описания этих двух возможностей см. capabilities(7)

 Смежные вопросы

  • Нет связанных вопросов^_^