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

程序員安全

【程序員安全】
Unix系統(tǒng)為程序員提供了許多子程序,這些子程序可存取各種安全屬性.有
些是信息子程序,返回文件屬性,實(shí)際的和有效的UID,GID等信息.有些子程序可
改變文件屬性.UID,GID等有些處理口令文件和小組文件,還有些完成加密和解密.
本文主要討論有關(guān)系統(tǒng)子程序,標(biāo)準(zhǔn)C庫(kù)子程序的安全,如何寫(xiě)安全的C程序
并從root的角度介紹程序設(shè)計(jì)(僅能被root調(diào)用的子程序).

1.系統(tǒng)子程序

(1)I/O子程序
*creat():建立一個(gè)新文件或重寫(xiě)一個(gè)暫存文件.
需要兩個(gè)參數(shù):文件名和存取許可值(8進(jìn)制方式).如:
creat("/usr/pat/read_write",0666) /* 建立存取許可方式為0666的文件 */
調(diào)用此子程序的進(jìn)程必須要有建立的文件的所在目錄的寫(xiě)和執(zhí)行許可,置
給creat()的許可方式變量將被umask()設(shè)置的文件建立屏蔽值所修改,新
文件的所有者和小組由有效的UID和GID決定.
返回值為新建文件的文件描述符.
*fstat():見(jiàn)后面的stat().
*open():在C程序內(nèi)部打開(kāi)文件.
需要兩個(gè)參數(shù):文件路徑名和打開(kāi)方式(I,O,I&O).
如果調(diào)用此子程序的進(jìn)程沒(méi)有對(duì)于要打開(kāi)的文件的正確存取許可(包括文
件路徑上所有目錄分量的搜索許可),將會(huì)引起執(zhí)行失敗.
如果此子程序被調(diào)用去打開(kāi)不存在的文件,除非設(shè)置了O_CREAT標(biāo)志,調(diào)用
將不成功.此時(shí),新文件的存取許可作為第三個(gè)參數(shù)(可被用戶的umask修
改).
當(dāng)文件被進(jìn)程打開(kāi)后再改變?cè)撐募蛟撐募谀夸浀拇嫒≡S可,不影響
對(duì)該文件的I/O操作.
*read():從已由open()打開(kāi)并用作輸入的文件中讀信息.
它并不關(guān)心該文件的存取許可.一旦文件作為輸入打開(kāi),即可從該文件中讀
取信息.
*write():輸出信息到已由open()打開(kāi)并用作輸出的文件中.同read()一樣
它也不關(guān)心該文件的存取許可.

(2)進(jìn)程控制
*exec()族:包括execl(),execv(),execle(),execve(),execlp()和execvp()
可將一可執(zhí)行模快拷貝到調(diào)用進(jìn)程占有的存貯空間.正被調(diào)用進(jìn)
程執(zhí)行的程序?qū)⒉粡?fù)存在,新程序取代其位置.
這是UNIX系統(tǒng)中一個(gè)程序被執(zhí)行的唯一方式:用將執(zhí)行的程序復(fù)蓋原有的
程序.
安全注意事項(xiàng):
. 實(shí)際的和有效的UID和GID傳遞給由exec()調(diào)入的不具有SUID和SGID許
可的程序.
. 如果由exec()調(diào)入的程序有SUID和SGID許可,則有效的UID和GID將設(shè)
置給該程序的所有者或小組.
. 文件建立屏蔽值將傳遞給新程序.
. 除設(shè)了對(duì)exec()關(guān)閉標(biāo)志的文件外,所有打開(kāi)的文件都傳遞給新程序.
用fcntl()子程序可設(shè)置對(duì)exec()的關(guān)閉標(biāo)志.
*fork():用來(lái)建立新進(jìn)程.其建立的子進(jìn)程是與調(diào)用fork()的進(jìn)程(父進(jìn)程)
完全相同的拷貝(除了進(jìn)程號(hào)外)
安全注意事項(xiàng):
. 子進(jìn)程將繼承父進(jìn)程的實(shí)際和有效的UID和GID.
. 子進(jìn)程繼承文件方式建立屏蔽值.
. 所有打開(kāi)的文件傳給子進(jìn)程.
*signal():允許進(jìn)程處理可能發(fā)生的意外事件和中斷.
需要兩個(gè)參數(shù):信號(hào)編號(hào)和信號(hào)發(fā)生時(shí)要調(diào)用的子程序.
信號(hào)編號(hào)定義在signal.h中.
信號(hào)發(fā)生時(shí)要調(diào)用的子程序可由用戶編寫(xiě),也可用系統(tǒng)給的值,如:SIG_IGN
則信號(hào)將被忽略,SIG_DFL則信號(hào)將按系統(tǒng)的缺省方式處理.
如許多與安全有關(guān)的程序禁止終端發(fā)中斷信息(BREAK和DELETE),以免自己
被用戶終端終止運(yùn)行.
有些信號(hào)使UNIX系統(tǒng)的產(chǎn)生進(jìn)程的核心轉(zhuǎn)儲(chǔ)(進(jìn)程接收到信號(hào)時(shí)所占內(nèi)存
的內(nèi)容,有時(shí)含有重要信息),此系統(tǒng)子程序可用于禁止核心轉(zhuǎn)儲(chǔ).

(3)文件屬性
*access():檢測(cè)指定文件的存取能力是否符合指定的存取類型.
需要兩個(gè)參數(shù):文件名和要檢測(cè)的存取類型(整數(shù)).
存取類型定義如下:
0: 檢查文件是否存在
1: 檢查是否可執(zhí)行(搜索)

推薦閱讀