Eu gostaria de dar a um usuário não-root ( nicollet
) a capacidade de detectar e enviar um sinal para processos iniciados pelo Apache2 (esses processos são scripts FastCGI e o sinal diz a eles para esvaziar seu cache). Os processos são de propriedade do usuário da web ( www-data
), e eu estou rodando no Debian instável.
Não consigo encontrar uma maneira de fazer com que o usuário nicollet
veja esses processos.
Os processos estão sendo executados e podem ser vistos por root
e 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:~#
No entanto, executar esse mesmo comando com meu nicollet
user não retorna nada:
nicollet@linux-01:~$ ps -Af | grep baryton
nicollet 18704 18703 0 10:46 pts/0 00:00:00 grep baryton
nicollet@linux-01:~$
Eu tentei criar um executável que executa a consulta acima usando system()
. Pertence a www-data
e tem o bit setuid definido:
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:~#
No entanto, observo a mesma situação: os processos são visíveis por root
e www-data
, mas não 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:~$
O mais surpreendente é que o processo grep
é executado por www-data
(porque é iniciado a partir de um executável setuid) e é visível, mas o processo baryton
não é.
O que está acontecendo aqui? Por que ps
executado por www-data
mostra esses processos, mas ps
executado por um executável setuid executado como www-data
não pode, quando é iniciado por nicollet
?