Я хотел бы дать пользователю без полномочий root (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
?