1

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

1 ответ1

2

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .