歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

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