在 apache 中以另一個使用者身分執行命令

在 apache 中以另一個使用者身分執行命令

我有一個運行需要 X 的程式的 Web 應用程式。我想以另一個用戶身份運行它。

我也許可以做sudo -u username -p password my command。但是,我對以純文字形式儲存使用者密碼感覺不太好。

有沒有一種「更聰明」的方法來做到這一點?

答案1

使用蘇執行它允許腳本以檔案所有者的身份運行,而不是網頁伺服器使用者。

答案2

我所看到的方法是為 Apache 使用者授予 sudo 權限來執行一個非常特定的命令(在我們的例子中為 apache2ctrl restart)。您不需要使用密碼,如果您將其以明文形式儲存在 Apache 使用者可以讀取的地方,那麼您可能還沒有密碼。

當然,除非您需要以 Apache 使用者身分透過 Sudo 執行多個不同的命令。如果您必須為每個命令添加 sudo 權限,這可能會變得很尷尬。

答案3

如果您需要在任何時候在 Apache 之外執行此操作,這裡有一個更通用的解決方案。

若要允許一個使用者以另一個使用者身分重複執行特定命令,您可以使用以下命令建立該使用者擁有的 shell 腳本設定值位元啟用,只需執行您需要的命令。透過將群組所有權設定為 apache 群組(確保該群組中沒有其他使用者)並停用除 apache 群組和您的使用者之外的所有其他使用者的執行權限,確保僅使受信任的使用者可執行該腳本。

一個例子:

# Replace $MYCOMMAND, $USERNAME, $GROUPNAME, and $MYSCRIPTNAME below
# In this case $GROUPNAME should probably be apache
su
touch $MYSCRIPTNAME
chown $USERNAME:$GROUPNAME $MYSCRIPTNAME
chmod 4750 $MYSCRIPTNAME # setuid, read/execute for group, none for others
echo '#!/bin/sh' >> $MYSCRIPTNAME
echo "sudo -u $USERNAME $MYCOMMAND" >> $MYSCRIPTNAME

答案4

也許現在回答有點晚了,但我覺得有必要提及這個NOPASSWD功能。sudo

例如,/etc/sudoers(假設 apache 是運行 Web 伺服器的使用者):

User_Alias WWW = apache

WWW ALL =(username) NOPASSWD: my_command

並調用sudo -u username my_command.無需儲存密碼,您只允許 Web 伺服器my_command以使用者名稱執行。

用戶username仍然可以保留其密碼。

相關內容