Как прочитать каталог / proc / <pid> / fd процесса, который имеет возможности linux?

Как пользователь, не являющийся пользователем root, я запускаю процесс. Бинарному процессу была предоставлена ​​возможность cap_sys_resource. Несмотря на то, что процесс принадлежит одному и тому же пользователю, этот пользователь не может читать свою директорию / proc // fd. Разрешения в / proc / pid выглядят следующим образом:

dr-xr-xr-x. 9 ec2-user ec2-user 0 May 12 01:03 . dr-xr-xr-x. 249 root root 0 Apr 3 13:34 .. dr-xr-xr-x. 2 ec2-user ec2-user 0 May 12 01:03 attr -rw-r--r--. 1 root root 0 May 12 01:04 autogroup -r--------. 1 root root 0 May 12 01:03 auxv -r--r--r--. 1 root root 0 May 12 01:04 cgroup --w-------. 1 root root 0 May 12 01:04 clear_refs -r--r--r--. 1 root root 0 May 12 01:03 cmdline -rw-r--r--. 1 root root 0 May 12 01:04 comm -rw-r--r--. 1 root root 0 May 12 01:04 coredump_filter -r--r--r--. 1 root root 0 May 12 01:04 cpuset lrwxrwxrwx. 1 root root 0 May 12 01:04 cwd -r--------. 1 root root 0 May 12 01:04 environ lrwxrwxrwx. 1 root root 0 May 12 01:04 exe dr-x------. 2 root root 0 May 12 01:03 fd dr-x------. 2 root root 0 May 12 01:04 fdinfo -rw-r--r--. 1 root root 0 May 12 01:04 gid_map -r--------. 1 root root 0 May 12 01:04 io -r--r--r--. 1 root root 0 May 12 01:04 limits -rw-r--r--. 1 root root 0 May 12 01:04 loginuid dr-x------. 2 root root 0 May 12 01:04 map_files -r--r--r--. 1 root root 0 May 12 01:04 maps -rw-------. 1 root root 0 May 12 01:04 mem -r--r--r--. 1 root root 0 May 12 01:04 mountinfo -r--r--r--. 1 root root 0 May 12 01:04 mounts -r--------. 1 root root 0 May 12 01:04 mountstats dr-xr-xr-x. 5 ec2-user ec2-user 0 May 12 01:04 net dr-x--x--x. 2 root root 0 May 12 01:03 ns -r--r--r--. 1 root root 0 May 12 01:04 numa_maps -rw-r--r--. 1 root root 0 May 12 01:04 oom_adj -r--r--r--. 1 root root 0 May 12 01:04 oom_score -rw-r--r--. 1 root root 0 May 12 01:04 oom_score_adj -r--r--r--. 1 root root 0 May 12 01:04 pagemap -r--r--r--. 1 root root 0 May 12 01:04 personality -rw-r--r--. 1 root root 0 May 12 01:04 projid_map lrwxrwxrwx. 1 root root 0 May 12 01:04 root -rw-r--r--. 1 root root 0 May 12 01:04 sched -r--r--r--. 1 root root 0 May 12 01:04 schedstat -r--r--r--. 1 root root 0 May 12 01:04 sessionid -rw-r--r--. 1 root root 0 May 12 01:04 setgroups -r--r--r--. 1 root root 0 May 12 01:04 smaps -r--r--r--. 1 root root 0 May 12 01:04 stack -r--r--r--. 1 root root 0 May 12 01:03 stat -r--r--r--. 1 root root 0 May 12 01:03 statm -r--r--r--. 1 root root 0 May 12 01:03 status -r--r--r--. 1 root root 0 May 12 01:04 syscall dr-xr-xr-x. 3 ec2-user ec2-user 0 May 12 01:03 task -r--r--r--. 1 root root 0 May 12 01:04 timers -rw-r--r--. 1 root root 0 May 12 01:04 uid_map -r--r--r--. 1 root root 0 May 12 01:04 wchan 

Есть ли способ прочитать каталог / proc // fd без использования пользователя root?

Настоящий корень должен уметь это делать. Я думаю, вам нужно быть более конкретным о том, кто пытается читать /proc/pid/fd/ если вы хотите, чтобы мы предложили более конкретное решение!

Обратите внимание, что в закрытом случае root может отсутствовать некоторые из его обычных возможностей, которые позволяют ему обходить проверки разрешений.

http://man7.org/linux/man-pages/man5/proc.5.html

Разрешение на разыменование или чтение (readlink (2)) символические ссылки в этом каталоге управляются с помощью режима доступа Ptrace PTRACE_MODE_READ_FSCREDS; см. ptrace (2).

http://man7.org/linux/man-pages/man2/ptrace.2.html

Запретить доступ, если атрибут целевого процесса «dumpable» имеет значение, отличное от 1 (SUID_DUMP_USER; см. Обсуждение PR_SET_DUMPABLE в prctl (2)), и вызывающий объект не имеет возможности CAP_SYS_PTRACE в пространстве имен пользователя целевого процесса.

http://man7.org/linux/man-pages/man2/prctl.2.html

PR_SET_DUMPABLE (начиная с Linux 2.3.20) Установите состояние флага «dumpable», который определяет, создаются ли дампы ядра для вызывающего процесса после доставки сигнала, поведение по умолчанию которого заключается в создании дампа ядра. В ядрах до 2.6.12 включительно, arg2 должен быть равен 0 (SUID_DUMP_DISABLE, процесс не является dumpable) или 1 (SUID_DUMP_USER, процесс невозможен). Между ядрами 2.6.13 и 2.6.17 также допускалось значение 2, которое вызывало любые двоичные файлы, которые, как правило, не были бы сброшены, чтобы быть сброшенными, считываемыми только корнем; по соображениям безопасности эта функция была удалена. (См. Также описание / proc / sys / fs / suid_dumpable в proc (5).) Обычно этот флаг установлен в 1. Однако он сбрасывается в текущее значение, содержащееся в файле / proc / sys / fs / suid_dumpable (который по умолчанию имеет значение 0), в следующих случаях:

  • Изменен действующий идентификатор пользователя или группы.

  • Идентификатор пользователя или группы файловой системы процесса изменяется (см. Учетные данные (7)).

  • Процесс выполняет (execve (2)) программу set-user-ID или set-group-ID, что приводит к изменению либо эффективного идентификатора пользователя, либо эффективного идентификатора группы.

  • Процесс выполняет (execve (2)) программу с файловыми возможностями (см. Возможности (7)), но только если разрешенные возможности превышают те, которые уже разрешены для процесса.