簡體   English   中英

在 shell 腳本中包含 chmod - 它適用於所有人嗎?

[英]Including chmod in shell script - will it work for everyone?

我有一個很大的wrapper.sh文件,它可以做很多事情,但最后運行catalina.sh tomcat。

問題是運行此wrapper.sh的用戶遇到錯誤:沒有執行catalina.sh的權限。 他們必須手動設置此權限,這是我不想要的。


在我的電腦上, chmod u+x catalina.sh修復了這個問題,因此我將它包含在wrapper.sh中,就在執行catalina.sh之前:

#!/bin/sh
# <...>
# <...>
chmod +x catalina.sh
exec ./catalina.sh

但這種改變對每個人都有效嗎? 例如,我可以想象它在我的計算機上確實運行良好,但其他人在隱式運行該chmod時會遇到一些與 sudo 相關的錯誤。 我怎樣才能讓它適用於所有人?

如何通過sh catalina.shbash catalina.sh (取決於腳本編寫的語言)來運行它? 在這種情況下,您不需要 x 權限。 讀取權限就足夠了。

如果用戶是 root,或者是catalina.sh的所有者,它將起作用。

非特權用戶不能更改用戶不擁有的文件的權限,即使它是可寫的。

如果catalina.sh是同一個用戶解壓的,或者是您的腳本創建的,那么應該沒有問題。

一個問題可能是用戶試圖在掛載noexec的文件系統中執行此操作。 但是wrapper.sh腳本本身將不可執行。 然而,用戶可以成功運行sh wrapper.sh ,盡管它不可執行,然后遇到catalina.sh問題。

請注意,您可以exec sh./catalina.sh 僅僅因為腳本不可執行並不意味着您不能為解釋器執行新的進程映像來處理它; 您只需要明確地執行它,而不是依賴操作系統將解釋器綁定到腳本。 那就是需要執行權限。

  • 創建一個用戶組“sudo groupadd new_group”。
  • 添加需要訪問該組的用戶:“sudo usermod -a -G new_group userA”對於單個用戶,或:“for user in userA userB userC; do sudo usermod -a -G mygroup "$user"; done”使用循環添加多個用戶。
  • 然后“sudo chown somebody:new_group catalina.sh”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM