
我已經使用 user1 登入 UNIX 環境,在這個環境中,我有一個 shell 腳本,其中包含一些需要在不同路徑上使用不同使用者(例如 user2)完成的任務,因為 user1 無權存取該路徑。
我想在 shell 腳本中從 user1 切換到 user2 來執行該任務,完成任務後我想再次從 user2 切換到 user1。
請建議我如何實現這個場景。
我正在用 java 呼叫 shell 腳本,所以如果你有其他方法,請建議
答案1
您可以透過以下方式實現您想要的sudo
:您可以允許 user2 以 user1 的身份執行它需要的腳本,從而允許僅有的該腳本將被執行,從而保護系統的安全(user2 不能像 user1 一樣使用 shell)。您可以透過以下方式做到這一點:
sudo visudo
(編輯sudo設定檔)- 將其添加到文件末尾:
user2 ALL = (user1) NOPASSWD:/path/to/your/script.sh
- 儲存並關閉文件。
現在,如果您以 user2 身分開啟 shell,則可以以sudo -u user1 /path/to/your/script.sh
user1 身分執行它;您可以在 java 中使用同樣的命令。安全性得以保留,因為 user2 無法執行 shell,因為 user1:sudo -u user1 bash
將被拒絕。
然而,我認為只需建立一個 user1 和 user2 將共享的群組,並使用該群組來管理文件的執行權限,就可以實現更乾淨的解決方案。根據您的要求,chmod 4700 /path/to/your/script.sh
如果預計有更多使用者以 user1 身分執行該腳本,您可能還需要考慮 ACL 或 setuid 位元(例如 )。
答案2
我假設 user1 沒有無密碼 sudo 存取權限,對嗎?如果是這樣,您可以使用 runuser 命令。
runuser -l user2 -c 'whoami'
如果您設定了 sudo 權限,則可以只使用 su/sudo。
su - user2 -c 'whoami'
不過,我假設您沒有無密碼 sudo 和/或您可能沒有 user2 的密碼。您可能會比較棘手,為user1 產生RSA 金鑰對,然後將id_rsa.pub 金鑰附加到user2 的$HOME/.ssh/authorized_keys 檔案以啟用RSA 公鑰身份驗證,然後使用SSH 無需密碼即可完成此操作。
作為 user1 運行以下命令; ssh 註冊機 只需根據提示按 Enter 鍵即可 然後執行以下命令自動新增密鑰(您可以手動執行此操作)。如果您使用此命令,則僅在第一次時需要使用者 2 的密碼。
ssh-copy-id -i $HOME/.ssh/id_rsa.pub user2@主機名
如果這有效,您應該能夠以 user1 身份登錄,然後運行 ssh user2@localhost 以 user2 身份登錄,無需密碼。確保伺服器上的 /etc/ssh/sshd_config 已啟用公鑰驗證。
然後要遠端執行命令,您可以運行類似的命令;
ssh user2@localhost“遠端命令1;遠端命令2”