ps
コマンドを使用して、プロセスの所有者を特定できます。これは、他のユーザーがそのプロセスを実行/強制終了/再開できないことを意味しますか?
ps
コマンドを使用して、プロセスの所有者を特定できます。これは、他のユーザーがそのプロセスを実行/強制終了/再開できないことを意味しますか?
回答:
credentials(7)、fork(2)、execve(2)を読み取ります。forkシステムコールは、プロセスが作成されている方法である(今日、fork
多くの場合で実装されたクローン(2)がありますが、実装の詳細としてそれを見ることができます)。execシステムコールは、途中で実行可能なプログラムが開始されています。すべては、いくつかのプロセスからいくつかのシステムコール(syscalls(2)にリストされている)を使用して行われることに注意してください。最初のプロセス(initまたはsystemd)は、ブート時にカーネルによって魔法のように開始されました。他のプロセスはfork(2)によって開始されました。最近のLinuxカーネルは時々 -しかし、めったに-魔法のようにいくつかの特別なプロセス(例えば起動しない/sbin/hotplug
(例えば)またはカーネルスレッドをkworker
、kswapd
...)。
つまり、すべてのプロセス(およびすべてのファイル)には、所有者(技術的にはuid、小さな非負の数)とグループ(gid)があります。0のuidはroot用であり、追加の権限があります。
setuid(およびsetreuid(2) ...)についても読んでください。
他の所有者がそのプロセスを実行できないことを意味しますか?
プロセスはすでに実行されている(ただし、アイドル状態または待機状態になっている可能性がある)ため、プロセスを再度実行することはできません。プロセス(動的なもの)とその中で実行されているプログラム(実行可能ファイル、多くの場合ELF形式)を混同しないでください。
特定のプログラム(など/bin/bash
)は、いくつかのプロセスで実行できます。多くの実行可能ファイルは、(特定の瞬間に)それらを実行しているプロセスがなくても、ディスク上に残ります。
Linuxでは、proc(5)はプロセスの状態についてカーネルに問い合わせるのに非常に役立ちます。例cat /proc/$$/status
とを試してくださいcat /proc/self/maps
。pgrep(1)、ps(1)、top(1)も参照してください。
各プロセスには、独自の仮想アドレス空間、独自のファイル記述子テーブル、独自の作業ディレクトリ(および多くの場合、複数のスレッド、pthreads(7)を参照)などがあります。
他の所有者がそのプロセスを実行/終了/再開できないことを意味しますか?
プロセスを実行しても意味がありません(すでに実行されています)。ただし、pid 1234のプロセスの実行可能ファイルは/proc/1234/exe
シンボリックリンクとして使用可能であり、execve(2)に使用することもできますが、おそらく使用しないでください - の許可ルールがexecve
適用されます。
プロセスをkill(2)するには、通常、同じuidが必要です。ただし、ドキュメントには次のように記載されています。
For a process to have permission to send a signal, it must either be privileged (under Linux: have the CAP_KILL capability in the user namespace of the target process), or the real or effective user ID of the sending process must equal the real or saved set-user-ID of the target process. In the case of SIGCONT, it suffices when the sending and receiving processes belong to the same session.
プロセスを停止するには、kill(2)で使用されるSIGSTOP
(またはSIGTSTP
)シグナルを使用します。signal(7)を参照してください。
停止したプロセスを再開するには、SIGCONT
シグナルを使用します。
所有者は通常、そのプロセスを起動したユーザーです。コマンドは他のユーザーが実行できる可能性がありますが、それは別のプロセスになります。
他の所有者がそのプロセスを実行できないことを意味しますか?
他の所有者はいません。プログラム(実行可能ファイル)とプロセス(実行中のプログラム)を混同しないでください。
他の所有者がそのプロセスを実行/強制終了/再開できないことを意味しますか?
単一の所有者はすでにプロセスを開始しました。所有者ではなく他のユーザーを意味する場合は、状況によって異なります。
ルート、つまりuid
0に等しいユーザーは、全力を持っています。同じことを共有している他のユーザーuid
は、OSの観点からは同じユーザーなので、プロセスにも全力を尽くします。
別のuidを持つユーザーは、sudo
同様のコマンドを使用して所有者またはroot特権に切り替えることが許可されていない限り、またはプロセスに関連している場合は、より少ない程度で、プロセスを強制終了/停止/再開できません。彼らの階層から。