3.3 ȨÏÞ

¡¡¡¡FreeBSD£¬ÊÇ BSD UNIX® µÄÑÓÐø£¬ ²¢»ùÓÚ¼¸¸ö¹Ø¼üµÄ UNIX ¹ÛÄî¡£ ´ÓÒ»¿ªÊ¼¾Í¶à´¦Ìáµ½ FreeBSD ÊÇÒ»¸ö¶àÓû§µÄ²Ù×÷ϵͳ£¬ ËüÄÜ·Ö±ð´¦Àí¼¸¸öͬʱ¹¤×÷µÄÓû§Ëù·ÖÅäµÄºÁÎÞ¹ØÁªÈÎÎñ¡£ ²¢¸ºÔðΪÿλÓû§µÄÓ²¼þÉ豸¡¢ ÍâÉè¡¢ ÄÚ´æºÍ CPU ´¦Àíʱ¼ä×÷³öºÏÀí°²ÅÅ¡£

¡¡¡¡ÒòΪϵͳÓÐÄÜÁ¦Ö§³Ö¶àÓû§£¬ ÔÚÿһ·½ÃæÏµÍ³¶¼»á×÷³öË­ÄܶÁ¡¢ дºÍÖ´ÐеÄ×ÊԴȨÁ¦ÏÞÖÆ¡£ ÕâµãȨÏÞÒÔÈý¸ö°ËλԪµÄ·½Ê½´¢´æ×Å£¬ Ò»¸öÊDZíʾÎļþËùÊôÕߣ¬ Ò»¸öÊDZíʾÎļþËùÊôȺ×飬 Ò»¸öÊDZíʾÆäËûÈË¡£ ÕâЩÊý×ÖÒÔÏÂÁз½Ê½±íʾ£º

ÊýÖµ ȨÏÞ Ä¿Â¼Áбí
0 ²»ÄܶÁ£¬²»ÄÜд£¬²»ÄÜÖ´ÐÐ ---
1 ²»ÄܶÁ£¬²»ÄÜд£¬¿ÉÖ´ÐÐ --x
2 ²»ÄܶÁ£¬¿Éд£¬²»ÄÜÖ´ÐÐ -w-
3 ²»ÄܶÁ£¬¿Éд£¬¿ÉÖ´ÐÐ -wx
4 ¿É¶Á£¬²»ÄÜд£¬²»ÄÜÖ´ÐÐ r--
5 ¿É¶Á£¬²»ÄÜд£¬¿ÉÖ´ÐÐ r-x
6 ¿É¶Á£¬¿Éд£¬²»ÄÜÖ´ÐÐ rw-
7 ¿É¶Á£¬¿Éд£¬¿ÉÖ´ÐÐ rwx

¡¡¡¡Ê¹ÓÃÃüÁîµÄ -l (ls(1)) ²ÎÊý¿ÉÒÔÏÔʾ³öÎļþµÄËùÊôÕß¡¢ ËùÊô×éºÍÆäËûÈ˵ÈÊôÐÔ¡£ Çë¿´ÒÔϵÄÀý×Ó£º

% ls -l
total 530
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 myfile
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 otherfile
-rw-r--r--  1 root  wheel    7680 Sep  5 12:31 email.txt
...

¡¡¡¡Ê¹Óà ls -l ÔÚÿÐеĿªÊ¼³öÏÖÁË£º

-rw-r--r--

¡¡¡¡´Ó×ó±ßÆðµÄµÚÒ»¸ö×Ö£¬¸æËßÎÒÃÇÕâ¸öÎļþÊÇÒ»ÔõÑùµÄÎļþ: ÆÕͨÎļþ?Ŀ¼?ÌØÊâÉ豸?socket?»òÊÇÉ豸Îļþ? ÔÚÕâ¸öÀý×Ó£¬ - ±íʾһ¸öÆÕͨÎļþ¡£ ½ÓÏÂÀ´Èý¸ö×ÖÊÇ rw- ÊÇÎļþÓµÓÐÕßµÄȨÏÞ¡£ ÔÙ½ÓÏÂÀ´µÄÈý¸ö×ÖÊÇ r-- ÊÇÎļþËùÊôȺ×éµÄȨÏÞ¡£ ×îááÈý¸ö×ÖÊÇ r-- ÊÇÆäËûÈ˵ÄȨÏÞ¡£ ÒÔÕâÒ»¸öÎļþΪÀý£¬ËûµÄȨÏÞÉ趨ÊÇÓµÓÐÕß¿ÉÒÔ¶ÁдÕâ¸öÎļþ¡¢Èº×é¿ÉÒÔ¶ÁÈ¡¡¢ ÆäËûʹÓÃÕßÒ²ÄܶÁÈ¡Õâ¸öÎļþ¡£ ¸ù¾ÝÉÏÃæµÄ±í¸ñ£¬ ÓÃÊý×Ö±íʾÕâ¸öÎļþÆäÈý²¿·ÖµÄȨÏÞÓ¦¸ÃÊÇ 644¡£

¡¡¡¡ÕâÑùºÜºÃ£¬µ«ÏµÍ³ÔõÑù¶ÔÉ豸½øÐÐȨÏÞ¿ØÖƵÄ? ÊÂʵÉÏ FreeBSD ½«´ó²¿·ÝÓ²¼þÉ豸µ±×÷Ò»¸öÎļþ¿´´ý£¬ ÓóÌÐòÄÜ´ò¿ª¡¢¶ÁÈ¡¡¢Ð´ÈëÊý¾Ý¾ÍÈçÆäËûµÄÎļþÒ»Ñù¡£ ¶øÉ豸Îļþ·ÅÔÚ /dev Ŀ¼¡£

¡¡¡¡Ä¿Â¼Ò²ÊÓΪһÖÖÎļþ£¬Ò²ÓжÁÈ¡¡¢Ð´Èë¡¢Ö´ÐеÄȨÏÞ¡£ µ«Ä¿Â¼µÄÖ´ÐÐȨÏÞÒâÒå²¢²»ÓëÆÕͨÎļþÏàͬ£¬ ʵ¼ÊÉÏÖ´ÐÐȨÏÞÊǽøÈëȨÏÞ¡£ µ±Ò»¸öĿ¼ÊDZ»±êʾ¿ÉÒÔÖ´ÐеÄʱ£¬ ±íʾ¿ÉÒÔ½øÈëËü£¬ »òÕß»»ÑÔÖ®£¬ ÀûÓà ¡°cd¡± (¸Ä±äµ±Ç°Ä¿Â¼) ½øÈëËü¡£ ´ËÍ⣬ ÕâÒ²±íʾÓÐȨ½øÈëĿ¼µÄÓû§£¬ ¿ÉÒÔ·ÃÎÊÆäϵÄÒÑÖªÃû×ÖµÄÎļþ (µ±È»Ä¿Â¼ÏµÄÎļþÒ²Êܵ½·ÃÎÊÏÞÖÆ)¡£

¡¡¡¡Ïêϸ·½Ã棬Ïë¶Áȡһ¸öĿ¼µÄÁбí¾Í±ØÐëÉèΪ¿É¶ÁȨÏÞ£¬ ͬʱÏëɾ³ýÒ»¸öÒÑÖªµÄÎļþ£¬¾Í±ØÐë°ÑĿ¼ÏÂÕâ¸öÎļþÉèΪ¿Éд ºÍ Ö´ÐÐȨÏÞ¡£

¡¡¡¡»¹Óиü¶àȨÏÞÉ趨£¬ µ«ÊÇËûÃÇ´ó¶àÓÃÔÚÌØÊâ×´¿öÏÂÈçÒ»¸ösetuidµÄÖ´ÐÐÎļþºÍÕ³ÌùÐÔĿ¼£¬ Èç¹ûÏëÒªµÃÖªÓйØÎļþȨÏÞºÍÈçºÎÉ趨µÄ¸ü¶à×ÊѶ£¬Çë¿´ÊÖ²áchmod(1)¡£

3.3.1 ȨÏ޵ķûºÅ»¯±íʾ

Contributed by Tom Rhodes.

¡¡¡¡È¨ÏÞ·ûºÅ£¬Ä³Ð©Ê±ºò¾ÍÊÇÖ¸·ûºÅ±í´ïʽ£¬ ʹÓð˽øÖƵÄ×Ö·û¸øÄ¿Â¼»òÎļþ·ÖÅäȨÏÞ¡£ ȨÏÞ·ûºÅµÄʹÓÃÓï·¨ÊÇ (Ë­) (×÷ÓÃ) (ȨÏÞ)¡£ ¿´¿´ÏÂÁÐÊýÖµµÄÔÚÄÇЩµØ·½ËùÆðʲôÑùµÄ×÷ÓÃ:

Ñ¡Ïî ×Öĸ ½éÉÜ
(Ë­) u Óû§
(Ë­) g ËùÊôȺÌå
(Ë­) o ÆäËûÈË
(Ë­) a ËùÓÐÈË (¡°È«²¿¡±)
(×÷ÓÃ) + Ôö¼ÓȨÏÞ
(×÷ÓÃ) - ¼õÉÙȨÏÞ
(×÷ÓÃ) = È·¶¨È¨ÏÞ
(ȨÏÞ) r ¿É¶Á
(ȨÏÞ) w ¿Éд
(ȨÏÞ) x Ö´ÐÐ
(ȨÏÞ) t Õ³Ìùλ
(ȨÏÞ) s ÉèÖà UID »ò GID

¡¡¡¡ÕâЩÊýÖµ chmod(1) ÒÔϰ¹ß±ê¶¨µÄ¡£ ¾Ù¸öÀý×Ó£¬ÓÃÒÔÏÂÃüÁî×èÖ¹ÆäËûÈË·ÃÎÊ FILEÎļþ:

% chmod go= FILE

¡¡¡¡Èç¹ûÐèÒª¶ÔÎļþÒ»´Î½øÐжàÏî±ä¶¯£¬ Ôò¿ÉÓöººÅ·Ö¿ª£¬ ÔÚÏÂÃæµÄÀý×ÓÖУ¬ ½«È¥µô FILE ÎļþµÄȺÌåºÍ ¡°È«ÌåÆäËûÓû§¡± ¿ÉдȨÏÞ£¬ ²¢ÎªËùÓÐÈËÔö¼Ó¿ÉÖ´ÐÐȨÏÞ£º

% chmod go-w,a+x FILE

3.3.2 FreeBSD Îļþ±êÖ¾

Contributed by Tom Rhodes.

¡¡¡¡ÔÚÇ°ÃæËù½éÉܵÄÎļþȨÏ޵Ļù´¡Ö®ÉÏ£¬ FreeBSD »¹Ö§³ÖʹÓà ¡°Îļþ±êÖ¾¡±¡£ ÕâЩ±ê־ΪÎļþÌṩÁ˽øÒ»²½µÄ°²È«¿ØÖÆ»úÖÆ£¬ µ«ÕâЩ¿ØÖƲ¢²»ÊÊÓÃÓÚĿ¼¡£

¡¡¡¡ÕâЩÎļþ±êÖ¾ÌṩÁËÕë¶ÔÎļþµÄ½øÒ»²½¿ØÖÆ£¬ °ïÖúÈ·±£¼´Ê¹ÊÇ root Óû§Ò²ÎÞ·¨É¾³ý»òÐÞ¸ÄÎļþ¡£

¡¡¡¡Îļþ±êÖ¾¿ÉÒÔͨ¹ýʹÓà chflags(1) ¹¤¾ßÀ´Ð޸ģ¬ ÆäÓû§½çÃæºÜ¼òµ¥¡£ ÀýÈ磬 ÒªÔÚÎļþ file1 ÉÏÓ¦ÓÃϵͳ½ûɾ±êÖ¾£¬ ӦʹÓÃÏÂÊöÃüÁ

# chflags sunlink file1

¡¡¡¡Òª½ûÓÃϵͳ½ûɾ±êÖ¾£¬ Ö»ÐèÔÚǰÊöÃüÁîÖÐµÄ sunlink ±ê־ǰ¼Ó ¡°no¡±¡£ ÀýÈ磺

# chflags nosunlink file1

¡¡¡¡ÒªÏÔʾÎļþÉϵıêÖ¾£¬ ӦʹÓÃÃüÁî ls(1) µÄ -lo ²ÎÊý£º

# ls -lo file1

¡¡¡¡Êä³ö½á¹ûÓ¦ÀàËÆÓÚ£º

-rw-r--r--  1 trhodes  trhodes  sunlnk 0 Mar  1 05:54 file1

¡¡¡¡Ðí¶à±êÖ¾Ö»¿ÉÒÔÓÉ root Óû§À´Ôö¼Ó£¬ ¶øÁíһЩ£¬ Ôò¿ÉÒÔÓÉÎļþµÄËùÓÐÕßÀ´Ôö¼Ó¡£ ½¨Òé¹ÜÀíÔ±×ÐϸÔĶÁ chflags(1) ºÍ chflags(2) Áª»úÊֲᣬ ÒÔ¶ÔÆä¼ÓÉîÀí½â¡£

3.3.3 setuid¡¢ setgid ºÍ sticky ȨÏÞ

Ô­×÷ Tom Rhodes.

¡¡¡¡³ýÁËÇ°ÃæÒѾ­ÌÖÂÛ¹ýµÄÄÇЩȨÏÞÖ®Í⣬ »¹ÓÐÈý¸ö¹ÜÀíÔ±Ó¦¸ÃÖªµÀµÄȨÏÞÅäÖᣠËüÃÇÊÇ setuid¡¢ setgid ºÍ sticky¡£

¡¡¡¡ÕâЩÅäÖöÔÓÚһЩ UNIX ²Ù×÷¶øÑÔºÜÖØÒª£¬ ÒòΪËüÃÇÄÜÌṩһЩһ°ãÇé¿öϲ»»áÊÚÓèÆÕͨÓû§µÄ¹¦ÄÜ¡£ ΪÁ˱ãÓÚÀí½â£¬ ÎÒÃÇÊ×ÏȽéÉÜÕæÊµÓû§ ID (real user ID) ºÍÉúЧÓû§ ID (effective user ID)¡£

¡¡¡¡ÕæÊµÓû§ ID ÊÇÓµÓлòÆô¶¯½ø³ÌµÄÓû§ UID¡£ ÉúЧ UID Êǽø³ÌÒÔÆäÉí·ÝÔËÐеÄÓû§ ID¡£ ¾ÙÀýÀ´Ëµ£¬ passwd(1) ¹¤¾ßͨ³£ÊÇÒÔ·¢ÆðÐÞ¸ÄÃÜÂëµÄÓû§Éí·ÝÆô¶¯£¬ Ò²¾ÍÊÇ˵Æä½ø³ÌµÄÕæÊµÓû§ ID ÊÇÄǸöÓû§µÄ ID£» µ«ÊÇ£¬ ÓÉÓÚÐèÒªÐÞ¸ÄÃÜÂëÊý¾Ý¿â£¬ Ëü»áÒÔ root Óû§×÷ΪÉúЧÓû§ ID µÄÉí·ÝÔËÐС£ ÕâÑù£¬ ÆÕͨµÄ·ÇÌØÈ¨Óû§¾Í¿ÉÒÔÐ޸ĿÚÁ ¶ø²»ÊÇ¿´µ½ ¡°Permission Denied¡± ´íÎóÁË¡£

×¢Òâ: mount(8) µÄ nosuid Ñ¡Ïî¿ÉÒÔÁîϵͳÔÚ²»¸ø³öÈκδíÎóÌáʾµÄÇé¿öϲ»Ö´ÐÐÕâЩ³ÌÐò¡£ ÁíÒ»·½Ã棬 Õâ¸öÑ¡Ïî²¢²»ÊÇÍòÎÞһʧµÄ£¬ ÕýÈç mount(8) Áª»úÊÖ²áËùÌáµ½µÄÄÇÑù£¬ Èç¹ûϵͳÖа²×°ÁËÈÆ¹ý nosuid µÄ·â×°³ÌÐò£¬ ÄÇôÕâÖÖ±£»¤¾Í¿ÉÒÔ±»ÈƹýÁË¡£

¡¡¡¡setuid ȨÏÞ¿ÉÒÔͨ¹ýÔÚÆÕͨȨÏÞÇ°Ãæ¼ÓÉÏÒ»¸öÊý×ÖËÄ (4) À´ÉèÖ㬠ÈçÏÂÃæµÄÀý×ÓËùʾ£º

# chmod 4755 suidexample.sh

¡¡¡¡ÕâÑùÒ»À´£¬ suidexample.sh µÄȨÏÞÓ¦¸ÃÈçÏÂÃæÕâÑù£º

-rwsr-xr-x   1 trhodes  trhodes    63 Aug 29 06:36 suidexample.sh

¡¡¡¡Äú»á×¢Òâµ½£¬ ÔÚÔ­ÏȵÄÊôÖ÷Ö´ÐÐȨÏÞµÄλÖñä³ÉÁË s¡£ ÕâÑù£¬ ÐèÒªÌáÉýÌØÈ¨µÄ¿ÉÖ´ÐÐÎļþ£¬ ÀýÈç passwd ¾Í¿ÉÒÔÕý³£ÔËÐÐÁË¡£

¡¡¡¡¿ÉÒÔ´ò¿ªÁ½¸öÖÕ¶ËÀ´¹Û²ìÕâÒ»ÇéÐΡ£ ÔÚÆäÖÐÒ»¸öÖÕ¶ËÀïÃæ£¬ ÒÔÆÕͨÓû§Éí·ÝÆô¶¯ passwd ½ø³Ì¡£ ÔÚËüµÈ´ýÊäÈëпÚÁîʱ£¬ ÔÚÁíÒ»¸öÖÕ¶ËÖв鿴½ø³Ì±íÖйØÓÚ passwd ÃüÁîµÄÐÅÏ¢¡£

¡¡¡¡ÔÚÖÕ¶Ë A ÖУº

Changing local password for trhodes
Old Password:

¡¡¡¡ÔÚÖÕ¶Ë B ÖУº

# ps aux | grep passwd
trhodes  5232  0.0  0.2  3420  1608   0  R+    2:10AM   0:00.00 grep passwd
root     5211  0.0  0.2  3620  1724   2  I+    2:09AM   0:00.01 passwd

¡¡¡¡ÕýÈçÇ°ÃæËù˵µÄÄÇÑù£¬ passwd ÊÇÒÔÆÕͨÓû§µÄÉí·ÝÆô¶¯µÄ£¬ µ«ÆäÉúЧ UID ÊÇ root¡£

¡¡¡¡Óë´Ë¶ÔÓ¦£¬ setgid ȨÏÞµÄ×÷Ó㬠Óë setuid ȨÏÞÀàËÆ£¬ Ö»Êǵ±Ó¦ÓóÌÐòÅäºÏÕâÒ»É趨ÔËÐÐʱ£¬ Ëü»á±»ÊÚÓèÓµÓÐÎļþµÄÄǸö×éµÄȨÏÞ¡£

¡¡¡¡Èç¹ûÐèÒªÔÚÎļþÉÏÅäÖà setgid ȨÏÞ£¬ ¿ÉÒÔÔÚȨÏÞÊýÖµÇ°ÃæÔö¼ÓÊý×Ö¶þ (2) À´ÔËÐÐ chmod ÃüÁ ÈçÏÂÃæµÄÀý×ÓËùʾ£º

# chmod 2755 sgidexample.sh

¡¡¡¡¿ÉÒÔÓÃÓëÇ°ÃæÀàËÆµÄ·½·¨À´¼ìÊÓÐÂÉ趨µÄÉúЧÇé¿ö£¬ ÔÚ×éȨÏ޵ĵط½µÄ s ±íʾÕâÒ»ÅäÖÃÒѾ­ÉúЧ£º

¡¡¡¡

-rwxr-sr-x   1 trhodes  trhodes    44 Aug 31 01:49 sgidexample.sh

×¢Òâ: ÔÚÕâЩÀý×ÓÖУ¬ ¾¡¹Ü shell ½Å±¾Ò²ÊôÓÚ¿ÉÖ´ÐÐÎļþµÄÒ»ÖÖ£¬ µ«ËüÃDz»»áÒÔÄúÅäÖÃµÄ EUID »òÉúЧÓû§ ID µÄÉí·ÝÔËÐС£ ÕâÊÇÒòΪ shell ½Å±¾¿ÉÄÜÎÞ·¨Ö±½Óºô½Ð setuid(2) µ÷Óá£

¡¡¡¡ÎÒÃÇÒѾ­ÌÖÂÛÁËÁ½¸öÌØÊâȨÏÞλ (setuid ºÍ setgid ȨÏÞλ)£¬ ËüÃÇÈÃÓû§ÔÚʹÓóÌÐòʱÄܹ»Óõ½¸ü¸ßµÄȨÏÞ£¬ ÓÐʱÕâ»áÏ÷ÈõϵͳµÄ°²È«ÐÔ¡£ ³ýÁËÕâÁ½¸öÖ®Í⣬ »¹ÓеÚÈý¸öÌØÊâȨÏÞλ£º sticky bit£¬ ËüÄܹ»ÔöÇ¿°²È«ÐÔ¡£

¡¡¡¡µ±ÔÚĿ¼ÉÏÉèÖÃÁË sticky bit Ö®ºó£¬ ÆäϵÄÎļþ¾ÍÖ»ÄÜÓÉÎļþµÄËùÓÐÕßɾ³ýÁË¡£ Õâ¸öȨÏÞÉèÖÃÄܹ»·ÀÖ¹Óû§É¾³ýÀàËÆ /tmp ÕâÑùµÄ¹«¹²Ä¿Â¼Öв»ÊôÓÚËûÃǵÄÎļþ¡£ ÒªÓ¦ÓÃÕâÖÖȨÏÞ£¬ ¿ÉÒÔÔÚȨÏÞÉèÖÃÇ°Ãæ¼ÓÉÏÊý×ÖÒ» (1)¡£ ÀýÈ磺

# chmod 1777 /tmp

¡¡¡¡ÏÖÔÚ£¬ ¿ÉÒÔÓà ls ÃüÁîÀ´²é¿´Ð§¹û£º

# ls -al / | grep tmp
drwxrwxrwt  10 root  wheel         512 Aug 31 01:49 tmp

¡¡¡¡ÕâÀïµÄ½áβµÄ t ±íʾÁË sticky bit ȨÏÞ¡£

±¾ÎĵµºÍÆäËüÎĵµ¿É´ÓÕâÀïÏÂÔØ£ºftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Èç¹û¶ÔÓÚFreeBSDÓÐÎÊÌ⣬ÇëÏÈÔĶÁÎĵµ£¬Èç²»Äܽâ¾öÔÙÁªÏµ<questions@FreeBSD.org>.
¹ØÓÚ±¾ÎĵµµÄÎÊÌâÇë·¢ÐÅÁªÏµ <doc@FreeBSD.org>.