Security

使用 sudo 執行使用者可寫腳本的安全隱患

  • August 22, 2020

我需要用 sudo 執行一些命令。這些命令位於.bashrc或中~/bin,並儲存在 git 儲存庫(即 dotfiles)中。

我已經放置了~root指向我使用者的符號連結$HOME,但我認為這樣做在安全方面並不是很好,所以我刪除了它們。

我擔心的是,如果非 root使用者對這些文件具有寫入權限,惡意程序可能會設法執行權限提升。然而,我在我的書中發現了許多不安全的 dotfiles 儲存庫。

.bashrc中,sudo 命令可以/etc/sudoers與 NOPASSWD 一起使用。在bin/*.sh腳本上,我正在考慮從命令中省略 sudo 並將它們改成 root,但這可能是一個問題,因為 git 不儲存所有權。(幾乎)所有單獨的命令都需要 sudo 無論如何,所以我想從技術上講它是相同的,除了將腳本分配給 root 應該更安全。我猜Git會引起一些麻煩。

/etc/sudoers一個想法:如果我使用 NOPASSWD授予每一個命令,那麼如果請求 root 密碼,我會聞到有什麼不對勁。

附加資訊:

  • 這適用於幾個本地單使用者機器;
  • 未經授權訪問我的台式電腦不是問題,因此我設置了自動登錄;
  • 我的筆記型電腦需要密碼才能開始會話。

如果問題現在還不清楚,我問,我怎樣才能以安全的方式安排這些腳本/命令?使用 root 進行權限提升是否會比惡意程序對我自己使用者數據的危害更大?也許我只是想多了?

考慮到我知道的所有選項(/usr/local/bin,所有者 root,刪除寫權限),我在每個版本化文件上使用了不可變標誌:

sudo chattr +i filename

非 root 使用者,甚至所有者都無法重置標誌。文件或父目錄也不能被刪除或替換。

要編輯文件,我將以下函式添加到.bashrc

editrc () {
   sudo chattr -i $1
   nano $1
   sudo chattr +i $1
}

在其他電腦上我必須拉點文件,之前需要刪除標誌git pull,然後重新應用。製作了一個以標誌為參數的輔助函式。

protect-config () {
   FLAG=$1
   FILES=$(git ls-files | xargs -I @ -- find @ -type f | xargs echo)
   lsattr $FILES
   if [ "$FLAG" ]; then
       sudo chattr $FLAG $FILES
   fi
}

那就是說,是的,我想多了。不過,它現在已經到位。主要是出於好習慣。


編輯:我不再使用它,因為它比它增加的安全感更不方便。

一個可寫的腳本可以在你不注意的時候被一些邪惡的東西代替,如果 root 執行它,遊戲就結束了。

誠然,如果您是該機器的唯一使用者,那麼風險很低。但是破解普通使用者的帳戶通常更容易(閱讀帶有惡意軟體的電子郵件,連接到惡意網站,隨意編譯並執行隨機源“以查看它的作用”……),這將允許升級到 root 權限。

引用自:https://unix.stackexchange.com/questions/572073