psから他のユーザープロセスの実行可能ファイルを取得するには?

psから他のユーザープロセスの実行可能ファイルを取得するには?

root以外のユーザーとして実行するときに使用しようとするとreadlink(2)/proc/<pid>/exe私に属していないプロセスの権限エラーが発生します。それでは、setuid root以外のオプションを使用してさまざまなユーザープロセスの実行可能ファイルを確認する方法はps-f

ベストアンサー1

この-fオプションは、実行可能ファイルのフルパスを表示せずに、代わりに実行可能ファイルを呼び出すために使用されるコマンドラインを表示します。この情報は、プロセスを実行しているユーザーだけが読み取ることができる実行可能ファイルパスとは異なり、誰でも読み取ることができ、そのパスから取得されます。/proc/PID/cmdline/proc/PID/exe

psシステムコールを観察して、どのデータを読み込んでいるかを確認できます。strace ps -ef -p 1 | less:


stat("/proc/1", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/1/stat", O_RDONLY)          = 6
read(6, "1 (init) S 0 1 1 0 -1 4202752 78"..., 1024) = 191
read(6, "", 833)                        = 0
close(6)                                = 0
open("/proc/1/status", O_RDONLY)        = 6
read(6, "Name:\tinit\nState:\tS (sleeping)\nT"..., 1024) = 752
read(6, "", 272)                        = 0
close(6)                                = 0
open("/proc/1/cmdline", O_RDONLY)       = 6
read(6, "/sbin/init", 2047)             = 10
close(6)                                = 0

このcオプションを渡すと、psコマンド名が報告され、この名前も誰でも読むことができます。これは、16文字に切り捨てられた実行可能ファイルのデフォルト名(パス情報なし)です。/proc/PID/stat

ps.NETファイル内の実行可能ファイルのパスを報告するオプションがないと思います。使用できます(/proc/PID/exelsoftxtこれは「ファイル記述子」と呼ばれ、/proc/1/exe (readlink: Permission denied)他のユーザーのプロセスに関する情報を印刷するように求められた場合、予想どおり文句を言います。

注:私の答えはLinuxに関するものです。他のユーザープロセスについて報告できる情報とその動作方法の詳細は、Unixのバリエーションによって大きく異なります。

おすすめ記事