日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

程序員安全( 五 )


讀該程序,可將程序設(shè)置為僅執(zhí)行許可,并只能通過(guò)自己的shell程序來(lái)
運(yùn)行.
編譯,安裝SUID/SGID程序時(shí)應(yīng)按下面的方法
(1)確保所有的SUID(SGID)程序是對(duì)于小組和其他用戶都是不可寫(xiě)的,存取
權(quán)限的限制低于4755(2755)將帶來(lái)麻煩.只能更嚴(yán)格.4111(2111)將使
其他人無(wú)法尋找程序中的安全漏洞.
(2)警惕外來(lái)的編碼和make/install方法
. 某些make/install方法不加選擇地建立SUID/SGID程序.
. 檢查違背上述指導(dǎo)原則的SUID/SGID許可的編碼.
. 檢查makefile文件中可能建立SUID/SGID文件的命令.

4.root程序的設(shè)計(jì)
有若干個(gè)子程序可以從有效UID為0的進(jìn)程中調(diào)用.許多前面提到的子程序,
當(dāng)從root進(jìn)程中調(diào)用時(shí),將完成和原來(lái)不同的處理.主要是忽略了許可權(quán)限的檢
查.
由root用戶運(yùn)行的程序當(dāng)然是root進(jìn)程(SUID除外),因有效UID用于確定文
件的存取權(quán)限,所以從具有root的程序中,調(diào)用fork()產(chǎn)生的進(jìn)程,也是root進(jìn)程.

(1)setuid():從root進(jìn)程調(diào)用setuid()時(shí),其處理有所不同,setuid()將把有
效的和實(shí)際的UID都置為指定的值.這個(gè)值可以是任何整型數(shù).而對(duì)非root
進(jìn)程則僅能以實(shí)際UID或本進(jìn)程原來(lái)有效的UID為變量值調(diào)用setuid().
(2)setgid():在系統(tǒng)進(jìn)程中調(diào)用setgid()時(shí),與setuid()類似,將實(shí)際和有效
的GID都改變成其參數(shù)指定的值.
* 調(diào)用以上兩個(gè)子程序時(shí),應(yīng)當(dāng)注意下面幾點(diǎn):
. 調(diào)用一次setuid()(setgid())將同時(shí)設(shè)置有效和實(shí)際UID(GID),獨(dú)立分
別設(shè)置有效或?qū)嶋HUID(GID)固然很好,但無(wú)法做到這點(diǎn).
. setuid()(setgid())可將有效和實(shí)際UID(GID)設(shè)置成任何整型數(shù),其數(shù)
值不必一定與/etc/passwd(/etc/group)中用戶(小組)相關(guān)聯(lián).
. 一旦程序以一個(gè)用戶的UID了setuid(),該程序就不再做為root運(yùn)行,也
不可能再獲root特權(quán).
(3)chown():當(dāng)root進(jìn)程運(yùn)行chown()時(shí),chown()將不刪除文件的SUID和/或
SGID許可,但當(dāng)非root進(jìn)程運(yùn)行chown()時(shí),chown()將取消文件的SUID和/
或SGID許可.
(4)chroot():改變進(jìn)程對(duì)根目錄的概念,調(diào)用chroot()后,進(jìn)程就不能把當(dāng)前
工作目錄改變到新的根目錄以上的任一目錄,所有以/開(kāi)始的路徑搜索,都
從新的根目錄開(kāi)始.
(5)mknod():用于建立一個(gè)文件,類似于creat(),差別是mknod()不返回所打開(kāi)
文件的文件描述符,并且能建立任何類型的文件(普通文件,特殊文件,目錄
文件).若從非root進(jìn)程調(diào)用mknod()將執(zhí)行失敗,只有建立FIFO特別文件
(有名管道文件)時(shí)例外,其它任何情況下,必須從root進(jìn)程調(diào)用mknod().由
于creat()僅能建立普通文件,mknod()是建立目錄文件的唯一途徑,因而僅
有root能建立目錄,這就是為什么mkdir命令具有SUID許可并屬root所有.
一般不從程序中調(diào)用mknod().通常用/etc/mknod命令建立特別設(shè)備文件而
這些文件一般不能在使用著時(shí)建立和刪除,mkdir命令用于建立目錄.當(dāng)用
mknod()建立特別文件時(shí),應(yīng)當(dāng)注意確從所建的特別文件不允許存取內(nèi)存,
磁盤,終端和其它設(shè)備.
(6)unlink():用于刪除文件.參數(shù)是要?jiǎng)h除文件的路徑名指針.當(dāng)指定了目錄
時(shí),必須從root進(jìn)程調(diào)用unlink(),這是必須從root進(jìn)程調(diào)用unlink()的唯
一情況,這就是為什么rmdir命令具有root的SGID許可的原因.
(7)mount(),umount():由root進(jìn)程調(diào)用,分別用于安裝和拆卸文件系統(tǒng).這兩
個(gè)子程序也被mount和umount命令調(diào)用,其參數(shù)基本和命令的參數(shù)相同.調(diào)
用mount(),需要給出一個(gè)特別文件和一個(gè)目錄的指針,特別文件上的文件
系統(tǒng)就將安裝在該目錄下,調(diào)用時(shí)還要給出一個(gè)標(biāo)識(shí)選項(xiàng),指定被安裝的文
件系統(tǒng)要被讀/寫(xiě)(0)還是僅讀(1).umount()的參數(shù)是要一個(gè)要拆卸的特別
文件的指針.

推薦閱讀