如何取得(僅)Apache 的使用者名稱?

如何取得(僅)Apache 的使用者名稱?

我正在嘗試編寫一個 Bash 腳本,用於向 Apache2 用戶自動 chown'in 檔案。但我之前需要 100% 確定它的使用者名稱是什麼?我知道通常是www-data。但是,我需要確定,比如說,在用戶名之前是否已以某種方式更改。

我正在尋找一個僅返回 Apache2 用戶名的字串。

我知道# ps -aux | grep apache2還有很多其他人,但他們返回大量數據,而我只需要一個用戶名。

非常感謝任何幫助!

謝謝。

答案1

Apache2 的使用者名稱和群組 ID 由設定檔中的指令設定。它位於文件中/etc/apache2/envvars

您可以檢查該文件,並注意到默認情況下,正如您所懷疑的那樣,它是www-data.另外,正如您從文件中看到的,用戶群組預設為相同的名稱。

現在您已經擁有了有效用戶,apache您可以使用它來將文件更改為該用戶:

$ sudo chown -R www-data:www-data myhtmldirectory

這會將 myhtmldirectory 及其下面的所有檔案和目錄的使用者和群組擁有者更改為www-data.

如果您只想變更使用者擁有者,請刪除:www-data群組的部分。

獲得正確 usrID 的一個非常可靠的方法是:

$ awk -F= '$1 == "export APACHE_RUN_USER" {print $2}' /etc/apache2/envvars

此行將解析已啟動的目前會話的 envvars 檔案。

答案2

若要尋找任何符合的進程的有效使用者的名稱apache2,請使用:

ps -o euser= -C apache2

-o選項設定輸出格式。在我們的例子中,我們只要求有效的使用者名稱euser。尾部=告訴ps我們抑制正常的標題行。這樣,輸出僅包含匹配的使用者名稱apache2

我沒有運行 apache2,舉個例子:

$ ps -o euser= -C mount.ntfs
root
$ ps -o euser= -C atd
daemon

答案3

我找到了一個非常簡單的解決方案,它只傳回 apache2 使用者名稱:

ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'

謝謝。

相關內容