我們先創建幾個用戶角色,來更好的測試suid的功能
groupadd inca #創建一個組inca
useradd oldgirl -g inca #創建用戶oldboy屬於inca組
useradd oldboy -g inca #創建用戶oldgirl屬於inca組
useradd test #創建一個默認組的用戶test
1.先來看一個passwd特殊權限的實例:
[root@localhost ~]#ls /etc/shadow -l #來到存放用戶密碼的文件下面
----------. 1 root root 953 Jul 28 09:50 /etc/shadow #此時文件沒有改動,也沒有權限
[root@localhost ~]#md5sum /etc/shadow
9333d150f6157cbc65abbf7619356dc3 /etc/shadow
我們登錄剛才創建的oldboy用戶,用passwd命令修改了用戶oldboy的密碼
此時我們在root用戶的模式下看到/etc/shadow剛才生成的指紋已經發生了變化
注意:以上在用戶oldboy中能修改密碼的前提是我們必須在root用戶中給oldboy用戶設置一個初始密碼
經過以上演示,我們看到了在oldboy用戶下修改了passwd,剛才我們看到的/etc/shadow是沒有任何權限的,那為什么oldboy普通用戶怎么能修改掉密碼呢?
問題就在passwd命令本身,這個命令被設置了特殊權限位(suid)。
2.suid作用:
1.針對二進制命令.
2.給passwd命令設置了suid,則任何用戶執行passwd命令都會擁有和passwd命令對應的用戶的權限.
我們知道,普通權限一共有9位,即:u用戶3+g用戶組3+o其他用戶3
現在有一個特殊權限位s,每一權限位變成了4位,用戶s+rwx,用戶組s+rwx,其他用戶位(粘滯位)t+rwx,總共12位權限。
suid:用戶
前三位用戶位的x位:S s(x)
s 4 #數字權限
sgid:用戶組
中三位用戶組位的x位:S s(x)
s 2 #數字權限
粘滯位: /tmp
后三位其他用戶位:x位:T t(x)
t 1 #數字權限
現在我們更改一下rm命令的權限:
可以看到兩個方法都能給rm命令提權到suid,
綜合以上,suid特殊權限,在普通用戶里可以修改部分文件,特別危險,還有類似的危險命令都可以修改文件
比如:rm,vim,cat等都是有害命令,防不勝防,我們知道cat是查看命令,但是它依然能夠利用重定向在文件里修改內容。
3.目前我們創建的test用戶位普通用戶,我們通過vim編輯配置文件的方法,增加suid權限,提權到root用戶,需要注意的是,在此操作過程中,也是在root用戶下進行。
首先我們要給/bin/vim 增加suid權限:
chmod u+s /bin/vim vim /etc/sudoers
現在我們的test賬戶已經提權到root用戶級別,當我們登錄到test用戶后,再切換回root用戶時,不需要再輸入root的密碼,就可以切換回去
但是在這里我們還要注意一下哎,當我們沒有用提權sudo標志切換的時候,系統依然要求我們要輸入root的管理密碼
現在我們帶上sudo標志,可以看到已經不需要root密碼就可以將用戶切換回去。
以下總結了如何防止普通用戶登入系統和web用戶通過80端口進入網頁服務器來給自己的用戶提權,我們可以將suid這樣的危險權限做一個限制。
1.禁止給命令設置suid:
1)應用軟件PHP(/etc/php.ini)禁止開啟讀取系統文件等的函數cat。
2)磁盤掛載禁止suid。
2.給關鍵文件加鎖/etc/sudoers,因為編輯這里可以給用戶提權。
3.chmod 000 /etc/sudoers,我們在root用戶下修改sudoers文件的權限為0,不能編輯任何內容。
4.監控好/etc目錄權限,防止文件被替換。
5.所有系統和站點文件和目錄用戶和組都用root。
6.文件統一644,目錄統一755,文件和目錄的默認權限。
7.web應用禁止上傳特殊文件到服務器:
上傳后禁止瀏覽(get請求方法,目錄uri,動靜分離)。
開啟wap防火牆各種限制80(80端口是web的默認端口)進入,使用加密的https傳輸協議。
8.ssh監聽內網,禁止root遠程連接,vpn撥號。