文件特定的 visudo 權限
我正在嘗試將一些 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 呼叫 sudowhoami
,但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