setuid プロセスはそのユーザーが所有するプロセスを見ることができません

setuid プロセスはそのユーザーが所有するプロセスを見ることができません

非ルート ユーザー ( nicollet) に、Apache2 によって開始されたプロセスを検出してシグナルを送信する機能を与えたいと思います (これらのプロセスは FastCGI スクリプトであり、シグナルはキャッシュを空にするように指示します)。プロセスは Web ユーザー ( 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:~#

しかし、私は同じ状況を観察しました。プロセスは と によって表示されますがrootwww-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、によって起動されたときにpssetuid 実行可能ファイルとして実行できるのはなぜでしょうか?www-datanicollet

答え1

何年も前から、カーネル レベルで通常のユーザー アカウントが自分のプロセスのみを参照できるように制限することが可能でした。この制限は、grsecurity、SELinux、およびその他のセキュリティ フレームワークで可能でしたが、ディストリビューションではデフォルトで一般的に使用されていません。

私はしばらくの間 Debian の不安定なブランチを試していません (Lenny を実行しています) が、おそらく最近カーネル構成でそのスイッチがオンになったのでしょう。それはあなたが観察しているのとまったく同じ効果を引き起こします - setuid 実行可能ファイルであっても元の uid (nicollet) は依然として認識されており、EUID (実効 uid) のみが変更されます。

関連情報