Процес setuid не може бачити процеси, якими користується цей користувач


1

Я хотів би надати користувачу, що не є адміністратором ( 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?

Відповіді:


2

Протягом багатьох років можна було обмежити на рівні ядра звичайні облікові записи користувачів, щоб побачити лише їхні власні процеси. Це обмеження було можливим за допомогою grsecurity, SELinux та інших фреймворків безпеки, але зазвичай не використовуються за замовчуванням за допомогою розподілів.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.