credentials(7)、fork(2)、execve(2) を読み取ります。 fork システム コールは、プロセスを作成する方法です (現在、fork
clone(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
として入手できます。 symlink であり、それを 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.
停止するには プロセス、SIGSTOP
を使用 (または SIGTSTP
) kill(2) で使用されるシグナル。 signal(7) を参照してください。
再開するには 停止したプロセス、SIGCONT
を使用
通常、所有者はそのプロセスを起動したユーザーです。コマンドは他のユーザーが実行できる可能性がありますが、それは別のプロセスになります。
<ブロック引用>他の所有者がそのプロセスを実行できないということですか?
他に所有者はいません。プログラム (実行可能ファイル) とプロセス (実行中のプログラム) を混同しないでください。
<ブロック引用>他の所有者がそのプロセスを実行/停止/再開できないということですか?
単一の所有者がすでにプロセスを開始しています。他のユーザーの場合 、所有者ではなく、状況によります。
ルート、つまり uid
を持つユーザー 0 に等しい、フル パワーです。同じ uid
を共有している他のユーザー OS の観点から見ると同じユーザーなので、プロセスにもフル パワーを与えてください。
sudo
を通じて所有者またはルート権限に切り替えることが許可されていない限り、別の uid を持つユーザーはプロセスを強制終了/停止/再開することはできません。 または同様のコマンド、またはより少ない程度で、それらがその階層からそのプロセスに関連している場合.