Процесс setuid не может видеть процессы, принадлежащие этому пользователю

Процесс setuid не может видеть процессы, принадлежащие этому пользователю

Я хотел бы предоставить пользователю, не являющемуся root ( nicollet), возможность обнаруживать и отправлять сигнал процессам, запущенным Apache2 (эти процессы являются скриптами FastCGI, и сигнал сообщает им о необходимости очистить кэш). Процессы принадлежат веб-пользователю ( www-data), и я работаю на Debian stable.

Я не могу найти способа, чтобы 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процесс — нет.

Что здесь происходит? Почему psrun by может www-dataпоказывать эти процессы, а psrun by исполняемый файл setuid, работающий как, www-dataне может, когда он запущен nicollet?

решение1

В течение многих лет можно было ограничить на уровне ядра обычные учетные записи пользователей, чтобы они видели только свои собственные процессы. Это ограничение было возможно с grsecurity, SELinux и другими фреймворками безопасности, но обычно не используется по умолчанию дистрибутивами.

Я не пробовал Debian в нестабильную ветку некоторое время (был Lenny), но, возможно, они недавно включили этот переключатель в конфигурации ядра. Это вызвало бы точно такой же эффект, который вы наблюдаете — даже с исполняемым файлом setuid исходный uid (nicollet) все еще известен, и меняется только EUID (эффективный uid).

Связанный контент