Linux系統(tǒng)中掩耳盜鈴的sudo配置
今天在這里討論Linux系統(tǒng)中一個非常滑稽的系統(tǒng)配置失誤,就是sudo,為什么說是滑稽的配置呢,就是因為如果配置不當?shù)脑?,普通用戶非常容易就可以提權到root用戶,而且沒有一點技術含量,系統(tǒng)管理員自己以為已經(jīng)做好了權限管理,其實如果配置不當,權限漏洞已經(jīng)出現(xiàn)。
很多公司Linux系統(tǒng)都會用到sudo來配置普通用戶可以執(zhí)行的超級用戶權限,一是為了系統(tǒng)管理員更安全的操作系統(tǒng),二是可以為研發(fā)人員提供可控的權限范圍,下面就看一下我們在系統(tǒng)中常見的sudo配置文件。
admin ALL=(ALL) NOPASSWD: /app/nginx/sbin/nginx
這一段配置文件顯示admin用戶可以通過sudo來調(diào)用root權限啟動nginx,相信這也是經(jīng)常使用sudo的功能之一,因為如果nginx啟動的是80端口的話,普通用戶是無法啟動的,因為系統(tǒng)限制了1024以下的端口監(jiān)聽只有root權限才可以操作,問題大多出現(xiàn)在這個sbin目錄下的nginx可執(zhí)行文件上,因為我們既然要將nginx的管理權限交付給普通用戶admin,那么大部分情況是nginx的所有文件權限所屬用戶及組也都為admin,就像下面顯示的這樣。
[admin@localhost sbin]$ ll
總用量 3004-rwxr-xr-x 1 admin admin 3066035 9月 10 2014 nginx
但是如果sbin目錄下的nginx文件權限也為admin用戶,而此時該文件還在sudo權限配置中,那么問題就來了,admin用戶可以將系統(tǒng)任意命令copy過來變成nginx文件,到這里大家應該知道潛在的風險是有多大了,只要是任何命令文件admin用戶有只讀權限,那么就可以把文件變成nginx,隨意以root身份執(zhí)行該命令,因為sudo只關心執(zhí)行的文件名,而不關心文件內(nèi)容本身,如果此時admin用戶需要提權到root用戶下也很簡單,只要將系統(tǒng)的vi命令copy到sbin目錄下并重命名為nginx,當文件替換后,此時的nginx文件就變成了系統(tǒng)的vi命令,如果admin用戶此時運行sudo nginx時就是以root用戶的權限來執(zhí)行vi動作了,例如用戶執(zhí)行sudo nginx /etc/sudoers,他就可以用root身份來編輯這個文件,從而給自己開放一個NO PASSWORD ALL的權限,只要保存sudo配置文件,執(zhí)行sudo su -就可以輕松切換到root權限中來了,而后再將被替換的nginx文件復原,此時用root權限就可以輕松留下系統(tǒng)后門,同時再清空操作記錄,完成整個操作而不留痕跡,下面來總結一下admin提權需要的幾步操作。
[admin@localhost ~]$ sudo -l用戶 admin 可以在該主機上運行以下命令:
(ALL) NOPASSWD: /app/nginx/sbin/nginx
[admin@localhost ~]$ which vi
/bin/vi
[admin@localhost ~]$ cp /bin/vi /app/nginx/sbin/nginx
[admin@localhost ~]$ sudo /app/nginx/sbin/nginx /etc/sudoers //注意此時已經(jīng)是調(diào)用root權限vi編輯sudoers文件了
[admin@localhost ~]$ sudo -l用戶 admin 可以在該主機上運行以下命令:
(ALL) NOPASSWD: ALL
[admin@localhost ~]$ sudo su - root
[root@localhost ~]# //用戶成功切換到root權限
避免這樣的問題發(fā)生其實也很簡單,就是將我們需要執(zhí)行的文件所屬權限都改為root即可,這樣普通用戶就沒有辦法用copy的方法來改寫這個文件,因為他對于該文件已經(jīng)沒有操作權限了,從而也就規(guī)避了這種提權風險。
最后提一下發(fā)現(xiàn)這個配置問題的過程,在很早剛開始負責運維工作時,那個時候還是在一家傳統(tǒng)互聯(lián)網(wǎng)企業(yè),甲方對于權限的控制非常嚴格,對于系統(tǒng)操作人員只提供普通用戶權限,如果普通用戶需要操作apache或者是nginx等就需要配置sudo,由于申請root權限的流程非常繁瑣,在一次非常緊急的系統(tǒng)故障處理中就發(fā)現(xiàn)了這個方法,而當時的sudo可執(zhí)行文件就存在權限所屬的問題,最終提權成功了,不過這種方法還是不鼓勵大家去做哈,如果在生產(chǎn)系統(tǒng)中發(fā)現(xiàn)有這樣的問題,應該及時更新修復,避免由于權限泄漏導致的更多問題。
相關文章
Linux shell編程中IO和條件及循環(huán)處理的細節(jié)問題討論
這篇文章主要介紹了Linux shell編程中IO和條件及循環(huán)處理的細節(jié)問題討論,需要的朋友可以參考下2016-02-02Linux Shell腳本系列教程(六):數(shù)組和關聯(lián)數(shù)組
這篇文章主要介紹了Linux Shell腳本系列教程(六):數(shù)組和關聯(lián)數(shù)組,本文講解了什么是數(shù)組和關聯(lián)數(shù)組、定義打印普通數(shù)組、定義打印關聯(lián)數(shù)組等內(nèi)容,需要的朋友可以參考下2015-06-06Ubuntu、Linux Mint一鍵安裝Chrome瀏覽器的Shell腳本分享
這篇文章主要介紹了Ubuntu、Linux Mint一鍵安裝Chrome瀏覽器的Shell腳本分享,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-03-03linux下安裝oracle后使用命令行啟動的方法 linux啟動oracle
這篇文章主要介紹了在linux下安裝oracle后使用命令啟動oracle的方法,大家參考使用吧2014-01-01Shell循環(huán)語句的使用(for循環(huán)、while循環(huán)、until循環(huán))
本文主要介紹了Shell循環(huán)語句的使用(for循環(huán)、while循環(huán)、until循環(huán)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06shell中使用expect命令進行遠程執(zhí)行命令腳本
今天小編就為大家分享一篇關于shell中使用expect命令進行遠程執(zhí)行命令腳本,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03