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

UNIX常用的系統(tǒng)調(diào)用( 五 )


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

推薦閱讀