使用 sudo 運行用戶可寫腳本的安全隱患

使用 sudo 運行用戶可寫腳本的安全隱患

我需要使用 sudo 運行一些命令。這些命令位於 或 中.bashrc~/bin並儲存在 git 儲存庫(即點檔案)中。

~root我已經放置了指向我的用戶的符號鏈接$HOME,但我認為這樣做在安全性方面不太好,所以我刪除了它們。

我擔心的是,如果非根如果使用者對這些檔案具有寫入權限,則惡意程式可以設法執行權限升級。然而,我發現許多點文件儲存庫在我的書中是不安全的。

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

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

附加資訊:

  • 這適用於幾個本地單一使用者電腦;
  • 未經授權存取我的桌上型電腦不是問題,因此我設定了自動登入;
  • 我的筆記型電腦需要密碼才能啟動會話。

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

答案1

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

確實,如果您是這台機器的唯一用戶,那麼風險就很低。但破解普通用戶的帳戶通常更容易(閱讀帶有惡意軟體的電子郵件,連接到惡意網站,隨意編譯並運行隨機來源“看看它會做什麼”,...),這將允許升級到root 權限。

答案2

考慮到我知道的所有選項(/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
}

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


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

相關內容