Bash

讓非 root 使用者使用需要 root 訪問權限的命令執行腳本的最佳方法?

  • June 2, 2020

我有一個由 php 執行的腳本,因此它以 www-data 使用者身份執行。該腳本非常簡單,它基本上將一些預製文件(例如主機和介面文件)複製到正確的目錄中。也許更新一些權限等。

我認為創建一個新使用者並僅通過它授予對所需命令的訪問權限visudo可能會起作用,但是

  1. 仍然要求使用者執行.sh密碼和
  2. 它顯然沒有授予測試使用者權限。

visudo(執行時拒絕所有權限./script.sh

test ALL=(ALL) NOPASSWD:ALL
test ALL=      NOPASSWD:ALL
test ALL=(ALL) NOPASSWD:/bin/cp,/bin/mv,/bin/nano,/bin/chown,/bin/mv

當我將test使用者更改為我登錄的實際使用者時,它可以工作。

.sh由登錄/www-data使用者嘗試以具有所需權限的不同使用者身份執行命令。

#!/bin/bash
sudo -H -u test cp test.txt /etc/test.txt
sudo -H -u test chown test /etc/test.txt
echo "ok"

使www-data使用者能夠執行需要root權限的腳本的最佳方法是什麼?

您顯示的sudoers部分沒有意義。

test ALL=(ALL) NOPASSWD:ALL
test ALL=      NOPASSWD:ALL
test ALL=(ALL) NOPASSWD:/bin/cp,/bin/mv,/bin/nano,/bin/chown,/bin/mv

您只需要這些行中的一條,可能是最後一條。

不考慮早期命令的退出程式碼執行echo "ok"也沒有多大意義。

據您顯示,sudo使用者沒有權限www-data

在普通系統sudo -H -u test cp test.txt /etc/test.txt上沒有意義,因為使用者test無法在/etc. 這僅在目標文件存在並且對使用者 `test.

但是,sudo -H -u test chown test /etc/test.txt這永遠不會有意義,因為唯一可以chown成功呼叫這種方式的使用者是 root。

解決方案

我想你需要的是這個。一個腳本

#!/bin/bash

cp ~test/test.txt /etc/test.txt &&
   chown test /etc/test.txt    &&
   echo 'ok' || echo 'failure'
  1. 將該腳本放在只能由以下人員寫入的路徑中root
  2. 創建這樣的sudo權限
www-data ALL= NOPASSWD:/path/to/script.sh
  1. www-data像這樣 呼叫腳本
sudo /path/to/script.sh

引用自:https://unix.stackexchange.com/questions/590346