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

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


*putpwent():修改或增加/etc/passwd文件中的入口項.
此子程序?qū)⑷肟陧棇懙揭粋€指定的文件中,一般是一個臨時文件,直接寫口令文件是很危險的.最好在執(zhí)行前做文件封鎖,使兩個程序不能同時寫一個 文件.
算法如下:
. 建立一個獨立的臨時文件,即/etc/passnnn,nnn是PID號.
. 建立新產(chǎn)生的臨時文件和標(biāo)準(zhǔn)臨時文件/etc/ptmp的鏈,若建鏈?zhǔn)? 則為有人正在使用/etc/ptmp,等待直到/etc/ptmp可用為止或退出.
. 將/etc/passwd拷貝到/etc/ptmp,可對此文件做任何修改.
. 將/etc/passwd移到備份文件/etc/opasswd.
. 建立/etc/ptmp和/etc/passwd的鏈.
. 斷開/etc/passnnn與/etc/ptmp的鏈.
注意:臨時文件應(yīng)建立在/etc目錄,才能保證文件處于同一文件系統(tǒng)中,建 鏈才能成功,且臨時文件不會不安全.此外,若新文件已存在,即便建 鏈的是root用戶,也將失敗,從而保證了一旦臨時文件成功地建鏈后 沒有人能再插進(jìn)來干擾.當(dāng)然,使用臨時文件的程序應(yīng)確保清除所有 臨時文件,正確地捕捉信號.
(3)/etc/group的處理
有一組類似于前面的子程序處理/etc/group的信息,使用時必須用include 語句將/usr/include/grp.h文件加入到自己的程序中.該文件定義了group 結(jié)構(gòu),將由getgrnam(),getgrgid(),getgrent()返回group結(jié)構(gòu)指針.
*getgrnam():在/etc/group文件中搜索指定的小組名,然后返回指向小組入 口項的指針.
*getgrgid():類似于前一子程序,不同的是搜索指定的GID.
*getgrent():返回group文件中的下一個入口項.
*setgrent():將group文件的文件指針恢復(fù)到文件的起點.
*endgrent():用于完成工作后,關(guān)閉group文件.
*getuid():返回調(diào)用進(jìn)程的實際UID.
*getpruid():以getuid()返回的實際UID為參數(shù),確定與實際UID相應(yīng)的登錄 名,或指定一UID為參數(shù).
*getlogin():返回在終端上登錄的用戶的指針. 系統(tǒng)依次檢查STDIN,STDOUT,STDERR是否與終端相聯(lián),與終端相聯(lián)的標(biāo)準(zhǔn)輸 入用于確定終端名,終端名用于查找列于/etc/utmp文件中的用戶,該文件 由login維護(hù),由who程序用來確認(rèn)用戶.
*cuserid():首先調(diào)用getlogin(),若getlogin()返回NULL指針,再調(diào)用 getpwuid(getuid()).
*以下為命令:
*logname:列出登錄進(jìn)終端的用戶名.
*who am I:顯示出運行這條命令的用戶的登錄名.
*id:顯示實際的UID和GID(若有效的UID和GID和實際的不同時也顯示有效的 UID和GID)和相應(yīng)的登錄名.
(4)加密子程序
1977年1月,NBS宣布一個用于美國聯(lián)邦政府ADP系統(tǒng)的網(wǎng)絡(luò)的標(biāo)準(zhǔn)加密法:數(shù) 據(jù)加密標(biāo)準(zhǔn)即DES用于非機密應(yīng)用方面.DES一次處理64BITS的塊,56位的加 密鍵.
*setkey(),encrypt():提供用戶對DES的存取.
此兩子程序都取64BITS長的字符數(shù)組,數(shù)組中的每個元素代表一個位,為0 或1.setkey()設(shè)置將按DES處理的加密鍵,忽略每第8位構(gòu)成一個56位的加 密鍵.encrypt()然后加密或解密給定的64BITS長的一塊,加密或解密取決 于該子程序的第二個變元,0:加密 1:解密.
*crypt():是UNIX系統(tǒng)中的口令加密程序,也被/usr/lib/makekey命令調(diào)用. Crypt()子程序與crypt命令無關(guān),它與/usr/lib/makekey一樣取8個字符長 的關(guān)鍵詞,2個salt字符.關(guān)鍵詞送給setkey(),salt字符用于混合encrypt() 中的DES算法,最終調(diào)用encrypt()重復(fù)25次加密一個相同的字符串. 返回加密后的字符串指針.
(5)運行shell
*system():運行/bin/sh執(zhí)行其參數(shù)指定的命令,當(dāng)指定命令完成時返回.
*popen():類似于system(),不同的是命令運行時,其標(biāo)準(zhǔn)輸入或輸出聯(lián)到由 popen()返回的文件指針. 二者都調(diào)用fork(),exec(),popen()還調(diào)用pipe(),完成各自的工作,因而 fork()和exec()的安全方面的考慮開始起作用.
3.寫安全的C程序
一般有兩方面的安全問題,在寫程序時必須考慮:
(1)確保自己建立的任何臨時文件不含有機密數(shù)據(jù),如果有機密數(shù)據(jù),設(shè)置 臨時文件僅對自己可讀/寫.確保建立臨時文件的目錄僅對自己可寫.

推薦閱讀