Linux
以不同的 nologin 使用者身份執行命令
我正在使用maven antrun 外掛執行sshexec命令,以便複製 tar 並將其解壓縮到遠端伺服器上的目標目錄。
我執行以提取它的命令是:
/bin/sh -c 'tar -vxzf /path/to/${artifact}.tar.gz -C path/to/target/directory;'
這曾經可以正常工作,直到目標目錄的所有者更改為設置為 nologin 的新使用者。我試圖弄清楚如何以新使用者身份執行此命令。
/bin/su -s /bin/sh -c 'tar -vxzf /path/to/${artifact}.tar.gz -C path/to/target/directory;' ${newUser}
但它提示我輸入密碼,由於它是 nologin 使用者,因此無法使用。
此外,我不是 Linux 專家,但如果我也只是嘗試以舊使用者(具有 sudo 訪問權限)的身份從我的主目錄中簡單地執行此命令,則會失敗
sudo -u ${newUser} tar -vxzf /path/to/${artifact}.tar.gz -C path/to/target/directory;
但是,如果我 cd 到目標目錄並執行與舊使用者相同的命令,它就可以工作。我猜也許如果我理解這種行為差異,它會幫助我得到答案嗎?
在我看來,這裡的問題與新使用者是系統使用者還是非登錄使用者沒有任何關係。聽起來最有可能的解釋是,由於目標目錄的所有者發生了變化,現在沒有使用者對源目錄具有讀取權限並對目標目錄具有寫入權限。
由於您在相關主機上具有 sudo 權限,因此您有很多選擇來解決此問題。
- 您可以授予原始使用者對目標目錄的寫入權限,並
tar
以該使用者身份執行您的命令。- 您可以授予新的無登錄使用者對源目錄的讀取權限,並
tar
以該使用者身份執行您的命令。- 您可以使用 sudo 執行該
tar
命令,然後將所有權設置為您以後想要的任何內容。例如,以下內容應該可以工作:
sudo tar -vxzf /path/to/${artifact}.tar.gz -C /path/to/target/directory sudo chown -R "${newUser}:${newUser}" /path/to/target/directory
如果您想使用更多技巧並避免以 root 身份執行它,那麼您應該更新您的問題以包括相關目錄的權限和所有權資訊以及相關使用者帳戶的組成員身份。