こんにちは。Ubuntu で技術テストを終えたばかりですが、壊れた Web サイトを修正するために PHP プロセスのユーザーを変更する必要があるという問題に遭遇しました。ユーザーは「foo」だったと思いますが、「www-data」にする必要がありました。最後に「プロセスを chown する」ことが修正方法だと教えられましたが、今後の参考のためにその方法を知りたいだけです。
つまり、ファイルのユーザーを chown するのと同じ方法です (私はそう思います) が、プロセスに対してのみです。検索に検索を重ねましたが、間違ったコマンドを探しているのではないかと思います。それとも、どこかの設定ファイルで変更されるのでしょうか?
前もって感謝します!
答え1
Linux では、実行中のプロセスのユーザーまたはグループを外部から変更することはできません。実行中のものの設定を変更して、次回の実行から新しいユーザーを使用するようにすることはできます。これは、PHP のインストール方法と設定方法 (または、PHP を実行しているもの - apache、php-fpm など) によって異なります。
答え2
あなたにはできないかもしれませんが、もし親切に私たちと共有していただけるなら、このリンクを確認してください: https://stackoverflow.com/questions/37401774/現在実行中のプロセスの所有者を変更する
答え3
これは実際には Linux カーネルの設計上の欠陥で、資格情報の変更はディスク上でのみ行われ、メモリ上では行われません。具体的に言うと、資格情報 (UID、GID、または補助グループ リスト) が変更されると、既存のすべてのプロセスは以前の資格情報を使用し続け、以前に許可されたデータにアクセスできます。また、資格情報の変更をシステム全体 (つまり、すべてのプロセス) に伝播する単一の API 関数はありません。この欠陥の結果、ユーザー レベルのプログラムでは必要な操作を実行できません。これを行うにはカーネル モジュールが必要です。私はちょうど 1 つ作成しようとしましたが、簡単なプログラムでは動作します。(https://github.com/xuancong84/supgroup)
ただし、一般的にプログラムには、開かれたファイル ハンドル、他の CPU コアで実行されている子プロセス/スレッド、バインドされたパイプ、開かれたデバイスなど、多くの相互作用があるため、そうすることはお勧めできません。したがって、実行中に UID/GID を変更すると、多くの未定義の動作が発生する可能性があります。その中には、エラーを引き起こす可能性のあるもの (パイプの破損、I/O 通信の中止など) や、危険な結果になる可能性のあるもの (システム クラッシュなど) がnc -l 8080
あります。このプログラムが単純なプログラム (など) で動作することをテストしましたが、多くの CPU コアと GPU CUDA コアで多くのスレッドを実行し、ネットワーク アクティビティとディスク I/O アクティビティが激しい、はるかに大規模で複雑なプログラムでは、何が起こるかわかりません。