如何更改進程的擁有者?

如何更改進程的擁有者?

大家好,我剛剛在 Ubuntu 上完成了技術測試,遇到了一個問題,我需要更改 PHP 進程的用戶來修復損壞的網站。我相信用戶是“foo”,但需要是“www-data”。最後我被告知“chown the process”是解決辦法,我只是想知道如何做到這一點以供將來參考。

因此,您可以以相同的方式 chown 文件的用戶(我假設),但只是為了一個進程。我搜索了又搜索,但我想知道我是否在尋找錯誤的命令?或者這可能會在某個地方的配置文件中更改?

先致謝!

答案1

無法從外部變更 Linux 中正在運行的進程的使用者或群組。您可以做的是更改正在運行的任何內容的配置,以便在下次運行時使用新使用者。這取決於您如何安裝和配置 PHP(或更確切地說,任何為您運行 PHP 的程式 - apache、php-fpm 等)。

答案2

你做不到,夥計,如果你能和我們分享的話。檢查此連結: https://stackoverflow.com/questions/37401774/change-owner-of-a-currently-running-process

答案3

這實際上是 Linux 核心的一個設計缺陷,憑證變更僅發生在磁碟上,而不發生在記憶體中。具體來說,當憑證(UID、GID 或補充群組清單)變更時,所有現有進程將繼續使用其先前的憑證並有權存取先前授予的資料。並且沒有一個 API 函數可以在整個系統(即所有進程)中傳播憑證變更。由於此缺陷,任何使用者級程式都無法執行您想要的操作。您需要一個內核模組來做到這一點。我剛剛嘗試製作一個,它可以在簡單的程式上運行。 (https://github.com/xuancong84/supgroup

然而,一般來說,這樣做並不是一個好主意,因為一般來說,程式可以有很多交互,例如,打開的檔案句柄、在其他CPU 核心上運行的子進程/線程、綁定管道、打開的設備等。 )。我已經測試過該程式適用於簡單程式(例如nc -l 8080),但在一個更大的複雜程式上,在許多CPU 核心和GPU CUDA 核心上運行許多線程,具有大量網路活動和磁碟I/O 活動,我不確定什麼將會發生。

相關內容