[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 安全技術 > 系統 > 正文
Setuid和Solaris安全
本文出自:http://www.teamsun.com.cn 作者: 孫叔平 (2001-08-02 09:00:00)

    在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程序。也可以放在定時進程中定時檢查。程序由需要在整個文件系統中做查找操作,需要比較長的時間。 請您作完本文中的實驗,別忘把文件的權限改回原狀。


(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
Solaris安全FAQ (2001-10-05 15:00:00)
Setuid和Solaris安全 (2001-08-02 09:00:00)
solaris安全手冊 (2001-05-10 21:00:23)
 

★  樊強制作 歡迎分享  ★