當非 root 使用者登入時以 root 身分執行腳本

當非 root 使用者登入時以 root 身分執行腳本

我以前見過這個問題這裡這裡但它們已經很舊了,我無法找到任何可行的解決方案。

基本上,每次非 root 使用者透過 SSH 連線到伺服器時,我都需要以 root 身分自動執行腳本或命令。伺服器正在運行 Ubuntu 16.04 並使用 OpenSSH(如果有影響的話)。

pkill miner.sh編輯:更具體地說,我想在用戶 B 登入時殺死用戶 A 創建的進程。是誰發起的。由於讓用戶殺死彼此的進程是非常不安全的,因此這似乎比預期的更困難。

答案1

pam_exec 為您指明了正確的方向,但 setuid 是個壞建議;大多數(全部?)現代 Linux 在 shell 腳本上忽略它,只在二進位執行檔上尊重它。

如果腳本在登入以外的時間執行(以 root 身分),會出現問題嗎?如果它可以比嚴格要求的更頻繁地運行,您可以建立一個包裝腳本,該腳本在每次 ssh 登入時執行,並使用使用者權限,使用 sudo(無密碼)以 root 身份執行腳本。然而,這意味著用戶也可以根據需要手動(以 root 身份)運行它。

若要進行設置,請將此行新增至 /etc/pam.d/sshd

account optional pam_exec.so /etc/pam.d/LoginWrapper.sh

然後建立檔案 /etc/pam.d/LoginWrapper.sh ,其內容為:

#!/bin/bash if [[ $EUID -ne 0 ]]; then # Execute only when a user other than root logs in /usr/bin/sudo /path/to/your/root_script.sh fi

請注意,如果您的 sudo 位於不同的路徑中,您應該在上面更新它。

現在在 /etc/sudoers 中新增以下行:

ALL ALL=(root) NOPASSWD: /path/to/your/root_script.sh

答案2

透過將所有使用者新增至名為 mygroup 的群組來解決此問題

sudo groupadd mygroup
sudo usermod -aG mygroup user1
sudo usermod -aG mygroup user2

然後透過將以下內容新增至 sudoers 進行修改以允許該群組在沒有密碼的情況下/etc/sudoers執行sudo pkill

%mygroup ALL=(ALL) NOPASSWD: /usr/bin/pkill

然後我只是將命令添加sudo pkill到底部/etc/profile,它發揮了作用。

相關內容