使用 sudo 執行使用者可寫腳本的安全隱患
我需要用 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 權限。