歡迎來到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