UNIX緋葷粺涓虹▼搴忓憳鎻愪緵浜嗚澶氬瓙紼嬪簭,榪欎簺瀛愮▼搴忓彲瀛樺彇鍚勭瀹夊叏灞炴?鏈?
浜涙槸淇℃伅瀛愮▼搴?榪斿洖鏂囦歡灞炴?瀹為檯鐨勫拰鏈夋晥鐨刄ID,GID絳変俊鎭?鏈変簺瀛愮▼搴忓彲
鏀瑰彉鏂囦歡灞炴?UID,GID絳夋湁浜涘鐞嗗彛浠ゆ枃浠跺拰灝忕粍鏂囦歡,榪樻湁浜涘畬鎴愬姞瀵嗗拰瑙e瘑.
鏈枃涓昏璁ㄨ鏈夊叧緋葷粺瀛愮▼搴?鏍囧噯C搴撳瓙紼嬪簭鐨勫畨鍏?濡備綍鍐欏畨鍏ㄧ殑C紼嬪簭
騫朵粠root鐨勮搴︿粙緇嶇▼搴忚璁?浠呰兘琚玶oot璋冪敤鐨勫瓙紼嬪簭).
1.緋葷粺瀛愮▼搴?
(1)I/O瀛愮▼搴?
*creat():寤虹珛涓涓柊鏂囦歡鎴栭噸鍐欎竴涓殏瀛樻枃浠?
闇瑕佷袱涓弬鏁?鏂囦歡鍚嶅拰瀛樺彇璁稿彲鍊?8榪涘埗鏂瑰紡).濡?
creat(鈥?usr/pat/read_write鈥?0666) /* 寤虹珛瀛樺彇璁稿彲鏂瑰紡涓?666鐨勬枃浠?*/
璋冪敤姝ゅ瓙紼嬪簭鐨勮繘紼嬪繀欏昏鏈夊緩绔嬬殑鏂囦歡鐨勬墍鍦ㄧ洰褰曠殑鍐欏拰鎵ц璁稿彲,緗?
緇檆reat()鐨勮鍙柟寮忓彉閲忓皢琚玼mask()璁劇疆鐨勬枃浠跺緩绔嬪睆钄藉兼墍淇敼,鏂?
鏂囦歡鐨勬墍鏈夎呭拰灝忕粍鐢辨湁鏁堢殑UID鍜孏ID鍐沖畾.
榪斿洖鍊間負鏂板緩鏂囦歡鐨勬枃浠舵弿榪扮.
*fstat():瑙佸悗闈㈢殑stat().
*open():鍦–紼嬪簭鍐呴儴鎵撳紑鏂囦歡.
闇瑕佷袱涓弬鏁?鏂囦歡璺緞鍚嶅拰鎵撳紑鏂瑰紡(I,O,I&O).
濡傛灉璋冪敤姝ゅ瓙紼嬪簭鐨勮繘紼嬫病鏈夊浜庤鎵撳紑鐨勬枃浠剁殑姝g‘瀛樺彇璁稿彲(鍖呮嫭鏂?
浠惰礬寰勪笂鎵鏈夌洰褰曞垎閲忕殑鎼滅儲璁稿彲),灝嗕細寮曡搗鎵ц澶辮觸.
濡傛灉姝ゅ瓙紼嬪簭琚皟鐢ㄥ幓鎵撳紑涓嶅瓨鍦ㄧ殑鏂囦歡,闄ら潪璁劇疆浜哋_CREAT鏍囧織,璋冪敤
灝嗕笉鎴愬姛.姝ゆ椂,鏂版枃浠剁殑瀛樺彇璁稿彲浣滀負絎笁涓弬鏁?鍙鐢ㄦ埛鐨剈mask淇?
鏀?.
褰撴枃浠惰榪涚▼鎵撳紑鍚庡啀鏀瑰彉璇ユ枃浠舵垨璇ユ枃浠舵墍鍦ㄧ洰褰曠殑瀛樺彇璁稿彲,涓嶅獎鍝?
瀵硅鏂囦歡鐨処/O鎿嶄綔.
*read():浠庡凡鐢眔pen()鎵撳紑騫剁敤浣滆緭鍏ョ殑鏂囦歡涓淇℃伅.
瀹冨茍涓嶅叧蹇冭鏂囦歡鐨勫瓨鍙栬鍙?涓鏃︽枃浠朵綔涓鴻緭鍏ユ墦寮,鍗沖彲浠庤鏂囦歡涓
鍙栦俊鎭?
*write():杈撳嚭淇℃伅鍒板凡鐢眔pen()鎵撳紑騫剁敤浣滆緭鍑虹殑鏂囦歡涓?鍚宺ead()涓鏍?
瀹冧篃涓嶅叧蹇冭鏂囦歡鐨勫瓨鍙栬鍙?
(2)榪涚▼鎺у埗
*exec()鏃?鍖呮嫭execl(),execv(),execle(),execve(),execlp()鍜宔xecvp()
鍙皢涓鍙墽琛屾ā蹇嫹璐濆埌璋冪敤榪涚▼鍗犳湁鐨勫瓨璐┖闂?姝h璋冪敤榪?
紼嬫墽琛岀殑紼嬪簭灝嗕笉澶嶅瓨鍦?鏂扮▼搴忓彇浠e叾浣嶇疆.
榪欐槸UNIX緋葷粺涓竴涓▼搴忚鎵ц鐨勫敮涓鏂瑰紡:鐢ㄥ皢鎵ц鐨勭▼搴忓鐩栧師鏈夌殑
紼嬪簭.
瀹夊叏娉ㄦ剰浜嬮」:
. 瀹為檯鐨勫拰鏈夋晥鐨刄ID鍜孏ID浼犻掔粰鐢眅xec()璋冨叆鐨勪笉鍏鋒湁SUID鍜孲GID璁?
鍙殑紼嬪簭.
. 濡傛灉鐢眅xec()璋冨叆鐨勭▼搴忔湁SUID鍜孲GID璁稿彲,鍒欐湁鏁堢殑UID鍜孏ID灝嗚
緗粰璇ョ▼搴忕殑鎵鏈夎呮垨灝忕粍.
. 鏂囦歡寤虹珛灞忚斀鍊煎皢浼犻掔粰鏂扮▼搴?
. 闄よ浜嗗exec()鍏抽棴鏍囧織鐨勬枃浠跺,鎵鏈夋墦寮鐨勬枃浠墮兘浼犻掔粰鏂扮▼搴?
鐢╢cntl()瀛愮▼搴忓彲璁劇疆瀵筫xec()鐨勫叧闂爣蹇?
*fork():鐢ㄦ潵寤虹珛鏂拌繘紼?鍏跺緩绔嬬殑瀛愯繘紼嬫槸涓庤皟鐢╢ork()鐨勮繘紼?鐖惰繘紼?
瀹屽叏鐩稿悓鐨勬嫹璐?闄や簡榪涚▼鍙峰)
瀹夊叏娉ㄦ剰浜嬮」:
. 瀛愯繘紼嬪皢緇ф壙鐖惰繘紼嬬殑瀹為檯鍜屾湁鏁堢殑UID鍜孏ID.
. 瀛愯繘紼嬬戶鎵挎枃浠舵柟寮忓緩绔嬪睆钄藉?
. 鎵鏈夋墦寮鐨勬枃浠朵紶緇欏瓙榪涚▼.
*signal():鍏佽榪涚▼澶勭悊鍙兘鍙戠敓鐨勬剰澶栦簨浠跺拰涓柇.
闇瑕佷袱涓弬鏁?淇″彿緙栧彿鍜屼俊鍙峰彂鐢熸椂瑕佽皟鐢ㄧ殑瀛愮▼搴?
淇″彿緙栧彿瀹氫箟鍦╯ignal.h涓?
淇″彿鍙戠敓鏃惰璋冪敤鐨勫瓙紼嬪簭鍙敱鐢ㄦ埛緙栧啓,涔熷彲鐢ㄧ郴緇熺粰鐨勫?濡?SIG_IGN
鍒欎俊鍙峰皢琚拷鐣?SIG_DFL鍒欎俊鍙峰皢鎸夌郴緇熺殑緙虹渷鏂瑰紡澶勭悊.
濡傝澶氫笌瀹夊叏鏈夊叧鐨勭▼搴忕姝㈢粓绔彂涓柇淇℃伅(BREAK鍜孌ELETE),浠ュ厤鑷繁
琚敤鎴風粓绔粓姝㈣繍琛?
鏈変簺淇″彿浣縐NIX緋葷粺鐨勪駭鐢熻繘紼嬬殑鏍稿績杞偍(榪涚▼鎺ユ敹鍒頒俊鍙鋒椂鎵鍗犲唴瀛?
鐨勫唴瀹?鏈夋椂鍚湁閲嶈淇℃伅),姝ょ郴緇熷瓙紼嬪簭鍙敤浜庣姝㈡牳蹇冭漿鍌?
(3)鏂囦歡灞炴?
*access():媯嫻嬫寚瀹氭枃浠剁殑瀛樺彇鑳藉姏鏄惁絎﹀悎鎸囧畾鐨勫瓨鍙栫被鍨?
闇瑕佷袱涓弬鏁?鏂囦歡鍚嶅拰瑕佹嫻嬬殑瀛樺彇綾誨瀷(鏁存暟).
瀛樺彇綾誨瀷瀹氫箟濡備笅:
0: 媯鏌ユ枃浠舵槸鍚﹀瓨鍦?
1: 媯鏌ユ槸鍚﹀彲鎵ц(鎼滅儲)
2: 媯鏌ユ槸鍚﹀彲鍐?
3: 媯鏌ユ槸鍚﹀彲鍐欏拰鎵ц
4: 媯鏌ユ槸鍚﹀彲璇?
5: 媯鏌ユ槸鍚﹀彲璇誨拰鎵ц
6: 媯鏌ユ槸鍚﹀彲璇誨彲鍐欏彲鎵ц
榪欎簺鏁板瓧鐨勬剰涔夊拰chmod鍛戒護涓瀹氳鍙柟寮忕殑鏁板瓧鎰忎箟鐩稿悓.
姝ゅ瓙紼嬪簭浣跨敤瀹為檯鐨刄ID鍜孏ID媯嫻嬫枃浠剁殑瀛樺彇鑳藉姏(涓鑸湁鏁堢殑UID鍜孏ID
鐢ㄤ簬媯鏌ユ枃浠跺瓨鍙栬兘鍔?.
榪斿洖鍊? 0:璁稿彲 -1:涓嶈鍙?
*chmod():灝嗘寚瀹氭枃浠舵垨鐩綍鐨勫瓨鍙栬鍙柟寮忔敼鎴愭柊鐨勮鍙柟寮?
闇瑕佷袱涓弬鏁?鏂囦歡鍚嶅拰鏂扮殑瀛樺彇璁稿彲鏂瑰紡.
*chown():鍚屾椂鏀瑰彉鎸囧畾鏂囦歡鐨勬墍鏈夎呭拰灝忕粍鐨刄ID鍜孏ID.(涓巆hown鍛戒護涓?
鍚?.
鐢變簬姝ゅ瓙紼嬪簭鍚屾椂鏀瑰彉鏂囦歡鐨勬墍鏈夎呭拰灝忕粍,鏁呭繀欏誨彇娑堟墍鎿嶄綔鏂囦歡鐨凷UID
鍜孲GID璁稿彲,浠ラ槻姝㈢敤鎴峰緩绔婼UID鍜孲GID紼嬪簭,鐒跺悗榪愯chown()鍘昏幏寰楀埆
浜虹殑鏉冮檺.
*stat():榪斿洖鏂囦歡鐨勭姸鎬?灞炴?.
闇瑕佷袱涓弬鏁?鏂囦歡璺緞鍚嶅拰涓涓粨鏋勬寚閽?鎸囧悜鐘舵佷俊鎭殑瀛樻斁
鐨勪綅緗?
緇撴瀯瀹氫箟濡備笅:
st_mode: 鏂囦歡綾誨瀷鍜屽瓨鍙栬鍙柟寮?
st_ino: I鑺傜偣鍙?
st_dev: 鏂囦歡鎵鍦ㄨ澶囩殑ID
st_rdev: 鐗瑰埆鏂囦歡鐨処D
st_nlink: 鏂囦歡閾炬帴鏁?
st_uid: 鏂囦歡鎵鏈夎呯殑UID
st_gid: 鏂囦歡灝忕粍鐨凣ID
st_size: 鎸夊瓧鑺傝鏁扮殑鏂囦歡澶у皬
st_atime: 鏈鍚庡瓨鍙栨椂闂?璇?
st_mtime: 鏈鍚庝慨鏀規椂闂?鍐?鍜屾渶鍚庣姸鎬佺殑鏀瑰彉
st_ctime: 鏈鍚庣殑鐘舵佷慨鏀規椂闂?
榪斿洖鍊? 0:鎴愬姛 1:澶辮觸
*umask():灝嗚皟鐢ㄨ繘紼嬪強鍏跺瓙榪涚▼鐨勬枃浠跺緩绔嬪睆钄藉艱緗負鎸囧畾鐨勫瓨鍙栬鍙?
闇瑕佷竴涓弬鏁? 鏂扮殑鏂囦歡寤虹珛灞忓?
(4)UID鍜孏ID鐨勫鐞?
*getuid():榪斿洖榪涚▼鐨勫疄闄匲ID.
*getgid():榪斿洖榪涚▼鐨勫疄闄匞ID.
浠ヤ笂涓や釜瀛愮▼搴忓彲鐢ㄤ簬紜畾鏄皝鍦ㄨ繍琛岃繘紼?
*geteuid():榪斿洖榪涚▼鐨勬湁鏁圲ID.
*getegid():榪斿洖榪涚▼鐨勬湁鏁圙ID.
浠ヤ笂涓や釜瀛愮▼搴忓彲鍦ㄤ竴涓▼搴忎笉寰椾笉紜畾瀹冩槸鍚﹀湪榪愯鏌愮敤鎴瘋屼笉鏄繍琛?
瀹冪殑鐢ㄦ埛鐨凷UID紼嬪簭鏃跺緢鏈夌敤,鍙皟鐢ㄥ畠浠潵媯鏌ョ‘璁ゆ湰紼嬪簭鐨勭‘鏄互璇?
鐢ㄦ埛鐨凷UID璁稿彲鍦ㄨ繍琛?
*setuid():鐢ㄤ簬鏀瑰彉鏈夋晥鐨刄ID.
瀵逛簬涓鑸敤鎴?姝ゅ瓙紼嬪簭浠呭瑕佸湪鏈夋晥鍜屽疄闄呯殑UID涔嬮棿鍙樻崲鐨凷UID紼嬪簭鎵?
鏈夌敤(浠庡師鏈夋晥UID鍙樻崲涓哄疄闄匲ID),浠ヤ繚鎶よ繘紼嬩笉鍙楀埌瀹夊叏鍗卞.瀹為檯涓婅
榪涚▼涓嶅啀鏄疭UID鏂瑰紡榪愯.
*setgid():鐢ㄤ簬鏀瑰彉鏈夋晥鐨凣ID.
2.鏍囧噯C搴?
(1)鏍囧噯I/O
*fopen():鎵撳紑涓涓枃浠朵緵璇繪垨鍐?瀹夊叏鏂歸潰鐨勮冭檻鍚宱pen()涓鏍?
*fread(),getc(),fgetc(),gets(),scanf()鍜宖scanf():浠庡凡鐢眆open()鎵?
寮渚涜鐨勬枃浠朵腑璇誨彇淇℃伅.瀹冧滑騫朵笉鍏沖績鏂囦歡鐨勫瓨鍙栬鍙?榪欎竴鐐?
鍚宺ead().
*fwrite(),put(),fputc(),puts,fputs(),printf(),fprintf():鍐欎俊鎭埌
宸茬敱fopen()鎵撳紑渚涘啓鐨勬枃浠朵腑.瀹冧滑涔熶笉鍏沖績鏂囦歡鐨勫瓨鍙栬鍙?
鍚寃rite().
*getpass():浠庣粓绔笂璇昏嚦澶?涓瓧絎﹂暱鐨勫彛浠?涓嶅洖鏄劇敤鎴瘋緭鍏ョ殑瀛楃.
闇瑕佷竴涓弬鏁? 鎻愮ず淇℃伅.
璇ュ瓙紼嬪簭灝嗘彁紺轟俊鎭樉紺哄湪緇堢涓?紱佹瀛楃鍥炴樉鍔熻兘,浠?dev/tty璇誨彇鍙?
浠?鐒跺悗鍐嶆仮澶嶅瓧絎﹀洖鏄懼姛鑳?榪斿洖鍒氭暡鍏ョ殑鍙d護鐨勬寚閽?
*popen():灝嗗湪(5)榪愯shell涓粙緇?
(2)/etc/passwd澶勭悊
鏈変竴緇勫瓙紼嬪簭鍙/etc/passwd鏂囦歡榪涜鏂逛究鐨勫瓨鍙?鍙鏂囦歡璇誨彇鍒板叆鍙?
欏規垨鍐欐柊鐨勫叆鍙i」鎴栨洿鏂扮瓑絳?
*getpwuid():浠?etc/passwd鏂囦歡涓幏鍙栨寚瀹氱殑UID鐨勫叆鍙i」.
*getpwnam():瀵逛簬鎸囧畾鐨勭櫥褰曞悕,鍦?etc/passwd鏂囦歡媯绱㈠叆鍙i」.
浠ヤ笂涓や釜瀛愮▼搴忚繑鍥炰竴鎸囧悜passwd緇撴瀯鐨勬寚閽?璇ョ粨鏋勫畾涔夊湪
/usr/include/pwd.h涓?瀹氫箟濡備笅:
struct passwd {
char * pw_name; /* 鐧誨綍鍚?*/
char * pw_passwd; /* 鍔犲瘑鍚庣殑鍙d護 */
uid_t pw_uid; /* UID */
gid_t pw_gid; /* GID */
char * pw_age; /* 浠g悊淇℃伅 */
char * pw_comment; /* 娉ㄩ噴 */
char * pw_gecos;
char * pw_dir; /* 涓葷洰褰?*/
char * pw_shell; /* 浣跨敤鐨剆hell */
};
*getpwent(),setpwent(),endpwent():瀵瑰彛浠ゆ枃浠朵綔鍚庣畫澶勭悊.
棣栨璋冪敤getpwent(),鎵撳紑/etc/passwd騫惰繑鍥炴寚鍚戞枃浠朵腑絎竴涓叆鍙i」鐨?
鎸囬拡,淇濇寔璋冪敤涔嬮棿鏂囦歡鐨勬墦寮鐘舵?
鍐嶈皟鐢╣etpwent()鍙『搴忓湴榪斿洖鍙d護鏂囦歡涓殑鍚勫叆鍙i」.
璋冪敤setpwent()鎶婂彛浠ゆ枃浠剁殑鎸囬拡閲嶆柊緗負鏂囦歡鐨勫紑濮嬪.
浣跨敤瀹屽彛浠ゆ枃浠跺悗璋冪敤endpwent()鍏抽棴鍙d護鏂囦歡.
*putpwent():淇敼鎴栧鍔?etc/passwd鏂囦歡涓殑鍏ュ彛欏?
姝ゅ瓙紼嬪簭灝嗗叆鍙i」鍐欏埌涓涓寚瀹氱殑鏂囦歡涓?涓鑸槸涓涓復鏃舵枃浠?鐩存帴鍐欏彛
浠ゆ枃浠舵槸寰堝嵄闄╃殑.鏈濂藉湪鎵ц鍓嶅仛鏂囦歡灝侀攣,浣夸袱涓▼搴忎笉鑳藉悓鏃跺啓涓涓?
鏂囦歡.綆楁硶濡備笅:
. 寤虹珛涓涓嫭绔嬬殑涓存椂鏂囦歡,鍗?etc/passnnn,nnn鏄疨ID鍙?
. 寤虹珛鏂頒駭鐢熺殑涓存椂鏂囦歡鍜屾爣鍑嗕復鏃舵枃浠?etc/ptmp鐨勯摼,鑻ュ緩閾懼け璐?
鍒欎負鏈変漢姝e湪浣跨敤/etc/ptmp,絳夊緟鐩村埌/etc/ptmp鍙敤涓烘鎴栭鍑?
. 灝?etc/passwd鎷瘋礉鍒?etc/ptmp,鍙姝ゆ枃浠跺仛浠諱綍淇敼.
. 灝?etc/passwd縐誨埌澶囦喚鏂囦歡/etc/opasswd.
. 寤虹珛/etc/ptmp鍜?etc/passwd鐨勯摼.
. 鏂紑/etc/passnnn涓?etc/ptmp鐨勯摼.
娉ㄦ剰:涓存椂鏂囦歡搴斿緩绔嬪湪/etc鐩綍,鎵嶈兘淇濊瘉鏂囦歡澶勪簬鍚屼竴鏂囦歡緋葷粺涓?寤?
閾炬墠鑳芥垚鍔?涓斾復鏃舵枃浠朵笉浼氫笉瀹夊叏.姝ゅ,鑻ユ柊鏂囦歡宸插瓨鍦?鍗充究寤?
閾劇殑鏄痳oot鐢ㄦ埛,涔熷皢澶辮觸,浠庤屼繚璇佷簡涓鏃︿復鏃舵枃浠舵垚鍔熷湴寤洪摼鍚?
娌℃湁浜鴻兘鍐嶆彃榪涙潵騫叉壈.褰撶劧,浣跨敤涓存椂鏂囦歡鐨勭▼搴忓簲紜繚娓呴櫎鎵鏈?
涓存椂鏂囦歡,姝g‘鍦版崟鎹変俊鍙?
(3)/etc/group鐨勫鐞?
鏈変竴緇勭被浼間簬鍓嶉潰鐨勫瓙紼嬪簭澶勭悊/etc/group鐨勪俊鎭?浣跨敤鏃跺繀欏葷敤include
璇彞灝?usr/include/grp.h鏂囦歡鍔犲叆鍒拌嚜宸辯殑紼嬪簭涓?璇ユ枃浠跺畾涔変簡group
緇撴瀯,灝嗙敱getgrnam(),getgrgid(),getgrent()榪斿洖group緇撴瀯鎸囬拡.
*getgrnam():鍦?etc/group鏂囦歡涓悳绱㈡寚瀹氱殑灝忕粍鍚?鐒跺悗榪斿洖鎸囧悜灝忕粍鍏?
鍙i」鐨勬寚閽?
*getgrgid():綾諱技浜庡墠涓瀛愮▼搴?涓嶅悓鐨勬槸鎼滅儲鎸囧畾鐨凣ID.
*getgrent():榪斿洖group鏂囦歡涓殑涓嬩竴涓叆鍙i」.
*setgrent():灝唃roup鏂囦歡鐨勬枃浠舵寚閽堟仮澶嶅埌鏂囦歡鐨勮搗鐐?
*endgrent():鐢ㄤ簬瀹屾垚宸ヤ綔鍚?鍏抽棴group鏂囦歡.
*getuid():榪斿洖璋冪敤榪涚▼鐨勫疄闄匲ID.
*getpruid():浠etuid()榪斿洖鐨勫疄闄匲ID涓哄弬鏁?紜畾涓庡疄闄匲ID鐩稿簲鐨勭櫥褰?
鍚?鎴栨寚瀹氫竴UID涓哄弬鏁?
*getlogin():榪斿洖鍦ㄧ粓绔笂鐧誨綍鐨勭敤鎴風殑鎸囬拡.
緋葷粺渚濇媯鏌TDIN,STDOUT,STDERR鏄惁涓庣粓绔浉鑱?涓庣粓绔浉鑱旂殑鏍囧噯杈?
鍏ョ敤浜庣‘瀹氱粓绔悕,緇堢鍚嶇敤浜庢煡鎵懼垪浜?etc/utmp鏂囦歡涓殑鐢ㄦ埛,璇ユ枃浠?
鐢眑ogin緇存姢,鐢眞ho紼嬪簭鐢ㄦ潵紜鐢ㄦ埛.
*cuserid():棣栧厛璋冪敤getlogin(),鑻etlogin()榪斿洖NULL鎸囬拡,鍐嶈皟鐢?
getpwuid(getuid()).
*浠ヤ笅涓哄懡浠?
*logname:鍒楀嚭鐧誨綍榪涚粓绔殑鐢ㄦ埛鍚?
*who am i:鏄劇ず鍑鴻繍琛岃繖鏉″懡浠ょ殑鐢ㄦ埛鐨勭櫥褰曞悕.
*id:鏄劇ず瀹為檯鐨刄ID鍜孏ID(鑻ユ湁鏁堢殑UID鍜孏ID鍜屽疄闄呯殑涓嶅悓鏃朵篃鏄劇ず鏈夋晥鐨?
UID鍜孏ID)鍜岀浉搴旂殑鐧誨綍鍚?
(4)鍔犲瘑瀛愮▼搴?
1977騫?鏈?NBS瀹e竷涓涓敤浜庣編鍥借仈閭︽斂搴淎DP緋葷粺鐨勭綉緇滅殑鏍囧噯鍔犲瘑娉?鏁?
鎹姞瀵嗘爣鍑嗗嵆DES鐢ㄤ簬闈炴満瀵嗗簲鐢ㄦ柟闈?DES涓嬈″鐞?4BITS鐨勫潡,56浣嶇殑鍔?
瀵嗛敭.
*setkey(),encrypt():鎻愪緵鐢ㄦ埛瀵笵ES鐨勫瓨鍙?
姝や袱瀛愮▼搴忛兘鍙?4BITS闀跨殑瀛楃鏁扮粍,鏁扮粍涓殑姣忎釜鍏冪礌浠h〃涓涓綅,涓?
鎴?.setkey()璁劇疆灝嗘寜DES澶勭悊鐨勫姞瀵嗛敭,蹇界暐姣忕8浣嶆瀯鎴愪竴涓?6浣嶇殑鍔?
瀵嗛敭.encrypt()鐒跺悗鍔犲瘑鎴栬В瀵嗙粰瀹氱殑64BITS闀跨殑涓鍧?鍔犲瘑鎴栬В瀵嗗彇鍐?
浜庤瀛愮▼搴忕殑絎簩涓彉鍏?0:鍔犲瘑 1:瑙e瘑.
*crypt():鏄疷NIX緋葷粺涓殑鍙d護鍔犲瘑紼嬪簭,涔熻/usr/lib/makekey鍛戒護璋冪敤.
crypt()瀛愮▼搴忎笌crypt鍛戒護鏃犲叧,瀹冧笌/usr/lib/makekey涓鏍峰彇8涓瓧絎﹂暱
鐨勫叧閿瘝,2涓猻alt瀛楃.鍏抽敭璇嶉佺粰setkey(),salt瀛楃鐢ㄤ簬娣峰悎encrypt()
涓殑DES綆楁硶,鏈緇堣皟鐢╡ncrypt()閲嶅25嬈″姞瀵嗕竴涓浉鍚岀殑瀛楃涓?
榪斿洖鍔犲瘑鍚庣殑瀛楃涓叉寚閽?
(5)榪愯shell
*system():榪愯/bin/sh鎵ц鍏跺弬鏁版寚瀹氱殑鍛戒護,褰撴寚瀹氬懡浠ゅ畬鎴愭椂榪斿洖.
*popen():綾諱技浜巗ystem(),涓嶅悓鐨勬槸鍛戒護榪愯鏃?鍏舵爣鍑嗚緭鍏ユ垨杈撳嚭鑱斿埌鐢?
popen()榪斿洖鐨勬枃浠舵寚閽?
浜岃呴兘璋冪敤fork(),exec(),popen()榪樿皟鐢╬ipe(),瀹屾垚鍚勮嚜鐨勫伐浣?鍥犺?
fork()鍜宔xec()鐨勫畨鍏ㄦ柟闈㈢殑鑰冭檻寮濮嬭搗浣滅敤.
3.鍐欏畨鍏ㄧ殑C紼嬪簭
涓鑸湁涓ゆ柟闈㈢殑瀹夊叏闂,鍦ㄥ啓紼嬪簭鏃跺繀欏昏冭檻:
(1)紜繚鑷繁寤虹珛鐨勪換浣曚復鏃舵枃浠朵笉鍚湁鏈哄瘑鏁版嵁,濡傛灉鏈夋満瀵嗘暟鎹?璁劇疆
涓存椂鏂囦歡浠呭鑷繁鍙/鍐?紜繚寤虹珛涓存椂鏂囦歡鐨勭洰褰曚粎瀵硅嚜宸卞彲鍐?
(2)紜繚鑷繁瑕佽繍琛岀殑浠諱綍鍛戒護(閫氳繃system(),popen(),execlp(),
execvp()榪愯鐨勫懡浠?鐨勭‘鏄嚜宸辮榪愯鐨勫懡浠?鑰屼笉鏄叾瀹冧粈涔堝懡
浠?灝ゅ叾鏄嚜宸辯殑紼嬪簭涓篠UID鎴朣GID璁稿彲鏃惰灝忓績.
絎竴鏂歸潰姣旇緝綆鍗?鍦ㄧ▼搴忓紑濮嬪墠璋冪敤umask(077).鑻ヨ浣挎枃浠跺鍏朵粬浜哄彲
璇?鍙啀璋僣hmod(),涔熷彲鐢ㄤ笅榪拌鍚嶅緩绔嬩竴涓濅笉鍙鈥濈殑涓存椂鏂囦歡.
creat(鈥?tmp/xxx鈥?0);
file=open(鈥?tmp/xxx鈥?O_RDWR);
unlink(鈥?tmp/xxx鈥?;
鏂囦歡/tmp/xxx寤虹珛鍚?鎵撳紑,鐒跺悗鏂紑閾?浣嗘槸鍒嗛厤緇欒鏂囦歡鐨勫瓨鍌ㄥ櫒騫舵湭鍒?
闄?鐩村埌鏈緇堟寚鍚戣鏂囦歡鐨勬枃浠墮氶亾琚叧闂椂鎵嶈鍒犻櫎.鎵撳紑璇ユ枃浠剁殑榪涚▼
鍜屽畠鐨勪換浣曞瓙榪涚▼閮藉彲瀛樺彇榪欎釜涓存椂鏂囦歡,鑰屽叾瀹冭繘紼嬩笉鑳藉瓨鍙栬鏂囦歡,鍥?
涓哄畠鍦?tmp涓殑鐩綍欏瑰凡琚玼nlink()鍒犻櫎.
絎簩鏂歸潰姣旇緝澶嶆潅鑰屽井濡?鐢變簬system(),popen(),execlp(),execvp()鎵ц
鏃?鑻ヤ笉緇欏嚭鎵ц鍛戒護鐨勫叏璺緞,灝辮兘鈥濋獥鈥濈敤鎴風殑紼嬪簭鍘繪墽琛屼笉鍚岀殑鍛戒護.鍥?
涓虹郴緇熷瓙紼嬪簭鏄牴鎹甈ATH鍙橀噺紜畾鍝欏哄簭鎼滅儲鍝簺鐩綍,浠ュ鎵炬寚瀹氱殑鍛?
浠?榪欑О涓篠UID闄蜂簳.鏈瀹夊叏鐨勫姙娉曟槸鍦ㄨ皟鐢╯ystem()鍓嶅皢鏈夋晥UID鏀瑰彉鎴愬疄
闄匲ID,鍙︿竴縐嶆瘮杈冨ソ鐨勬柟娉曟槸浠ュ叏璺緞鍚嶅懡浠や綔涓哄弬鏁?execl(),execv(),
execle(),execve()閮借姹傚叏璺緞鍚嶄綔涓哄弬鏁?鏈夊叧SUID闄蜂簳鐨勫彟涓鏂瑰紡鏄?
鍦ㄧ▼搴忎腑璁劇疆PATH,鐢變簬system()鍜宲open()閮藉惎鍔╯hell,鏁呭彲浣跨敤shell鍙?
娉?濡?
system(鈥漃ATH=/bin:/usr/bin cd鈥?;
榪欐牱鍏佽鐢ㄦ埛榪愯緋葷粺鍛戒護鑰屼笉蹇呯煡閬撹鎵ц鐨勫懡浠ゅ湪鍝釜鐩綍涓?浣嗚繖縐?
鏂規硶涓嶈兘鐢ㄤ簬execlp(),execvp()涓?鍥犱負瀹冧滑涓嶈兘鍚姩shell鎵ц璋冪敤搴忓垪
浼犻掔殑鍛戒護瀛楃涓?
鍏充簬shell瑙i噴浼犻掔粰system()鍜宲open()鐨勫懡浠よ鐨勬柟寮?鏈変袱涓叾瀹冪殑闂?
棰?
*shell浣跨敤IFS shell鍙橀噺涓殑瀛楃,灝嗗懡浠よ鍒嗚В鎴愬崟璇?閫氬父榪欎釜
shell鍙橀噺涓槸絀烘牸,tab,鎹㈣),濡侷FS涓槸/,瀛楃涓?bin/ed琚В閲婃垚鍗曡瘝
bin,鎺ヤ笅鏉ユ槸鍗曡瘝ed,浠庤屽紩璧峰懡浠よ鐨勬洸瑙?
鍐嶅己璋冧竴嬈?鍦ㄩ氳繃鑷繁鐨勭▼搴忚繍琛屽彟涓涓▼搴忓墠,搴斿皢鏈夋晥UID鏀逛負瀹為檯鐨?
UID,絳夊彟涓涓▼搴忛鍑哄悗,鍐嶅皢鏈夋晥UID鏀瑰洖鍘熸潵鐨勬湁鏁圲ID.
SUID/SGID紼嬪簭鎸囧鍑嗗垯
(1)涓嶈鍐橲UID/SGID紼嬪簭,澶у鏁版椂鍊欐棤姝ゅ繀瑕?
(2)璁劇疆SGID璁稿彲,涓嶈璁劇疆SUID璁稿彲.搴旂嫭鑷緩绔嬩竴涓柊鐨勫皬緇?
(3)涓嶈鐢╡xec()鎵ц浠諱綍紼嬪簭.璁頒綇exec()涔熻system()鍜宲open()璋冪敤.
. 鑻ヨ璋冪敤exec()(鎴杝ystem(),popen()),搴斾簨鍏堢敤setgid(getgid())
灝嗘湁鏁圙ID緗姞瀹為檯GID.
. 鑻ヤ笉鑳界敤setgid(),鍒欒皟鐢╯ystem()鎴杙open()鏃?搴旇緗甀FS:
popen(鈥滻FS=\t\n;export IFS;/bin/ls鈥?鈥漴鈥?;
. 浣跨敤瑕佹墽琛岀殑鍛戒護鐨勫叏璺緞鍚?
. 鑻ヤ笉鑳戒嬌鐢ㄥ叏璺緞鍚?鍒欏簲鍦ㄥ懡浠ゅ墠鍏堣緗甈ATH:
popen(鈥滻FS=\t\n;export IFS;PATH=/bin:/usr/bin;/bin/ls鈥?鈥漴鈥?;
. 涓嶈灝嗙敤鎴瘋瀹氱殑鍙傛暟浼犵粰system()鎴杙open();鑻ユ棤娉曢伩鍏嶅垯搴旀鏌?
鍙樺厓瀛楃涓蹭腑鏄惁鏈夌壒孌婄殑shell瀛楃.
. 鑻ョ敤鎴鋒湁涓ぇ紼嬪簭,璋冪敤exec()鎵ц璁稿鍏跺畠紼嬪簭,榪欑鎯呭喌涓嬩笉瑕佸皢
澶х▼搴忚緗負SGID璁稿彲.鍙互鍐欎竴涓?鎴栧涓?鏇村皬,鏇寸畝鍗曠殑SGID紼嬪簭
鎵ц蹇呴』鍏鋒湁SGID璁稿彲鐨勪換鍔?鐒跺悗鐢卞ぇ紼嬪簭鎵ц榪欎簺灝廠GID紼嬪簭.
(4)鑻ョ敤鎴峰繀欏諱嬌鐢⊿UID鑰屼笉鏄疭GID,浠ョ浉鍚岀殑欏哄簭璁頒綇(2),(3)欏瑰唴瀹?騫?
鐩稿簲璋冩暣.涓嶈璁劇疆root鐨凷UID璁稿彲.閫変竴涓叾瀹冩埛澶?
(5)鑻ョ敤鎴鋒兂緇欎簣鍏朵粬浜烘墽琛岃嚜宸辯殑shell紼嬪簭鐨勮鍙?浣嗗張涓嶆兂璁╀粬浠兘
璇昏紼嬪簭,鍙皢紼嬪簭璁劇疆涓轟粎鎵ц璁稿彲,騫跺彧鑳介氳繃鑷繁鐨剆hell紼嬪簭鏉?
榪愯.
緙栬瘧,瀹夎SUID/SGID紼嬪簭鏃跺簲鎸変笅闈㈢殑鏂規硶
(1)紜繚鎵鏈夌殑SUID(SGID)紼嬪簭鏄浜庡皬緇勫拰鍏朵粬鐢ㄦ埛閮芥槸涓嶅彲鍐欑殑,瀛樺彇
鏉冮檺鐨勯檺鍒朵綆浜?755(2755)灝嗗甫鏉ラ夯鐑?鍙兘鏇翠弗鏍?4111(2111)灝嗕嬌
鍏朵粬浜烘棤娉曞鎵劇▼搴忎腑鐨勫畨鍏ㄦ紡媧?
(2)璀︽儠澶栨潵鐨勭紪鐮佸拰make/install鏂規硶
. 鏌愪簺make/install鏂規硶涓嶅姞閫夋嫨鍦板緩绔婼UID/SGID紼嬪簭.
. 媯鏌ヨ繚鑳屼笂榪版寚瀵煎師鍒欑殑SUID/SGID璁稿彲鐨勭紪鐮?
. 媯鏌akefile鏂囦歡涓彲鑳藉緩绔婼UID/SGID鏂囦歡鐨勫懡浠?
4.root紼嬪簭鐨勮璁?
鏈夎嫢騫蹭釜瀛愮▼搴忓彲浠ヤ粠鏈夋晥UID涓?鐨勮繘紼嬩腑璋冪敤.璁稿鍓嶉潰鎻愬埌鐨勫瓙紼嬪簭,
褰撲粠root榪涚▼涓皟鐢ㄦ椂,灝嗗畬鎴愬拰鍘熸潵涓嶅悓鐨勫鐞?涓昏鏄拷鐣ヤ簡璁稿彲鏉冮檺鐨勬
鏌?
鐢眗oot鐢ㄦ埛榪愯鐨勭▼搴忓綋鐒舵槸root榪涚▼(SUID闄ゅ),鍥犳湁鏁圲ID鐢ㄤ簬紜畾鏂?
浠剁殑瀛樺彇鏉冮檺,鎵浠ヤ粠鍏鋒湁root鐨勭▼搴忎腑,璋冪敤fork()浜х敓鐨勮繘紼?涔熸槸root榪涚▼.
(1)setuid():浠巖oot榪涚▼璋冪敤setuid()鏃?鍏跺鐞嗘湁鎵涓嶅悓,setuid()灝嗘妸鏈?
鏁堢殑鍜屽疄闄呯殑UID閮界疆涓烘寚瀹氱殑鍊?榪欎釜鍊煎彲浠ユ槸浠諱綍鏁村瀷鏁?鑰屽闈瀝oot
榪涚▼鍒欎粎鑳戒互瀹為檯UID鎴栨湰榪涚▼鍘熸潵鏈夋晥鐨刄ID涓哄彉閲忓艱皟鐢╯etuid().
(2)setgid():鍦ㄧ郴緇熻繘紼嬩腑璋冪敤setgid()鏃?涓巗etuid()綾諱技,灝嗗疄闄呭拰鏈夋晥
鐨凣ID閮芥敼鍙樻垚鍏跺弬鏁版寚瀹氱殑鍊?
* 璋冪敤浠ヤ笂涓や釜瀛愮▼搴忔椂,搴斿綋娉ㄦ剰涓嬮潰鍑犵偣:
. 璋冪敤涓嬈etuid()(setgid())灝嗗悓鏃惰緗湁鏁堝拰瀹為檯UID(GID),鐙珛鍒?
鍒緗湁鏁堟垨瀹為檯UID(GID)鍥虹劧寰堝ソ,浣嗘棤娉曞仛鍒拌繖鐐?
. setuid()(setgid())鍙皢鏈夋晥鍜屽疄闄匲ID(GID)璁劇疆鎴愪換浣曟暣鍨嬫暟,鍏舵暟
鍊間笉蹇呬竴瀹氫笌/etc/passwd(/etc/group)涓敤鎴?灝忕粍)鐩稿叧鑱?
. 涓鏃︾▼搴忎互涓涓敤鎴風殑UID浜唖etuid(),璇ョ▼搴忓氨涓嶅啀鍋氫負root榪愯,涔?
涓嶅彲鑳藉啀鑾穜oot鐗規潈.
(3)chown():褰搑oot榪涚▼榪愯chown()鏃?chown()灝嗕笉鍒犻櫎鏂囦歡鐨凷UID鍜?鎴?
SGID璁稿彲,浣嗗綋闈瀝oot榪涚▼榪愯chown()鏃?chown()灝嗗彇娑堟枃浠剁殑SUID鍜?
鎴朣GID璁稿彲.
(4)chroot():鏀瑰彉榪涚▼瀵規牴鐩綍鐨勬蹇?璋冪敤chroot()鍚?榪涚▼灝變笉鑳芥妸褰撳墠
宸ヤ綔鐩綍鏀瑰彉鍒版柊鐨勬牴鐩綍浠ヤ笂鐨勪換涓鐩綍,鎵鏈変互/寮濮嬬殑璺緞鎼滅儲,閮?
浠庢柊鐨勬牴鐩綍寮濮?
(5)mknod():鐢ㄤ簬寤虹珛涓涓枃浠?綾諱技浜巆reat(),宸埆鏄痬knod()涓嶈繑鍥炴墍鎵撳紑
鏂囦歡鐨勬枃浠舵弿榪扮,騫朵笖鑳藉緩绔嬩換浣曠被鍨嬬殑鏂囦歡(鏅氭枃浠?鐗規畩鏂囦歡,鐩綍
鏂囦歡).鑻ヤ粠闈瀝oot榪涚▼璋冪敤mknod()灝嗘墽琛屽け璐?鍙湁寤虹珛FIFO鐗瑰埆鏂囦歡
(鏈夊悕綆¢亾鏂囦歡)鏃朵緥澶?鍏跺畠浠諱綍鎯呭喌涓?蹇呴』浠巖oot榪涚▼璋冪敤mknod().鐢?
浜巆reat()浠呰兘寤虹珛鏅氭枃浠?mknod()鏄緩绔嬬洰褰曟枃浠剁殑鍞竴閫斿緞,鍥犺屼粎

鏈塺oot鑳藉緩绔嬬洰褰?榪欏氨鏄負浠涔坢kdir鍛戒護鍏鋒湁SUID璁稿彲騫跺睘root鎵鏈?
涓鑸笉浠庣▼搴忎腑璋冪敤mknod().閫氬父鐢?etc/mknod鍛戒護寤虹珛鐗瑰埆璁懼鏂囦歡鑰?
榪欎簺鏂囦歡涓鑸笉鑳藉湪浣跨敤鐫鏃跺緩绔嬪拰鍒犻櫎,mkdir鍛戒護鐢ㄤ簬寤虹珛鐩綍.褰撶敤
mknod()寤虹珛鐗瑰埆鏂囦歡鏃?搴斿綋娉ㄦ剰紜粠鎵寤虹殑鐗瑰埆鏂囦歡涓嶅厑璁稿瓨鍙栧唴瀛?
紓佺洏,緇堢鍜屽叾瀹冭澶?
(6)unlink():鐢ㄤ簬鍒犻櫎鏂囦歡.鍙傛暟鏄鍒犻櫎鏂囦歡鐨勮礬寰勫悕鎸囬拡.褰撴寚瀹氫簡鐩綍
鏃?蹇呴』浠巖oot榪涚▼璋冪敤unlink(),榪欐槸蹇呴』浠巖oot榪涚▼璋冪敤unlink()鐨勫敮
涓鎯呭喌,榪欏氨鏄負浠涔坮mdir鍛戒護鍏鋒湁root鐨凷GID璁稿彲鐨勫師鍥?
(7)mount(),umount():鐢眗oot榪涚▼璋冪敤,鍒嗗埆鐢ㄤ簬瀹夎鍜屾媶鍗告枃浠剁郴緇?榪欎袱
涓瓙紼嬪簭涔熻mount鍜寀mount鍛戒護璋冪敤,鍏跺弬鏁板熀鏈拰鍛戒護鐨勫弬鏁扮浉鍚?璋?
鐢╩ount(),闇瑕佺粰鍑轟竴涓壒鍒枃浠跺拰涓涓洰褰曠殑鎸囬拡,鐗瑰埆鏂囦歡涓婄殑鏂囦歡
緋葷粺灝卞皢瀹夎鍦ㄨ鐩綍涓?璋冪敤鏃惰繕瑕佺粰鍑轟竴涓爣璇嗛夐」,鎸囧畾琚畨瑁呯殑鏂?
浠剁郴緇熻琚/鍐?0)榪樻槸浠呰(1).umount()鐨勫弬鏁版槸瑕佷竴涓鎷嗗嵏鐨勭壒鍒?
鏂囦歡鐨勬寚閽?
鏈枃鐢眎sbase鎴愬憳緙栬瘧鎴栧師鍒涳紝濡傝杞澆璇蜂繚鎸佹枃绔犵殑瀹屾暣鎬?