GNU/Linux >> Linux の 問題 >  >> Linux

プロセスは所有者を持つことができますか?どういう意味ですか?

credentials(7)、fork(2)、execve(2) を読み取ります。 fork システム コールは、プロセスを作成する方法です (現在、fork clone(2) で実装されることが多いですが、実装の詳細としてそれを見ることができます)。 exec システム コールは、実行可能プログラムを開始する方法です。すべては、いくつかのシステム コール (syscalls(2) にリストされています) を使用して、何らかのプロセスから行われることに注意してください。最初のプロセス (init または systemd) は、起動時にカーネルによって魔法のように開始されています。他のプロセスは fork(2) によって開始されました。最新の Linux カーネルは、ときどき (まれに) 魔法のようにいくつかの特別なプロセスを開始します (例:/sbin/hotplug ) またはカーネルスレッド (例:kworkerkswapd ....).

そうです、すべてのプロセス (およびすべてのファイル) には所有者 (技術的には uid、負でない小さい数) とグループ (gid) があります。 0 uid は root 用であり、追加の権限があります。

setuid (および setreuid(2)...) についてもお読みください。注意が必要です。

<ブロック引用>

他の所有者がそのプロセスを実行できないということですか?

プロセスはすでに 実行中 (ただし、アイドル状態または待機中の可能性があります) であるため、誰も再実行できません。プロセス (動的なもの) と、その内部で実行されているプログラム (多くの場合 ELF 形式の実行可能ファイル) を混同しないでください。

特定のプログラム (例:/bin/bash ) は複数で実行できます プロセス。多くの実行可能ファイルは、(特定の瞬間に) プロセスが実行されることなくディスクに残ります。

Linux では、proc(5) はプロセスの状態についてカーネルに問い合わせるのに非常に便利です。例を試してみてください cat /proc/$$/statuscat /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 を持つユーザーはプロセスを強制終了/停止/再開することはできません。 または同様のコマンド、またはより少ない程度で、それらがその階層からそのプロセスに関連している場合.


Linux
  1. 「rmIsHashed」とはどういう意味ですか?

  2. プロセスが持つことができるさまざまな UID のそれぞれの目的は何ですか?

  3. Linuxコマンドの最後の&はどういう意味ですか?

  1. [[ $? -ne 0 ]]; .ksh の意味

  2. grep パターンで \b はどういう意味ですか?

  3. Linuxにはどのようなプロセスキラーがありますか?

  1. 「–」(二点鎖線)とはどういう意味ですか?

  2. Psの出力にはどういう意味がありますか?

  3. この警告はどういう意味ですか?