
我有一個問題,由於安全原因,從根帳戶中的原始程式碼安裝不是一個好主意。
我的立場是,如果有人使用 root 帳戶,從解壓縮程式碼開始,然後執行安裝步驟,這並不重要。
#./configure
#make
#make install
與以下相反:
$./configure
$make
$sudo make install
我的邏輯是:這並不重要,因為如果它會導致安全風險,那是因為程式碼本身,而不是如何安裝它,因為 end 命令使用 root 來安裝最終的二進位檔案及其安裝的任何檔案使用它。
無論是否處於非根用戶會話中,如果原始程式碼已將惡意軟體編碼到其原始程式碼中,那麼無論如何它現在都在系統中。因此,無論如何,這始終是一種風險。
這與自己的程式碼無關,更多的是與自己的儲存庫有關,它沒有包含應用程序,因此,請訪問 git hub 或編寫它的人的網站並使用原始程式碼來安裝它。甚至像安裝樹一樣簡單。
然後,用戶會比他或她登入根帳戶或「普通」用戶帳戶更擔心他或她是如何獲得原始程式碼的。
我已經聽過所有關於為什麼不應該使用 root 的爭論,因為不注意他們在終端中寫入的內容可能會對系統造成不可逆轉的損害;使用 sudo 可以造成同樣多的傷害,因此這本身就是一種多餘的論點和信念體系。因此,它甚至不是這個論點中所包含的觀點的一部分。
這或多或少是一個是或否的問題。是的——我是對的,從長遠來看,是否使用 root 帳戶來編譯原始碼應用程式並將其安裝到系統中並不重要。
或者
不——我錯了,這很重要,因為你必須使用root權限才能做同樣的事情。
答案1
如果您過度使用 root 身分執行程序,那麼您就會為潛在的攻擊者提供更多的攻擊點,而不僅僅是「必要」的攻擊點。如果沒有 root 權限,嘗試破壞您的系統大多數情況下是行不通的(或會更困難)。將所有命令作為 root 執行的方法也可能導致簡單地以 root 身份執行所有操作(列出目錄、打開圖像、播放音樂...),這意味著許多潛在的問題點。
即使是無意的 - 當以 root 身份運行時,您運行的程式中的錯誤也會造成更大的損害(並且實際上不可能從軟體中刪除所有錯誤)。或當使用者輸入不正確的選項時(可能性更大)。
此外,當您./configure
和時make
,您可能不想為每個人安裝該程式(可能是只有您需要的程式庫,例如)。
答案2
如果您懷疑您正在安裝的程式可能是惡意的,不要以 root 或普通使用者身分執行它。這包括執行編譯的程式和運行提供的建置腳本。一旦攻擊者以您的身分執行程式碼,他們就擁有您的帳戶(並且最晚在您從該帳戶獲得 root 權限後,他們將擁有您的電腦)。攻擊者的程式碼是因為您運行make
還是因為您運行而被執行並不重要make install
。
以普通使用者身分建置並以 root 身分安裝的目的是為了降低以下風險:偶然問題。即便如此,除非有必要(例如安裝驅動程式或系統服務),否則您通常不應以 root 身分安裝自建程式。以您自己的使用者身分安裝到單獨的目錄中,然後使用諸如存放使程式在標準目錄(/usr/local/bin
等)中可用。這降低了安裝步驟覆蓋現有軟體(可能存在命名衝突)或寫入非預期目錄的風險,並且由於所有檔案都位於一個位置,因此可以輕鬆卸載程式。
答案3
作為用戶喬,
./configure
make
sudo make install
你通常不會需要以 root 身份配置或編譯程式碼,僅用於安裝它。如果你不這樣做需要成為root,然後就不要成為root。
configure
和都make
在執行程式碼。當您不需要引入另一個攻擊媒介時,以 root 身分執行它們(例如,有人可能能夠破壞 makefile,但不能破壞原始程式碼)。
答案4
最終的程序(及其安裝)可能比建築物更仔細地完成。任何當以 root 身分執行時,建置過程或完成健全性檢查中的錯誤可能會損壞您的系統。最好盡可能降低風險。