天天看點

Linux系統中掩耳盜鈴的sudo配置

 今天在這裡讨論Linux系統中一個非常滑稽的系統配置失誤,就是sudo,為什麼說是滑稽的配置呢,就是因為如果配置不當的話,普通使用者非常容易就可以提權到root使用者,而且沒有一點技術含量,系統管理者自己以為已經做好了權限管理,其實如果配置不當,權限漏洞已經出現。

  很多公司Linux系統都會用到sudo來配置普通使用者可以執行的超級使用者權限,一是為了系統管理者更安全的作業系統,二是可以為研發人員提供可控的權限範圍,下面就看一下我們在系統中常見的sudo配置檔案。

  這一段配置檔案顯示admin使用者可以通過sudo來調用root權限啟動nginx,相信這也是經常使用sudo的功能之一,因為如果nginx啟動的是80端口的話,普通使用者是無法啟動的,因為系統限制了1024以下的端口監聽隻有root權限才可以操作,問題大多出現在這個sbin目錄下的nginx可執行檔案上,因為我們既然要将nginx的管理權限傳遞給普通使用者admin,那麼大部分情況是nginx的所有檔案權限所屬使用者及組也都為admin,就像下面顯示的這樣。

  但是如果sbin目錄下的nginx檔案權限也為admin使用者,而此時該檔案還在sudo權限配置中,那麼問題就來了,admin使用者可以将系統任意指令copy過來變成nginx檔案,到這裡大家應該知道潛在的風險是有多大了,隻要是任何指令檔案admin使用者有隻讀權限,那麼就可以把檔案變成nginx,随意以root身份執行該指令,因為sudo隻關心執行的檔案名,而不關心檔案内容本身,如果此時admin使用者需要提權到root使用者下也很簡單,隻要将系統的vi指令copy到sbin目錄下并重命名為nginx,當檔案替換後,此時的nginx檔案就變成了系統的vi指令,如果admin使用者此時運作sudo nginx時就是以root使用者的權限來執行vi動作了,例如使用者執行sudo nginx /etc/sudoers,他就可以用root身份來編輯這個檔案,進而給自己開放一個NO PASSWORD ALL的權限,隻要儲存sudo配置檔案,執行sudo su -就可以輕松切換到root權限中來了,而後再将被替換的nginx檔案複原,此時用root權限就可以輕松留下系統後門,同時再清空操作記錄,完成整個操作而不留痕迹,下面來總結一下admin提權需要的幾步操作。

  避免這樣的問題發生其實也很簡單,就是将我們需要執行的檔案所屬權限都改為root即可,這樣普通使用者就沒有辦法用copy的方法來改寫這個檔案,因為他對于該檔案已經沒有操作權限了,進而也就規避了這種提權風險。

  最後提一下發現這個配置問題的過程,在很早剛開始負責運維工作時,那個時候還是在一家傳統網際網路企業,甲方對于權限的控制非常嚴格,對于系統操作人員隻提供普通使用者權限,如果普通使用者需要操作apache或者是nginx等就需要配置sudo,由于申請root權限的流程非常繁瑣,在一次非常緊急的系統故障進行中就發現了這個方法,而當時的sudo可執行檔案就存在權限所屬的問題,最終提權成功了,不過這種方法還是不鼓勵大家去做哈,如果在生産系統中發現有這樣的問題,應該及時更新修複,避免由于權限洩漏導緻的更多問題。

     本文轉自阿布ve 51CTO部落格,原文連結:http://blog.51cto.com/abuve/1695199,如需轉載請自行聯系原作者