Apache-2.4

文件特定的 visudo 權限

  • November 10, 2017

我正在嘗試將一些 bash 腳本集成到網站管理區域中。

背景

我在 Ubuntu 伺服器上執行 apache。給予 apache (www-data) sudo 權限遠非理想,所以我不打算這樣做。但是,可以為非 sudo 使用者指定 sudo 訪問權限。

出於多種安全原因,apache 必須沒有,或者在最壞的情況下,sudo 訪問權限受到嚴格限制……因此,一個合適的解決方法是指定 www-data 可以 sudo 的特定腳本。

為了控制這一點,我etc/sudoers.tmp使用visudo.

我在var/www/html/scripts呼叫中添加了一個測試腳本sudoscripts.sh

這很簡單:

#!/bin/sh
sudo whoami

因此,作為測試,我添加了以下行:

www-data ALL=(ALL) NOPASSWD: ALL

這按預期工作。但是,這可以在任何地方訪問所有腳本。

問題

然後我將其替換為:

www-data ALL=(ALL) NOPASSWD: /var/www/html/scripts/sudoscript.sh

這無法給出錯誤(在我的應用程序異常中):

sudo: no tty present and no askpass program specified

…即:沒有 sudo 訪問權限。

誰能指出我做錯了什麼?我查看了一些範例/其他堆棧溢出執行緒,它們要麼匹配不佳,要麼沒有答案。

為清楚起見進行編輯

這是完整的文件:

Defaults        env_reset
Defaults        exempt_group=sudo
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL) NOPASSWD:ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

# Apache using /var/www/html/scripts

# (doesnt work)
www-data ALL=(ALL) NOPASSWD: /var/www/html/scripts/sudoscript.sh

# (works)
# www-data ALL=(ALL) NOPASSWD: ALL

謝謝

問題是,您沒有執行使用 sudo 輸入到 sudoers 文件中的命令。

/var/www/html/scripts/sudoscript.sh直接從您的網路伺服器執行。然後該腳本使用 sudo 呼叫 sudo whoami,但whoami不允許在 sudoers 文件中使用。您需要whoami在 sudoers 中設置,而不是腳本位置。

這當然沒有多大意義。

更有意義的是:

/var/www/html/scripts/sudoscript.sh

#!/bin/sh
whoami

/etc/sudoers

www-data ALL=(ALL) NOPASSWD: /var/www/html/scripts/sudoscript.sh

然後從您的網路伺服器使用 sudo 執行腳本:

sudo /var/www/html/scripts/sudoscript.sh

引用自:https://serverfault.com/questions/882824