歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

Setuid和Solaris安全


 在Solaris中,文件除了讀、寫、執行權限外,還有一些特殊權限。Setuid和setgid是其中的一類。它與Solaris系統的安全關系緊密。 Setuid是指設置程序的有效的執行用戶身份(uid)為該文件的主人,而不是調用該程序的進程的uid。Setgid與之類似。Setuid和setgid用1s-1顯示出來為s權限,存在於主人和屬組的執行權限的位置上。
這種權限的設置方法如下:
只設setuid:chmod 4xxx filename(xxx為一般讀、寫、執行權限)
只設setgid:chmod 2xxx filename
同時設setuid 和setgid:chmod 6xxx filename
取消兩種權限:chmod 0xxx filename
這種權限怎麼用? 舉個例子來說,假如某一命令(程序)的主人是root用戶,並且該文件有setuid屬性,但是該文件的讀、寫、執行權限的屬性表明普通用戶user1可以執行該命令,那麼就表示:當user1執行該命令時,他具有root的執行身份,並獲得相應的權限。一旦該命令執行完成,root身份也隨之消失。
為什麼系統中需要有這樣的權限呢?請執行以下操作:
1 $1s-1 *etc/shadow /bin/passwd
-r-sr-sr-x 3 root sys 99792 1999 2月12 /bin/passwd
-r-------- 1 root sys 261 1月3 13:12 /etc/shadow
/etc/shadow文件由於存有用戶的加密口令信息,對系統的安全至關重要,因此權限很嚴,只有root憑其對系統的至高無上的權限才得以對/etc/shadow可讀可寫。但是系統必須允許普通用戶也能修改自己的口令。要讓他們對/etc/shadow可寫,又不能可讀,而且可寫又不能允許他們改別人的口令,怎麼辦?系統就采取這樣一個辦法:做一個程序,也就是/bin/passwd,通過它可以在不顯示文件內容的情況下直接修改/etc/shadow文件,可這個程序怎麼能有這樣的權限?因為系統賦予它setuid權限,而且它屬於root.這樣,用戶在使用/bin/passwd改口令時就有root權限,由於/bin/passwd命令本身功能的局限性,用戶並不能用它做更多的不利於系統安全的事。
2 用普通用戶身份修改口令
$ passwd
Enter login password:****
New password:******      
Re-enter new password:******      
Passwd (SYSTEM):passwd successfully changed for xxx. 可以成功。
3 用超級用戶修改/bin/passwd
# chmod 0555 /bin/passwd
4 再重復2,是否還成功?當然不。
5 把/bin/passwd的權限恢復原狀。
# chmod 6555 /bin/passwd
對此可以打一個生動的比喻:有一個絕密機關,不得已必須有一些不能見這些秘密的人進來做一些事情。於是授權一些特殊的"車輛"(沒有窗戶,門緊閉,所以看不到外面。只有一個小洞允許乘坐的人伸出一只手臂),帶著所乘坐的人開到要去的地方,允許它辦完事情馬上帶他出來。這樣是不是很安全?不一定。如果"車輛"沒有經過精挑細選而是有很多"門窗",那系統可就危險了。 這種安全威脅在Solaris中也有可能出現。
比如做一下下面這個實驗:
6 $ vi/etc/shadow
/etc/shadow: Permission denied.
7 用超級用戶身份
# chmod 6555 /bin/vi
# chown root /bin/vi
8 這次再用普通用戶身份試一試第6步,有什麼結果?這次你能以普通用戶身份修改/etc/shadow了!!但是 $ more/etc/shadow仍然不成功,說明在執行/bin/passwd時有超級用戶權限,平均仍是普通用戶身份。
再來看一下令人不安的情況:
9 用超級用戶身份
# chmod 6555 /bin/ksh
# chown root /bin/ksh
10 用普通用戶身份
$ ksh
#
發生了什麼情況?普通用戶不需要root口令就變成了root!!! 好可怕。如果有一個用戶曾有一次獲得超級用戶權限,並通過類似的方式給自己設置了後門(也可能放了一個類似的文件在他自己的家目錄中),以後他就可以隨時變成超級用戶了。
怎麼能避免setuid的不安全影響,又利用其方便的地方?這裡有幾點建議: 1 關鍵目錄應嚴格控制寫權限。比如/,/usr等。 2 對不管是root帳號還是普通用戶帳號的保密都有足夠的重視。最好不要設置類似於guest、public、test之類公用的容易猜出口令的帳號。 3 對系統中應該具有setuid權限的文件作一列表,定時檢查有沒有這之外的文件被設置了setuid權限。
下面有一個自己編的小程序與大家分享。 程序功能描述:檢查有沒有/usr/secu/masterlist文件記錄之外的其它文件被設置了setuid權限。 事先要求:在系統調試完成,所有需要安裝的軟件安裝好以後,執行下面命令生成檢查對照文件。
#mkdir -p / usr/secu
#find / -perm -4000 -print>/usr/secu/masterlist
程序:
cd /tmp
[-f secrcheck] && rm secrcheck
find / -perm -4000 -print>secrcheck
for f in'catsecrcheck'
do grep -w$ f /usr/secu/masterlist>/dev/null
if ["$ ?"! = "0"];then
echo $ f is not in list
fi
done
rm secrcheck
在需要對系統做檢查時,執行本shell程序。也可以放在定時進程中定時檢查。程序由於需要在整個文件系統中做查找操作,需要比較長的時間。 請您作完本文中的實驗後,別忘把文件的權限改回原狀。
Copyright © Linux教程網 All Rights Reserved