¿Cómo leer el directory / proc / <pid> / fd de un process, que tiene una capacidad de linux?

Como usuario no root estoy ejecutando un process. El process binary ha recibido una capacidad cap_sys_resource. Aunque el process es propiedad del mismo usuario, ese usuario no puede leer su directory // proc // fd. Los permissions en / proc / pid se ven así:

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 conetworkingump_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 pagemp -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 

¿Hay alguna manera de leer el directory / proc // fd sin usar el usuario raíz?

La raíz real debería ser capaz de hacerlo. ¡Creo que debes ser más específico sobre quién intenta leer /proc/pid/fd/ si quieres que te sugiera una solución más específica!

Tenga en count que en el caso incluido, es posible que a root le falten algunas de sus capacidades habituales, lo que le permite eludir las comprobaciones de permissions.

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

Permiso para eliminar reference o leer (readlink (2)) los enlaces simbólicos en este directory se rigen por una comprobación PTRACE_MODE_READ_FSCREDS en modo acceso ptrace; ver ptrace (2).

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

Denegar el acceso si el atributo "dumpable" del process objective tiene un valor distinto de 1 (SUID_DUMP_USER, consulte la discusión de PR_SET_DUMPABLE en prctl (2)), y el llamante no tiene la capacidad CAP_SYS_PTRACE en el espacio de nombres de usuario del process objective.

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

PR_SET_DUMPABLE (desde Linux 2.3.20) Establezca el estado del indicador "dumpable", que determina si los volcados del núcleo se producen para el process de llamada tras la entrega de una señal cuyo comportamiento pnetworkingeterminado es producir un volcado del núcleo. En núcleos hasta e incluyendo 2.6.12, arg2 debe ser 0 (SUID_DUMP_DISABLE, el process no es dumpable) o 1 (SUID_DUMP_USER, el process es dumpable). Entre los núcleos 2.6.13 y 2.6.17, también se permitía el valor 2, lo que causaba que cualquier binary que normalmente no sería object de dumping fuera legible por root; por razones de security, esta característica ha sido eliminada. (Consulte también la descripción de / proc / sys / fs / suid_dumpable en proc (5).) Normalmente, este indicador se establece en 1. Sin embargo, se restablece al valor actual contenido en el file / proc / sys / fs / suid_dumpable (que de forma pnetworkingeterminada tiene el valor 0), en las siguientes circunstancias:

  • La identificación efectiva del usuario o grupo del process ha cambiado.

  • El ID del usuario o grupo del sistema de files del process ha cambiado (ver cnetworkingenciales (7)).

  • El process ejecuta (execve (2)) un set-user-ID o set-group-ID program, resultando en un cambio de la identificación de usuario efectiva o la identificación de grupo efectiva.

  • El process ejecuta (execve (2)) un progtwig que tiene capacidades de files (ver capacidades (7)), pero solo si las capacidades permitidas obtenidas exceden aquellas permitidas para el process.