Der Setuid-Prozess kann die Prozesse, die diesem Benutzer gehören, nicht sehen.

Der Setuid-Prozess kann die Prozesse, die diesem Benutzer gehören, nicht sehen.

Ich möchte einem Nicht-Root-Benutzer ( nicollet) die Möglichkeit geben, von Apache2 gestartete Prozesse zu erkennen und ihnen ein Signal zu senden (diese Prozesse sind FastCGI-Skripte und das Signal fordert sie auf, ihren Cache zu leeren). Die Prozesse gehören dem Webbenutzer ( www-data) und ich verwende Debian instabil.

Ich kann keine Möglichkeit finden, dem nicolletBenutzer diese Prozesse anzuzeigen.

Die Prozesse werden ausgeführt und können von beiden angezeigt rootwerden 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:~#

Wenn ich jedoch denselben Befehl mit meinem nicolletBenutzer ausführe, wird nichts zurückgegeben:

nicollet@linux-01:~$ ps -Af | grep baryton
nicollet 18704 18703  0 10:46 pts/0    00:00:00 grep baryton
nicollet@linux-01:~$

Ich habe versucht, eine ausführbare Datei zu erstellen, die die obige Abfrage mit ausführt system(). Sie gehört zu www-dataund hat das Setuid-Bit gesetzt:

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:~#

Ich beobachte jedoch die gleiche Situation: Die Prozesse sind durch rootund sichtbar, www-dataaber nicht 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:~$

Am überraschendsten ist, dass der grepProzess zwar ausgeführt wird www-data(da er von einer ausführbaren Setuid-Datei gestartet wird) und sichtbar ist, der barytonProzess jedoch nicht.

Was ist hier los? Warum können diese Prozesse psvon ausgeführt werden , aber nicht von einer ausführbaren Setuid-Datei, die als ausgeführt wird , wenn sie von gestartet wurde ?www-datapswww-datanicollet

Antwort1

Seit Jahren ist es möglich, auf Kernel-Ebene die normalen Benutzerkonten so einzuschränken, dass sie nur ihre eigenen Prozesse sehen. Diese Einschränkung war mit grsecurity, SELinux und anderen Sicherheitsframeworks möglich, wurde aber von den Distributionen nicht standardmäßig verwendet.

Ich habe den instabilen Zweig von Debian eine Weile nicht ausprobiert (habe Lenny verwendet), aber vielleicht haben sie diesen Schalter kürzlich in der Kernelkonfiguration umgeschaltet. Dies würde genau denselben Effekt haben, den Sie beobachten – selbst mit der ausführbaren Datei setuid ist die ursprüngliche UID (Nicollet) noch bekannt und nur die EUID (effektive UID) wird geändert.

verwandte Informationen