
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 nicollet
Benutzer diese Prozesse anzuzeigen.
Die Prozesse werden ausgeführt und können von beiden angezeigt root
werden 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 nicollet
Benutzer 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-data
und 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 root
und sichtbar, www-data
aber 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 grep
Prozess zwar ausgeführt wird www-data
(da er von einer ausführbaren Setuid-Datei gestartet wird) und sichtbar ist, der baryton
Prozess jedoch nicht.
Was ist hier los? Warum können diese Prozesse ps
von ausgeführt werden , aber nicht von einer ausführbaren Setuid-Datei, die als ausgeführt wird , wenn sie von gestartet wurde ?www-data
ps
www-data
nicollet
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.