今天在這里討論Linux系統(tǒng)中一個(gè)非?;南到y(tǒng)配置失誤,就是sudo,為什么說(shuō)是滑稽的配置呢,就是因?yàn)槿绻渲貌划?dāng)?shù)脑挘胀ㄓ脩舴浅H菀拙涂梢蕴釞?quán)到root用戶,而且沒(méi)有一點(diǎn)技術(shù)含量,系統(tǒng)管理員自己以為已經(jīng)做好了權(quán)限管理,其實(shí)如果配置不當(dāng),權(quán)限漏洞已經(jīng)出現(xiàn)。
很多公司Linux系統(tǒng)都會(huì)用到sudo來(lái)配置普通用戶可以執(zhí)行的超級(jí)用戶權(quán)限,一是為了系統(tǒng)管理員更安全的操作系統(tǒng),二是可以為研發(fā)人員提供可控的權(quán)限范圍,下面就看一下我們?cè)谙到y(tǒng)中常見(jiàn)的sudo配置文件。
復(fù)制代碼 代碼如下:
admin ALL=(ALL) NOPASSWD: /app/nginx/sbin/nginx
這一段配置文件顯示admin用戶可以通過(guò)sudo來(lái)調(diào)用root權(quán)限啟動(dòng)nginx,相信這也是經(jīng)常使用sudo的功能之一,因?yàn)槿绻鹡ginx啟動(dòng)的是80端口的話,普通用戶是無(wú)法啟動(dòng)的,因?yàn)橄到y(tǒng)限制了1024以下的端口監(jiān)聽(tīng)只有root權(quán)限才可以操作,問(wèn)題大多出現(xiàn)在這個(gè)sbin目錄下的nginx可執(zhí)行文件上,因?yàn)槲覀兗热灰獙ginx的管理權(quán)限交付給普通用戶admin,那么大部分情況是nginx的所有文件權(quán)限所屬用戶及組也都為admin,就像下面顯示的這樣。
復(fù)制代碼 代碼如下:
[admin@localhost sbin]$ ll
總用量 3004-rwxr-xr-x 1 admin admin 3066035 9月 10 2014 nginx
但是如果sbin目錄下的nginx文件權(quán)限也為admin用戶,而此時(shí)該文件還在sudo權(quán)限配置中,那么問(wèn)題就來(lái)了,admin用戶可以將系統(tǒng)任意命令copy過(guò)來(lái)變成nginx文件,到這里大家應(yīng)該知道潛在的風(fēng)險(xiǎn)是有多大了,只要是任何命令文件admin用戶有只讀權(quán)限,那么就可以把文件變成nginx,隨意以root身份執(zhí)行該命令,因?yàn)閟udo只關(guān)心執(zhí)行的文件名,而不關(guān)心文件內(nèi)容本身,如果此時(shí)admin用戶需要提權(quán)到root用戶下也很簡(jiǎn)單,只要將系統(tǒng)的vi命令copy到sbin目錄下并重命名為nginx,當(dāng)文件替換后,此時(shí)的nginx文件就變成了系統(tǒng)的vi命令,如果admin用戶此時(shí)運(yùn)行sudo nginx時(shí)就是以root用戶的權(quán)限來(lái)執(zhí)行vi動(dòng)作了,例如用戶執(zhí)行sudo nginx /etc/sudoers,他就可以用root身份來(lái)編輯這個(gè)文件,從而給自己開(kāi)放一個(gè)NO PASSWORD ALL的權(quán)限,只要保存sudo配置文件,執(zhí)行sudo su -就可以輕松切換到root權(quán)限中來(lái)了,而后再將被替換的nginx文件復(fù)原,此時(shí)用root權(quán)限就可以輕松留下系統(tǒng)后門,同時(shí)再清空操作記錄,完成整個(gè)操作而不留痕跡,下面來(lái)總結(jié)一下admin提權(quán)需要的幾步操作。
[admin@localhost ~]$ sudo -l用戶 admin 可以在該主機(jī)上運(yùn)行以下命令:
復(fù)制代碼 代碼如下:
(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 //注意此時(shí)已經(jīng)是調(diào)用root權(quán)限vi編輯sudoers文件了
[admin@localhost ~]$ sudo -l用戶 admin 可以在該主機(jī)上運(yùn)行以下命令:
(ALL) NOPASSWD: ALL
[admin@localhost ~]$ sudo su - root
[root@localhost ~]# //用戶成功切換到root權(quán)限
避免這樣的問(wèn)題發(fā)生其實(shí)也很簡(jiǎn)單,就是將我們需要執(zhí)行的文件所屬權(quán)限都改為root即可,這樣普通用戶就沒(méi)有辦法用copy的方法來(lái)改寫這個(gè)文件,因?yàn)樗麑?duì)于該文件已經(jīng)沒(méi)有操作權(quán)限了,從而也就規(guī)避了這種提權(quán)風(fēng)險(xiǎn)。
最后提一下發(fā)現(xiàn)這個(gè)配置問(wèn)題的過(guò)程,在很早剛開(kāi)始負(fù)責(zé)運(yùn)維工作時(shí),那個(gè)時(shí)候還是在一家傳統(tǒng)互聯(lián)網(wǎng)企業(yè),甲方對(duì)于權(quán)限的控制非常嚴(yán)格,對(duì)于系統(tǒng)操作人員只提供普通用戶權(quán)限,如果普通用戶需要操作apache或者是nginx等就需要配置sudo,由于申請(qǐng)root權(quán)限的流程非常繁瑣,在一次非常緊急的系統(tǒng)故障處理中就發(fā)現(xiàn)了這個(gè)方法,而當(dāng)時(shí)的sudo可執(zhí)行文件就存在權(quán)限所屬的問(wèn)題,最終提權(quán)成功了,不過(guò)這種方法還是不鼓勵(lì)大家去做哈,如果在生產(chǎn)系統(tǒng)中發(fā)現(xiàn)有這樣的問(wèn)題,應(yīng)該及時(shí)更新修復(fù),避免由于權(quán)限泄漏導(dǎo)致的更多問(wèn)題。
您可能感興趣的文章:- Linux系統(tǒng)中sudo命令的十個(gè)技巧總結(jié)
- Linux下普通用戶用sudo su給自己加root權(quán)限的方法
- Linux 添加普通用戶到 sudo 列表的方法
- 詳解Linux下的sudo及其配置文件/etc/sudoers的詳細(xì)配置
- Linux用戶配置sudo權(quán)限(visudo)的方法
- linux sudo命令詳解
- linux系統(tǒng)sudo命令詳解
- java在linux系統(tǒng)下開(kāi)機(jī)啟動(dòng)無(wú)法使用sudo命令的原因及解決辦法
- Linux使用Sudo委派權(quán)限