簡體   English   中英

在我的bash腳本中使用mkdir並獲得拒絕權限

[英]Using mkdir in my bash script and getting permission denied

我在root擁有的目錄中擁有root擁有的腳本。 該腳本的一部分是創建一個目錄,該目錄將保存該腳本的輸入/輸出。 我也有一個指向該腳本的sim鏈接,因此任何用戶都可以從任何地方運行它。 我不使用temp目錄,因此此信息以后可以用作日志。 問題:當用戶嘗試運行腳本時,他們會收到錯誤消息,由於權限被拒絕而無法創建目錄。 問題:為什么腳本不創建目錄,使root擁有該目錄,而與用戶運行該目錄無關? 腳本如何使目錄由root擁有,而不由運行它的用戶擁有? 只有腳本需要此信息,而用戶則不需要。

附加信息:目錄為:drws--s--x。 腳本是:-rwxr-xr-x。 (如果需要知道)腳本中的行很簡單:mkdir $ tempdirname

我正在正確輸出文本文件的同一台服務器上匹配其他腳本的權限,但是由於我的目錄是我正在獲取權限錯誤。 我嘗試添加suid和sgid的權限。 suid聽起來像是正確的解決方案,因為它可以使腳本像擁有腳本的用戶一樣運行。 (為什么這不是正確的解決方案?)

我希望任何用戶都可以輸入sim鏈接名稱,該名稱將在root擁有的目錄中運行root擁有的腳本,並且該腳本創建的目錄將保留在其自己的目錄中。 最終用戶不了解或無法訪問此過程的內部工作原理。 (因此歸root所有)

腳本以運行它們的用戶身份運行; 文件和/或其所在目錄的所有者無關緊要(除非用戶需要對文件和目錄的讀取和執行權限)。 二進制可執行文件可以設置其setuid位,以使它們始終以文件所有者的身份運行。 舊的Unix也允許腳本使用此命令,但這會造成安全漏洞,因此setuid在現代unix / Linux中的腳本上將被忽略。

如果需要讓普通用戶以root用戶身份運行腳本,則可以使用其他兩種方法來執行此操作。 一種是將腳本添加到/ etc / sudoers文件中,以便用戶可以使用sudo以root身份運行它。 警告:如果您弄亂了/ etc / sudoers文件,可能很難恢復訪問權限以對其進行清理並恢復正常。 首先進行備份,不要使用visudo進行任何編輯,我建議打開root shell,這樣,如果出現問題,您將具有root用戶訪問權限,無需修復即可通過sudo進行升級。 您需要添加的行將如下所示:

%everyone ALL=NOPASSWD: /path/to/script

如果要使其自動執行,以使用戶不必顯式使用sudo來運行腳本,則可以這樣啟動腳本:

#!/bin/bash

if [[ $EUID -ne 0 ]];
then
    exec sudo "$BASH_SOURCE" "$@"
fi

編輯:我想到了一個更簡單的版本; 而不是讓腳本在sudo下重新運行,只需將符號鏈接替換為以下存根腳本即可:

#!/bin/bash
exec sudo /path/to/real/script "$@"

請注意,使用此選項,/ etc / sudoers條目必須引用真實腳本的路徑,而不是符號鏈接的路徑。 另外,如果腳本不帶參數,則可以不使用"$@" 或使用它,也不會造成任何傷害。

如果弄亂/ etc / sudoers聽起來太嚇人了,那么還有另一種選擇:您可以使用shc “編譯”腳本(實際上只是在其周圍制作一個二進制可執行包裝器),並使其成為setuid根目錄( chmod 4755 /path/to/compiled-script; chown root /path/to/compiled-script )。 由於它在二進制包裝器中,因此setuid將起作用。

暫無
暫無

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

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