El proceso setuid no puede ver los procesos propiedad de ese usuario.

El proceso setuid no puede ver los procesos propiedad de ese usuario.

Me gustaría darle a un usuario no root ( nicollet) la capacidad de detectar y enviar una señal a los procesos iniciados por Apache2 (esos procesos son scripts FastCGI y la señal les indica que vacíen su caché). Los procesos son propiedad del usuario web ( www-data), y los estoy ejecutando en Debian inestable.

No encuentro ninguna manera de que el nicolletusuario vea esos procesos.

Los procesos se están ejecutando y se pueden ver tanto por como rootpor www-data:

root@linux-01:~# ps -Af | grep baryton
www-data 17649 17648  0 10:27 ?        00:00:00 baryton
www-data 28145     1  0 Nov01 ?        00:00:12 baryton --bot
root     18701 18700  0 10:46 pts/0    00:00:00 grep baryton
root@linux-01:~#

Sin embargo, ejecutar ese mismo comando con mi nicolletusuario no devuelve nada:

nicollet@linux-01:~$ ps -Af | grep baryton
nicollet 18704 18703  0 10:46 pts/0    00:00:00 grep baryton
nicollet@linux-01:~$

Intenté crear un ejecutable que ejecute la consulta anterior usando system(). Pertenece www-datay tiene el bit setuid configurado:

root@linux-01:~# which setuid-update
/usr/local/bin/setuid-update
root@linux-01:~# ls -l /usr/local/bin/setuid-update 
-rwsr-xr-x 1 www-data www-data 11046 Nov  2 10:27 /usr/local/bin/setuid-update
root@linux-01:~#

Sin embargo, observo la misma situación: los procesos son visibles por rooty www-datapero no nicollet:

root@linux-01:~# setuid-update
www-data 17649 17648  0 10:27 ?        00:00:00 baryton
www-data 28145     1  0 Nov01 ?        00:00:13 baryton --bot
www-data 18712 18711  0 10:46 pts/0    00:00:00 sh -c ps -Af | grep baryton
www-data 18714 18712  0 10:46 pts/0    00:00:00 grep baryton
root@linux-01:~# su nicollet
nicollet@linux-01:~$ setuid-update
www-data 18716 18715  0 10:46 pts/0    00:00:00 sh -c ps -Af | grep baryton
www-data 18717 18716  0 10:46 pts/0    00:00:00 grep baryton
nicollet@linux-01:~$

Lo más sorprendente es que el grepproceso se ejecuta www-data(porque se inicia desde un ejecutable setuid) y es visible, pero el barytonproceso no lo es.

¿Que está pasando aqui? ¿Por qué se puede psejecutar mediante www-datamostrar esos procesos, pero psejecutar mediante un ejecutable setuid que se ejecuta como www-datano se puede, cuando se inicia mediante nicollet?

Respuesta1

Durante años ha sido posible restringir a nivel de kernel las cuentas de usuario habituales para ver sólo sus propios procesos. Esta restricción ha sido posible con grsecurity, SELinux y otros marcos de seguridad, pero las distribuciones no la utilizan comúnmente de forma predeterminada.

No he probado la rama inestable de Debian por un tiempo (he estado ejecutando Lenny), pero quizás últimamente hayan activado ese interruptor en la configuración del kernel. Causaría exactamente el mismo efecto que está observando: incluso con el ejecutable setuid, el uid original (nicollet) todavía se conoce y solo se cambia el EUID (uid efectivo).

información relacionada