Я хотів би надати користувачу, що не є адміністратором ( nicollet ) здатність виявляти і посилати сигнал до процесів, запущених Apache2 (ці процеси є скриптами FastCGI, і сигнал дає їм можливість очистити кеш). Процеси належать користувачеві Інтернету ( www-data ), і я працюю на Debian нестабільно.
Я не можу знайти жодного способу мати nicollet користувач бачить ці процеси.
Процеси виконуються і можуть бачити обидва root і 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:~#
Втім, запустивши таку ж команду з моїм nicollet користувач нічого не повертає:
nicollet@linux-01:~$ ps -Af | grep baryton
nicollet 18704 18703 0 10:46 pts/0 00:00:00 grep baryton
nicollet@linux-01:~$
Я спробував створити виконуваний файл, який використовує вищезазначений запит system(). Йому належить www-data і має набір бітів setuid:
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:~#
Проте, я спостерігаю таку ж ситуацію: процеси є видимими root і www-data але ні 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:~$
Найдивніше те, що grep процес дійсно виконується www-data (тому що він запущений з виконуваного файлу setuid) і є видимим, але baryton процес не є.
Що тут відбувається? Навіщо ps керувати www-data показувати ці процеси, але ps запускається виконуваним файлом setuid як www-data неможливо, коли він розпочався nicollet?