ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. Secure Programming for Linux and Unix HOWTODavid A. Wheeler¼Á¤·æ¼ÛÀç¼÷v2.92, 8 January 2002 Copyright © 1999, 2000, 2001, 2002 by David A. Wheeler ÀÌ Ã¥Àº ¸®´ª½º¿Í À¯´Ð½º ½Ã½ºÅÛ¿¡¼ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§ÇÑ ÀÏ·ÃÀÇ ¼³°è ¹× ±¸Çö ÁöħµéÀ» Á¦°øÇÑ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥µéÀº ¿ø°Ý µ¥ÀÌŸ ºä¾î·Î »ç¿ëµÇ´Â ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥, CGI ½ºÅ©¸³Æ®¸¦ Æ÷ÇÔÇÑ À¥ ¾ÖÇø®ÄÉÀ̼Ç, ³×Æ®¿öÅ© ¼¹ö¿Í setuid/setgid ÇÁ·Î±×·¥µéÀ» Æ÷ÇÔÇÑ´Ù. C, C++, ÀÚ¹Ù, ÆÞ, PHP, ÆÄÀ̽ã, TCL °ú Ada95 ¿¡ ´ëÇÑ ¸íÈ®ÇÑ Áöħµµ Æ÷ÇԵȴÙ. This book is Copyright (C) 1999-2002 David A. Wheeler. Permission is granted to copy, distribute and/or modify this book under the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any later version published by the Free Software Foundation; with the invariant sections being ``About the Author'', with no Front-Cover Texts, and no Back-Cover texts. A copy of the license is included in the section entitled "GNU Free Documentation License". This book is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1장. ¼Ò°³
ÀÌ Ã¥Àº ¸®´ª½º¿Í À¯´Ð½º ½Ã½ºÅÛ¿¡¼ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§ÇÑ ÀÏ·ÃÀÇ ¼³°è ¹× ±¸Çö ÁöħµéÀ» ±â¼úÇÑ´Ù. ÀÌ Ã¥ÀÇ ¸ñÀûÀ» À§ÇØ º¸¾ÈÀûÀÎ (secure) ÇÁ·Î±×·¥À» º¸¾È °æ°è¿¡ Á¸ÀçÇÏ¿© ÇÁ·Î±×·¥°ú µ¿ÀÏÇÑ ±ÇÇÑÀ» °®Áö ¾Ê´Â Ãâó·ÎºÎÅÍ ÀÔ·ÂÀ» ¹Þ¾ÆµéÀÌ´Â ÇÁ·Î±×·¥À¸·Î Á¤ÀÇÇÒ ¼ö Àִµ¥ À̵é·Î´Â ¿ø°Ý ºä¾î·Î »ç¿ëµÇ´Â ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥, CGI ½ºÅ©¸³Æ®¸¦ Æ÷ÇÔÇÑ À¥ ¾ÖÇø®ÄÉÀ̼Ç, ³×Æ®¿öÅ© ¼¹ö¿Í setuid/setgid ÇÁ·Î±×·¥µéÀÌ ÀÖ´Ù. ÀÌ Ã¥¿¡¼ ³íÀǵǴ ¿ø¸®µéÁß ´Ù¼ö°¡ Àû¿ëµÊ¿¡µµ ºÒ±¸ÇÏ°í ¿î¿µ üÁ¦ÀÇ Ä¿³Î ÀÚü¸¦ ¼öÁ¤ÇÏ´Â °ÍÀ» ´Ù·çÁö´Â ¾Ê´Â´Ù. ÀÌ ÁöħµéÀº ÀúÀÚ°¡ Ãß°¡ÇÑ Àǰ߰ú ÇÔ²² º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥µéÀ» ¸¸µå´Â ¹æ¹ý¿¡ ´ëÇÑ ´Ù¾çÇÑ Ãâóµé·ÎºÎÅÍ ¹è¿î ±³ÈƵéÀ» Á¶»çÇÔÀ¸·Î½á °³¹ßµÇ¾úÀ¸¸ç ÀÏ·ÃÀÇ ´õ¿í Ä¿´Ù¶õ ¿ø¸®µé·Î À籸¼ºµÇ¾ú´Ù. ÀÌ Ã¥Àº C, C++, ÀÚ¹Ù, ÆÞ, PHP, ÆÄÀ̽ã, TCL °ú Ada95 ¸¦ Æ÷ÇÔÇÑ ¸¹Àº ¾ð¾îµé¿¡ ´ëÇÑ ±¸Ã¼ÀûÀÎ ¾È³»¸¦ Æ÷ÇÔÇÑ´Ù. ÀÌ Ã¥Àº º¸Áõ Á¶Ä¡, ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î¸µ ÇÁ·Î¼¼½º¿Í ǰÁú º¸Áõ ¹æ¹ýÀ» ´Ù·çÁö´Â ¾Ê´Âµ¥ ÀÌ´Â Áß¿äÇÏÁö¸¸ ´Ù¸¥ °÷¿¡ ±¤¹üÀ§ÇÏ°Ô ³íÀǵǾî Àֱ⠶§¹®ÀÌ´Ù. ±×·¯ÇÑ Á¶Ä¡µé·Î´Â °Ë»ç, ÀÚ¼¼ÇÑ °ËÅä (peer review), ¼³Á¤ °ü¸®¿Í Çй®ÀûÀÎ (formal) ¹æ¹ýµéÀÌ Àִµ¥ º¸¾È ¹®Á¦¿¡ ´ëÇÑ ÀÏ·ÃÀÇ ¹ßÀüÇϰí ÀÖ´Â º¸Áõ Á¶Ä¡µéÀ» ¸íÈ®ÇÏ°Ô ºÐ°£ÇÏ´Â ¹®¼µé·Î´Â Common Criteria [CC 1999] ¿Í System Security Engineering Capability Maturity Model [SSE-CMM 1999] µéÀÌ ÀÖ´Ù. ÀÏ·ÃÀÇ ´õ¿í ÀϹÝÀûÀÎ ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î¸µ ¹æ¹ý ¶Ç´Â ÇÁ·Î¼¼½ºµéÀº Software Engineering Institute's Capability Maturity Model for Software (SE-CMM) [Paulk 1993a, 1993b] °ú ISO 12207 [ISO 12207] °ú °°Àº ¹®¼µé³»¿¡ Á¤ÀǵǾî ÀÖ´Ù. ǰÁú ½Ã½ºÅÛ¿¡ ´ëÇÑ ÀϹÝÀûÀÎ ±¹Á¦Àû Ç¥ÁØÀº ISO 9000 °ú ISO 9001 [ISO 9000, 9001] ³»¿¡ Á¤ÀǵǾî ÀÖ´Ù. ÀÌ Ã¥Àº ÁÖ¾îÁø ȯ°æ¿¡¼ ½Ã½ºÅÛ ¶Ç´Â ³×Æ®¿öÅ©¸¦ º¸¾ÈÀûÀ¸·Î ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ³íÀÇÇÏÁö´Â ¾Ê´Â´Ù. À̰ÍÀÌ ÁÖ¾îÁø ÇÁ·Î±×·¥À» º¸¾ÈÀûÀ¸·Î »ç¿ëÇϱâ À§Çؼ´Â ºÐ¸íÈ÷ ÇÊ¿äÇÏÁö¸¸ ¸Å¿ì ¸¹Àº ´Ù¸¥ ¹®¼µéÀÌ º¸¾ÈÀûÀÎ ¼³Á¤À» ³íÀÇÇϰí ÀÖ´Ù. À¯´Ð½º °è¿ ½Ã½ºÅÛÀ» º¸¾ÈÀûÀ¸·Î ¼³Á¤ÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ¿ì¼öÇÑ ÀÏ¹Ý Ã¥À¸·Î´Â Garfinkel [1996] ÀÌ ÀÖÀ¸¸ç À¯´Ð½º °è¿ ½Ã½ºÅÛÀ» ¾ÈÀüÇÏ°Ô Çϱâ À§ÇÑ ´Ù¸¥ Ã¥À¸·Î´Â Anonymous [1998] °¡ ÀÖ´Ù. ¶ÇÇÑ http://www.unixtools.com/security.html ¿Í °°Àº À¥ »çÀÌÆ®¿¡¼ À¯´Ð½º °è¿ ½Ã½ºÅÛ ¼³Á¤¿¡ °üÇÑ Á¤º¸¸¦ ãÀ» ¼ö ÀÖ´Ù. ¸®´ª½º ½Ã½ºÅÛÀÇ º¸¾ÈÀû ¼³Á¤¿¡ ´ëÇÑ Á¤º¸´Â Fenzi [1996], Seifried [1999], Wreski [1998], Swan [2001] °ú Anonymous [1999] ¸¦ Æ÷ÇÔÇÑ ±¤¹üÀ§ÇÑ ¹®¼µé¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. Geodsoft [2001] Àº OpenBSD ¸¦ °ÈÇÏ´Â ¹æ¹ýÀ» ±â¼úÇϰí Àִµ¥ ¸¹Àº Á¦¾ÈµéÀº ¸ðµç À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡ ´ëÇØ À¯¿ëÇÏ´Ù. ¸®´ª½º ½Ã½ºÅÛ (°á±¹ ´Ù¸¥ À¯´Ð½º °è¿ ½Ã½ºÅÛ) ÀÇ °æ¿ì ¸®´ª½º ¿î¿µÃ¼Á¦¸¦ °È ¶Ç´Â ´Ü·Ã½ÃŰ·Á°í ÇÏ´Â Bastille °È ½Ã½ºÅÛÀÇ °ËÅ並 ¿øÇÒ ¼öµµ Àִµ¥ ÀÌ¿¡ °üÇØ¼´Â http://www.bastille-linux.org ¿¡¼ ´õ¿í ¸¹Àº °ÍÀ» ¹è¿ï ¼ö ÀÖ´Ù. ÀÌ´Â GPL (General Public License) ¶óÀ̼¾½º·Î ¹«·á·Î ¾òÀ» ¼ö ÀÖ´Ù. À©µµ¿ì 2000 ÀÇ °æ¿ì´Â Cox [2000] À» »ìÆìº¼ ¼ö ÀÖ´Ù. ÄÄÇ»Å͸¦ ¼³Á¤ÇÏ´Â °ÍÀº ¹ÙÀÌ·¯½º¿¡ ¾î¶»°Ô ´ëóÇϴ°¡, ¾î¶² Á¾·ùÀÇ Á¶Á÷»óÀÇ º¸¾È Á¤Ã¥ÀÌ ÇÊ¿äÇѰ¡, »ç¾÷ÀÇ ¿¬¼Ó¼º °èȹ µîÀ» Æ÷ÇÔÇÏ´Â ´õ¿í Å« ¿µ¿ªÀÎ º¸¾È °ü¸®ÀÇ ´ÜÁö ÀϺκÐÀÌ´Ù. º¸¾È °ü¸®¸¦ À§ÇØ ±¹Á¦Àû Ç¥ÁØ ¹× ±æÀâÀÌ µéÀÌ ÀÖ´Ù. ISO 13335 ´Â º¸¾È °ü¸®¿¡ ´ëÇÑ ±æÀâÀÌ ¿ªÇÒÀ» ÇÏ´Â ´Ù¼¸ ºÎºÐÀ¸·Î ±¸¼ºµÈ ±â¼úÀû º¸°í¼ÀÌ´Ù [ISO 13335]. ¶ÇÇÑ ISO/IEC 17799:2000 Àº ½ÇÁ¦ °ü·Ê¸¦ Á¤ÀÇÇϰí ÀÖ´Ù [ISO 17799]; ±× °øÇ¥µÈ ¸ñÀûÀº ``Á¶Á÷³»¿¡¼ º¸¾È ¹ßÀÇ, ±¸Çö ¶Ç´Â À¯ÁöÇϴ åÀÓÀ» Áö´Â »ç¶÷µéÀÌ »ç¿ëÇϵµ·Ï Á¤º¸ º¸¾È °ü¸®¸¦ À§ÇÑ ±Ç°í¸¦ ÁÖ´Â °ÍÀÌ´Ù" (´ë·«ÀûÀÎ Àǹ̿¡¼ ÀÌ´Â ±â¼ú ¹®¼´Â ¾Æ´Ï´Ù). ISO/IEC 17799:2000 ÀÌ ¸Å¿ì ³íÀÇÀÇ ¿©Áö°¡ ÀÖÀ½À» ¾ð±ÞÇÏ´Â °ÍÀº °¡Ä¡°¡ ÀÖ´Ù; º§±â¿¡, ij³ª´Ù, ÇÁ¶û½º, µ¶ÀÏ, ÀÌÅ»¸®¾Æ, ÀϺ»°ú ¹Ì±¹Àº ÀÌÀÇ Ã¤Åÿ¡ ¹Ý´ë ÅõÇ¥¸¦ Çß´Ù. ÀÌ ³íÀï¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â NIST ÀÇ ISO/IEC 17799:2000 FAQ ¸¦ º¸¶ó. http://www.caspr.org ÀÇ Commonly Accepted Security Practices & Recommendations (CASPR) ÇÁ·ÎÁ§Æ®´Â Á¤º¸ º¸¾È Áö½Ä¿¡¼ ¸ðµç »ç¶÷ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÏ·ÃÀÇ ³í¹®À» ¸¸µé·Á°í Çϰí ÀÖ´Ù (GNU FDL ¶óÀ̼¾½ºÇÏ¿¡¼ ÇÔÀ¸·Î½á ÃßÈÄ ÆÄ»ý ¹®¼µµ ¸ðµç »ç¶÷ÀÌ °è¼Ó »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù). ÀÌ Ã¥Àº µ¶ÀÚ°¡ ÀϹÝÀûÀÎ ÄÄÇ»ÅÍ º¸¾È ¹®Á¦, À¯´Ð½º °è¿ ½Ã½ºÅÛÀÇ ÀϹÝÀûÀÎ º¸¾È ¸ðµ¨, ³×Æ®¿öÅ· (ƯÈ÷ TCP/IP ±â¹Ý ³×Æ®¿öÅ©) °ú C ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ ÀÌÇØÇϰí ÀÖ´Ù°í °¡Á¤ÇÏ¸ç º¸¾È ¸ñÀûÀÇ ¸®´ª½º¿Í À¯´Ð½º ÇÁ·Î±×·¡¹Ö ¸ðµ¨¿¡ ´ëÇØ »ó´çÇÑ Á¤º¸¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù. TCP/IP ±â¹Ý ³×Æ®¿öÅ© ¹× ÇÁ·ÎÅäÄÝÀÌ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ (º¸¾È ÇÁ·ÎÅäÄÝÀ» Æ÷ÇÔÇØ) Á¤º¸°¡ ÇÊ¿äÇÏ´Ù¸é [Murhammer 1998] °ú °°Àº TCP/IP ¿¡ ´ëÇÑ ÀϹÝÀûÀÎ ¿¬±¸¸¦ Âü°íÇØ¶ó. ÀÌ Ã¥Àº ¸®´ª½º ¹× À¯´Ð½ºÀÇ ´Ù¾çÇÑ º¯ÇüµéÀ» Æ÷ÇÔÇÑ ¸ðµç À¯´Ð½º °è¿ ½Ã½ºÅÛµéÀ» ´Ù·çÁö¸¸ ƯÈ÷ ¸®´ª½º¿¡ ÁßÁ¡À» µÎ¾î ¸íÈ®ÇÏ°Ô ÀÌ¿¡ ´ëÇÑ ¼¼ºÎ »çÇ×µéÀ» Á¦°øÇÑ´Ù. À©µµ¿ì CE ¿¡ ´ëÇØ ¸íÈ®ÇÏ°Ô ¼³¸íÇÏ´Â ¾à°£ÀÇ ÀÚ·áµéµµ ÀÖÁö¸¸ »ç½Ç À̵éÁß ¸¹Àº °ÍµéÀº ƯÁ¤ ¿î¿µ üÁ¦¿¡ ÇÑÁ¤µÇ¾î ÀÖÁö ¾Ê´Ù. ÀÌ Ã¥¿¡ Æ÷ÇԵǾî ÀÖÁö ¾ÊÀº °ü·Ã Á¤º¸¸¦ ¾Ë°í ÀÖ´Ù¸é ÀúÀÚ¿¡°Ô ¾Ë·ÁÁֱ⠹ٶõ´Ù. ÀÌ Ã¥ÀÇ ¿øº»Àº http://www.dwheeler.com/secure-programs ¿¡¼ ãÀ» ¼ö ÀÖÀ¸¸ç http://www.linuxdoc.org ÀÇ ¸®´ª½º ¹®¼È ÇÁ·ÎÁ§Æ® (Linux Documentation Project, LDP) ÀÇ ÇÑ ºÎºÐÀ¸·Î ¸î¸îÀÇ ´Ù¸¥ »çÀÌÆ®¿¡¼µµ ¶ÇÇÑ ¹Ì·¯¸µµÇ°í ÀÖ´Ù. LDP º¹»çº» ¹×/¶Ç´Â °¢ ¹èÆ÷ º¹»çº»À» Æ÷ÇÔÇÑ ÀÌ·¯ÇÑ º¹»çº»µéÀÌ ¿øº»º¸´Ù ¿À·¡µÈ °ÍÀÏ ¼öµµ ÀÖÀ½À» ÁÖ¸ñÇϱ⠹ٶõ´Ù. ÀúÀÚ´Â ÀÌ Ã¥¿¡ ´ëÇÑ ÀǰßÀ» µè°í ½ÍÁö¸¸ ¹Ýµå½Ã ¿©·¯ºÐÀÇ ÀǰßÀÌ ÃֽйöÀü¿¡ ´ëÇØ Ÿ´çÇÑÁö °Ë»çÇÑ ÈÄ ÀǰßÀ» º¸³»Áֱ⠹ٶõ´Ù. ÀÌ Ã¥ÀÇ ÀúÀÛ±ÇÀº 1999-2001 David A. Wheeler ¿¡ ÀÖÀ¸¸ç ±× ¶óÀ̼¾½º´Â GNU Free Documentation License (GFDL) ÀÌ´Ù; ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 부록 C ¿Í 부록 D ¸¦ º¸¶ó. 2장 Àº À¯´Ð½º, ¸®´ª½º ¹× º¸¾È¿¡ ´ëÇÑ ¹è°æÀ» ³íÀÇÇϸç 3장 Àº ÇÁ·Î¼¼½º, ÆÄÀϽýºÅÛ °´Ã¼ µîÀÇ º¸¾È ¼Ó¼º°ú ¿¬»êÀ» °³°ýÀûÀ¸·Î ¼³¸íÇϴµ¥ ÀϹÝÀûÀÎ À¯´Ð½º ¹× ¸®´ª½º º¸¾È ¸ðµ¨À» ±â¼úÇÑ´Ù. ´ÙÀ½ Àå¿¡¼´Â ÀÌ Ã¥ÀÇ °ñÀÚÀÎ ¸®´ª½º¿Í À¯´Ð½º ½Ã½ºÅÛ¿¡¼ ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇϱâ À§ÇÑ ÀÏ·ÃÀÇ ¼³°è ¹× ±¸Çö ÁöħµéÀ» ³íÀÇÇÑ´Ù. ÀÌ Ã¥Àº 11장¿¡¼ °á·ÐÀ¸·Î ¸ÅµìÁöÀ¸¸ç ´ÙÀ½¿¡ ÀÌ Ã¥¿¡¼ ÀοëÇÑ µµ¼ ¸ñ·Ï°ú ºÎ·ÏÀÌ ³ª¿Â´Ù. ¼³°è ¹× ±¸Çö ÁöħµéÀº ÀúÀÚ°¡ ¹Ï±â¿¡ ÇÁ·Î±×·¡¸ÓÀÇ °üÁ¡¿¡ ÁßÁ¡À» µÐ ¹üÁÖ·Î ³ª´©¾îÁø´Ù. 그림 1-1 ¿¡ º¸ÀÌ´Â °Í°ú °°ÀÌ ÇÁ·Î±×·¥Àº ÀÔ·ÂÀ» ¹Þ°í, µ¥ÀÌŸ¸¦ ó¸®Çϰí, ´Ù¸¥ ÀÚ¿øµéÀ» È£ÃâÇϰí Ãâ·ÂÀ» »êÃâÇÑ´Ù; °³³äÀûÀ¸·Î ¸ðµç º¸¾È ÁöħµéÀº ÀÌ·¯ÇÑ ¹üÁÖµéÁß Çϳª¿Í ÀÏÄ¡Çϴµ¥ ÀúÀÚ´Â ``µ¥ÀÌŸ ó¸®" ¸¦ ÇÁ·Î±×·¥ ³»ºÎ ±¸Á¶ÈÇϱâ¿Í Á¢±Ù ¹æ¹ý, ¹öÆÛ ¿À¹öÇ÷οì ÇÇÇϱâ (¾î¶² °æ¿ì ÀÔ·Â ¹®Á¦·Î °í·ÁµÉ ¼ö ÀÖ´Ù), ¾ð¾î¿¡ ƯÁ¤ÀûÀÎ Á¤º¸¿Í Ưº° ÁÖÁ¦·Î ¼¼ºÐÈÇÏ¿´´Ù. °¢ ÀåµéÀº ½±°Ô µû¶ó°¥ ¼ö ÀÖµµ·Ï Á¤¸®µÇ¾ú´Âµ¥ µû¶ó¼ ÁöħµéÀ» Á¦°øÇÏ´Â °¢ ÀåµéÀº ¸ðµç ÀÔ·Â À¯È¿ÈÇϱâ (4장), ¹öÆÛ ¿À¹öÇ÷οì ÇÇÇϱâ (5장), ÇÁ·Î±×·¥ ³»ºÎ ±¸Á¶ÈÇÏ±â ¹× Á¢±Ù ¹æ¹ý (6장), ÁÖÀDZí°Ô ´Ù¸¥ ÀÚ¿øµé È£ÃâÇϱâ (7장), ½ÅÁßÈ÷ Á¤º¸¸¦ µÇµ¹·ÁÁÖ±â (8장), ¾ð¾î¿¡ ƯÁ¤ÀûÀÎ Á¤º¸ (9장) ±×¸®°í ³¼ö (random number) ¸¦ ¾ò´Â ¹æ¹ý°ú °°Àº Ưº° ÁÖÁ¦¿¡ ´ëÇÑ Á¤º¸ (10장) µéÀ» ³íÀÇÇÑ´Ù. 2장. ¹è°æ
2.1. À¯´Ð½º, ¸®´ª½º, ¿ÀÇ ¼Ò½º/ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾îÀÇ ¿ª»ç2.1.1. À¯´Ð½º1969-1970³â »çÀÌ¿¡ AT&T º§ ½ÇÇè½ÇÀÇ Kenneth Thompson, Dennis Ritchie ¿Í µ¿·áµéÀº ¾à°£ »ç¿ëµÇ°í ÀÖ´ø PDP-7 »ó¿¡¼ ÀÛÀº ¿î¿µ üÁ¦¸¦ °³¹ßÇϱ⠽ÃÀÛÇߴµ¥ ÀÌ´Â °ð MULTICS ¶ó ºÒ¸®´Â ÃʱâÀÇ ¿î¿µÃ¼Á¦ ÇÁ·ÎÁ§Æ®¸¦ ºø´ë¾î À¯´Ð½º (UNIX) ·Î ¸í¸íµÇ¾ú´Ù. 1972-1973³â »çÀÌ¿¡ ½Ã½ºÅÛÀº ½ÇÇöºÒ°¡´ÉÇß´ø µå¹® ¹æ¹ýÀÎ C ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ÀçÀÛ¼ºµÇ¾ú´Âµ¥ ÀÌ °áÁ¤¶§¹®¿¡ À¯´Ð½º´Â ±× ¿ø·¡ÀÇ Çϵå¿þ¾î·ÎºÎÅÍ ¹Ù²Ü ¼ö ÀÖ°í ±× ¿ø·¡ÀÇ Çϵå¿þ¾î¸¦ ±Øº¹ÇÒ ¼ö ÀÖ´Â ÃÖÃÊÀÇ ³Î¸® »ç¿ëµÇ´Â ¿î¿µÃ¼Á¦°¡ µÇ¾ú´Ù. ´Ù¸¥ Çõ½ÅÀûÀÎ °Íµéµµ ¶ÇÇÑ À¯´Ð½º¿¡ Ãß°¡µÇ¾ú´Âµ¥ À̴ ƯÈ÷ º§ ½ÇÇè½Ç°ú ´ëÇÐ °øµ¿Ã¼ÀÇ »óÈ£ Çùµ¿¿¡ ±âÀÎÇß´Ù. 1979³â À¯´Ð½º 7¹øÂ° ¹öÀü V7 ÀÌ ¹ßÇ¥µÇ¾úÀ¸¸ç ÀÌ´Â ¸ðµç ÇöÁ¸ÇÏ´Â À¯´Ð½º ½Ã½ºÅÛÀÇ ´ëºÎ°ÝÀÌ´Ù. ÀÌ ½ÃÁ¡ ÀÌÈÄ À¯´Ð½ºÀÇ ¿ª»ç´Â ´Ù¼Ò º¹ÀâÇÏ°Ô µÇ¾ú´Âµ¥ Berkeley °¡ ÁÖµµÇÑ ´ëÇÐ °øµ¿Ã¼°¡ Berkeley Software Fistribution (BSD) ¶ó ºÒ¸®´Â º¯Á¾À» °³¹ßÇÑ ¹Ý¸é AT&T ´Â System III ¿Í ³ªÁß¿¡´Â System IV ¶ó´Â À̸§À¸·Î °è¼ÓÇØ¼ À¯´Ð½º¸¦ °³¹ßÇß´Ù. 1980³â´ë ÈĹݿ¡¼ 1990³â´ë Ãʹݿ¡ ÀÌ·¯ÇÑ µÎ °¡Áö Áß¿äÇÑ º¯Çüµé°£ÀÇ ÀüÀïÀº ÃÖ°íÁ¶¿¡ ´ÞÇßÁö¸¸ ¿©·¯ ÇØ°¡ Áö³ ÈÄ¿¡´Â °¢ º¯ÇüÀÌ ´Ù¸¥ º¯ÇüÀÇ Áß¿ä Æ¯Â¡µéÁß ¸¹Àº ºÎºÐÀ» äÅÃÇÏ¿´´Ù. »ó¾÷ÀûÀ¸·Î System V ´Â ÀÎÅÍÆäÀ̽ºÀÇ ´ëºÎºÐÀÌ Á¤½Ä Ç¥ÁØ¿¡ äÅõÊÀ¸·Î½á Ç¥ÁØ ÀüÀï¿¡¼ À̰åÀ¸¸ç ´ëºÎºÐÀÇ Çϵå¿þ¾î º¥´õµéÀº AT&T ÀÇ System V ·Î ÀüȯÇÏ¿´´Ù. ±×·¯³ª System V µµ °á±¹ ¸¹Àº BSD Çõ½ÅµéÀ» ¹Þ¾ÆµéÀÌ°Ô µÇ¾úÀ¸¸ç ±×·¡¼ °á°úÀûÀ¸·Î ½Ã½ºÅÛÀº µÎ ½Ã½ºÅÛÀÇ ÇÕº´ ÀÌ»óÀ̾ú´Ù. BSD ½Ã½ºÅÛµµ »ç¶óÁöÁö ¾Ê¾ÒÀ¸¸ç ´ë½Å ¿¬±¸, PC Çϵå¿þ¾î¿Í ´ÜÀÏ ¸ñÀû ¼¹ö (¿¹, ¸¹Àº À¥ ¼¹öµéÀº BSD ¿¡¼ ÆÄ»ýµÈ ½Ã½ºÅÛÀ» »ç¿ëÇϰí ÀÖ´Ù) ¿ëÀ¸·Î ³Î¸®»ç¿ëµÇ°Ô µÇ¾ú´Ù. °á°úÀûÀ¸·Î ¿ø·¡ 7¹øÂ° ÆÇ¿¡ ±âÃÊÇÑ ¸¹Àº ¿©·¯°¡Áö À¯´Ð½º ¹öÀüµéÀÌ Á¸ÀçÇÏ°Ô µÇ¾ú´Ù. À¯´Ð½ºÀÇ ´ëºÎºÐ ¹öÀüµéÀº Àç»ê±ÇÀÌ ÀÖÀ¸¸ç °¢°¢ÀÇ Çϵå¿þ¾î º¥´õ¿¡ ÀÇÇØ °ü¸®µÇ¾ú´Âµ¥ ¿¹¸¦ µé¾î ½ã ¼Ö¶ó¸®´Â System V ÀÇ º¯ÇüÀÌ´Ù. BSD ÁÙ±âÀÇ ¼¼°¡Áö ¹öÀüµéÀº °á±¹ ¿ÀÇÁ ¼Ò½º°¡ µÇ¾úÀ¸¸ç À̵éÀº °¢°¢ PC ŸÀÔÀÇ Çϵå¿þ¾î¿¡ ¼Õ½¬¿î ¼³Ä¡¿¡ ÁßÁ¡À» µÐ FreeBSD, ¸¹Àº ¿©·¯°¡Áö CPU ¾ÆÅ°ÅØÃÄ¿¡ ÁßÁ¡À» µÐ NetBSD ¿Í º¸¾È¿¡ ÁßÁ¡À» µÐ OpenBSD ÀÌ´Ù. À¯´Ð½º ¿ª»ç¿¡ ´ëÇÑ ´õ¿í ÀϹÝÀûÀÎ Á¤º¸´Â http://www.datametrics.com/tech/unix/uxhistry/brf-hist.htm ¿Í http://perso.wanadoo.fr/levenez/unix ¿¡¼ ãÀ» ¼ö ÀÖ´Ù. BSD ¿ª»ç¿¡ ´ëÇÑ ´õ¿í ¸¹Àº Á¤º¸´Â [McKusick 1999] ¿Í ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/src/share/misc/bsd-family-tree ¿¡¼ ãÀ» ¼ö ÀÖ´Ù. À¯´Ð½º °è¿ ½Ã½ºÅÛ »ç¿ë¿¡ ´ëÇÑ Âù¼º·ÐÀ» ¼³¸íÇϰí ÀÖ´Â ÁöÁö ±â»ç¸¦ ÀÐ°í ½ÍÀº »ç¶÷µéÀº http://www.unix-vs-nt.org ¸¦ º¸¾Æ¾ß ÇÑ´Ù. 2.1.2. ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î Àç´Ü1984³â Richard Stallman ÀÇ ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î Àç´Ü (Free Software Foundation, FSF) Àº À¯´Ð½º ¿î¿µÃ¼Á¦ÀÇ ¹«·á ¹öÀüÀ» ¸¸µé±â À§ÇØ GNU ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇߴµ¥ Stallman Àº ÀÚÀ¯·ÎÀÌ »ç¿ëµÉ ¼ö ÀÖ°í, ÀÐÇôÁú ¼ö ÀÖ°í, ¼öÁ¤µÉ ¼ö ÀÖ°í, Àç¹èÆ÷µÉ ¼ö ÀÖ´Â ¼ÒÇÁÆ®¿þ¾îÀÇ Àǹ̷Πfree ¸¦ »ç¿ëÇß´Ù. FSF ´Â C ÄÄÆÄÀÏ·¯ (gcc), ÅØ½ºÆ® ¿¡µðÅÍ (emacs) ¿Í ¸¹Àº ±âº»ÀûÀÎ µµ±¸¸¦ Æ÷ÇÔÇØ ¾öû³ª°Ô ¸¹Àº À¯¿ëÇÑ ÄÄÆ÷³ÍÆ®µé ¼º°øÀûÀ¸·Î ±¸ÃàÇÏ¿´´Ù. ±×·¯³ª 1990³â´ë FSF ´Â ¿î¿µÃ¼Á¦ Ä¿³ÎÀ» °³¹ßÇϴµ¥ ¾î·Á¿òÀ» °Þ¾úÀ¸¸ç Ä¿³ÎÀÌ ¾ø´Ù¸é ±×µéÀÇ ³ª¸ÓÁö ¼ÒÇÁÆ®¿þ¾îµéÀº ¼Ò¿ë¾ø¾úÀ» °ÍÀÌ´Ù. 2.1.3. ¸®´ª½º1991³â Linus Torvalds ´Â ``¸®´ª½º"¶ó°í À̸§ÁöÀº ¿î¿µÃ¼Á¦ Ä¿³ÎÀ» °³¹ßÇϱ⠽ÃÀÛÇß´Ù [Torvalds 1999]. ÀÌ Ä¿³ÎÀº ÀÚÀ¯·ÎÀÌ ¼öÁ¤µÉ ¼ö ÀÖ°í ¸Å¿ì À¯¿ëÇÑ ¿î¿µÃ¼Á¦¸¦ ¸¸µé±â À§ÇØ FSF »ê¹°°ú ´Ù¸¥ ÄÄÆ÷³ÍÆ®µé (ƯÈ÷ BSD ÄÄÆ÷³ÍÆ®µéÀÇ ÀÏºÎ¿Í MIT ÀÇ X À©µµ¿ì ¼ÒÇÁÆ®¿þ¾î) °ú º´ÇÕµÉ ¼ö ÀÖ¾ú´Âµ¥ ÀÌ Ã¥¿¡¼ Ä¿³Î ÀÚü´Â ``¸®´ª½º Ä¿³Î"·Î Àüü °áÇÕÀº ``¸®´ª½º"·Î ÁöĪÇÒ °ÍÀÌ´Ù. ¸¹Àº »ç¶÷µéÀº ´ë½Å ``GNU/Linux" ¶ó´Â ¿ë¾î¸¦ »ç¿ëÇÔÀ» ÁÖ¸ñÇØ¶ó. ¸®´ª½º °øµ¿Ã¼¿¡¼ ¿©·¯ Á¶Á÷µéÀº »ç¿ëÇÒ ¼ö ÀÖ´Â ÄÄÆ÷³ÍÆ®µéÀ» ´Ù¸£°Ô Á¶ÇÕÇÏ¿´´Âµ¥ °¢ Á¶ÇÕÀº ``¹èÆ÷ÆÇ"À¸·Î ºÎ¸£¸ç ¹èÆ÷ÆÇµéÀ» °³¹ßÇÑ Á¶Á÷µéÀº ``¹èÆ÷¾÷ÀÚ"¶ó°í ºÎ¸¥´Ù. ÀϹÝÀûÀ¸·Î ³Î¸® ¾Ë·ÁÁø ¹èÆ÷ÆÇÀ¸·Î´Â ·¹µåÇÞ (Red Hat), ¸Çµå·¹ÀÌÅ© (Mandrake), ¼öÁ¦ (SuSE), Ä®µ¥¶ó (Caldera), ÄÚ·¼ (Corel) ¹× µ¥ºñ¾È (Debian) ÀÌ ÀÖ´Ù. ´Ù¾çÇÑ ¹èÆ÷ÆÇµé°£¿¡´Â Â÷ÀÌÁ¡µéÀÌ ÀÖÁö¸¸ ¸ðµç ¹èÆ÷ÆÇµéÀº µ¿ÀÏÇÑ ±â¹ÝÀÎ ¸®´ª½º Ä¿³Î ¹× GNU glibc ¶óÀ̺귯¸®µé¿¡ ±âÃÊÇϰí ÀÖ´Ù. µÎ°¡Áö ¸ðµÎ´Â ``copyleft" ½ºÅ¸ÀÏÀÇ ¶óÀ̼¾½º·Î ´Ù·ïÁö±â ¶§¹®¿¡ ÀÌ·¯ÇÑ ±â¹Ý¿¡ ´ëÇÑ º¯°æÀº ÀϹÝÀûÀ¸·Î ¸ðµç »ç¶÷ÀÌ »ç¿ëÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ´Â BSD ¿Í AT&T ¿¡¼ ÆÄ»ýµÈ À¯´Ð½º ½Ã½ºÅÛ°£¿¡´Â Á¸ÀçÇÏÁö ¾Ê´Â ¸®´ª½º¸¸ÀÇ ±â¹Ý¿¡¼ ¸®´ª½º ¹èÆ÷ÆÇµéÀ» ÅëÇÕ½ÃŰ´Â ÈûÀÌ ¿øÃµÀÌ´Ù. ÀÌ Ã¥Àº ƯÁ¤ ¸®´ª½º ¹èÆ÷ÆÇ¿¡ °íÀ¯ÇÑ °ÍÀº ¾Æ´Ï¸ç ¸®´ª½º¸¦ ³íÀÇÇÒ ¶§ ÀÌ Ã¥Àº º»ÁúÀûÀ¸·Î ¸ðµç ÇöÀç ÁÖ¿ä ¸®´ª½º ¹èÆ÷ÆÇµé¿¡ ´ëÇØ À¯È¿ÇÑ °¡Á¤ÀÎ ¸®´ª½º Ä¿³Î ¹öÀü 2.2 ÀÌ»ó°ú C ¶óÀ̺귯¸® glibc 2.1 ÀÌ»óÀ» °¡Á¤ÇÑ´Ù. 2.1.4. ¿ÀÇ ¼Ò½º/ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾îÀÚÀ¯·ÎÀÌ °øÀ¯µÇ´Â ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇÑ °ü½ÉÀÌ Áõ°¡ÇÔ¿¡ µû¶ó ÀÌ¿¡ ´ëÇÑ Á¤ÀÇ ¹× ¼³¸íÀÌ ´õ¿í ´õ ÇÊ¿äÇÏ°Ô µÇ¾ú´Ù. ³Î¸® »ç¿ëµÇ´Â ¿ë¾î´Â ``¿ÀÇ ¼Ò½º ¼ÒÇÁÆ®¿þ¾î"·Î [OSI 1999] ³»¿¡ ´õ¿í ÀÚ¼¼ÇÏ°Ô Á¤ÀǵǾî ÀÖ´Ù. Eric Raymond [1997, 1998] Àº ´Ù¾çÇÑ °³¹ß °úÁ¤µéÀ» °íÂûÇÑ ¸î¸îÀÇ µ¶Ã¢¼ºÀÖ´Â ±â»çµéÀ» ÀÛ¼ºÇß´Ù. ´Ù¸¥ ³Î¸® »ç¿ëµÇ´Â ¿ë¾î´Â ``ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î (free software)" ·Î ``free" ´Â ``freedom" À» ³ªÅ¸³»´Âµ¥ º¸Åë ¼³¸íÀº ``free beer °¡ ¾Æ´Ñ free speech" ÀÌ´Ù. ±×·¯³ª µÎ Ç¥Çö ¸ðµÎ ¿Ïº®ÇÑ °ÍÀº ¾Æ´Ï´Ù. ``ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î"¶ó´Â ¿ë¾î´Â ´ë°³ ½ÇÇàÆÄÀÏÀº ¹«·á·Î Á¦°øµÇÁö¸¸ ¼Ò½º Äڵ带 º¼ ¼ö ¾ø°í, ¼öÁ¤ÇÒ ¼ö ¾ø°í ¶Ç´Â Àç¹èÆ÷ÇÒ ¼ö ¾ø´Â ÇÁ·Î±×·¥µé°ú È¥µ¿µÈ´Ù. ¹Ý´ë·Î ``¿ÀÇ ¼Ò½º"¶ó´Â ¿ë¾î´Â ¶§¶§·Î ¼Ò½º Äڵ带 º¼ ¼ö´Â ÀÖÁö¸¸ »ç¿ë, ¼öÁ¤ ¶Ç´Â Àç¹èÆ÷¿¡ Á¦ÇÑÀÌ ÀÖ´Â ¼ÒÇÁÆ®¿þ¾î¸¦ ÀǹÌÇϴµ¥ »ç¿ë (¾Ç¿ë) µÇ°í ÀÖ´Ù. ÀÌ Ã¥Àº º¸ÅëÀÇ Áï, ¼Ò½º ÄÚµåÀÇ »ç¿ë, º¸±â, ¼öÁ¤ ¹× Àç¹èÆ÷¸¦ ÀÚÀ¯·ÎÀÌ ÇÒ ¼ö ÀÖ´Â ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇØ ``¿ÀÇ ¼Ò½º"¶ó´Â ¿ë¾î¸¦ »ç¿ëÇÑ´Ù; ´õ¿í ¼¼ºÎÀûÀÎ Á¤ÀÇ´Â Open Source Definition ¿¡ Æ÷ÇԵǾî ÀÖ´Ù. ¾î¶² °æ¿ì ¸ñÀûÀÇ Â÷À̰¡ Á¦¾ÈµÇ°í Àִµ¥ ``ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î"¶ó´Â ¿ë¾î¸¦ ¼±È£ÇÏ´Â »ç¶÷µéÀº ÀÚÀ¯ÀÇ Çʿ伺À» °·ÂÈ÷ °Á¶ÇÏ±æ ¹Ù¶ó´Â ¹Ý¸é ´Ù¸¥ »ç¶÷µéÀº ´Ù¸¥ ¸ñÀû (¿¹, ³ôÀº ½Å·Ú¼º) ¸¦ °¡Áö°Å³ª ´Ü¼øÈ÷ ´ú ºÒÄèÇÏ°Ô º¸ÀÌ°í ½ÍÀ» ¼öµµ ÀÖ´Ù. ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î Á¤ÀÇ¿Í ±× À̸鿡 ¼û°ÜÁ® ÀÖ´Â ¸ñÀû¿¡ ´ëÇÑ Á¤º¸´Â http://www.fsf.org ¿¡¼ ãÀ» ¼ö ÀÖ´Ù. ¿ÀÇ ¼Ò½º ¼ÒÇÁÆ®¿þ¾î¿Í ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇÑ ÁöÁö ±â»çµéÀ» ÀÐ°í ½ÍÀº »ç¶÷µéÀº http://www.opensource.org ¿Í http://www.fsf.org ¸¦ º¸¾Æ¾ß ÇÑ´Ù. ±×·¯ÇÑ ¼ÒÇÁÆ®¿þ¾î¸¦ °íÂûÇÑ ´Ù¸¥ ¹®¼µéµµ Àִµ¥ ¿¹¸¦ µé¾î Miller [1995] ´Â ¿ÀÇ ¼Ò½º ¼ÒÇÁÆ®¿þ¾î°¡ ÁöÀû Àç»ê±ÇÀÌ ÀÖ´Â ¼ÒÇÁÆ®¿þ¾îº¸´Ù ´õ¿í ÇöÀúÇÏ°Ô ½Å·ÚÇÒ ¼ö ÀÖÀ½À» ¹ß°ßÇß´Ù (ÀÓÀÇÀÇ ÀԷ¶§¹®¿¡ »ý±â´Â ÆÄ¼Õ¿¡ ´ëÇØ ¾ó¸¶³ª ÀúÇ×ÇÏ´ÂÁö¸¦ ÃøÁ¤ÇÏ´Â ¼ö´ÜÀ» »ç¿ëÇÏ¿´´Ù). 2.1.5. ¸®´ª½º¿Í À¯´Ð½º ºñ±³ÀÌ Ã¥Àº ÀǵµÀûÀ¸·Î À¯´Ð½º¿Í °°Àº ½Ã½ºÅÛÀ» ±â¼úÇϱâ À§ÇØ ``À¯´Ð½º °è¿ (Unix-like)" À̶ó´Â ¿ë¾î¸¦ »ç¿ëÇÑ´Ù. ƯÈ÷ À¯´Ð½º °è¿Àº ¸ðµç ÁÖ¿ä À¯´Ð½º º¯Çüµé°ú ¸®´ª½º ¹èÆ÷ÆÇµéÀ» Æ÷ÇÔÇÑ´Ù. ¸¹Àº »ç¶÷µéÀÌ ÀÌ·¯ÇÑ ½Ã½ºÅÛµéÀ» ±â¼úÇϱâ À§ÇØ ´Ü¼øÈ÷ ``À¯´Ð½º"¶ó´Â ¿ë¾î¸¦ »ç¿ëÇÔÀ» ÁÖ¸ñÇØ¶ó. ¿ø·¡ ``À¯´Ð½º" ¶ó´Â ¿ë¾î´Â AT&T ¿¡ ÀÇÇØ °³¹ßµÈ ƯÁ¤ Á¦Ç°À» ÀǹÌÇß´Ù. ¿À´Ã³¯ ¿ÀÇ ±×·ìÀÌ À¯´Ð½º »óÇ¥±ÇÀ» ¼ÒÀ¯Çϰí ÀÖÀ¸¸ç À¯´Ð½º¸¦ ``worldwide Single UNIX Specification" À¸·Î Á¤ÀÇÇϰí ÀÖ´Ù. ¸®´ª½º°¡ À¯´Ð½º ¼Ò½º Äڵ忡¼ ÆÄ»ýµÇÁö ¾Ê¾ÒÁö¸¸ ±× ÀÎÅÍÆäÀ̽º´Â ÀǵµÀûÀ¸·Î À¯´Ð½º¿Í °°´Ù. µû¶ó¼ À¯´Ð½º¿¡¼ ¹è¿î ±³ÈÆÀÌ º¸¾È¿¡ ´ëÇÑ Á¤º¸¸¦ Æ÷ÇÔÇØ ÀϹÝÀûÀ¸·Î µÑ ¸ðµÎ¿¡ Àû¿ëµÈ´Ù. ÀÌ Ã¥¿¡¼ Á¤º¸ÀÇ ´ëºÎºÐÀº ¸ðµç À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡ Àû¿ëµÇ´Âµ¥ ¸®´ª½º¿¡ ƯÁ¤ÀûÀÎ Á¤º¸°¡ ¸®´ª½º¸¦ »ç¿ëÇÏ´Â »ç¶÷µéÀÌ ¸®´ª½ºÀÇ ´É·ÂÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ·Á°í ÀǵµÀûÀ¸·Î Ãß°¡µÇ¾ú´Ù. À¯´Ð½º °è¿ ½Ã½ºÅÛµéÀº ¸¹Àº º¸¾È ¸ÞÄ«´ÏÁòµéÀ» °øÀ¯ÇÑ´Ù. ¹°·Ð ÀÌ ¸ÞÄ«´ÏÁòµéÀº ¹Ì¹¦ÇÑ Â÷À̰¡ ÀÖ°í ¸ðµç ½Ã½ºÅ۵鿡¼ ¸ðµç ¸ÞÄ«´ÏÁòÀ» »ç¿ëÇÒ ¼ö´Â ¾ø´Ù. ¸ðµç ½Ã½ºÅÛµéÀº °¢ ÇÁ·Î¼¼½º¿¡ ´ëÇÑ »ç¿ëÀÚ ¹× ±×·ì ids (uids ¹× gids) ¿Í user, group ¿Í other ¿¡ ´ëÇÑ Àбâ, ¾²±â¿Í ½ÇÇàÇϱâ Çã°¡¸¦ °®´Â ÆÄÀϽýºÅÛÀ» Æ÷ÇÔÇϰí ÀÖ´Ù. ±âº» º¸¾È ¸ÞÄ«´ÏÁòÀ» Æ÷ÇÔÇØ À¯´Ð½º ½Ã½ºÅÛ¿¡ ´ëÇÑ ÀϹÝÀûÀÎ Á¤º¸´Â Thompson [1974] ¿Í Bach [1986] À» º¸¶ó. 3장Àº À¯´Ð½º¿Í ¸®´ª½ºÀÇ ÁÖ¿ä º¸¾È Ư¡À» ¿ä¾àÇÑ´Ù. 2.2. º¸¾È ¿ø¸®Àß ¾Ë°í ÀÖ¾î¾ß ÇÏ´Â ¸¹Àº ÀϹÝÀûÀÎ º¸¾È ¿ø¸®µéÀÌ ÀÖ´Ù; Á¤º¸ º¸¾È¿¡ ´ëÇÑ ÀϹÝÀûÀÎ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Â ÇÑ °÷Àº Information Assurance Technical Framework (IATF) [NSA 2000] ÀÌ´Ù. NIST ´Â ³ôÀº ¼öÁØÀÇ ``ÀϹÝÀûÀ¸·Î ÀÎÁ¤µÈ ¿ø¸®¿Í ½ÇÁ¦ (generally accepted principles and practices)" À» ½Äº°ÇÏ¿´´Ù [Swanson 1996]. [Pfleeger 1997] °°Àº ÄÄÇ»ÅÍ º¸¾È¿¡ ´ëÇÑ ÀϹÝÀûÀÎ ±³Àçµµ ¶ÇÇÑ º¼ ¼ö ÀÖ´Ù. ¾à°£ÀÇ º¸¾È ¿ø¸®µéÀº ´ÙÀ½°ú °°ÀÌ ¿ä¾àµÈ´Ù: ´ë°³ ÄÄÇ»ÅÍ º¸¾ÈÀÇ ¸ñÀûÀº ´ÙÀ½ ¼¼°¡Áö Àü¹ÝÀûÀÎ ¸ñÀû¿¡ ÀÇÇØ ±â¼úµÈ´Ù:
¾î¶² »ç¶÷µéÀº Ãß°¡ÀûÀÎ º¸¾È ¸ñÀûÀ» Á¤ÀÇÇÏ´Â ¹Ý¸é ´Ù¸¥ »ç¶÷µéÀº ÀÌ·¯ÇÑ Ãß°¡ÀûÀÎ ¸ñÀûÀ» À§ ¼¼°¡Áö ¸ñÀûÀÇ Æ¯º°ÇÑ °æ¿ì·Î ÀÏ·üÀûÀ¸·Î Ãë±ÞÇÑ´Ù. ¿¹¸¦ µé¾î ¾î¶² »ç¶÷Àº ºÎÀÎ ¹æÁö (non-repudiation) ¸¦ º°µµÀÇ ¸ñÀûÀ¸·Î ºÐ·ùÇϴµ¥ ÀÌ´Â ¼Û½ÅÀÚ¿Í ¼ö½ÅÀÚ°¡ ³ªÁß¿¡ ºÎÀÎÇÒ ¼ö ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í °¢°¢ ¸Þ½ÃÁö¸¦ Àü¼Û ¹× ¼ö½ÅÇßÀ½À» ``ÀÔÁõ"ÇÏ´Â ´É·ÂÀÌ´Ù. ÇÁ¶óÀ̹ö½Ã´Â ¶§¶§·Î ±â¹Ð¼º°ú º°µµ·Î ´Ù·ïÁö´Âµ¥ ¾î¶² »ç¶÷Àº À̸¦ µ¥ÀÌŸ ´ë½Å »ç¿ëÀÚ (¿¹, ±×µéÀÇ ½Å¿ø) ÀÇ ±â¹Ð¼º º¸È£·Î Á¤ÀÇÇÑ´Ù. ´ëºÎºÐÀÇ ¸ñÀûµéÀº ½Äº° (identification) °ú ÀÎÁõÀ» ÇÊ¿ä·Î Çϴµ¥ ÀÌ´Â ¶§¶§·Î º°°³ÀÇ ¸ñÀûÀ¸·Î ¿°ÅµÈ´Ù. Á¾Á¾ °¨»ç (auditing, ¶ÇÇÑ È¸°è Ã¥ÀÓ accountability À̶ó°íµµ ºÎ¸¥´Ù) µµ ÇÕ´çÇÑ º¸¾È ¸ñÀûÀ¸·Î ºÐ°£µÈ´Ù. ¶§¶§·Î Á¢±Ù Á¦¾î (access control) ¹× ½Å·Ú¼º (authenticity) µµ ¶ÇÇÑ º°µµ·Î ¿°ÅµÈ´Ù. ¸ðµç °æ¿ì¿¡ ÀÖ¾î ÀÌ·¯ÇÑ ¸ñÀûµéÀ» ¾î¶»°Ô Á¾ÇÕÇÏ´À³Ä¿¡ »ó°ü¾øÀÌ À̵éÀ» ¾ðÁ¦ ÃæÁ·½ÃÄÑ¾ß ÇÏ´ÂÁö ¾Ë ¼öÀÖµµ·Ï ÇÁ·Î±×·¥ÀÇ Àü¹ÝÀûÀÎ ¸ñÀûÀ» È®ÀÎÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. ¶§¶§·Î ÀÌ·¯ÇÑ ¸ñÀûµéÀº ¾Ë·ÁÁø ÀÏ·ÃÀÇ À§Çù¿¡ ´ëÇÑ ¹ÝÀÀÀ¸·Î ¶§¶§·Î ÀÌ·¯ÇÑ ¸ñÀûµéÁß ÀϺδ ¹ý¿¡ ÀÇÇØ ¿ä±¸µÈ´Ù. ¿¹¸¦ µé¾î ¹Ì±¹ÀÇ ÀºÇàµé ¹× ´Ù¸¥ ±ÝÀ¶ ±â°üµé¿¡ ´ëÇØ¼´Â ``Gramm-Leach-Bliley (GLB)'' ¹ý·ÉÀ̶ó ºÒ¸®´Â »õ·Î¿î ÇÁ¶óÀ̹ö½Ã ¹ýÀÌ ÀÖ´Ù. ÀÌ ¹ýÀº °øÀ¯µÇ´Â °³ÀÎ Á¤º¸ÀÇ ¹ßÇ¥¿Í ±× µ¥ÀÌŸ¸¦ ¾ÈÀüÇÏ°Ô ÇÏ´Â ¹æ¹ýÀ» ¸íÇϰí Á¦»ïÀÚ¿¡ ÀÇÇØ °øÀ¯µÉ °³ÀÎ Á¤º¸ÀÇ ¹ßÇ¥¸¦ ¿ä±¸ÇÏ¸ç ±â°üµéÀÌ °í°´µé¿¡°Ô °øÀ¯µÇ´Â µ¥ÀÌŸ¸¦ ¼±ÅÃÇÒ ±âȸ¸¦ ÁÖµµ·Ï Á¤Çϰí ÀÖ´Ù [Jones 2000]. ¶§¶§·Î º¸¾È°ú ¾î¶² ´Ù¸¥ ÀϹÝÀûÀÎ ½Ã½ºÅÛ/¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î¸µ ¿ø¸®µé°£¿¡´Â ºÒÀÏÄ¡°¡ ÀÖ´Ù. º¸¾ÈÀº ¶§¶§·Î ``¼Õ½¬¿î »ç¿ë"À» ¹æÇØÇÒ ¼ö Àִµ¥ ¿¹¸¦ µé¾î º¸¾ÈÀûÀÎ ¼³Á¤À» ¼³Ä¡ÇÏ´Â °ÍÀº ÀÛµ¿ÇÏÁö¸¸ ºñº¸¾ÈÀûÀÎ ``Æò¹üÇÑ" ¼³Á¤º¸´Ù ´õ¿í ¸¹Àº ³ë·ÂÀÌ µé ¼öµµ ÀÖ´Ù. Á¾Á¾ ÀÌ ¸í¹éÇÑ ºÒÀÏÄ¡´Â ÇØ°áµÉ ¼ö Àִµ¥ ¿¹¸¦ µé¾î ¹®Á¦¸¦ ´Ù½Ã »ý°¢ÇÔÀ¸·Î½á º¸¾ÈÀûÀÎ ½Ã½ºÅÛÀ» ¶ÇÇÑ »ç¿ëÇϱ⠽±°Ô ¸¸µå´Â °ÍÀº ´ë°³ °¡´ÉÇÏ´Ù. ¶ÇÇÑ º¸¾È°ú Ãß»óÈ (Á¤º¸ ¼û±â±â) °£¿¡µµ ºÒÀÏÄ¡°¡ Àִµ¥ ¿¹¸¦ µé¾î ¾î¶² °í¼öÁØ ¶óÀ̺귯¸® ·çƾµéÀÌ º¸¾ÈÀûÀ¸·Î ¶Ç´Â ºñº¸¾ÈÀûÀ¸·Î ±¸ÇöµÉ ¼öµµ ÀÖÁö¸¸ ±×µéÀÇ ¼³°è ½ºÆåÀº ¹«¾ùÀ̶ó°í ¸»ÇØÁÖÁö ¸øÇÒ °ÍÀÌ´Ù. °á±¹ ¾ÖÇÃÀÌÄÉÀ̼ÇÀÌ º¸¾ÈÀûÀÌ¿©¾ß ÇÑ´Ù¸é ±×·¸´Ù°í È®½ÅÇÒ ¼ö ¾ø´Â °æ¿ì ¹Ýµå½Ã ½º½º·Î À̸¦ º¸¾ÈÀûÀ¸·Î ¸¸µé¾î¾ß ÇÑ´Ù - ¹°·Ð ¸Â´Ù. ¶óÀ̺귯¸®´Â ¼öÁ¤µÇ¾î¾ß ÇÏ¸ç ¶óÀ̺귯¸® ·çƾÀ» À߸ø ¼±ÅÃÇÔÀ¸·Î½á ¼ÕÇØ¸¦ ÀÔÀ» »ç¶÷µéÀº ¹Ù·Î »ç¿ëÀÚµéÀÌ´Ù. ÈǸ¢ÇÑ ÀϹÝÀûÀÎ º¸¾È ¿ø¸®´Â ``öÀúÇÑ ¹æ¾î (defense in depth)"ÀÌ´Ù; Àû¼Ò¿¡ ¸Å¿ì ¸¹Àº º¸È£ ¸ÞÄ«´ÏÁòµé (``°èÃþ, layers") µéÀ» °¡Á®¾ß ÇÏ¸ç µû¶ó¼ °ø°ÝÀÚ°¡ ¼º°øÀûÀÎ °ø°ÝÀ» ¼öÇàÇϱâ À§ÇØ ´Ù¼öÀÇ ¸ÞÄ«´ÏÁòÀ» ¹«³Ê¶ß·Á¾ß Çϵµ·Ï ¼³°èµÇ¾î¾ß ÇÑ´Ù. 2.3. ÇÁ·Î±×·¡¸ÓµéÀº ¿Ö ºñº¸¾ÈÀûÀÎ Äڵ带 ÀÛ¼ºÇϴ°¡¸¹Àº ÇÁ·Î±×·¡¸ÓµéÀÌ ºñº¸¾ÈÀûÀÎ Äڵ带 ÀÛ¼ºÇÏ·Á°í ÇÏÁö´Â ¾Ê´Â´Ù - ±×·¯³ª ¾î·µç ÀÛ¼ºÇÑ´Ù. ´ÙÀ½Àº ÀÌ¿¡ ´ëÇÑ ¸¹Àº ÀÌÀ¯µéÀÌ´Ù. À̵éÁß ´ëºÎºÐÀº 1998³â 12¿ù 17ÀÏ Bugtraq ¿¡ °Ô½ÃÇÑ Aleph One ¿¡ ÀÇÇØ ¼öÁý ¹× ¿ä¾àµÈ °ÍÀÌ´Ù.
2.4. ¿ÀÇ ¼Ò½º°¡ º¸¾È¿¡ À¯¸®ÇѰ¡?º¸¾È¿¡ ´ëÇÑ ¿ÀÇ ¼Ò½º ¹æ¹ýÀÇ ¿µÇâ¿¡ °üÇØ¼´Â º¸¾È Àü¹®°¡µé¿¡ ÀÇÇØ ¸¹Àº ³íÀǰ¡ ÀÖ¾î¿Ô´Ù. ÁÖ¿ä ÀïÁ¡µéÁßÀÇ Çϳª´Â ¿ÀÇ ¼Ò½º°¡ °ø°ÝÀÚ¿Í ¹æ¾îÀÚ¸¦ Æ÷ÇÔÇØ ¸ðµç »ç¶÷ÀÌ °ËÅäÇÒ ¼ö ÀÖ°Ô²û ¼Ò½º Äڵ带 µå·¯³½´Ù´Â °ÍÀ¸·Î ºÐº°ÀÖ´Â »ç¶÷µéÀº ÀÌ »óȲÀÇ ±Ã±ØÀûÀÎ ¿µÇâ¿¡ °üÇØ ÀÌÀǸ¦ °®°í ÀÖ´Ù. ´ÙÀ½Àº ÀÌ ÁÖÁ¦¸¦ °íÂûÇØ¿Ô´ø »ç¶÷µé·ÎºÎÅÍ ¾à°£ ÀοëÇÑ °ÍÀÌ´Ù. Bruce Schneier Àº Çö¸íÇÑ ¿£Áö´Ï¾îµéÀº ``º¸¾È°ú °ü·ÃµÈ ¸ðµç °ÍÀ» À§ÇØ ¿ÀÇ ¼Ò½º Äڵ带 ¿ä±¸"ÇØ¾ß ÇÑ´Ù°í ÁÖÀåÇϸç [Schneier 1999] ¶ÇÇÑ ¿ÀÇ ¼Ò½º ¼ÒÇÁÆ®¿þ¾î¸¦ º¸¾ÈÀûÀ¸·Î ¸¸µé±â À§ÇØ ÃæÁ·µÇ¾î¾ß ÇÏ´Â Çʼö Á¶°ÇµéÀÇ ÀϺθ¦ ³íÀÇÇϰí ÀÖ´Ù. Advanced Encryption Standard (AES) ¾ÏÈ£È ¾Ë°í¸®µë °³¹ßÀÚÀÎ Vincent Rijmen Àº ¸®´ª½ºÀÇ ¿ÀÇ ¼Ò½º º»ÁúÀÌ ´õ¿í ¸¹Àº »ç¶÷µéÀÌ º¸¾È Ãë¾à¼º (vulnerability) À» Á¶»çÇÒ ¼ö ÀÖÀ»»Ó¸¸ ¾Æ´Ï¶ó ´õ¿í Áß¿äÇÏ°Ô ¸ðµ¨ÀÌ »ç¶÷µé¿¡°Ô ´õ¿í ºÐ¸íÇÑ ÄÚµåÀÇ ÀÛ¼º°ú Ç¥ÁØÀ» °í¼öÇϰԲû Çϱ⠶§¹®¿¡ À̵éÀÇ ¹ß°ß ¹× ¼öÁ¤À» ´õ¿í ½±°Ô ¸¸µå´Â ¿ì¼öÇÑ ¹æ¹ýÀ» Á¦°øÇÑ´Ù°í ¹Ï°í ÀÖ´Ù. µû¶ó¼ ÀÌ´Â º¸¾È °ËÅ並 ¼Õ½±°Ô ÇÑ´Ù [Rijmen 2000]. Elias Levy (Aleph1) Àº ±â»ç Is Open Source Really More Secure that Closed? ¿¡¼ ¿ÀÇ ¼Ò½º ¼ÒÇÁÆ®¿þ¾î¸¦ º¸¾ÈÀûÀ¸·Î ¸¸µå´Âµ¥ ÀÖ¾î ¹®Á¦Á¡µéÀÇ ÀϺθ¦ ³íÀÇÇϰí Àִµ¥ ±×ÀÇ ¿ä¾àÀº ´ÙÀ½°ú °°´Ù:
John Viega ÀÇ ±â»ç The Myth of Open Source Security µµ ¶ÇÇÑ ÀÌ ÀïÁ¡À» ³íÀÇÇϰí Àִµ¥ ´ÙÀ½ ¹æ½ÄÀ¸·Î ¿ä¾àµÈ´Ù:
Michael H. Warfield ÀÇ Musings on open source security ´Â º¸¾È¿¡ ´ëÇÑ ¿ÀÇ ¼Ò½º ¼ÒÇÁÆ®¿þ¾îÀÇ ¿µÇâ¿¡ ´ëÇØ ´õ¿í ´õ ±àÁ¤ÀûÀÌ´Ù. Fred Schneider ´Â ¿ÀÇ ¼Ò½º Äڵ带 °Ë»çÇÏ´Â ¸¹Àº »ç¶÷µéÀÌ ½Ã½ºÅÛ º¸¾ÈÀ» ¼Õ»ó½Ãų ¼ö ÀÖ´Â ¹ö±×µéÀ» ½Äº°Çϴµ¥ ¼º°øÇÒ °ÍÀ̶ó°í ¹ÏÀ» ÀÌÀ¯°¡ ¾ø´Ù°í ¸»Çϸç ``Äڵ峻ÀÇ ¹ö±×µéÀÌ Áö¹èÀûÀÎ °ø°Ý ¹æ¹ýÀº ¾Æ´Ï´Ù"¶ó°í ÁÖÀåÇÏ¸é¼ ¿ÀÇ ¼Ò½º°¡ º¸¾È¿¡ µµ¿òÀÌ µÇÁö ¾Ê´Â´Ù°í ¹Ï°í ÀÖ´Ù [Schneider 2000]. ±×´Â ¶ÇÇÑ ¿ÀÇ ¼Ò½º´Â ±¸Ãà °úÁ¤ÀÇ Á¦¾î¸¦ ¹èÁ¦ÇÑ´Ù°í ÁÖÀåÇϰí Àִµ¥ ±×·¯³ª ¸ðµç ÁÖ¿ä ¿ÀÇ ¼Ò½º ÇÁ·Î±×·¥µéÀÌ ¸í¼ºÀÖ´Â ``¼ÒÀ¯ÀÚ" ÀÇ Çϳª ¶Ç´Â ¾à°£ÀÇ °ø½Ä ¹öÀüÀ» °®°í ÀÖµíÀÌ ¿ÀÇ ¼Ò½ºÀÇ ½ÇÁ¦ ±¸Ãà °úÁ¤¿¡´Â Á¦¾î°¡ ÀÖ´Ù . Peter G. Neumann Àº ``¿ÀÇ ¹Ú½º ¼ÒÇÁÆ®¿þ¾î (¾Æ¸¶µµ ´ÜÁö ¾î¶² Á¶°ÇÇÏ¿¡¼¸¸ ¼Ò½º Äڵ带 ¾òÀ» ¼ö ÀÖ´Â) °¡ ½ÇÁ¦·Î ½Ã½ºÅÛ º¸¾ÈÀ» Çâ»ó½Ãų °ÍÀΰ¡? ³ªÀÇ ´äÀº °¡´É¼ºÀÌ °í·ÁµÉ ¼ö ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í ¹Ù·Î ±×°Í¿¡ ÀÇÇÑ °ÍÀº ¾Æ´Ï´Ù"¶ó°í ¸»ÇÏ¸é¼ À̸¦ ³íÀÇÇϰí ÀÖ´Ù [Neumann 2000]. TruSecure Corporation Àº ¿ÀÇ ¼Ò½º ȸ»çÀÎ ·¹µåÇÞÀÇ ÈÄ¿øÇÏ¿¡ ¿Ö ±×µéÀÌ ¿ÀÇ ¼Ò½º°¡ º¸¾È¿¡ ´õ¿í È¿°úÀûÀ̶ó°í ¹Ï´ÂÁö¿¡ ´ëÇÑ ³í¹®À» ÀÛ¼ºÇÏ¿´´Ù. Natalie Walker Whitlock's IBM DeveloperWorks article ´Â ¶ÇÇÑ Âù¹Ý ¾ç·ÐÀ» ³íÀÇÇϰí ÀÖ´Ù. Brian Witten, Carl Landwehr °ú Caloyannides [Witten 2001] Àº ¼Ò½º Äڵ带 »ç¿ë°¡´ÉÇÏ°Ô ÇÏ´Â °ÍÀº ½Ã½ºÅÛ º¸¾È¿¡ À¯¸®ÇÏ°Ô ÀÛµ¿ÇÑ´Ù°í ÀáÁ¤ÀûÀ¸·Î °á·ÐÁöÀº ±â»ç¸¦ IEEE ¼ÒÇÁÆ®¿þ¾î¿¡ ¹ßÇ¥ÇÏ¿´´Ù; ±×µéÀº ´ÙÀ½°ú °°ÀÌ ¾ð±ÞÇÑ´Ù:
¶§¶§·Î Á¸ÀçÇÏÁö¸¸ ¾Ë·ÁÁöÁö ¾ÊÀº Ãë¾à¼ºÀº ¾Ç¿ëµÉ ¼ö ¾øÀ¸¸ç ±×·¡¼ ½Ã½ºÅÛÀº ½ÇÁ¦·Î º¸¾ÈÀûÀÓÀÌ Æ¯È÷ ¾ð±ÞµÇ°í ÀÖ´Ù. À̷лó ÀÌ´Â ¿ÇÁö¸¸ ¹®Á¦´Â ÀÏ´Ü ´©±º°¡°¡ Ãë¾à¼ºÀ» ¹ß°ßÇÑ´Ù¸é ¹ß°ßÀÚ°¡ ÀÌÀÇ ¼öÁ¤À» µ½´Â ´ë½Å ´ÜÁö Ãë¾à¼ºÀ» ¾Ç¿ëÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. µû¶ó¼ Ãë¾à¼ºÀÌ ¾Ë·ÁÁöÁö ¾Ê¾Ò´Ù°í ÇØ¼ ½ÇÁ¦·Î Ãë¾à¼ºÀÌ ¾ø¾îÁö´Â °ÍÀº ¾Æ´Ï´Ù; ÀÌ´Â ´Ü¼øÈ÷ Ãë¾à¼ºÀÌ ¾ðÁ¦µç ¾Ç¿ëµÉ ¼ö ÀÖ´Â ½ÃÇÑ ÆøÅºÀÓÀ» ÀǹÌÇÑ´Ù. ±Ùº»ÀûÀ¸·Î ´©±º°¡ ÀÚ½ÅÀÌ ¹ß°ßÇÑ Ãë¾à¼ºÀ» ¾Ç¿ëÇÏ´Â ¹®Á¦´Â ¿ÀÇ ¹× ºñ°ø°³ ¼Ò½º ½Ã½ºÅÛ ¸ðµÎ¿¡ ´ëÇÑ ¹®Á¦ÀÌ´Ù. ¼Ò½º Äڵ尡 ¾ø´Â ½Ã½ºÅÛÀÌ ÀÌ·¯ÇÑ Àǹ̿¡¼ ´õ¿í º¸¾ÈÀûÀÌ´Ù°í ³íÀÇµÇ¾î ¿Ô´Âµ¥ ÀÌ´Â °ø°ÝÀÚ°¡ ¾òÀ» ¼ö ÀÖ´Â Á¤º¸°¡ Àû±â ¶§¹®¿¡ °ø°ÝÀÚ°¡ Ãë¾à¼ºÀ» ¹ß°ßÇÏ´Â °ÍÀº ´õ¿í ¾î·Á¿ï °ÍÀÌ´Ù. ÀÌ¿¡ ´ëÀÀµÇ´Â ³íÀÇ´Â °ø°ÝÀÚ´Â ÀϹÝÀûÀ¸·Î ¼Ò½º Äڵ带 ÇÊ¿ä·Î ÇÏÁö ¾ÊÀ¸¸ç ±×µéÀÌ ¼Ò½º Äڵ带 »ç¿ëÇÏ±æ ¿øÇÑ´Ù¸é ¼ÒÇÁÆ®¿þ¾îÀÇ ¼Ò½º¸¦ Àç»ý¼ºÇϱâ À§ÇØ µð¼Àºí·¯¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ºñ°ø°³ Äڵ尡 º¸¾È Ãë¾à¼º¿¡ ´ëÇØ ¾î¶»°Ô Á¶»çµÉ ¼ö Àִ°¡¿¡ ´ëÇÑ ÇѰ¡Áö ³íÀÇ¿¡ ´ëÇØ¼´Â Flake [2001] À» º¸¶ó. ¹Ý´ë·Î ¹æ¾îÀÚ´Â ¼Ò½º Äڵ尡 ¾ø´Ù¸é º¸Åë ¹®Á¦¸¦ ãÁö ¸øÇÒ °ÍÀÌ¸ç µû¶ó¼ ¼Ò½º Äڵ尡 ¾ø´Ù´Â °ÍÀº °ø°ÝÀÚ¿Í ºñ±³ÇØ ¹æ¾îÀÚ¸¦ ºÒ¸®ÇÑ Ã³Áö¿¡ ³õÀÌ°Ô ÇÑ´Ù. ¶§¶§·Î ¿ä±¸µÇ´Â ÇѰ¡Áö´Â »ç¶÷µéÀÌ Ãë¾à¼º¿¡ ´ëÇÑ °æ°í¸¦ °øÇ¥ÇÏ¿© À̸¦ ³íÀÇÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ÀÌ´Â À̷лó ÁÁ°Ô º¸ÀÌÁö¸¸ ¹®Á¦´Â °ø°ÝÀÚ°¡ ÀÌ¹Ì ¸¹Àº ä³ÎÀ» ÅëÇØ Ãë¾à¼º¿¡ ´ëÇÑ Á¤º¸¸¦ À¯Æ÷ÇÑ´Ù´Â °ÍÀÌ´Ù. ¿ä¾àÇϸé ÀÌ·¯ÇÑ Á¢±Ù ¹æ¹ýÀº ¹æ¾îÀÚ¸¦ °ø°Ý´çÇϱ⠽±°Ô ¸¸µå´Â ¹Ý¸é °ø°ÝÀÚ¸¦ ÀúÁöÇϱâ À§ÇØ ÇÒ ¼ö ÀÖ´Â ÀÏÀº ¾ø´Ù. °ú°Å¿¡ ȸ»çµéÀº Ãë¾à¼º ¹ßÇ¥¸¦ Àû±ØÀûÀ¸·Î ¹æÇØÇÏ·Á°í ÇßÁö¸¸ ÀϹÝÀûÀ¸·Î Ãë¾à¼ºÀÌ (Ãë¾à¼ºÀÌ ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù°í °·ÂÇÏ°Ô ÁÖÀåÇÒ ¼ö ÀÖ´Â) »ç¿ëÀÚ¿¡°Ô ³Î¸® ¾Ë·ÁÁö°í ³ª¼¾ß ȸ»çµéÀÌ Ãë¾à¼ºÀ» ¼öÁ¤ÇßÀ½À» °æÇèÀ» ÅëÇØ ¾Ë ¼ö ÀÖ´Ù. À̰ÍÀÌ ``¿ÏÀüÇÑ ¹ßÇ¥" Âù¼º·ÐÀÇ ¸ðµç Áß¿äÇÑ ¿ä¼ÒÀÌ´Ù. Gartner ±×·ìÀº ``Commentary: Hype is the real issue - Tech News" ¶ó´Â CNET.com ±â»ç¿¡ ¼ÖÁ÷ÇÑ ÁÖ¼®À» ´Þ¾Ò´Âµ¥ ´ÙÀ½°ú °°ÀÌ ¸»ÇÏ¿´´Ù:
¿ÀÇ ¼Ò½º ÇÁ·Î±×·¥¿¡´Â ÇϳªÀÇ È¸»ç¿¡ ÀÇÇØ Àû¿ëµÈ Á¦¾î°¡ ¾ø±â ¶§¹®¿¡ »ç¶÷µéÀÌ Æ®·ÎÀÌ ¸ñ¸¶ (Trojan Horses) ¹× ´Ù¸¥ ¾ÇÀÇÀÖ´Â Äڵ带 »ðÀÔÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù°í ¶§¶§·Î ³íÀÇµÇ¾î ¿Ô´Ù. Æ®·ÎÀÌ ¸ñ¸¶´Â ¿ÀÇ ¼Ò½º Äڵ忡 »ðÀ﵃ ¼ö ÀÖÀ¸¸ç ÀÌ´Â »ç½ÇÀÌ´Ù. ±×·¯³ª ÀÌ´Â ¼ÒÀ¯±ÇÀÌ ÀÖ´Â Äڵ峻¿¡µµ »ðÀ﵃ ¼ö ÀÖ´Ù. ºÒ¸¸À» ǰ°Å³ª ¸Å¼öµÈ °í¿ëÀÎÀÌ ¾ÇÀÇÀÖ´Â Äڵ带 »ðÀÔÇÒ ¼ö ÀÖÀ¸¸ç ¸¹Àº ȸ»ç¿¡¼ ¿ÀÇ ¼Ò½º ÇÁ·Î±×·¥¿¡¼ º¸´Ù ´ú ¹ß°ßµÉ °Í°°´Ù. °á±¹ Á¶Á÷ ¿ÜºÎÀÇ ´©±¸µµ Äڵ带 °ËÅäÇÒ ¼ö ¾ø°í Äڵ带 ³»ºÎÀûÀ¸·Î °ËÅäÇϴ ȸ»ç´Â °ÅÀÇ ¾ø´Ù (¶Ç´Â °ËÅäÇÑ´Ù ÇÏ´õ¶óµµ °ËÅäµÈ Äڵ尡 ½ÇÁ¦·Î »ç¿ëµÇ°í ÀÖ´Â ÄÚµåÀÓÀ» È®½ÅÇÒ ¼ö ÀÖ´Â »ç¶÷Àº °ÅÀÇ ¾ø´Ù). ºñ°ø°³ ¼Ò½º ȸ»ç°¡ ³ªÁß¿¡ °í¼Ò´çÇÒ °ÍÀ̶ó´Â »ý°¢Àº °ÅÀÇ Áõ¸íµÇÁö ¾Ê¾Ò´Ù ; °ÅÀÇ ¸ðµç ¶óÀ̼¾½º´Â ¸ðµç º¸ÁõÀ» ºÎÀÎÇÏ¸ç ¹ý¿øÀº ÀϹÝÀûÀ¸·Î ¼ÒÇÁÆ®¿þ¾î °³¹ß ȸ»ç°¡ ¹ýÀû Àǹ«°¡ ÀÖ´Ù°í ÆÇ°áÇÏÁö ¾Ê´Â´Ù. º¼·£µå»ç (Borland) ÀÇ Interbase ¼¹ö°¡ ÀÌ¿¡ ÇØ´çÇÏ´Â Àç¹ÌÀÖ´Â °æ¿ìÀε¥ 1992³â°ú 1994³â »çÀÌ¿¡ º¼·£µå»ç´Â ±×µéÀÇ µ¥ÀÌŸº£À̽º ¼¹öÀÎ ``Interbase" ¿¡ ÀǵµÀûÀ¸·Î ``¹éµµ¾î (back door)" ¸¦ »ðÀÔÇߴµ¥ ÀÌ ¹éµµ¾î´Â ¸ðµç ·ÎÄà ¶Ç´Â ¿ø°Ý »ç¿ëÀÚ¿¡°Ô ¸ðµç µ¥ÀÌŸº£À̽º °´Ã¼ÀÇ Á¶ÀÛ ¹× ÀÓÀÇÀÇ ÇÁ·Î±×·¥µéÀ» ¼³Ä¡ÇÒ ¼ö ÀÖµµ·Ï ÇßÀ¸¸ç ¾î¶² °æ¿ì´Â ``·çÆ®" ±ÇÇÑÀ¸·Î¼ ¸Ó½ÅÀ» Á¦¾îÇÒ ¼ö ÀÖ°Ô±îÁö ÇÏ¿´´Ù. ÀÌ Ãë¾à¼ºÀº Àû¾îµµ 6³â°£ Á¦Ç°¿¡ ±×´ë·Î ÀÖ¾ú´Âµ¥ ¾î´À ´©±¸µµ ÀÌ Á¦Ç°À» °ËÅäÇÒ ¼ö ¾ø¾úÀ¸¸ç º¼·£µå»ç´Â ÀÌ Ãë¾à¼ºÀ» Á¦°ÅÇÒ µ¿±â°¡ ¾ø¾ú´Ù. ±×¸®°í ³ª¼ º¼·£µå»ç´Â 2000³â 7¿ù¿¡ ¼Ò½º Äڵ带 °ø°³ÇßÀ¸¸ç ``Firebird" ÇÁ·ÎÁ§Æ®°¡ ÀÌ ¼Ò½º Äڵ带 °®°í ÀÛ¾÷À» Çϱ⠽ÃÀÛÇØ 2000³â 12¿ù Interbase ¿Í °ü·ÃµÈ ½É°¢ÇÑ ÀÌ º¸¾È ¹®Á¦¸¦ Æø·ÎÇÏ¿´´Ù. 20001³â 1¿ù CERT ´Â CERT advisory CA-2001-01 ·Î ÀÌ ¹éµµ¾îÀÇ Á¸À縦 °øÇ¥ÇÏ¿´´Ù. ¸ÆºüÁö´Â °ÍÀº ¹Ù·Î ¹éµµ¾î°¡ ´Ü¼øÈ÷ ÇÁ·Î±×·¥ÀÇ ¾Æ½ºÅ° ´ýÇÁ (ASCII dump, ÀϹÝÀûÀÎ Å©·¡Ä¿ÀÇ ¼ö¹ý) ¸¦ °Ë»çÇÔÀ¸·Î½á ½±°Ô ¹ß°ßµÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÌ ¹®Á¦°¡ ¿ÀÇ ¼Ò½º °³¹ßÀÚ°¡ Äڵ带 °ËÅäÇÏ´Â µ¿¾È ¹ß°ßµÇ¾ú´Ù¸é ºü¸£°Ô ÆÐÄ¡µÇ¾úÀ» °ÍÀÌ´Ù. ¹°·Ð ÆÐ½º¿öµå¸¦ ¾Ë·ÁÁöÁö ¾Ê°Ô º¸°üÇÔÀ¸·Î½á ÇÁ·Î±×·¥Àº ¾ÈÀüÇÑ »óÅ·ΠÀÖ¾ú°í ¼Ò½º ¿ÀÇÂÀÌ ÇÁ·Î±×·¥À» ´ú º¸¾ÈÀûÀ¸·Î ¸¸µé¾ú´Ù°í ÁÖÀåÇÒ ¼öµµ ÀÖ´Ù. ÀúÀÚ´Â À̸¦ Å͹«´Ï ¾ø´Â ÁÖÀåÀ̶ó°í »ý°¢ÇÑ´Ù. ¿Ö³ÄÇÏ¸é ¾Æ½ºÅ° ´ýÇÁ´Â ´ë¼ö·ÓÁö ¾ÊÀº ÀÏÀ̰í Ç¥ÁØ °ø°Ý ±â¹ýÀ¸·Î Àß ¾Ë·ÁÁø °ÍÀ̱⠶§¹®¿¡ ¸ðµç °ø°ÝÀÚ°¡ Ãë¾à¼ºÀ» °øÇ¥ÇÒ¸¸Å °©ÀÛ½º·± Ãæµ¿À» °¡ÁöÁö´Â ¾Ê¾ÒÀ» °ÍÀÌ´Ù - »ç½Ç ÀÌ Ãë¾à¼ºÀÌ ¸¹ÀÌ ¾Ç¿ëµÇÁö ¾Ê¾ÒÀ½À» È®½ÅÇÒ ¾î¶°ÇÑ ¹æ¹ýµµ ¾ø´Ù. ¼Ò½º°¡ ¿ÀÇÂµÈ ÈÄ ¼Ò½º ÄÚµå´Â ¿©·¯¹ø °ËÅäµÇ¾úÀ¸¸ç Ãë¾à¼ºÀÌ ¹ß°ßµÇ¾î ¼öÁ¤µÇ¾úÀ½Àº ¸í¹éÇÏ´Ù. À̸¦ Ư¡Áþ´Â ÇѰ¡Áö ¹æ½ÄÀº ¿ø·¡ ÄÚµå´Â Ãë¾àÇß°í óÀ½ ¼Ò½º°¡ ¿ÀÇ嵃 ¶§ ÀÌ Ãë¾à¼ºÀ» ¾Ç¿ëÇÏ´Â °ÍÀº ´õ¿í ½¬¿üÁö¸¸ °á±¹ ÀÌ·¯ÇÑ Ãë¾à¼ºÀº ¼öÁ¤µÇ¾ú´Ù°í ¸»ÇÏ´Â °ÍÀÌ´Ù. ¼Ò½º Äڵ带 ¿ÀÇÂÇßÀ» ¶§ÀÇ ÀåÁ¡Àº °ø°ÝµÇ¾îÁö´Â ¼ÒÇÁÆ®¿þ¾î »Ó¸¸¾Æ´Ï¶ó Ãë¾à¼º Æò°¡ ½ºÄ³³Ê¿¡µµ È®ÀåµÈ´Ù. Ãë¾à¼º Æò°¡ ½ºÄ³³Ê´Â ¼³Á¤µÈ ½Ã½ºÅÛ¿¡¼ ÀǵµÀûÀ¸·Î Ãë¾à¼ºÀ» ã¾Æ³½´Ù. ÃÖ±ÙÀÇ Network Computing ÀÇ Æò°¡´Â °¡Àå ¿ì¼öÇÑ ½ºÄ³³Ê (´Ù¸¥ ¹«¾ùº¸´Ù °¡Àå ±ÔÄ¢¿¡ ¸Â´Â Ãë¾à¼ºÀ» ¹ß°ßÇß´Ù) ´Â ¿ÀÇ ¼Ò½º ½ºÄ³³Ê ÀÎ Nessus ÀÓÀ» ¾Ë¾Æ³Â´Ù [Forristal 2001]. ±×·¡¼ ÃÖÁ¾ °á°ú´Â ¹«¾ùÀΰ¡? ÀúÀÚ´Â °³ÀÎÀûÀ¸·Î ÇÁ·Î±×·¥ÀÇ ¼Ò½º°¡ óÀ½ ¿ÀÇ嵃 ¶§ Á¾Á¾ Ãë¾à¼ºÀÌ ³ëÃâµÇ¾î ¸ðµç »ç¿ëÀÚ¿¡ ´ëÇØ ´ú º¸¾ÈÀûÀ¸·Î ½ÃÀÛÇÏÁö¸¸ ½Ã°£ÀÌ Áö³ÈÄ (°¡·É ¸î³âÈÄ) ¿¡´Â ºñ°ø°³ ÇÁ·Î±×·¥º¸´Ù ´õ¿í º¸¾ÈÀûÀ¸·Î µÉ °¡´É¼ºÀ» °®´Â´Ù°í ¹Ï°í ÀÖ´Ù. ´ÜÁö ÇÁ·Î±×·¥ÀÇ ¼Ò½º¸¦ ¿ÀÇÂÇÏ´Â °ÍÀÌ °©ÀÚ±â ÇÁ·Î±×·¥À» º¸¾ÈÀûÀ¸·Î ¸¸µå´Â °ÍÀº ¾Æ´Ï¸ç ¿ÀÇ ¼Ò½º ÇÁ·Î±×·¥À» º¸¾ÈÀûÀ¸·Î ¸¸µç´Â °ÍÀº º¸ÁõµÇÁö ¾Ê´Â´Ù:
¿ÀÇ ¼Ò½ºÀÇ ´Ù¸¥ ÀåÁ¡Àº ¹®Á¦Á¡À» ¹ß°ßÇÏ´Â °æ¿ì Áï½Ã À̸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¿ä¾àÇÏ¸é ¿ÀÇ ¼Ò½º ¼ÒÇÁÆ®¿þ¾î°¡ º¸¾È¿¡ ¹ÌÄ¡´Â ¿µÇâÀº ¸¹Àº Ź¿ùÇÑ Àü¹®°¡µéÀÌ ´õ¿í º¸¾ÈÀûÀÌ µÉ °¡´É¼ºÀÌ ÀÖ´Ù°í ¹Ï°í ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í º¸¾È °øµ¿Ã¼¿¡¼ ¾ÆÁ÷µµ ÁÖµÈ ³íÀÇ ´ë»óÀ̶ó´Â °ÍÀÌ´Ù. 2.5. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ ŸÀÔ¸¹Àº ¿©·¯°¡Áö ŸÀÔÀÇ ÇÁ·Î±×·¥µéÀÌ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ (ÀÌ Ã¥¿¡ Á¤ÀÇµÈ ¹Ù¿Í °°ÀÌ) ÀÏ Çʿ䰡 ÀÖÀ» ¼ö Àִµ¥ ¾à°£ÀÇ °øÅëµÈ ŸÀÔÀº ´ÙÀ½°ú °°´Ù:
ÀÌ Ã¥Àº ÀÌ·¯ÇÑ ¿©·¯°¡Áö ŸÀÔÀÇ ÇÁ·Î±×·¥µéÀÇ ¹®Á¦µéÀ» ÇϳªÀÇ ÁýÇÕÀ¸·Î º´ÇÕÇÑ´Ù. ÀÌ ¹æ¹ýÀÇ ´ÜÁ¡Àº ¿©±â¼ È®ÀÎµÈ ¹®Á¦µéÁß ÀϺΰ¡ ¸ðµç ÇÁ·Î±×·¥ ŸÀÔ¿¡ Àû¿ëµÇÁö ¾Ê´Â´Ù´Â °ÍÀε¥ ƯÈ÷, setuid/setgid ÇÁ·Î±×·¥Àº ¸¹Àº ¿¹±âÄ¡ ¾ÊÀº ÀԷµéÀ» °®À¸¸ç ÀÌ Ã¥ÀÇ ÁöħµéÁß ¸î¸î¸¸ÀÌ ÀÌ¿¡ Àû¿ëµÈ´Ù. ±×·¯³ª °¢°¢ÀÇ ÇÁ·Î±×·¥ÀÌ ÀÌ·¯ÇÑ °æ°èµéÀ» °¡·ÎÁö¸¦ ¼öµµ ÀÖ°í (¿¹, CGI ½ºÅ©¸³Æ®°¡ setuid/setgid ÀÏ ¼öµµ ÀÖÀ¸¸ç ¶ÇÇÑ µ¿ÀÏÇÑ È¿°ú¸¦ °®´Â ¹æ½ÄÀ¸·Î ¼³Á¤µÉ ¼öµµ ÀÖ´Ù) ¾î¶² ÇÁ·Î±×·¥µéÀº ´Ù¸¥ ŸÀÔÀÇ ÇÁ·Î±×·¥À¸·Î °í·ÁµÉ ¼ö ÀÖ´Â ¸î¸î ½ÇÇà ÆÄÀÏ·Î ³ª´©¾îÁú ¼öµµ Àֱ⠶§¹®¿¡ ºÐ¸íÇÑ °ÍÀº ¾Æ´Ï´Ù. ÀÌ·¯ÇÑ ÇÁ·Î±×·¥ ŸÀÔ ¸ðµÎ¸¦ ÇѲ¨¹ø¿¡ °í·ÁÇϴµ¥ ÀÖ¾î ÀåÁ¡Àº ÇÁ·Î±×·¥¿¡ ºÎÀûÀýÇÑ ¹üÁÖ¸¦ Àû¿ëÇÏ·Á ÇÏÁö ¾Ê°í ¸ðµç ¹®Á¦¸¦ °í·ÁÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ÃßÈÄ º¼ °ÍÀÌÁö¸¸ ¿ø¸®µéÀÇ ¸¹Àº ºÎºÐÀÌ ¾ÈÀüÇÏ°Ô µÉ Çʿ䰡 ÀÖ´Â ¸ðµç ÇÁ·Î±×·¥¿¡ Àû¿ëµÈ´Ù. ÀÌ Ã¥Àº C++, ÆÞ, PHP, ÆÄÀ̽ã, Ada95 ¿Í ÀÚ¹Ù¿Í °°Àº ´Ù¸¥ ¾ð¾îµé¿¡ ´ëÇØ ¾à°£ ¾ð±ÞÇϸç ÁÖ·Î C ·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥¿¡ ´ëÇØ ´Ù·é´Ù. ÀÌ´Â C °¡ À¯´Ð½º °è¿ ½Ã½ºÅÛ (CGI ½ºÅ©¸³Æ®À̿ܿ¡ ÆÞ, PHP, ÆÄÀ̽ãÀ» À» »ç¿ëÇÏ´Â °æÇâÀÌ ÀÖ´Ù) ¿¡¼ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ±¸ÇöÇÏ´Â °¡Àå º¸ÆíÀûÀÎ ¾ð¾îÀÌ°í ´ëºÎºÐÀÇ ´Ù¸¥ ¾ð¾îµéÀÇ ±¸ÇöÀÌ C ¶óÀ̺귯¸®¸¦ È£ÃâÇϱ⠶§¹®ÀÌ´Ù. ±×·¯³ª C °¡ º¸¾È ¸ñÀû¿¡ ¸Â´Â °¡Àå ÃÖ¼±ÀÇ ¾ð¾î¶ó´Â °ÍÀ» ÀǹÌÇÏÁö´Â ¾ÊÀ¸¸ç ÀÌ Ã¥¿¡ ±â¼úµÈ ¿ø¸®µéÁß ´ëºÎºÐÀº »ç¿ëµÈ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡ »ó°ü¾øÀÌ Àû¿ëµÈ´Ù. 2.6. ÆíÁýÁõÀº ¹Ì´öÀÌ´Ùº¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϴµ¥ ÀÖ¾î ±âº»ÀûÀÎ ¾î·Á¿òÀº ±×µéÀ» ÀÛ¼ºÇϱâ À§Çؼ´Â ´Ù¸¥ ¸¶À½ ÀÚ¼¼ ¿ä¾àÇÏ¸é ÆíÁý±¤ÀûÀÎ ¸¶À½ ÀÚ¼¼¸¦ °¡Á®¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ÀÌ´Â ¿¡·¯ (¶ÇÇÑ °áÇÔ ¶Ç´Â ¹ö±×¶ó°íµµ ºÎ¸¥´Ù) ÀÇ ¿µÇâÀÌ ¿ÏÀüÈ÷ ´Ù¸¦ ¼ö Àֱ⠶§¹®ÀÌ´Ù. º¸Åë º¸¾ÈÀûÀÌÁö ¸øÇÑ ÇÁ·Î±×·¥µéÀº ¸¹Àº ¿¡·¯µéÀ» °®°í ÀÖ´Ù. ÀÌ·¯ÇÑ ¿¡·¯µéÀº ¹Ù¶÷Á÷ÇÏÁö ¾ÊÁö¸¸ º¸Åë µå¹® ¶Ç´Â ÀÖÀ» ¹ýÇÏÁö ¾ÊÀº »óȲÀ» Æ÷ÇÔÇϰí Àִµ¥ »ç¿ëÀÚ°¡ ¿ì¿¬È÷ À̸¦ ¹ß°ßÇÑ´Ù¸é ÃßÈÄ¿¡´Â ±×·¯ÇÑ ¹æ½ÄÀ¸·Î µµ±¸¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸·Á°í ÇÒ °ÍÀÌ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥¿¡¼ »óȲÀº ¿ªÀüµÈ´Ù. ¾î¶² »ç¿ëÀÚµéÀº ÀڽŵéÀÌ ºÎ´çÇÑ ±ÇÇÑÀ» ¾òÀ» °ÍÀ̶ó´Â Èñ¸Á¾Æ·¡ ÀǵµÀûÀ¸·Î µå¹® ¶Ç´Â ÀÖÀ» ¹ý ÇÏÁö ¾ÊÀº »óȲÀ» ã°Å³ª ÀÏÀ¸Å³ °ÍÀÌ´Ù. µû¶ó¼ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ ÆíÁýÁõÀº ¹Ì´öÀÌ´Ù. 2.7. ÀÌ ¹®¼¸¦ ÀÛ¼ºÇÑ ÀÌÀ¯´Â?ÀúÀÚ°¡ ¹Þ¾Æ¿Â Áú¹®Àº "¿Ö ÀÌ Ã¥À» ½è´Â°¡? ÇÏ´Â °ÍÀε¥ ´ÙÀ½ÀÌ ÀúÀÚÀÇ ´äÀÌ´Ù: Áö³ ¸î³â°£¿¡ °ÉÃÄ ÀúÀÚ´Â ¸®´ª½º¿Í À¯´Ð½º °³¹ßÀÚµéÀÌ µÇÇ®ÀÌÇØ¼ °è¼ÓÀûÀ¸·Î µ¿ÀÏÇÑ º¸¾È À§Çè¿¡ ºüÁ®µå´Â °Í °°À½À» ¾Ë¾ÆÂ÷·È´Ù. °¨»çÀÚµéÀº ¹®Á¦Á¡µéÀ» ´À¸®°Ô ¹ß°ßÇϰí ÀÖ¾úÁö¸¸ ¹®Á¦Á¡µéÀÌ ¿ì¼± Äڵ峻¿¡ ³õÀÌÁö ¾Ê¾Ò´Ù¸é ´õ¿í ÁÁ¾ÒÀ» °ÍÀÌ´Ù. ÀúÀÚ´Â ¹®Á¦ÀÇ ÀϺΰ¡ °³¹ßÀÚµéÀÌ °¡¼ ¾Ë·ÁÁø À§ÇèµéÀ» ÇÇÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Â °øÅëÀÇ ¸í¹éÇÑ °ø°£ÀÌ ¾ø¾ú´Ù¶ó°í ¹Ï°í ÀÖ´Ù. Á¤º¸¸¦ °ø°³ÀûÀ¸·Î ¾òÀ» ¼ö ÀÖ¾úÁö¸¸ ´ë°³ ½Ã´ë¿¡ µÚÃÄÁ® ÀÖ°í ºÒ¿ÏÀüÇÏ¸ç ´Ù¸¥ ¹®Á¦µéÀ» °®°í ÀÖÀ½À» ¹ß°ßÇÏ´Â °ÍÀº ¾î·Á¿ü´Ù. ´ëºÎºÐÀÇ ±×·¯ÇÑ Á¤º¸´Â ¸®´ª½º°¡ ³Î¸® »ç¿ëµÇ°Ô µÇ¾úÀ½¿¡µµ ºÒ±¸ÇÏ°í Æ¯º°È÷ ¸®´ª½º¸¸À» ³íÀÇÇÏÁö ¾Ê¾Ò´Ù. ÀÌ·¯ÇÑ °ÍÀÌ ÀúÀÚÀÇ ´ä¿¡ ´ëÇÑ ½Ç¸¶¸®°¡ µÇ¾ú´Ù: ÀúÀÚ´Â Àå·¡ÀÇ ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚµéÀÌ °ú°ÅÀÇ À߸øÀ» µÇÇ®ÀÌÇÏÁö ¾ÊÀ» °ÍÀÌ¸ç °á°úÀûÀ¸·Î´Â ´õ¿í º¸¾ÈÀûÀÎ ½Ã½ºÅÛÀ» °³¹ßÇÒ °ÍÀ̶ó´Â Èñ¸ÁÀ» °®°í ÀÌ Ã¥À» ÀÛ¼ºÇß´Ù. http://www.linuxsecurity.com/feature_stories/feature_story-6.html ¿¡¼ ÀÌ¿¡ ´ëÇÑ ¸¹Àº ³íÀǸ¦ º¼ ¼ö ÀÖ´Ù. ´ë´äÇÒ ¼ö ÀÖ´Â °ü·Ã Áú¹®À¸·Î´Â ``´ÜÁö ´Ù¸¥ ¹®¼¸¦ ÂüÁ¶ÇÏ´Â ´ë½Å ¿Ö ´ç½Å ½º½º·Î Ã¥À» ½è´Â°¡?" ÇÏ´Â °ÍÀε¥ ÀÌ¿¡ ´ëÇÑ ¸î°¡Áö ´äº¯Àº ´ÙÀ½°ú °°´Ù:
2.8. ¼³°è¿Í ±¸Çö ÁöħÀÇ Ãâó¸î¸î ¹®¼µéÀº º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ ÀÛ¼º ¹æ¹ý (¶Ç´Â ´ë¾ÈÀ¸·Î ±âÁ¸ ÇÁ·Î±×·¥¿¡¼ º¸¾È ¹®Á¦µéÀ» ã´Â ¹æ¹ý) À» ±â¼úÇϴµ¥ µµ¿òÀÌ µÇ´Âµ¥ À̵éÀÌ ÀÌ Ã¥ÀÇ ³ª¸ÓÁöºÎºÐ¿¡¼ °Á¶µÈ Áöħµé¿¡ ±âÃʰ¡ µÇ¾ú´Ù. ¹ü¿ë ¼¹ö¿Í setuid/setgid ÇÁ·Î±×·¥ÀÇ °æ¿ì´Â ¸¹Àº °¡Ä¡ÀÖ´Â ¹®¼µéÀÌ ÀÖ´Ù. ¹°·Ð À̵鿡 ´ëÇÑ ÂüÁ¶¾øÀ̴ ã±â ¾î·Á¿î ¹®¼µéÀÌ´Ù. Matt Bishop [1996, 1997] Àº ÀÌ ÁÖÁ¦¿¡ ´ëÇØ ¸î¸îÀÇ Áö±ØÈ÷ °¡Ä¡ÀÖ´Â ³í¹®µé°ú ¹ßÇ¥µéÀ» ¹ßÇ¥ÇØ¿ÔÀ¸¸ç »ç½Ç ÀÌ ÁÖÁ¦¸¦ À§ÇÑ À¥ ÆäÀÌÁö http://olympus.cs.ucdavis.edu/~bishop/secprog.html ¸¦ °®°í ÀÖ´Ù. AUSCERT ´Â º¸¾ÈÀûÀÎ SUID ¹× ³×Æ®¿öÅ© ÇÁ·Î±×·¥ ÀÛ¼º ¹æ¹ýÀ» ³íÀÇÇÑ Garfinkel °ú Spafford ÀÇ Ã¥ [Garfinkel 1996] ÀÇ 23 ÀåÀÇ ºÎºÐÀûÀ¸·Î ±âÃÊÇÑ ÇÁ·Î±×·¡¹Ö üũ¸®½ºÆ® [AUSCERT 1996] ¸¦ °ø°³ÇÏ¿´´Ù. Galvin [1998a] Àº º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ °³¹ßÀ» À§ÇÑ °£´ÜÇÑ ÇÁ·Î¼¼½º¿Í üũ¸®½ºÆ®¸¦ ±â¼úÇߴµ¥ ³ªÁß¿¡ Galvin [1998b] ¿¡¼ üũ¸®½ºÆ®¸¦ °»½ÅÇß´Ù. Sitaker [1999] ´Â ``¸®´ª½º º¸¾È °¨»çÆÀ"ÀÌ Ã£¾Æ¾ß ÇÒ ¹®Á¦Á¡µéÀÇ ¸ñ·ÏÀ» Á¦ÃâÇϰí ÀÖ´Ù. Shostack [1999] ´Â º¸¾È¿¡ ¹Î°¨ÇÑ ÄÚµå °ËÅ並 À§ÇÑ ´Ù¸¥ üũ¸®½ºÆ®¸¦ Á¤ÀÇÇϰí ÀÖ´Ù. NCSA [NCSA] ´Â ÀÏ·ÃÀÇ °£°áÇÏÁö¸¸ À¯¿ëÇÑ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¡¹Ö ÁöħµéÀ» Á¦°øÇϰí ÀÖ´Ù. ´Ù¸¥ À¯¿ëÇÑ Á¤º¸ÀÇ ÃâóµéÀº Secure Unix Programming FAQ [Al-Herbish 1999], Security-Audit's Frequently Asked Questions [Graham 1999]¿Í Ranum [1998] µéÀÌ ÀÖ´Ù. ¾à°£ÀÇ ±Ç°í¾ÈµéÀº ÁÖÀǸ¦ °®°í ¹Þ¾Æµé¿©¾ß Çϴµ¥ ¿¹¸¦ µé¾î BSD ÀÇ setuid(7) ¸ÇÆäÀÌÁö [Unknown] ´Â º¸Åë ¼ö¹ÝµÇ´Â °æÀï »óÅ (race conditions) ¸¦ ¾ð±ÞÇÏÁö ¾Ê°í¼ access(3) ÀÇ »ç¿ëÀ» ÃßõÇϰí ÀÖ´Ù. Wood [1985] ´Â ``Security for Programmers" Àå¿¡¼ ¾à°£ À¯¿ëÇÏÁö¸¸ ¿À·¡µÈ Ãæ°í¸¦ Çϰí ÀÖ´Ù. [Bellovin 1994] ´Â ftpd ±¸ÇöÀ» ¾î¶»°Ô ´õ¿í °£´ÜÇÏ°í º¸¾ÈÀûÀ¸·Î À籸ÃàÇÏ´Â °¡¿Í °°Àº À¯¿ëÇÑ Áöħµé°ú ¾à°£ÀÇ Æ¯Á¤ ¿¹¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù. FreeBSD ´Â ¾à°£ÀÇ ÁöħµéÀ» Á¦°øÇϰí ÀÖ´Ù FreeBSD [1999]. [Quintero 1999] ´Â ±âº»ÀûÀ¸·Î GNOME ÇÁ·Î±×·¡¹Ö Áöħ¿¡ °ü½ÉÀÌ ÀÖÁö¸¸ º¸¾È °í·Á¿¡ ´ëÇÑ ÀýÀ» Æ÷ÇÔÇϰí ÀÖ´Ù. [Venema 1996] ´Â º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ ¾à°£ÀÇ °øÅëÀûÀÎ ¿¡·¯µé¿¡ ´ëÇÑ ¼¼ºÎÀûÀÎ ³íÀǸ¦ ¿¹¿Í ÇÔ²² Á¦°øÇϰí ÀÖ´Ù (³Î¸® ¾Ë·ÁÁø ¶Ç´Â ¿¹Ãø°¡´ÉÇÑ ÆÐ½º¿öµå, ¾ÇÀÇÀÖ´Â µ¥ÀÌŸ¿¡ ¼Ó¾Æ³Ñ¾î°¡±â, »ç¿ëÀÚ°¡ Á¢±Ù°¡´ÉÇÑ µ¥ÀÌŸ¿¡¼ÀÇ ºñ¹Ð°ú ´Ù¸¥ ÇÁ·Î±×·¥¿¡ ÀÇÁ¸Çϱâ). [Sibert 1996] ´Â ¾ÇÀÇÀÖ´Â µ¥ÀÌŸ·ÎºÎÅÍ »ý±â´Â À§ÇùµéÀ» ±â¼úÇϰí ÀÖ´Ù. À¥À» ¹æÇØÇÏ´Â CGI (Common Gateway Interface) ¸¦ »ç¿ëÇÑ ÇÁ·Î±×·¥µé¿¡ ´ëÇÑ º¸¾È ÁöħµéÀ» Á¦°øÇÏ´Â ¸¹Àº ¹®¼µéÀÌ ÀÖ´Ù. À̵éÀº Van Biesbrouck [1996], Gundavaram [unknown], [Garfinkel 1997], Kim [1996], Phillips [1995] Stein [1999], [Peteanu 2000] ¿Í [Advosys 2000] µéÀ» Æ÷ÇÔÇÑ´Ù. ¾ð¾î¿¡ °íÀ¯ÇÑ ¸¹Àº ¹®¼µéµµ Àִµ¥ ÀÌ´Â ÀÌ Ã¥ÀÇ ¾ð¾î¿¡ ƯÁ¤ÀûÀÎ Àý¿¡¼ ´õ¿í ³íÀǵȴÙ. ¿¹¸¦ µé¾î ÆÞ ¹èÆ÷ÆÇÀº perlsec(1) À» Æ÷ÇÔÇϴµ¥ ÀÌ´Â ÆÞÀ» ´õ¿í º¸¾ÈÀûÀ¸·Î »ç¿ëÇÏ´Â ¹æ¹ýÀ» ±â¼úÇϰí ÀÖ´Ù. Secure Internet Programming »çÀÌÆ®ÀÎ http://www.cs.princeton.edu/sip ´Â ÀϹÝÀûÀÎ º¸¾È ÄÄÇ»ÅÍ º¸¾È ¹®Á¦¿¡ °ü°èµÇ¾î ÀÖÁö¸¸ ÀÚ¹Ù, ¾×ƼºêX (ActiveX) ¿Í ÀÚ¹Ù½ºÅ©¸³Æ®¿Í °°Àº ¸ð¹ÙÀÏ ÄÚµå ½Ã½ºÅÛ¿¡µµ ÁßÁ¡À» µÎ°í ÀÖ´Ù; Ed Felten Àº 9.6절 ¿¡¼ ³íÀǵǴ ÀÚ¹Ù¸¦ ¾ÈÀüÇÏ°Ô Çϱâ ([McGraw 1999]) ¿¡ ´ëÇÑ Ã¥À» °øµ¿ ÀÛ¼ºÇß´Ù. ½ã»çÀÇ º¸¾È ÄÚµå ÁöħµéÀº º»ÁúÀûÀ¸·Î ÀÚ¹Ù¿Í C ¿¡ ´ëÇÑ ¾à°£ÀÇ ÁöħµéÀ» Á¦°øÇϰí Àִµ¥ ÀÌ´Â http://java.sun.com/security/seccodeguide.html ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. Yoder [1998] Àº ¾ÖÇø®ÄÉÀÌ¼Ç º¸¾ÈÀ» ´Ù·ê ¶§ »ç¿ëµÇ´Â ÆÐÅϵéÀÇ ÁýÇÕÀ» Æ÷ÇÔÇϰí Àִµ¥ ÀÌ´Â ½ÇÁ¦ ÀÏ·ÃÀÇ Æ¯º°ÇÑ ÁöħÀ̶ó±â º¸´Ù´Â ÇÁ·Î±×·¡¹ÖÀ» À§ÇØ À¯¿ëÇÏ´Ù°í »ý°¢µÉ ¼ö ÀÖ´Â °øÅëÀûÀ¸·Î »ç¿ëµÇ´Â ÀÏ·ÃÀÇ ÆÐÅϵéÀÌ´Ù. Schmoo ±×·ìÀº http://www.shmoo.com/securecode ¿¡ º¸¾ÈÀûÀÎ ÄÚµå ÀÛ¼º ¹æ¹ý¿¡ ´ëÇÑ Á¤º¸¸¦ ¸µÅ©Çϰí ÀÖ´Â À¥ ÆäÀÌÁö¸¦ °ü¸®Çϰí ÀÖ´Ù. ´Ù¸¥ °üÁ¡ (¿¹ ½Ã½ºÅÛÀ» Å©·¢ÇÏ´Â ¹æ¹ý) ¿¡¼ ¹®Á¦Á¡µéÀ» ±â¼úÇϰí ÀÖ´Â ¸¹Àº ¹®¼µéÀÌ ÀÖ´Ù. ÇÑ ¿¹´Â McClure [1999] ·Î ÀÎÅͳݿ¡´Â ÀÌ ÀÔÀåÀ¸·Î ¹Ù¶ó º» ¼¿ ¼ö ¾øÀ» ¸¸Å ¸¹Àº ÀÚ·áµéÀÌ ÀÖ´Ù. ÄÄÇ»ÅÍ ¾ÆÅ°ÅØÃĸ¦ ¾Ç¿ëÇϱâ À§ÇØ ¾î¶² °ø°ÝÀ» ÇØ¾ßÇÏ´Â °¡¿¡ ´ëÇØ ÄÄÇ»ÅÍ ¾ÆÅ°ÅØÃ³¿¡ °üÇÑ ´õ¿í ÀϹÝÀûÀÎ ¹®¼µµ ÀÖ´Ù (¿¹, [LSD 2001]). Honeynet ÇÁ·ÎÁ§Æ®´Â °ø°ÝÀÚ°¡ ½ÇÁ¦ ¾î¶² °ø°ÝÀ» ¼öÇàÇÏ´Â °¡¿¡ ´ëÇÑ Á¤º¸¸¦ ¼öÁýÇØ ¿Ô´Ù; ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â À¥ »çÀÌÆ® http://project.honeynet.org ¸¦ º¸¶ó. ¶ÇÇÑ ±âÁ¸ ÇÁ·Î±×·¥¿¡¼ ÀÌ¹Ì È®ÀÎµÈ Ãë¾à¼º¿¡ ´ëÇÑ ¸¹Àº Á¤º¸µéµµ ÀÖ´Ù. ÀÌ´Â ¸¹Àº ƯÁ¤ ¿¹µé·ÎºÎÅÍ ´õ¿í ÀϹÝÀûÀÎ ÁöħµéÀ» ÃßÃâÇϴµ¥ ¸¹Àº ³ë·ÂÀÌ µé¾î°¨¿¡µµ ºÒ±¸Çϰí ``ÇÏÁö ¸»¾Æ¾ß ÇÒ °Í"¿¡ ´ëÇÑ ÀÏ·ÃÀÇ À¯¿ëÇÑ ¿¹µéÀÏ ¼ö ÀÖ´Ù. º¸¾È ÀïÁ¡µéÀ» ³íÀÇÇÏ´Â ¸ÞÀϸµ ¸®½ºÆ®µéµµ ÀÖ´Ù; °¡Àå ³Î¸® ¾Ë·ÁÁø °Í ÁßÀÇ Çϳª´Â Bugtraq À¸·Î ¹«¾ùº¸´Ùµµ Ãë¾à¼º ¸ñ·ÏÀ» ¹ßÀü½Ã۰í ÀÖ´Ù. CERT Coordination Center (CERT/CC) ´Â ÀÎÅÍ³Ý º¸¾È ¹®Á¦µé¿¡ ´ëÇØ Ãë¾à¼ºÀ» º¸°íÇÏ´Â ÁÖ¿ä º¸°í ¼¾ÅÍ·Î °¡²û ÆÐÄ¡ ¶Ç´Â Âø¼öÇÑ ÀÛ¾÷ÀÇ ¼¼ºÎ»çÇ×µéÀ» ¾ò´Â ¹æ¹ý¿¡ ´ëÇÑ Áö½Ã¿Í ÇÔ²² ½É°¢ÇÑ º¸¾È ¹®Á¦¿Í ÀÌÀÇ ¿µÇâÀ» ¼³¸íÇÏ´Â ±Ç°í¾ÈÀ» ³»³õ°í ÀÖ´Ù; ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â http://www.cert.org/ ¸¦ º¸¶ó. ¿ø·¡ CERT ´Â ¼Ò±Ô¸ð ÄÄÇ»ÅÍ ÀÀ±Þ ´ëÃ¥ÆÀÀ̾úÁö¸¸ °ø½ÄÀûÀ¸·Î CERT ´Â ÇöÀç À̸¦ ÀǹÌÇÏÁö ¾ÊÀ½À» ÁÖ¸ñÇØ¶ó. ³ëµ¿ºÎ (Department of Energy, ¿¡³ÊÁöºÎ) ÀÇ Computer Incident Advisory Capability (CIAC) µµ ¶ÇÇÑ Ãë¾à¼ºÀ» º¸°íÇϰí ÀÖ´Ù. ÀÌ·¯ÇÑ ¿©·¯ ±×·ìµéÀº µ¿ÀÏÇÑ Ãë¾à¼ºÀ» ½Äº°ÇÒ ¼öµµ ÀÖÁö¸¸ ´Ù¸¥ À̸§À» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ MITRE ´Â ¸ðµç °ø°³ÀûÀ¸·Î ¾Ë·ÁÁø Ãë¾à¼º°ú ´Ù¸¥ »ç¶÷¿¡ ÀÇÇØ È®ÀÎµÈ º¸¾È Àû¹ß (exposure) ¿¡ ´ëÇØ À¯ÀÏÇÑ °íÀ¯ ½Äº°ÀÚ (``À̸§") ¸¦ ¸¸µå´Â CVE (Common Vulnerabilities and Exposures) ¸ñ·ÏÀ» ÁöÁöÇϰí ÀÖ´Ù; http://www.cve.mitre.org/ ¸¦ º¸¶ó. NIST ÀÇ ICAT ´Â °Ë»ö°¡´ÉÇÑ ÄÄÇ»ÅÍ Ãë¾à¼ºµéÀÇ ¸ñ·ÏÀ¸·Î °¢ CVE Ãë¾à¼ºÀ» °®°í À̵鿡 ´ëÇÑ ¸ñ·ÏÀ» ÀÛ¼ºÇÔÀ¸·Î½á ³ªÁß¿¡ °Ë»ö ¹× ºñ±³µÉ ¼ö ÀÖµµ·Ï ÇÑ´Ù; http://csrc.nist.gov/icat ¸¦ º¸¶ó. ÀÌ Ã¥Àº ÀúÀÚ°¡ ¹Ï±â¿¡ °¡Àå À¯¿ëÇϰí Áß¿äÇÑ ÁöħµéÀÇ ¿ä¾ÇÀÌ´Ù; ÀúÀÚÀÇ ¸ñÀûÀº ÈǸ¢ÇÑ ÇÁ·Î±×·¡¸Ó°¡ ±×Àú ÀÌ Ã¥À» ÀÐÀº ÈÄ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ±¸ÇöÇϴµ¥ Àß Áغñ°¡ µÇ¾î ÀÖµµ·Ï Çϴµ¥ ÀÖ´Ù. ¾î¶°ÇÑ ÇϳªÀÇ ¹®¼µµ ½ÇÁ¦ ÀÌ ¸ñÀûÀ» ÃæÁ·½Ãų ¼ö´Â ¾øÁö¸¸ ÀúÀÚ´Â ½ÃµµÇÒ ¸¸ÇÑ´Ù°í ¹Ï´Â´Ù. ÀúÀÚÀÇ ¸ñÀûÀº ``ÀÚÁÖ µÇÇ®À̵ǰí ÀÌÇØÇϱ⠾î·Á¿î ¸ðµç °¡´ÉÇÑ ÁöħµéÀÇ ¿Ïº®ÇÑ ¸ñ·Ï"°ú ``ÈǸ¢Çϰí ªÁö¸¸ ¸¹Àº Áß´ëÇÑ ¹®Á¦µéÀ» »ý·«ÇÑ ¿Â¶óÀλ󿡼 ¾òÀ» ¼ö ÀÖ´Â ¸¹Àº ªÀº ¸ñ·Ï"»çÀÌÀÇ ±ÕÇü¿¡ µµ´ÞÇÏ´Â °ÍÀÌ´Ù. ºÒÈ®½ÇÇÒ ¶§´Â º»º¸±â¸¦ Æ÷ÇÔÇÑ´Ù; ÀúÀÚ´Â ±×·± °æ¿ì ÀÌ ``one stop shop" ¹®¼³»¿¡¼ ¸ðµç »ç¶÷¿¡°Ô µµ¿òÀÌ µÇ´Â Á¤º¸¸¦ ¸¸µå´Â °ÍÀÌ °¡Àå ÁÁ´Ù°í ¹Ï°í ÀÖ´Ù. ÀÌ Ã¥Àº ÀúÀÚ ½º½º·Î ±¸¼ºÇÑ °ÍÀ¸·Î (¸ðµç ¸®½ºÆ®´Â ÀڽŸ¸ÀÇ ´Ù¸¥ ±¸Á¶¸¦ °®´Â´Ù) ÁöħµéÀÇ ÀϺΠ(´É·Âµé°ú fsuid °ª¿¡ ´ëÇÑ °Íµé°ú °°Àº ƯÈ÷ ¸®´ª½º °íÀ¯ÀÇ °Íµé) µµ ½º½º·Î ¸¸µç °ÍÀÌ´Ù. À§¿¡ ¿°ÅµÈ ¸ðµç ÂüÁ¶µÈ ¹®¼µéÀ» Àд °Í ¶ÇÇÑ °·ÂÈ÷ ÃßõÇÑ´Ù. 2.9. º¸¾È Á¤º¸ÀÇ ´Ù¸¥ Ãâóµéº¸¾È ÀïÁ¡µé¸¸À» À§ÇÑ ¸Å¿ì ¸¹Àº À¥ »çÀÌÆ®µé°ú ¸ÞÀϸµ ¸®½ºÆ®µéÀÌ Àִµ¥ ´ÙÀ½Àº º¸¾È Á¤º¸ÀÇ ¾à°£ÀÇ ´Ù¸¥ ÃâóµéÀÌ´Ù:
¹°·Ð ƯÁ¤ ½Ã½ºÅÛÀ» ¾ÈÀüÇÏ°Ô ÇÏ·Á¸é ±×µéÀÇ º¸¾È ¸ÞÀϸµ ¸®½ºÆ®¿¡ ¼¸í (¸¶ÀÌÅ©·Î¼ÒÇÁÆ®, ·¹µåÇÞ µî) ÇØ¾ß ÇÏ¸ç ±× ÈÄ ¸ðµç º¸¾È °»½ÅµéÀ» ÅëÁö¹ÞÀ» ¼ö ÀÖ´Ù. 2.10. ¹®¼ °üÇà½Ã½ºÅÛ ¸Þ´º¾ó ÆäÀÌÁöµéÀº name(number) ·Î ÂüÁ¶µÇ´Âµ¥ number ´Â ¸Þ´º¾óÀÇ Àý ¼ýÀÚÀÌ´Ù. ``´Ù¸¥ ¾î´À °÷µµ °¡¸®Å°Áö ¾ÊÀ½"À» ÀǹÌÇÏ´Â Æ÷ÀÎÅÍ °ªÀº NULL ·Î ºÎ¸¥´Ù; C ÄÄÆÄÀÏ·¯µéÀº Á¤¼ö 0 À» Æ÷ÀÎÅͰ¡ ÇÊ¿äÇÑ ´ëºÎºÐÀÇ °æ¿ì NULL °ªÀ¸·Î º¯È¯ÇÒ °ÍÀÌ´Ù. ±×·¯³ª C Ç¥ÁØÀÇ ¾î¶² °Íµµ NULL ÀÌ ÀÏ·ÃÀÇ ¸ðµÎ°¡ 0 ÀÎ ºñÆ®¿¡ ÀÇÇØ ±¸ÇöµÇ¾î¾ß ÇÔÀ» ¿ä±¸ÇÏÁö ¾ÊÀ½À» ÁÖ¸ñÇØ¶ó. C ¿Í C++ Àº '\0' (¾Æ½ºÅ° 0) À» Ưº°È÷ Ãë±ÞÇϴµ¥ ÀÌ Ã¥¿¡¼ ÀÌ °ªÀº NIL (º¸Åë ``NUL" ·Î ºÎ¸£Áö¸¸ ``NUL" °ú ``NULL" Àº µ¿ÀÏÇØ º¸ÀδÙ) ·Î °£ÁֵȴÙ. ÇÔ¼ö¿Í ¸Þ½îµå À̸§µéÀº ´Ã Á¤È®ÇÏ°Ô ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇØ¾ß Çϴµ¥ À̰ÍÀÌ ¾î¶² ¹®ÀåµéÀÌ ¼Ò¹®ÀÚ·Î ½ÃÀÛÇØ¾ß ÇÔÀ» ÀǹÌÇØµµ ¸¶Âù°¡ÁöÀÌ´Ù. ÀúÀÚ´Â À¯´Ð½º, ¸®´ª½º ¶Ç´Â ±âº» ¸ðµ¨µéÀÌ À¯´Ð½º¿Í ¸Å¿ì À¯»çÇÑ ´Ù¸¥ ½Ã½ºÅÛµéÀ» ÀǹÌÇϱâ À§ÇØ ``À¯´Ð½º °è¿ (Unix-like)" À̶ó´Â ¿ë¾î¸¦ »ç¿ëÇÑ´Ù; ÀúÀÚ´Â POSIX ÀÇ ÀϺκÐÀ» ±¸ÇöÇϰí ÀÖÁö¸¸ ¸Å¿ì ´Ù¸¥ º¸¾È ¸ðµ¨À» °®´Â À©µµ¿ì 2000 °ú °°Àº ½Ã½ºÅÛµéÀÌ Àֱ⠶§¹®¿¡ POSIX ¸¦ ¸»ÇÒ ¼ö´Â ¾ø´Ù. °ø°ÝÀÚ´Â ``attacker", ``cracker" ¶Ç´Â ``adversary" ·Î ºÎ¸¥´Ù. ¾î¶² Àú³Î¸®½ºÆ®µéÀº ``attacker" ´ë½Å ``ÇØÄ¿ (hacker)" ¸¦ »ç¿ëÇϴµ¥ ¸¹Àº ¸®´ª½º¿Í À¯´Ð½º °³¹ßÀÚµéÀÌ ÀüÅëÀûÀ¸·Î ¾ÇÇÏÁö ¾ÊÀº Àǹ̷Π±×µé ÀÚ½ÅÀ» ``ÇØÄ¿"¶ó°í Çϱ⠶§¹®¿¡ ÀÌ Ã¥¿¡¼´Â ÀÌ·¯ÇÑ (¿À)»ç¿ëÀ» ÇÇÇÑ´Ù. Áï, ¸¹Àº ¸®´ª½º¿Í À¯´Ð½º °³¹ßÀڵ鿡°Ô ``ÇØÄ¿"¶ó´Â ¿ë¾î´Â ƯÈ÷ ÄÄÇ»ÅÍ¿Í °ü·ÃÇÏ¿© °è¼ÓÇØ¼ ´Ü¼øÈ÷ Àü¹®°¡ ¶Ç´Â ¿±¤ÆÒÀ» ÀǹÌÇÑ´Ù. 3장. ¸®´ª½º ¹× À¯´Ð½º º¸¾È Ư¡µéÀÇ ¿ä¾à
¸®´ª½º ¶Ç´Â À¯´Ð½º º¸¾È Ư¡µéÀÇ »ç¿ë ¹æ¹ý¿¡ ´ëÇÑ ÁöħÀ» ³íÀÇÇϱâ Àü¿¡ ÇÁ·Î±×·¡¸ÓÀÇ °üÁ¡¿¡¼ º¸¾ÒÀ» ¶§ ±×·¯ÇÑ Æ¯Â¡µéÀÌ ¹«¾ùÀΰ¡¸¦ ¾Æ´Â °ÍÀº À¯¿ëÇÏ´Ù. ÀÌ Àý¿¡¼´Â °ÅÀÇ ¸ðµç À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼ ³Î¸® »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÌ·¯ÇÑ Æ¯Â¡µéÀ» °£·«È÷ ±â¼úÇÑ´Ù. ±×·¯³ª À¯´Ð½º °è¿ ½Ã½ºÅÛÀÇ ¿©·¯ ¹öÀü°£¿¡´Â »ó´çÇÑ º¯µ¿ÀÌ ÀÖÀ¸¸ç ¸ðµç ½Ã½ºÅÛÀÌ ¿©±â¼ ±â¼úÇÑ ´É·ÂÀ» °®Áö ¾ÊÀ½À» ÁÖ¸ñÇØ¶ó. ÀÌ ÀåÀº ¶ÇÇÑ ¸®´ª½º¿¡ ´ëÇÑ ¾à°£ÀÇ È®Àåµé ¶Ç´Â ¸®´ª½º °íÀ¯ÀÇ Æ¯Â¡µéÀ» ƯÈ÷ ¾ð±ÞÇÑ´Ù; ¸®´ª½º ¹èÆ÷ÆÇµéÀº ¸ðµÎ º»ÁúÀûÀ¸·Î µ¿ÀÏÇÑ Ä¿³Î ¹× C ¶óÀ̺귯¸® (GPL ¿¡ ±âÃÊÇÑ ¶óÀ̼¾½ºµéÀº »õ·Ó°Ô º¯°æµÈ ¾î¶°ÇÑ »çÇ׵鵵 ºü¸£°Ô º¸±ÞµÉ ¼ö ÀÖµµ·Ï Àå·ÁÇÑ´Ù) ¸¦ »ç¿ëÇϱ⠶§¹®¿¡ º¸¾È¿¡ ´ëÇØ ÇÁ·Î±×·¡¹Ö °üÁ¡¿¡¼ º¸¾ÒÀ» ¶§ °¢°¢Àº »ó´çÈ÷ À¯»çÇÑ °æÇâÀÌ ÀÖ´Ù. ¶ÇÇÑ ¿©·¯°¡Áö À¯´Ð½º ±¸Çö»çÀÌ¿¡´Â º¸¾È°ú °ü·ÃÇØ¼ ¾à°£ÀÇ Â÷À̸¦ ¾ð±ÞÇÏÁö¸¸ À̰ÍÀÌ ¿ÏÀüÇÑ ¸ñ·ÏÀÌ ¾Æ´ÔÀ» ÁÖ¸ñÇϱ⠹ٶõ´Ù. ÀÌ Àå¿¡¼´Â ¸¹Àº À¯´Ð½º °è¿ ½Ã½ºÅÛµéÀÌ ±¸ÇöÇÏÁö ¾ÊÀº MAC (Mandatory Access Control) °°Àº ÀïÁ¡µéÀº ³íÀÇÇÏÁö ¾Ê´Â´Ù. ÀÌ·¯ÇÑ Æ¯Â¡µéÀÌ ¹«¾ùÀÎÁö ¾Ë°í ÀÖ´Ù¸é ÀÌ ÀýÀ» °Ç³Ê¶Ù¾î Àо ¹«¹æÇÏ´Ù. ¸¹Àº ÇÁ·Î±×·¡¹Ö ÁöħµéÀº ¸®´ª½º ¶Ç´Â À¯´Ð½ºÀÇ º¸¾È °ü·Ã ºÎºÐÀ» °£·«ÇÏ°Ô ´ëÃæ ´Ù·ç¸ç Áß¿äÇÑ Á¤º¸¸¦ °Ç³Ê¶Ù´Âµ¥ ƯÈ÷ ÀÌ·¯ÇÑ ÁöħµéÀº ´ë°³ ÀϹÝÀûÀÎ ¸»Åõ·Î ``»ç¿ë ¹æ¹ý"À» ³íÀÇÇÏ¸ç »ç¿ë¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â º¸¾È ¼Ó¼º¿¡ °üÇØ¼´Â ¾ó¹ö¹«¸°´Ù. À̿ʹ ¹Ý´ë·Î ¸Þ´º¾ó ÆäÀÌÁö¿¡´Â °³º°ÀûÀÎ ±â´É¿¡ ´ëÇÑ »ó´çÇÑ ¾çÀÇ ¼¼ºÎ Á¤º¸°¡ ÀÖÁö¸¸ °¢°¢ÀÇ °³º°Àû ±â´ÉÀÇ »ç¿ë ¹æ¹ý¿¡ °üÇÑ ¼¼ºÎ ³íÀÇ·Î ÀÎÇØ ¶§¶§·Î ÁÖ¿äÇÑ º¸¾È ÀïÁ¡µéÀ» ÀÌÇØÇÏ±â ¾î·Æ°Ô ÇÑ´Ù. ÀÌ ÀýÀº ÇÁ·Î±×·¡¸Ó°¡ »ç¿ëÇÒ °Í°°Àº ¸®´ª½º º¸¾È ¸ÞÄ«´ÏÁòÀ» °³·«ÀûÀ¸·Î ±×·¯³ª º¸¾È °ü·Ã ¹®Á¦¿¡ ƯÈ÷ ÁßÁ¡À» µÎ¾î ±â¼úÇÔÀ¸·Î½á ÀÌ·¯ÇÑ °£°ÝÀ» Á¼È÷°íÀÚ ÇÑ´Ù. ÀÌ ÀýÀº ¸íÈ®ÇÏ°Ô º¸¾È °ü·Ã ¹®Á¦¿¡ ÁßÁ¡À» µÒÀ¸·Î½á ÀϹÝÀûÀÎ ÇÁ·Î±×·¡¹Ö Áöħº¸´Ù º¸´Ù ±íÀ̸¦ °®À¸¸ç ´õ¿í ¼¼ºÎÀûÀÎ °ÍÀ» ¾òÀ» ¼ö ÀÖ´Â Âü°í¹®ÇåµéÀ» ÁöÀûÇÑ´Ù. ¿ì¼± ±âº». ¸®´ª½º¿Í À¯´Ð½º´Â ±Ùº»ÀûÀ¸·Î Ä¿³Î°ú ``»ç¿ëÀÚ °ø°£ (user space)" µÎ ºÎºÐÀ¸·Î ³ª´©¾î Áö´Âµ¥ ´ëºÎºÐÀÇ ÇÁ·Î±×·¥µéÀº Ä¿³Î À ºÎºÐÀÇ »ç¿ëÀÚ °ø°£¿¡¼ ½ÇÇàµÈ´Ù. ¸®´ª½º´Â ``Ä¿³Î ¸ðµâ"ÀÇ °³³äÀ» Áö¿øÇϴµ¥ ÀÌ´Â ´Ü¼øÈ÷ Ä¿³Î¿¡ µ¿ÀûÀ¸·Î Äڵ带 ÀûÀçÇÒ ¼ö ÀÖ´Â ´É·ÂÀ¸·Î ¸®´ª½º°¡ ¾ÆÁ÷µµ ÀÌ ±Ùº»ÀûÀÎ ºÐ¸®¸¦ Áö´ÔÀ» ÁÖ¸ñÇØ¶ó. HURD ¿Í °°Àº ´Ù¸¥ ½Ã½ºÅÛµéÀº ``¸¶ÀÌÅ©·Î Ä¿³Î"¿¡ ±âÃÊÇϴµ¥ À̵éÀº ´õ¿í Á¦ÇÑµÈ ±â´É¼ºÀ» °®´Â ÀÛÀº Ä¿³Î°ú Ä¿³Î¿¡ ÀÇÇØ ÀüÅëÀûÀ¸·Î ÇÏÀ§ ¼öÁØ ±â´ÉµéÀ» ±¸ÇöÇÏ´Â ÀÏ·ÃÀÇ »ç¿ëÀÚ ÇÁ·Î±×·¥À¸·Î ÀÌ·ç¾îÁø´Ù. ¾î¶² À¯´Ð½º °è¿ ½Ã½ºÅÛµéÀº °·ÂÇÑ º¸¾È, ƯÈ÷ Mandatory Acces Control (B1 ¼öÁØ ¶Ç´Â ±× ÀÌ»ó) ¿¡ ´ëÇÑ ¹Ì±¹ÀÇ ±¹¹æ¼º ¿ä°ÇÀ» Áö¿øÇϱâ À§ÇØ ±¤¹üÀ§ÇÏ°Ô ³Î¸® ¼öÁ¤µÇ¾î ¿Ô´Ù. ÀÌ Ã¥ÀÇ ÇöÀç ¹öÀüÀº ÀÌ·¯ÇÑ ½Ã½ºÅÛ ¶Ç´Â ÀïÁ¡µéÀ» ´Ù·çÁö´Â ¾Ê´Â´Ù. ¹°·Ð ÇâÈÄ ¹öÀü¿¡¼´Â À̸¦ ´Ù·ê ¼ö ÀÖÀ» °ÍÀÌ´Ù. À̵éÁß ÀϺο¡ ´ëÇÑ º¸´Ù ¼¼ºÎÀûÀÎ Á¤º¸´Â ´Ù¸¥ °÷¿¡¼ ¾òÀ» ¼ö Àִµ¥ ¿¹¸¦ µé¾î SGI ÀÇ "Trusted IRIX/B" ¿¡ ´ëÇÑ Ç׸ñµéÀº NSA ÀÇ Final Evaluation Reports (FERs) ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. »ç¿ëÀÚ°¡ ·Î±×ÀÎÇÒ ¶§ »ç¿ëÀÚ À̸§Àº »ç¿ëÀÚ ¾ÆÀ̵ð ``UID" ¿Í ±×·ì (»ç¿ëÀÚ°¡ ¸â¹ö) ¾ÆÀ̵ð ``GID" ¸¦ ³ªÅ¸³»´Â Á¤¼ö·Î »ç»óµÇ´Âµ¥ UID °¡ 0 ÀÎ »ç¿ëÀڴ Ưº°ÇÑ ±ÇÇÑÀ» °®´Â »ç¿ëÀÚ·Î ÀϹÝÀûÀ¸·Î ``·çÆ®" ¶ó°í ºÒ¸°´Ù; ´ëºÎºÐÀÇ À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼ ·çÆ®´Â ´ëºÎºÐÀÇ º¸¾È °Ë»ç¸¦ Á¿ìÇÒ ¼ö ÀÖ°í ½Ã½ºÅÛÀ» °ü¸®Çϴµ¥ »ç¿ëµÈ´Ù. ¸î¸î À¯´Ð½º ½Ã½ºÅÛ¿¡ GID 0 Àº Ưº°ÇÏ¸ç ±×·ì ¼öÁØ¿¡¼ ÀÚ¿ø¿¡ ´ëÇØ Á¦ÇѵÇÁö ¾ÊÀº Á¢±ÙÀ» Çã¿ëÇÑ´Ù [Gay 2000, 228]; ÀÌ´Â ¸®´ª½º¿Í °°Àº ´Ù¸¥ ½Ã½ºÅÛ¿¡¼´Â µé¾î¸ÂÁö ¾ÊÀ¸¸ç ±×·¯³ª ÀÌ·¯ÇÑ ½Ã½ºÅÛ¿¡¼ group 0 Àº ¸¹Àº Ưº°ÇÑ ½Ã½ºÅÛ ÆÄÀÏÀ» ¼ÒÀ¯Çϱ⠶§¹®¿¡ ¸¸´ÉÀÌ´Ù. º¸¾È °üÁ¡¿¡¼´Â ÇÁ·Î¼¼½º¸¸ÀÌ ``ÁÖü"Àε¥ Áï ´ÜÁö ÇÁ·Î¼¼½º¸¸ÀÌ È°¼º °´Ã¼ÀÌ´Ù. ÇÁ·Î¼¼½º´Â ´Ù¾çÇÑ µ¥ÀÌŸ °´Ã¼, ƯÈ÷ ÆÄÀϽýºÅÛ °´Ã¼ (FileSystem Object, FSO), System V ÇÁ·Î¼¼½º°£ Åë½Å (Interprocess Communication, IPC) °´Ã¼ ¹× ³×Æ®¿öÅ© Æ÷Æ®¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ÇÁ·Î¼¼½º´Â ½Ã±×³ÎÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ´Ù¸¥ º¸¾È °ü·Ã ÁÖÁ¦´Â ÄõÅÍ (quota) ¹× Çѵµ (limits), ¶óÀ̺귯¸®, °¨»ç¿Í PAM À» Æ÷ÇÔÇϴµ¥ ÀÌ´Â ´ÙÀ½ ¸î°³ÀÇ ÇϺΠÀý¿¡¼ ¼¼ºÎÀûÀ¸·Î ³íÀǵȴÙ. 3.1. ÇÁ·Î¼¼½ºÀ¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼ »ç¿ëÀÚ´Â ÇÁ·Î¼¼½º¸¦ ½ÇÇà½ÃÅ´À¸·Î½á ÀÛ¾÷À» ÇÑ´Ù. ´ëºÎºÐÀÇ À¯´Ð½º ½Ã½ºÅÛÀº º°°³ÀÇ °³³äÀ¸·Î¼ ``¾²·¹µå"¸¦ Áö¿øÇϴµ¥ ¾²·¹µå´Â ÇÁ·Î¼¼½º³»¿¡¼ ¸Þ¸ð¸®¸¦ °øÀ¯ÇÏ¸ç ½Ã½ºÅÛ ½ºÄÉÁì·¯°¡ ½ÇÁ¦·Î À̸¦ ½ºÄÉÁìÇÑ´Ù. ¸®´ª½º¿¡¼´Â À̸¦ ´Ù¸£°Ô ´Ù·ç´Âµ¥ (ÇÊÀÚ ÀǰßÀ¸·Î´Â ´õ¿í ³ªÀº Á¢±Ù ¹æ¹ýÀ» »ç¿ëÇÑ´Ù) ¾²·¹µå¿Í ÇÁ·Î¼¼½º»çÀÌ¿¡ º»ÁúÀûÀÎ Â÷ÀÌ´Â ¾ø´Ù. ¸®´ª½º¿¡¼´Â ´ë½Å ÇÁ·Î¼¼½º°¡ ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÒ ¶§ ¾î¶° ÀÚ¿ø (¿¹¸¦ µé¸é ¸Þ¸ð¸®) ÀÌ °øÀ¯µÉ Áö¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. °ðÀ̾î Ä¿³ÎÀº ¾²·¹µå ¼öÁØÀÇ ¼Óµµ¸¦ ¾ò±â À§ÇØ ÃÖÀûȸ¦ ¼öÇàÇϴµ¥ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â clone(2) ¸¦ º¸¶ó. ¸®´ª½º Ä¿³Î °³¹ßÀÚµéÀº ``¾²·¹µå" ¶Ç´Â ``ÇÁ·Î¼¼½º"¶ó±â º¸´Ù´Â ``ŽºÅ©"¸¦ »ç¿ëÇÏ´Â ¹Ý¸é Çü½ÄÀûÀÎ ¹®¼¿¡¼´Â ÇÁ·Î¼¼½º¸¦ »ç¿ëÇÏ´Â °æÇâÀÌ ÀÖÀ½À» ¾ð±ÞÇÏ´Â °ÍÀº °¡Ä¡°¡ ÀÖ´Ù (µû¶ó¼ ÀúÀÚ´Â ``ÇÁ·Î¼¼½º"¶õ ¿ë¾î¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù). ´ÙÁß ¾²·¹µå ¾ÖÇø®ÄÉÀ̼ÇÀ» ÇÁ·Î±×·¡¹ÖÇÒ¶§´Â º¸Åë ÀÌ·¯ÇÑ Â÷ÀÌÁ¡À» µå·¯³»Áö ¾Ê´Â Ç¥ÁØ ¾²·¹µå ¶óÀ̺귯¸®Áß Çϳª¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ´õ¿í ÁÁ´Ù. ÀÌ´Â ´ë°³ ¾²·¹µåÀÇ À̽ļºÀ» ´õ¿í ³ôÀÌÁö¸¸ ´Üµ¶ ¿î¿µ üÁ¦ ¾²·¹µå·Î ÇÑ ¾ÖÇø®ÄÉÀÌ¼Ç ¼öÁØ ÀÌ»óÀÇ ¾²·¹µå¸¦ ±¸ÇöÇÔÀ¸·Î½á ¾î¶² ¶óÀ̺귯¸®´Â Ãß°¡ÀûÀÎ °£Á¢ (indirection) ¼öÁØÀ» Á¦°øÇÑ´Ù; ÀÌ´Â ¾î¶² ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇØ ¸î¸î ½Ã½ºÅÛ¿¡¼ »ó´çÈ÷ Çâ»óµÈ ¼º´ÉÀ» Á¦°øÇÒ ¼ö ÀÖ´Ù. 3.1.1. ÇÁ·Î¼¼½º ¼Ó¼ºÀ¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼ °¢ ÇÁ·Î¼¼½º¿Í °ü·ÃµÈ ´ëÇ¥ÀûÀÎ ¼Ó¼ºÀº ´ÙÀ½°ú °°´Ù:
´ÙÀ½Àº ÇÁ·Î¼¼½º¿Í °ü·ÃÇØ ´ú °øÅëµÈ ¼Ó¼ºµéÀÌ´Ù:
¸®´ª½º¿¡¼ ½ÇÁ¦·Î °¢ ÇÁ·Î¼¼½º¿¡ ¾î¶² ¼Ó¼ºµéÀÌ °ü·ÃµÇ¾ú´Â Áö¸¦ Á¤È®È÷ ¾Ë Çʿ䰡 ÀÖ´Ù¸é ¸®´ª½º ¼Ò½º Äڵ尡 °¡Àå ¸íÈ®ÇÑ ¼Ò½ºÀÌ´Ù. ƯÈ÷ /usr/include/linux/sched.h ÆÄÀÏ¿¡¼ task_struct ÀÇ Á¤ÀǸ¦ ÂüÁ¶Çضó. »õ·Î¿î ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÏ´Â À̽ļºÀÖ´Â ¹æ½ÄÀ¸·Î ¸®´ª½º´Â fork(2) È£ÃâÀ» »ç¿ëÇÑ´Ù. BSD ´Â ÃÖÀûÈ ±â¹ýÀ¸·Î º¯ÇüµÈ vfork(2) ¸¦ µµÀÔÇÏ¿´´Ù. vfork °ú °ü·ÃµÈ ÃÖÁ¾ °á°ú´Â °£´ÜÇѵ¥ À̸¦ ÇÇÇÒ ¼ö ÀÖ´Ù¸é »ç¿ëÇÏÁö ¸¶¶ó. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 7.5절 ¸¦ ÂüÁ¶Çضó. ¸®´ª½º´Â °íÀ¯ÀÇ clone(2) È£ÃâÀ» Áö¿øÇϴµ¥ fork(2) È£Ãâ°ú À¯»çÇÏ°Ô ÀÛµ¿ÇÏÁö¸¸ °øÀ¯µÇ¾î¾ß ÇÏ´Â ÀÚ¿ø (¿¹, ¸Þ¸ð¸®, ÆÄÀϱâ¼úÀÚ µî) À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¿©·¯ °¡Áö BSD ½Ã½ºÅÛµéÀº ¿ø·¡ Plan9 ¿¡¼ °³¹ßµÈ rfork() ½Ã½ºÅÛ È£ÃâÀ» ±¸ÇöÇϴµ¥ µ¿ÀÏÇÑ ÀϹÝÀû °³³äÀ» °®°í ÀÖÁö¸¸ »óÀÌÇÑ ÀÇ¹Ì Ã¼°è (semantics) ¸¦ °®°í ÀÖ´Ù (ÀÌ´Â °øÀ¯µÇ´Â °Í¿¡ ´ëÇØ º¸´Ù ¾ö°ÝÇÑ Á¦¾î¸¦ °®´Â ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÑ´Ù). À̽ļºÀÖ´Â ÇÁ·Î±×·¥À̶ó¸é °¡´ÉÇÑ ÀÌ·¯ÇÑ È£ÃâÀ» Á÷Á¢ÀûÀ¸·Î »ç¿ëÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù; ¾Õ¿¡¼ ¾ð±ÞÇßµíÀÌ ÇÁ·Î±×·¥µéÀº ¾²·¹µå¸¦ ±¸ÇöÇϱâ À§ÇØ ÀÌ·¯ÇÑ È£ÃâÀ» »ç¿ëÇÏ´Â ¾²·¹µù ¶óÀ̺귯¸®¿¡ ÀÇÁ¸ÇØ¾ß ÇÑ´Ù. ÀÌ Ã¥Àº ÇÁ·Î±×·¥ ÀÛ¼º¿¡ ´ëÇÑ ¿ÏÀüÇÑ Áöħ¼°¡ ¾Æ´Ï¸ç µû¶ó¼ ÇÁ·Î¼¼½º¸¦ ´Ù·ç´Â ³Î¸® ¾òÀ» ¼ö ÀÖ´Â Á¤º¸¸¦ °Ç³Ê¶Û °ÍÀÌ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â wait(2), exit(2) µî¿¡ ´ëÇÑ ¹®¼¸¦ ºÁ¾ß ÇÑ´Ù. 3.1.2. POSIX CapabilitiesPOSIX ´É·Â (capability) Àº ÀϹÝÀûÀ¸·Î ·çÆ®°¡ ¼ÒÀ¯ÇÏ´Â ±ÇÇÑÀ» º¸´Ù ±¸Ã¼ÀûÀÎ ±ÇÇѵéÀÇ Ä¿´Ù¶õ ¼ÂÀ¸·Î ºÐÇÒÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ºñÆ®µéÀÇ ¼ÂÀÌ´Ù. ÀÌ´Â IEEE Ç¥ÁØ Ãʾȿ¡ ÀÇÇØ Á¤ÀǵǴµ¥ ¸®´ª½º °íÀ¯ÀÇ °ÍÀº ¾Æ´Ï¸ç ¶ÇÇÑ ÀϹÝÀûÀ¸·Î ´Ù¸¥ À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡ ÀÇÇØ Áö¿øµÇÁöµµ ¾Ê´Â´Ù. ¸®´ª½º Ä¿³Î 2.0 Àº POSIX ´É·ÂÀ» Áö¿øÇÏÁö ¾Ê´Â ¹Ý¸é 2.2 ¹öÀüÀº ÇÁ·Î¼¼½º¿¡ ´ëÇÑ ÀÌ Áö¿øÀ» Ãß°¡ÇÏ¿´´Ù. ÀÌ ¹®¼¸¦ Æ÷ÇÔÇÏ¿© ¸®´ª½º ¹®¼µéÀÌ ``·çÆ® ±ÇÇÑÀ» ÇÊ¿ä·Î ÇÑ´Ù" ¶ó°í ÇÒ ¶§ °ÅÀÇ ¸ðµç °æ¿ì¿¡ ÀÖ¾î ÀÌ´Â ´É·Â ¹®¼¿¡ ÀοëµÈ ¹Ù¿Í °°ÀÌ ``´É·ÂÀ» ÇÊ¿ä·Î ÇÑ´Ù"¸¦ ÀǹÌÇÑ´Ù. ÇÊ¿äÇÑ Æ¯Á¤ ´É·ÂÀ» ¾Ë°í ½Í´Ù¸é ´É·Â ¹®¼¿¡¼ À̸¦ Á¶»çÇØ¶ó. ¸®´ª½º¿¡¼ ±Ã±ØÀûÀÎ ¸ñÀûÀº ÆÄÀϽýºÅÛ³»ÀÇ ÆÄÀÏ¿¡ ´É·ÂÀÌ °áºÎµÉ ¼ö ÀÖµµ·Ï ÇÏ·Á´Â °ÍÀε¥ ±×·¯³ª ÀÌ ±ÛÀ» ¾²´Â ½ÃÁ¡¿¡¼ ÀÌ´Â ¾ÆÁ÷±îÁö Áö¿øµÇÁö ¾Ê°í ÀÖ´Ù. ´É·Â ¾çµµ¿¡ ´ëÇÑ Áö¿øµµ ÀÖÁö¸¸ µðÆúÆ®·Î ÀÌ·¯ÇÑ ±â´ÉÀº ±ÝÁöµÇ¾î ÀÖ´Ù. ¸®´ª½º 2.2.11 ¹öÀüÀº ``´É·Â Á¦ÇÑ ¼Â (capability bounding set)" ¶ó´Â ´É·ÂÀ» º¸´Ù Á÷Á¢ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô Çϴ Ư¡À» Ãß°¡ÇÏ¿´´Ù. ´É·Â Á¦ÇÑ ¼ÂÀº ½Ã½ºÅÛ³»ÀÇ ¸ðµç ÇÁ·Î¼¼½º°¡ º¸À¯ÇÒ ¼ö ÀÖ´Â ´É·Â ¸ñ·ÏÀÌ´Ù (¹°·Ð ±×·¸Áö¾ÊÀ¸¸é Ưº°ÇÑ init ÇÁ·Î¼¼½º ¸¸ÀÌ À̸¦ º¸À¯ÇÒ ¼ö ÀÖ´Ù). ´É·ÂÀÌ Á¦ÇÑ ¼Â¿¡ ¾ø´Ù¸é ¾î¶² ÇÁ·Î¼¼½º¶óµµ Áö´Ñ ±ÇÇÑ¿¡ »ó°ü¾øÀÌ À̸¦ »ç¿ëÇÏÁö ¸øÇÒ °ÍÀÌ´Ù. ÀÌ Æ¯Â¡Àº ¿¹¸¦ µé¾î Ä¿³Î ¸ðµâ ÀûÀ縦 ±ÝÁöÇϴµ¥ »ç¿ëµÉ ¼ö Àִµ¥ À̸¦ ÀÌ¿ëÇÑ ¿¹Á¦ µµ±¸´Â http://pweb.netcom.com/~spoon/lcap/ ÀÇ LCAP ÀÌ´Ù. POSIX ´É·Â¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â ftp://linux.kernel.org/pub/linux/libs/security/linux-privs ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. 3.1.3. ÇÁ·Î¼¼½º »ý¼º°ú Á¶ÀÛÇÁ·Î¼¼½º´Â fork(2), vfork(2) (ÃßõÇÏÁö ¾Ê´Â´Ù) ¶Ç´Â ¸®´ª½º °íÀ¯ÀÇ clone(2) ¸¦ »ç¿ëÇÏ¿© »ý¼ºµÉ ¼ö Àִµ¥ ÀÌ·¯ÇÑ ½Ã½ºÅÛ È£Ãâ ¸ðµÎ´Â ±âÁ¸ ÇÁ·Î¼¼½º·ÎºÎÅÍ µÎ ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÔÀ¸·Î½á ±âÁ¸ ÇÁ·Î¼¼½º¸¦ º¹Á¦ÇÑ´Ù. ÇÁ·Î¼¼½º´Â execve(2) ¶Ç´Â ÀÌ¿¡ ´ëÇÑ ´Ù¾çÇÑ ÀüÀ§ (front-end) (¿¹¸¦ µé¾î exec(3), system(3) ¹× popen(3) ¸¦ º¸¶ó) ¸¦ È£ÃâÇÔÀ¸·Î½á ´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¼ö ÀÖ´Ù. ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ¾î ±× ÆÄÀÏÀÇ setuid ¶Ç´Â setgid ºñÆ® ¼ÂÀÌ ¼³Á¤µÉ ¶§ ÇÁ·Î¼¼½ºÀÇ EUID ¶Ç´Â EGID °¢°¢Àº ´ë°³ ÆÄÀÏÀÇ °ªµé·Î ¼³Á¤µÈ´Ù. ÀÌ ±â´É¼ºÀº °æÀï »óÅ (race condition) ¶§¹®¿¡ setuid ¶Ç´Â setgid ½ºÅ©¸³Æ®¸¦ Áö¿øÇϱâ À§ÇØ »ç¿ëµÉ ¶§ Ãʱâ À¯´Ð½ºÀÇ º¸¾È °áÇÔÀÇ ¿øÀÎÀÌ¿´´Ù. Ä¿³ÎÀÌ ¾î¶² ÀÎÅÍÇÁ¸®Å͸¦ ½ÇÇà½ÃÄÑ¾ß ÇÏ´ÂÁö ¾Ë±â À§ÇØ ÆÄÀÏÀ» ¿©´Â ½Ã°£°ú ¹æ±Ý id °¡ ¼³Á¤µÈ ÀÎÅÍÇÁ¸®ÅͰ¡ ½ÇÇàµÇ¾î ÆÄÀÏÀ» ÇØ¼®Çϱâ À§ÇØ À̸¦ ´Ù½Ã ¿©´Â ½Ã°£»çÀÌ¿¡ ÇØÄ¿°¡ Á÷Á¢ÀûÀ¸·Î ¶Ç´Â ½Éº¼¸¯ ¸µÅ©¸¦ ÅëÇØ ÆÄÀÏÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. ¿©·¯°¡Áö À¯´Ð½º °è¿ ½Ã½ºÅÛµéÀº ´Ù¸¥ ¹æ½ÄÀ¸·Î setuid ½ºÅ©¸³Æ®¿¡ ´ëÇÑ º¸¾È ÀïÁ¡À» ´Ù·é´Ù. ¸®´ª½º¿Í °°Àº ½Ã½ºÅÛµéÀº ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¶§ setuid ¿Í setgid ºñÆ®¸¦ ¿ÏÀüÈ÷ ¹«½ÃÇϴµ¥ ÀÌ´Â ¸í¹éÈ÷ ¾ÈÀüÇÑ Á¢±Ù ¹æ¹ýÀÌ´Ù. ´ëºÎºÐÀÇ SysVr4 ¿Í BSD 4.4 ÇöÀç ¹öÀüÀº Ä¿³Î °æÀï »óŸ¦ ÇÇÇϱâ À§ÇØ ´Ù¸¥ Á¢±Ù ¹æ¹ýÀ» »ç¿ëÇϴµ¥, Ä¿³ÎÀÌ ¿·Á°í ÇÏ´Â set-id ½ºÅ©¸³Æ®ÀÇ À̸§À» ÀÎÅÍÇÁ¸®ÅÍ¿¡ Àü´ÞÇÒ ¶§ °æÀï »óŸ¦ Çã¿ëÇÒ ¼ö ÀÖ´Â °æ·ÎÀ̸§º¸´Ù´Â ´ë½Å ÆÄÀÏÀ̸§ /dev/fd/3 À» Àü´ÞÇÑ´Ù. ÀÌ´Â ½ºÅ©¸³Æ®»ó¿¡ ÀÌ¹Ì ¿·ÁÁø Ưº° ÆÄÀÏ·Î µû¶ó¼ °ø°ÝÀÚ°¡ ¾Ç¿ëÇÒ ¼ö ÀÖ´Â °æÀï »óÅ´ ¾ø´Ù. ÀÌ·¯ÇÑ ÆÄÀϽýºÅÛ¿¡¼µµ ÀúÀÚ´Â ¹ØºÎºÐ¿¡ ³íÀÇµÉ °ÍÀÌÁö¸¸ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ ÀÛ¼º¿¡ setuid/setgid ½© ½ºÅ©¸³Æ® ¾ð¾î¸¦ »ç¿ëÇÏÁö ¸»¶ó°í ÃßõÇÑ´Ù. ¾î¶² °æ¿ì¿¡ ÀÖ¾î ÇÁ·Î¼¼½º´Â ¿©·¯ °¡Áö UID ¿Í GID °ªµé¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö Àִµ¥ setuid(2), seteuid(2), setreuid(2) ¿Í ¸®´ª½º °íÀ¯ÀÇ setfsuid(2) ¸¦ º¸¶ó. ƯÈ÷, À¯º¸µÈ »ç¿ëÀÚ id (SUID) ¼Ó¼ºÀº ½Å·ÚµÈ ÇÁ·Î±×·¥ÀÌ ÀϽÃÀûÀ¸·Î UID µéÀ» º¯°æÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ´Ù. SUID ¸¦ Áö¿øÇÏ´Â À¯´Ð½º °è¿ ½Ã½ºÅÛµéÀº ´ÙÀ½ ±ÔÄ¢À» »ç¿ëÇÑ´Ù: RUID °¡ º¯°æµÇ°Å³ª ¶Ç´Â EUID °¡ RUID ¿Í µ¿ÀÏÇÏ°Ô ¼³Á¤µÇÁö ¾ÊÀ¸¸é SUID °¡ »õ·Î¿î EUID ·Î ¼³Á¤µÈ´Ù. ±ÇÇÑÀÌ ¾ø´Â »ç¿ëÀÚµéÀº ±×µéÀÇ SUID ·ÎºÎÅÍ EUID ¸¦ ¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç RUID ¸¦ EUID ·Î EUID ¸¦ RUID ·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¸®´ª½º °íÀ¯ÀÇ FSUID ÇÁ·Î¼¼½º ¼Ó¼ºÀº NFS ¼¹ö¿Í °°Àº ÇÁ·Î±×·¥µé¿¡°Ô ½Ã±×³ÎÀ» ÇÁ·Î¼¼½º¿¡ º¸³»±â À§ÇÑ UID Çã°¡±ÇÀ» ÁÖÁö ¾Ê°í¼ À̵éÀÌ ÀڽŵéÀ» ¾î¶² ÁÖ¾îÁø UID ±ÇÇÑÀ» °®´Â ÆÄÀϽýºÅÛÀ¸·Î Á¦ÇÑÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ¼Ó¼ºÀÌ´Ù. EUID °¡ º¯°æµÉ ¶§¸¶´Ù FSUID ´Â »õ·Î¿î EUID °ªÀ¸·Î º¯°æµÈ´Ù; FSUID °ªÀº ¸®´ª½º °íÀ¯ È£ÃâÀÎ setfsuid(2) ¸¦ »ç¿ëÇÏ¿© º°µµ·Î ¼³Á¤µÉ ¼ö ÀÖ´Ù. ·çÆ®ÀÌ¿ÜÀÇ È£ÃâÀÚµéÀº FSUID ¸¦ ´ÜÁö ÇöÀç RUID, EUID, SEUID ¶Ç´Â ÇöÀç FSUID °ªÀ¸·Î¸¸ ¼³Á¤ÇÒ ¼ö ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. 3.2. ÆÄÀϸðµç À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼ Á¤º¸µéÀº ±âº»ÀûÀ¸·Î "/" ·çÆ® ÆÄÀÏ Æ®¸®¿¡ ÀúÀåµÈ´Ù. ÆÄÀÏ Æ®¸®´Â µð·ºÅ丮µéÀÇ °èÃþÀû ÁýÇÕÀ¸·Î µð·ºÅ丮 °¢ÀÚ°¡ ÆÄÀϽýºÅÛ °´Ã¼ (FSO) ¸¦ Æ÷ÇÔÇÒ ¼öµµ ÀÖ´Ù. ¸®´ª½º¿¡¼ ÆÄÀϽýºÅÛ °´Ã¼´Â º¸ÅëÀÇ ÆÄÀÏ, µð·ºÅ丮, ½Éº¼¸¯ ¸µÅ©, ³×ÀÓµå ÆÄÀÌÇÁ (¼±ÀÔ ¼±Ã³¸®, FIFO, first-in first-out À̶ó°íµµ ºÎ¸¥´Ù) , ¼ÒÄÏ (¹ØºÎºÐÀ» º¸¶ó), ¹®ÀÚ µð¹ÙÀ̽º ÆÄÀÏ ¶Ç´Â ºí·Ï µð¹ÙÀ̽º ÆÄÀÏÀÏ ¼ö ÀÖ´Ù (ÀÌ ¸ñ·ÏÀº find(1) ¸í·ÉÀ¸·Î º¼ ¼ö ÀÖ´Ù). ´Ù¸¥ À¯´Ð½º °è¿ ½Ã½ºÅÛµµ µ¿ÀÏÇÑ ¶Ç´Â À¯»çÇÑ FSO ŸÀÔ ¸ñ·ÏÀ» °®´Â´Ù. ÆÄÀϽýºÅÛ °´Ã¼´Â ÆÄÀÏ Æ®¸®¿¡ µð·ºÅ丮·Î ¸¶¿îÆ® ¹× ¾ð¸¶¿îÆ®µÉ ¼ö ÀÖ´Â ÆÄÀϽýºÅÛ¿¡ ¸ð¾ÆÁø´Ù. ÆÄÀϽýºÅÛ Å¸ÀÔ (¿¹, ext2 ¿Í FAT) Àº ¼Óµµ, ½Å·Ú¼º µîÀ» ÃÖÀûÇϱâ À§ÇØ µð½ºÅ©»ó¿¡ µ¥ÀÌÅ͸¦ ¹è¿Çϱâ À§ÇÑ Æ¯Á¤ÇÑ ÀÏ·ÃÀÇ ÇÕÀÇÀÌ´Ù; ``ÆÄÀϽýºÅÛ"Àº ``ÆÄÀϽýºÅÛ À¯Çü" °ú µ¿ÀǾî·Î »ç¿ëµÈ´Ù. 3.2.1. ÆÄÀϽýºÅÛ °´Ã¼ ¼Ó¼º¿©·¯°¡Áö À¯´Ð½º °è¿ ½Ã½ºÅÛÀº ´Ù¾çÇÑ ÆÄÀϽýºÅÛ Å¸ÀÔÀ» Áö¿øÇÑ´Ù. ÆÄÀϽýºÅÛÀº ¾à°£ ´Ù¸¥ ÀÏ·ÃÀÇ Á¢±Ù Á¦¾î ¼Ó¼ºµéÀ» °¡Áú ¼ö ÀÖÀ¸¸ç Á¢±Ù Á¦¾î´Â ¸¶¿îÆ®½Ã ¼±ÅÃÇÑ ¿É¼Ç¿¡ ÀÇÇØ ¿µÇâÀ» ¹ÞÀ» ¼ö ÀÖ´Ù. ¸®´ª½º¿¡¼´Â ext2 ÆÄÀϽýºÅÛÀÌ ÇöÀç °¡Àå ³Î¸® »ç¿ëµÇ°í ÀÖÀ¸¸ç ¸®´ª½º´Â ¹æ´ëÇÑ ¾çÀÇ ÆÄÀϽýºÅÛÀ» Áö¿øÇϴµ¥ ´ëºÎºÐÀÇ À¯´Ð½º °è¿ ½Ã½ºÅÛµµ ´ÙÁß ÆÄÀϽýºÅÛÀ» ¶ÇÇÑ Áö¿øÇÑ´Ù. À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼ ´ëºÎºÐÀÇ ÆÄÀϽýºÅÛÀº Àû¾îµµ ´ÙÀ½À» ÀúÀåÇÑ´Ù:
´ÙÀ½ ¼Ó¼ºÀº ext2 ÆÄÀϽýºÅÛ¿¡¼ ¸®´ª½º °íÀ¯ÀÇ È®ÀåÀÌ´Ù. ¹°·Ð ¸¹Àº ´Ù¸¥ ÆÄÀϽýºÅÛµµ À¯»çÇÑ ±â´É¼ºÀ» °®´Â´Ù:
´Ù¸¥ °øÅëµÈ È®ÀåÀº ``ÀÌ ÆÄÀÏÀ» »èÁ¦ÇÒ ¼ö ¾ø´Ù" ¸¦ °¡¸®Å°´Â ¾î¶² Á¾·ùÀÇ ºñÆ®µéÀ» Æ÷ÇÔÇÑ´Ù. ÀÌ·¯ÇÑ °ªµéÁß ¸¹Àº °ÍµéÀº ¸¶¿îÆ®½Ã ¿µÇâÀ» ¹ÞÀ» ¼ö ÀÖÀ¸¸ç µû¶ó¼ ¿¹¸¦ µé¸é ¾î¶² ºñÆ®´Â ÀÏÁ¤ÇÑ °ª (¹Ìµð¾î»ó¿¡¼ ±×µéÀÇ °ª¿¡ »ó°ü¾øÀÌ) À» °®°í ÀÖ´Â °Íó·³ ó¸®µÉ ¼ö ÀÖ´Ù. ÀÌ¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â mount(1) À» º¸¶ó. ÀÌ·¯ÇÑ ºñÆ®µéÀº À¯¿ëÇÏÁö¸¸ À̵éÁß ÀϺδ ¼Õ½¬¿î »ç¿ëÀ» °£´ÜÈ÷ Çϱâ À§ÇÑ °ÍÀ¸·Î ½ÇÁ¦·Î ¾î¶² ÇൿÀ» ¿¹¹æÇÒ ¸¸Å ÃæºÐÇÏÁö ¾ÊÀ½À» ¾Ë°í ÀÖ¾î¶ó. ¿¹¸¦ µé¾î ¸®´ª½º¿¡¼ ``noexec" ¿É¼ÇÀ» °®°í ¸¶¿îÆÃÀ» ÇÏ´Â °ÍÀº ±× ÆÄÀϽýºÅÛ¿¡¼ ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀ» ±ÝÁöÇÒ °ÍÀÌ´Ù; ¸Þ´º¾ó¿¡ ¾ð±ÞµÈ °Í°ú °°¾Æ À̴ ȣȯµÇÁö ¾Ê´Â ½Ã½ºÅÛ¿¡ ´ëÇØ ¹ÙÀ̳ʸ®¸¦ Æ÷ÇÔÇϰí ÀÖ´Â ÆÄÀϽýºÅÛÀ» ¸¶¿îÆÃÇϱâ À§ÇÑ °ÍÀÌ´Ù. ¸®´ª½º¿¡¼ ÀÌ ¿É¼ÇÀÌ ÆÄÀÏ ½ÇÇàÀ» ¿ÏÀüÈ÷ ¸·Áö´Â ¸øÇÒ °ÍÀÌ´Ù; ÆÄÀÏÀ» ½ÇÇà½Ãų ¼ö ÀÖ´Â ´Ù¸¥ ¾îµò°¡¿¡ À̸¦ º¹»çÇÒ ¼ö ÀÖÀ¸¸ç ¶ÇÇÑ ÀÌ ÆÄÀÏÀ» Á÷Á¢ÀûÀ¸·Î ½ÇÇà½Ã۱â À§ÇØ ``/lib/ld-linux.so.2" ¸í·ÉÀ» ½ÇÇà½Ãų ¼öµµ ÀÖ´Ù. ¾î¶² ÆÄÀϽýºÅÛµéÀº ÀÌ·¯ÇÑ Á¢±Ù Á¦¾î °ªµéÁß ÀϺθ¦ Áö¿øÇÏÁö ¾Ê´Â´Ù; ÀÌ·¯ÇÑ ÆÄÀϽýºÅÛÀÌ ¾î¶»°Ô ´Ù·ïÁö´Â °¡¿¡ ´ëÇØ¼´Â mount(1) À» º¸¶ó. ƯÈ÷ ¸¹Àº À¯´Ð½º °è¿ ½Ã½ºÅÛÀº MS-DOS µð½ºÅ©¸¦ Áö¿øÇϴµ¥ MS-DOS µð½ºÅ©´Â ÀÌ·¯ÇÑ ¼Ó¼ºµéÀ» °ÅÀÇ Áö¿øÇÏÁö ¾Ê´Â´Ù (ÀÌ·¯ÇÑ ¼Ó¼ºÀ» Á¤ÀÇÇϴ ǥÁØ ¹æ½ÄÀº ¾ø´Ù). ÀÌ·± °æ¿ì À¯´Ð½º °è¿ ½Ã½ºÅÛÀº Ç¥ÁØ ¼Ó¼ºÀ» ¿¡¹Ä·¹ÀÌÆ®Çϸç (Ưº°ÇÑ µð½ºÅ©»óÀÇ ÆÄÀÏÀ» ÅëÇØ µÉ ¼ö ÀÖ´ÂÇÑ À̵éÀ» ±¸ÇöÇÔÀ¸·Î½á) ÀÌ·¯ÇÑ ¼Ó¼ºÀº ÀϹÝÀûÀ¸·Î mount(1) ¸í·É¿¡ ÀÇÇØ ¿µÇâÀ» ¹Þ´Â´Ù. À¯´Ð½º °è¿ ½Ã½ºÅÛÀÌ º¸´Ù º¹ÀâÇÑ Ã¼°è (POSIX ACL) À» Áö¿øÇÏÁö ¾Ê´Â´Ù¸é ÆÄÀÏ Ãß°¡ ¹× Á¦°Å¸¦ À§Çؼ´Â ÆÄÀÏÀÇ µð·ºÅ丮 Çã°¡±Ç ºñÆ®¿Í ¼ÒÀ¯ÀÚ¸¸ÀÌ Áß¿äÇÏ´Ù´Â °ÍÀ» ¾ð±ÞÇÏ´Â °ÍÀº Áß¿äÇÏ´Ù. ½Ã½ºÅÛÀÌ ´Ù¸¥ È®ÀåÀ» °®°í ÀÖÁö ¾Ê´Ù¸é, ¸®´ª½º 2.2 ´Â À̸¦ Áö¿øÇÏÁö ¾Ê´Âµ¥, Çã°¡±Ç ºñÆ®°¡ ¼³Á¤µÇÁö ¾ÊÀº ÆÄÀÏÀº ÆÄÀÏÀ» Æ÷ÇÔÇÏ´Â µð·ºÅ丮°¡ Á¦°Å¸¦ Çã¿ëÇÑ´Ù¸é Á¦°ÅµÉ ¼ö ÀÖ´Ù. ¶Ç´Â Á¶»ó µð·ºÅ丮°¡ ÀÚ¼Õ¿¡°Ô ¾î¶² »ç¿ëÀÚ ¶Ç´Â ±×·ì¿¡ ÀÇÇØ º¯°æµÇµµ·Ï Çã¿ëÇÑ´Ù¸é ±× µð·ºÅ丮ÀÇ ¸ðµç ÀÚ¼ÕÀº ±× »ç¿ëÀÚ ¶Ç´Â ±×·ìÀ¸·Î ´ëüµÉ °ÍÀÌ´Ù. º¸¾È¿¡ ´ëÇÑ IEEE POSIX Ç¥ÁØ ÃʾÈÀº Çã°¡±ÇÀ» °®´Â »ç¿ëÀÚ¿Í ±×·ì ¸ñ·ÏÀ» Áö¿øÇϴ ǥÁØ¿¡ ÀÏÄ¡ÇÏ´Â ACL ¿¡ ´ëÇÑ ±â¹ýÀ» Á¤ÀÇÇϰí ÀÖ´Ù. ºÒÇàÈ÷ ÀÌ´Â ³Î¸® Áö¿øµÇÁö ¾ÊÀ¸¸ç À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡ µ¿ÀÏÇÑ ¹æ½ÄÀ¸·Î Áö¿øµÇÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾î ¸®´ª½º 2.2 ´Â ÆÄÀϽýºÅÛ³»¿¡ ACL ¶Ç´Â POSIX ´É·Â °ªÀ» °®°í ÀÖÁö ¾Ê´Ù. ¸®´ª½º ext2 ÆÄÀϽýºÅÛÀÌ ·çÆ® »ç¿ëÀÚ¸¦ À§ÇØ ¼Ò·®ÀÇ °ø°£À» ³²°ÜµÎ°í ÀÖÀ½À» ¾ð±ÞÇÏ´Â °ÍÀº °¡Ä¡°¡ ÀÖ´Ù. ÀÌ´Â ¼ºñ½º ºÎÀÎ °ø°Ý¿¡ ´ëÇÑ ºÎºÐÀûÀÎ ¹æ¾î·Î »ç¿ëÀÚ°¡ ·çÆ® »ç¿ëÀÚ¿Í °øÀ¯ÇÏ´Â µð½ºÅ©¸¦ °¡µæ ä¿î´Ù°í ÇÒÁö¶óµµ ·çÆ® »ç¿ëÀÚ´Â Áß´ëÇÑ ±â´ÉÀ» À§ÇØ ¼Ò·®ÀÇ °ø°£À» °®´Â´Ù. µðÆúÆ®´Â ÆÄÀϽýºÅÛÀÇ 5% ·Î mke2fs(8) ƯÈ÷ "-m" ¿É¼ÇÀ» º¸¶ó. 3.2.2. »ý¼º½Ã ÃʱⰪ»ý¼º½Ã ´ÙÀ½ ±ÔÄ¢ÀÌ Àû¿ëµÈ´Ù. ´ëºÎºÐÀÇ À¯´Ð½º ½Ã½ºÅÛ¿¡¼ create(2) ¶Ç´Â open(2) ¿¡ ÀÇÇØ »õ·Î¿î ÆÄÀϽýºÅÛ °´Ã¼°¡ »ý¼ºµÉ ¶§ FSO ÀÇ UID ¿Í GID ´Â °¢°¢ ÇÁ·Î¼¼½ºÀÇ UID ¿Í GID ·Î ¼³Á¤µÈ´Ù. ¸®´ª½º´Â FSUID È®Àå¶§¹®¿¡ ¾à°£ ´Ù¸£°Ô ÀÛµ¿Çϴµ¥ FSO ÀÇ UID ¿Í GID °¡ °¢°¢ ÇÁ·Î¼¼½ºÀÇ FSUID ¿Í FSGUID ·Î ¼³Á¤µÈ´Ù; ÆÄÀÏÀ» Æ÷ÇÔÇÏ´Â µð·ºÅ丮ÀÇ setgid ºñÆ® ¶Ç´Â ÆÄÀϽýºÅÛÀÇ ``GRPID" Ç÷¡±×°¡ ¼³Á¤µÇ¾î ÀÖ´Ù¸é FSO GID ´Â ½ÇÁ¦ÀûÀ¸·Î ±× µð·ºÅ丮ÀÇ GID ·Î ¼³Á¤µÈ´Ù. ½ã ¼Ö¶ó¸®½º¿Í ¸®´ª½º¸¦ Æ÷ÇÔÇÑ ¸¹Àº ½Ã½ºÅÛµéÀº ¶ÇÇÑ setgid µð·ºÅ丮 È®ÀåÀ» Áö¿øÇϴµ¥ ¾Õ¿¡ ¾ð±ÞÇßµíÀÌ ÀÌ Æ¯º°ÇÑ °æ¿ì´Â ``ÇÁ·ÎÁ§Æ®" µð·ºÅ丮¸¦ Áö¿øÇÑ´Ù; ``ÇÁ·ÎÁ§Æ®" µð·ºÅ丮¸¦ ¸¸µé±â À§Çؼ´Â ±× ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ Æ¯º° ±×·ìÀ» »ý¼ºÇÏ°í ±×·ì ¼ÒÀ¯ÀÇ ÇÁ·ÎÁ§Æ®¸¦ À§ÇÑ µð·ºÅ丮¸¦ »ý¼ºÇÑ ÈÄ µð·ºÅ丮¿¡ setgid ºñÆ®¸¦ ¼³Á¤Çضó: ÀÌ µð·ºÅ丮¿¡ ³õÀÎ ÆÄÀÏÀº ÀÚµ¿ÀûÀ¸·Î ÇÁ·ÎÁ§Æ®¿¡ ÀÇÇØ ¼ÒÀ¯µÈ´Ù. ºñ½ÁÇÏ°Ô »õ·Î¿î µð·ºÅ丮°¡ setgid ºñÆ®°¡ ¼³Á¤µÈ (ÆÄÀϽýºÅÛ GRPID ´Â ¼³Á¤µÇ¾î ÀÖÁö ¾Ê´Ù) µð·ºÅ丮³»¿¡¼ »ý¼ºµÈ´Ù¸é »õ·Î¿î ÇϺΠµð·ºÅ丮µµ setgid ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. µû¶ó¼ ÇÁ·ÎÁ§Æ® ÇϺΠµð·ºÅ丮µµ ºñ½ÁÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù: ¸ðµç ´Ù¸¥ °æ¿ì¿¡ ÀÖ¾î¼ setgid ºñÆ®´Â »õ·Î¿î ÆÄÀÏ¿¡ ´ëÇØ Á¦°ÅµÈ´Ù. ÀÌ´Â ``»ç¿ëÀÚ-°³ÀÎ ±×·ì (user-private group)" ü°è¿¡ ´ëÇÑ ³í¸®Àû ±Ù°Å·Î ·¹µåÇÞ ¹× ´Ù¸¥ ¹èÆ÷¾÷ÀÚ°¡ »ç¿ëÇϰí Àִµ¥ ¸ðµç »ç¿ëÀÚ´Â ´ÜÁö ÀÚ½ÅÀ» ¸â¹ö·Î °®´Â "°³ÀÎ" ±×·ìÀÇ ¸â¹öÀÌ¸ç µû¶ó¼ µðÆúÆ®·Î ±×·ì¿¡°Ô ÆÄÀÏ Àбâ¿Í ¾²±â ±ÇÇÑÀ» Çã¿ëÇÒ ¼ö ÀÖ´Ù (ÀÚ½ÅÀÇ ±×·ìÀÇ ¸â¹öÀ̱⠶§¹®¿¡). µû¶ó¼ ÆÄÀÏÀÇ ±×·ì ¸â¹ö½Ê ÀÌ·± ¹æ½ÄÀ¸·Î Àü´ÞµÉ ¶§ Àбâ¿Í ¾²±â ±ÇÇѵµ ¶ÇÇÑ Àü´ÞµÈ´Ù. FSO ±âº» Á¢±Ù Á¦¾î °ª (Àбâ, ¾²±â, ½ÇÇàÇϱâ) Àº ¿äû°ª°ú ÇÁ·Î¼¼½ºÀÇ umask ³í¸®°öÀ¸·ÎºÎÅÍ °è»êµÈ´Ù. »õ·Î¿î ÆÄÀÏÀº ´Ã sticky ¹× setuid ºñÆ®°¡ ¾øÀÌ ½ÃÀ۵ȴÙ. 3.2.3. Á¢±Ù Á¦¾î ¼Ó¼º º¯°æchmod(2), fcmod(2) ¶Ç´Â chmod(1) À» ÀÌ¿ëÇÏ¿© ÀÌ·¯ÇÑ ¼Ó¼º°ªÀÇ ´ëºÎºÐÀ» ¼³Á¤ÇÒ ¼ö Àִµ¥ ¶ÇÇÑ chown(1) °ú chgrp(1) À» º¸¶ó. ¸®´ª½º °íÀ¯ÀÇ ¼Ó¼ºÁß ÀϺδ chattr(1) À» ÀÌ¿ëÇÏ¿© Á¶À۵ȴÙ. ¸®´ª½º¿¡¼´Â ´ÜÁö ·çÆ®¸¸ÀÌ ÁÖ¾îÁø ÆÄÀÏÀÇ ¼ÒÀ¯ÀÚ¸¦ º¯°æÇÒ ¼ö ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. ¾î¶² À¯´Ð½º °è¿ ½Ã½ºÅÛÀº ÀÏ¹Ý »ç¿ëÀÚ°¡ ±×µéÀÇ ÆÄÀÏ ¼ÒÀ¯±ÇÀ» ´Ù¸¥ »ç¿ëÀÚ¿¡°Ô Àü´ÞÇÒ ¼ö ÀÖµµ·Ï Çϴµ¥ ÀÌ´Â ¹®Á¦¸¦ º¹ÀâÇÏ°Ô ÇÏ¸ç ¸®´ª½º¿¡¼´Â ±ÝÁöµÇ¾î ÀÖ´Ù. ¿¹¸¦ µé¾î, µð½ºÅ© »ç¿ëÀ» Á¦ÇÑÇÏ·Á°í ÇÏ´Â °æ¿ì ÆÄÀÏ ¼ÒÀ¯±Ç º¯°æÀ» Çã¿ëÇÑ´Ù¸é »ç¿ëÀÚµéÀº ÀÓÀÇÀÇ Ä¿´Ù¶õ ÆÄÀÏÀº ½ÇÁ¦·Î ´Ù¸¥ »ç¿ëÀÚÀÇ °ÍÀÌ´Ù¶ó°í Ç×ÀǸ¦ ÇÒ °ÍÀÌ´Ù. 3.2.4. Á¢±Ù Á¦¾î ¼Ó¼º »ç¿ë¸®´ª½º¿Í ´ëºÎºÐÀÇ À¯´Ð½º °è¿ ½Ã½ºÅÛÇÏ¿¡¼ Àбâ¿Í ¾²±â ¼Ó¼º°ªÀº ÆÄÀÏÀÌ ¿·ÁÁú ¶§¸¸ °Ë»çµÈ´Ù; ¹°·Ð ¸ðµç Àб⠶Ǵ ¾²±â¿¡ ´ëÇØ Àç°Ë»çµÇÁö´Â ¾Ê´Â´Ù. ÆÄÀϽýºÅÛÀº À¯´Ð½º °è¿ ½Ã½ºÅÛÀÇ Áß½ÉÀ̱⠶§¹®¿¡ ¾ÆÁ÷µµ ¸¹Àº ¼öÀÇ È£ÃâÀÌ ÀÌ·¯ÇÑ ¼Ó¼ºÀ» °Ë»çÇϴµ¥ ÀÌ·¯ÇÑ È£Ãâ·Î´Â open(2), create(2), link(2), unlink(2), rename(2), mknod(2), symlink(2) ¹× socket(2) µéÀÌ ÀÖ´Ù. 3.2.5. ÆÄÀϽýºÅÛ °èÃþ±¸Á¶´Ù³â°£¿¡ °ÉÃÄ ¾î¶² ÆÄÀÏÀº ¾î´À °÷¿¡ ³õ¾ÆÇá ÇÑ´Ù´Â ÇÕÀǰ¡ È®¸³µÇ¾î ¿Ô´Ù. °¡´ÉÇÑ °èÃþ±¸Á¶¿¡ Á¤º¸¸¦ ³õÀ» ¶§ ÇÕÀÇµÈ »ç¿ëÀ» µû¸£±â ¹Ù¶õ´Ù. ¿¹¸¦ µé¾î, ÀüüÀûÀÎ ¼³Á¤ Á¤º¸´Â /etc µð·ºÅ丮¹Ø¿¡ ³õ¾Æ¶ó. ÆÄÀϽýºÅÛ °èÃþ±¸Á¶ Ç¥ÁØ (Filesystem Hierarchy Standard, FHS) ´Â ³í¸®Àû ¹æ½ÄÀ¸·Î ÀÌ ÇÕÀǸ¦ Á¤ÀÇÇÏ·Á°í ÇÏ¸ç ¸®´ª½º ½Ã½ºÅÛ¿¡ ³Î¸® »ç¿ëµÇ°í ÀÖ´Ù. FHS ´Â ¸®´ª½º, BSD¿Í ½Ã½ºÅÛ V·ÎºÎÅÍ ¾ò¾îÁø ±³Èưú Á¢±Ù¹æ¹ýÀ» º´ÇÕÇÑ ÀÌÀü ¸®´ª½º ÆÄÀϽýºÅÛ ±¸Á¶ Ç¥ÁØ (Filesystem Structure Standard, FSSTND)ÀÇ °»½ÅÀÌ´Ù. FHS ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â http://www.pathname.com/fhs ¸¦ º¸¶ó. ÀÌ·¯ÇÑ ÇÕÀÇÀÇ ¿ä¾àÀº ¸®´ª½º¿Í ¼Ö¶ó¸®½º¿¡ ´ëÇØ °¢°¢ hier(5) ¿Í hier(7) ¿¡ ÀÖ´Ù. ¶§¶§·Î ¼·Î ´Ù¸¥ ÇÕÀǰ¡ ÀÏÄ¡ÇÏÁö ¾Ê´Âµ¥ °¡´ÉÇÑ ÀÌ·¯ÇÑ »óȲÀº ÄÄÆÄÀÏ ¶Ç´Â ¼³Ä¡½Ã¿¡ ¼³Á¤ÇÒ ¼ö ÀÖµµ·Ï ÇØ¶ó. ÀúÀÚ´Â FHS °¡ ¸®´ª½º ¹èÆ÷ÆÇµé°£ÀÇ È£È¯¼º Áõ´ë ¹× ¼ÒÇÁÆ®¿þ¾î ¾ÖÇø®ÄÉÀ̼ÇÀÌ È£È¯µÇ´Â ¸®´ª½º ½Ã½ºÅÛ¿¡¼ ÀÛµ¿ÇÒ ¼ö ÀÖµµ·Ï ÀÏ·ÃÀÇ Ç¥ÁØÀ» °³¹ß ¹× ÃËÁøÇÏ´Â Linux Standard Base¿¡ ÀÇÇØ äÅõǾúÀ½À» ƯÈ÷ ¾ð±ÞÇÑ´Ù. 3.3. System V ÇÁ·Î¼¼½º°£ Åë½Å¸®´ª½º¿Í System V ¸¦ Æ÷ÇÔÇÑ ¸¹Àº À¯´Ð½º °è¿ ½Ã½ºÅÛÀº System V IPC (Interprocess communication, ÇÁ·Î¼¼½º°£ Åë½Å) °´Ã¼¸¦ Áö¿øÇϴµ¥ ÀÌ´Â ¿ÀÇ ±×·ìÀÇ Single UNIX Specification ¹öÀü 2 [Open Group 1997] ¿¡ ÀÇÇØ ¿ä±¸µÈ´Ù. System V IPC °´Ã¼´Â System V ¸Þ½ÃÁö Å¥, ¼¼¸¶Æ÷¾î ÁýÇÕ ¹× °øÀ¯ ¸Þ¸ð¸® ¼¼±×¸ÕÆ® Áß Çϳª·Î ÀÌ·¯ÇÑ °¢ °´Ã¼´Â ´ÙÀ½ ¼Ó¼ºÀ» °®´Â´Ù:
ÀÌ·¯ÇÑ °´Ã¼¿¡ Á¢±ÙÇÒ ¶§ ´ÙÀ½ ±ÔÄ¢µéÀÌ Àû¿ëµÈ´Ù:
·çÆ® ¶Ç´Â ¼ÒÀ¯ÀÚÀ̰ųª »ý¼ºÀÚÀÇ EUID ¸¦ °®´Â ÇÁ·Î¼¼½º´Â ¼ÒÀ¯ UID ¹× GID ¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ°í/Àְųª °´Ã¼¸¦ Á¦°ÅÇÒ ¼ö ÀÖ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â ipc(5) ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. 3.4. ¼ÒÄϰú ³×Æ®¿öÅ© ¿¬°á¼ÒÄÏÀº ƯÈ÷ ³×Æ®¿öÅ©¸¦ ÅëÇÑ Åë½Å¿¡ »ç¿ëµÈ´Ù. ¼ÒÄÏÀº º»·¡ À¯´Ð½º ½Ã½ºÅÛÀÇ BSD °è¿¿¡¼ °³¹ßµÇ¾úÁö¸¸ ÀϹÝÀûÀ¸·Î ´Ù¸¥ À¯´Ð½º °è¿ ½Ã½ºÅÛÀ¸·Î À̽İ¡´ÉÇÏ´Ù: ¸®´ª½º¿Í System V º¯Çüµéµµ ¶ÇÇÑ ¼ÒÄÏÀ» Áö¿øÇϴµ¥ ¿ÀÇ ±×·ìÀÇ Single Unix Specification [Open Group 1997] Àº ¼ÒÄÏ Áö¿øÀ» ¿ä±¸Çϰí ÀÖ´Ù. System V ´Â ÀüÅëÀûÀ¸·Î ȣȯµÇÁö ¾Ê´Â ´Ù¸¥ ³×Æ®¿öÅ© Åë½Å ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇßÁö¸¸ ¼Ö¶ó¸®½º°°Àº ½Ã½ºÅÛÀÌ ¼ÒÄÏ Áö¿øÀ» Æ÷ÇÔÇÑ´Ù´Â °ÍÀ» ¾ð±ÞÇÏ´Â °ÍÀº °¡Ä¡°¡ ÀÖ´Ù. Socket(2) Àº Åë½ÅÀ» À§ÇÑ ³¡Á¡ (endpoint) ¸¦ »ý¼ºÇÏ¿© ÆÄÀÏ¿¡ ´ëÇÑ open(2) °ú À¯»çÇÑ ¹æ½ÄÀ¸·Î ±â¼úÀÚ (descriptor) ¸¦ ¹ÝȯÇÑ´Ù. ¼ÒÄÏ ¸Å°³º¯¼ö´Â ÀÎÅÍ³Ý µµ¸ÞÀÎ (TCP/IP ¹öÀü 4), Novell ÀÇ IPX ¶Ç´Â ``À¯´Ð½º µµ¸ÞÀÎ" °ú °°Àº ÇÁ·ÎÅäÄÝ °è¿°ú ŸÀÔÀ» ÁöÁ¤ÇÑ´Ù. ¼¹ö´Â °ðÀ̾î ÀϹÝÀûÀ¸·Î bind(2), listen(2) °ú accept(2) ¶Ç´Â select(2) ¸¦ È£ÃâÇϸç Ŭ¶óÀÌ¾ðÆ®´Â ÀϹÝÀûÀ¸·Î bind(2) (»ý·«µÉ ¼öµµ ÀÖ´Ù) ¿Í connect(2) ¸¦ È£ÃâÇÑ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â ÀÌ·¯ÇÑ ·çƾ °¢°¢ÀÇ ¸Ç ÆäÀÌÁö¸¦ º¸¶ó. ¸Ç ÆäÀÌÁö¿¡¼ ¼ÒÄÏ »ç¿ë¹æ¹ýÀ» ÀÌÇØÇÏ´Â °ÍÀº ¾î·Á¿ï ¼ö Àִµ¥ ÀÌ·¯ÇÑ È£ÃâÀ» ÇÔ²² ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¸¦ ¹è¿ì·Á¸é Hall "Beej" [1999] ¿Í °°Àº ´Ù¸¥ ³í¹®À» ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. ``À¯´Ð½º µµ¸ÞÀÎ ¼ÒÄÏ"Àº ½ÇÁ¦ ³×Æ®¿öÅ© ÇÁ·ÎÅäÄÝÀ» ³ªÅ¸³»Áö´Â ¾Ê´Âµ¥ ´Ù¸¸ µ¿ÀÏ ¸Ó½Å»óÀÇ ¼ÒÄÏ¿¡ Á¢¼ÓÇÒ ¼ö ÀÖ´Ù (Ç¥ÁØ ¸®´ª½º Ä¿³Î¿¡ ´ëÇÑ ÀÌ ±ÛÀ» ÀÛ¼ºÇÏ´Â ½ÃÁ¡¿¡´Â). ½ºÆ®¸²À¸·Î »ç¿ëµÉ ¶§ ÀÌ´Â ³×ÀÓµå ÆÄÀÌÇÁ¿Í ¾ÆÁÖ À¯»çÇÏÁö¸¸ »ó´çÇÑ ÀåÁ¡À» °®°í ÀÖ´Ù. ƯÈ÷ À¯´Ð½º µµ¸ÞÀÎ ¼ÒÄÏÀº Á¢¼Ó ÁöÇâÀ¸·Î ¼ÒÄÏÀ¸·ÎÀÇ »õ·Î¿î °¢ Á¢¼ÓÀº ³×ÀÓµå ÆÄÀÌÇÁ¿Í´Â ¸Å¿ì ´Ù¸£°Ô »õ·Î¿î Åë½Å ä³ÎÀ» »ý¼ºÇÑ´Ù. ÀÌ Æ¯¼º¶§¹®¿¡ À¯´Ð½º µµ¸ÞÀÎ ¼ÒÄÏÀº ´ë°³ ¸¹Àº Áß¿äÇÑ ¼ºñ½º¿¡ ´ëÇØ IPC ¸¦ ±¸ÇöÇϱâ À§ÇØ ³×ÀÓµå ÆÄÀÌÇÁ ´ë½Å »ç¿ëµÈ´Ù. ¾ð³×ÀÓµå ÆÄÀÌÇÁ¸¦ °¡Áú ¼ö ÀÖµíÀÌ socketpair(2) ¸¦ »ç¿ëÇÏ¿© ¾ð³×ÀÓµå À¯´Ð½º µµ¸ÞÀÎ ¼ÒÄÏÀ» °¡Áú ¼ö Àִµ¥ ÀÌ´Â ¾ð³×ÀÓµå ÆÄÀÌÇÁ¿Í À¯»çÇÑ ¹æ½ÄÀ¸·Î IPC ¿¡ ´ëÇØ À¯¿ëÇÏ´Ù. À¯´Ð½º µµ¸ÞÀÎ ¼ÒÄÏÀº º¸¾È°ú °ü·ÃÇØ¼ ¸î°¡Áö Àç¹ÌÀÖ´Â ÇÔÃàµÈ Àǹ̸¦ °®°í ÀÖ´Ù. ù° À¯´Ð½º µµ¸ÞÀÎ ¼ÒÄÏÀÌ ÆÄÀϽýºÅÛ¿¡ ³ªÅ¸³ª¸ç ÀÌ¿¡ Àû¿ëµÇ´Â stat(2) ¸¦ °¡Áú ¼ö ÀÖÀ½¿¡µµ ºÒ±¸Çϰí open(2) À» »ç¿ëÇØ¼ À̸¦ ¿ ¼ö´Â ¾ø´Ù (socket(2) ¿Í friends ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù). µÎ¹øÂ° À¯´Ð½º µµ¸ÞÀÎ ¼ÒÄÏÀº ÇÁ·Î¼¼½º°£ ÆÄÀÏ ±â¼úÀÚ¸¦ Àü´ÞÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù (±×Àú ÆÄÀÏ ³»¿ëÀÌ ¾Æ´Ñ). ´Ù¸¥ ¸ðµç IPC ¸ÞÄ«´ÏÁò¿¡¼ »ç¿ëÇÒ ¼ö ¾ø´Â ÀÌ·¯ÇÑ »ö´Ù¸¥ ´É·ÂÀº ¸ðµç ŸÀÔÀÇ Ã¼°è (scheme) ¸¦ ÇØÅ·Çϴµ¥ »ç¿ëµÇ¾î ¿Ô´Ù (±â¼úÀÚ´Â ÄÄÇ»ÅÍ °úÇÐ ºÐ¾ß¿¡¼ ±âº»ÀûÀ¸·Î ``´É·Â"ÀÇ Á¦ÇÑµÈ ¹öÀüÀ¸·Î »ç¿ëµÉ ¼ö ÀÖ´Ù). ÆÄÀÏ ±â¼úÀÚ´Â sendmsg(2) ¸¦ »ç¿ëÇÏ¿© º¸³»Áö´Âµ¥ msg (¸Þ½ÃÁö) ÀÇ msg_control Çʵå´Â Á¦¾î ¸Þ½ÃÁö Çì´õÀÇ ¹è¿À» °¡¸®Å²´Ù (msg_controllen Çʵ尡 ¹è¿¿¡ Æ÷ÇÔµÈ ¹ÙÀÌÆ®¼ö¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù). °¢ Á¦¾î ¸Þ½ÃÁö´Â µ¥ÀÌŸ ´ÙÀ½¿¡ ¿À´Â cmsghdr ±¸Á¶Ã¼·Î ÀÌ ¸ñÀûÀ» À§ÇØ cmsg_type À» SCM_RIGHTS ·Î ¼³Á¤ÇØ¾ß ÇÑ´Ù. ÆÄÀϱâ¼úÀÚ´Â recvmsg(2) ¸¦ ÅëÇØ °Ë»öµÇ¸ç À̶§ºÎÅÍ À¯»çÇÑ ¹æ½ÄÀ¸·Î ÃßÀûµÈ´Ù. ¼ÖÁ÷È÷ ÀÌ Æ¯Â¡Àº ¸Å¿ì »ö´Ù¸£Áö¸¸ ¾Ë¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Ù. ¸®´ª½º 2.2 ´Â À¯´Ð½º µµ¸ÞÀÎ ¼ÒÄÏ¿¡¼ ºÎ°¡ÀûÀΠƯ¡À» Áö¿øÇϴµ¥ peer ÀÇ "credentials" (pid, uid ¿Í gid) À» ¾òÀ» ¼ö ÀÖ´Ù. ´ÙÀ½Àº ¿¹Á¦ ÄÚµåÀÌ´Ù:
Ç¥ÁØ À¯´Ð½º¿¡¼´Â 1024 ¹Ì¸¸ÀÇ TCP ¿Í UDP Áö¿ª Æ÷Æ® ³Ñ¹ö·ÎÀÇ ¹ÙÀεùÀº ·çÆ® ±ÇÇÑÀ» °¡Á®¾ß ÇÏ¸ç ¸ðµç ÇÁ·Î¼¼½º´Â 1024 ¶Ç´Â ±× ÀÌ»óÀÇ unbound Æ÷Æ® ³Ñ¹ö¿¡ ¹ÙÀεåÇÒ ¼ö ÀÖ´Â °ÍÀÌ °ü·ÊÀÌ´Ù. ¸®´ª½º´Â ÀÌ °ü·Ê¸¦ ´õ¿í ¸íÈ®ÇÏ°Ô µû¸£´Âµ¥, ¸®´ª½º´Â 1024 ¹Ì¸¸ÀÇ Æ÷Æ® ³Ñ¹ö·Î ¹ÙÀεùÇϱâ À§Çؼ´Â CAP_NET_BIND_SERVICE ´É·ÂÀ» °®´Â ÇÁ·Î¼¼½º¸¦ ÇÊ¿ä·ÎÇÑ´Ù.; ÀÌ ´É·ÂÀº º¸Åë euid °¡ 0 ÀÎ ÇÁ·Î¼¼½º¸¸ÀÌ °®´Â´Ù. °ü½ÉÀÌ ÀÖ´Ù¸é ¸®´ª½º ¼Ò½º¸¦ »ìÆìº½À¸·Î½á À̸¦ È®ÀÎÇÒ ¼ö Àִµ¥ ¸®´ª½º 2.2.12 ÀÇ /usr/src/linux/net/ipv4/af_inet.c ÆÄÀÏ¿¡¼ inet_bind() ÇÔ¼ö¸¦ º¸¶ó. 3.5. ½Ã±×³Î½Ã±×³ÎÀº À¯´Ð½º °è¿ OS ¼¼°è¿¡¼ ``ÀÎÅÍ·´¼Ç (interruption, Áß´Ü)"ÀÇ °£´ÜÇÑ ÇüÅ·ΠÀ¯´Ð½ºÀÇ ¾ÆÁÖ ¿À·¡µÈ ºÎºÐÀÌ´Ù. ÇÁ·Î¼¼½º´Â ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ``½Ã±×³Î"À» ¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç (kill(1) ¶Ç´Â kill(2) ¸¦ »ç¿ëÇÏ¿©) ´Ù¸¥ ÇÁ·Î¼¼½º´Â ºñµ¿±âÀûÀ¸·Î ½Ã±×³ÎÀ» ¹Þ¾Æ ó¸®ÇÒ ¼ö ÀÖ´Ù. ÇÁ·Î¼¼½º°¡ ¾î¶² ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ½Ã±×³ÎÀ» º¸³»´Â °ÍÀÌ Çã¿ëµÇ±â À§Çؼ´Â ±× ÇÁ·Î¼¼½º°¡ ·çÆ® ±ÇÇÑÀ» °®°Å³ª ½ÇÁ¦ ¶Ç´Â À¯È¿ »ç¿ëÀÚ ID °¡ ½Ã±×³ÎÀ» ¹Þ´Â ÇÁ·Î¼¼½ºÀÇ ½ÇÁ¦ ¶Ç´Â À¯º¸µÈ (saved) set-user-ID ¿Í µ¿ÀÏÇØ¾ß ÇÑ´Ù. ±×·¯³ª ¸î¸î ½Ã±×³ÎÀº ´Ù¸¥ ¹æ¹ýÀ¸·Î º¸³»Áú ¼ö ÀÖ´Ù. ƯÈ÷ SIGURG ´Â TCP/IP ÀÇ out of band (OOB) ¸Þ½ÃÁö¸¦ ÅëÇÑ ³×Æ®¿öÅ©¸¦ ÅëÇØ Àü´ÞµÉ ¼ö ÀÖ´Ù. ½Ã±×³ÎÀÌ À¯´Ð½ºÀÇ ¾ÆÁÖ ¿À·¡µÈ ºÎºÐÀÓ¿¡µµ ºÒ±¸ÇÏ°í ½Ã±×³ÎÀº ¿©·¯°¡Áö ±¸Çö¿¡¼ ´Ù¸¥ ÀÇ¹Ì Ã¼°è¸¦ °®´Â´Ù. ±âº»ÀûÀ¸·Î "´Ù¸¥ ½Ã±×³ÎÀ» ó¸®ÇÏ´Â µ¿¾È ½Ã±×³ÎÀÌ ¹ß»ýÇÏ¸é ¾î¶² ÀÏÀÌ »ý±æ±î?" ÇÏ´Â Áú¹®ÀÌ ÇÑ ¿¹°¡ µÉ ¼ö Àִµ¥ »õ·Î¿î GNU libc ¶óÀ̺귯¸®º¸´Ù ¿À·¡µÈ ¸®´ª½º libc 5 ´Â ¾î¶² ½Ã±×³Î ¿¬»ê¿¡ ´ëÇØ ÀÏ·ÃÀÇ ´Ù¸¥ ÀÇ¹Ì Ã¼°è¸¦ »ç¿ëÇß´Ù. ½Ã±×³Î Çڵ鷯³»¿¡¼ C ¶óÀ̺귯¸® ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °ÍÀÌ ÇʼöÀûÀ¸·Î ¾ÈÀüÇÏÁö´Â ¾ÊÀºµ¥ °¢ È£Ãâ¿¡ ´ëÇØ ¹®¼¸¦ Á¶»çÇÒ Çʿ䰡 ÀÖ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â glibc FAQ ¸¦ º¸¶ó (¾î¶² ½Ã½ºÅÛ¿¡¼´Â /usr/doc/glibc-*/FAQ ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù). »õ·Î¿î ÇÁ·Î±×·¥¿¡ ´ëÇØ¼´Â ´ÜÁö POSIX ½Ã±×³Î ½Ã½ºÅÛ (BSD ¿¡ ±âÃÊÇÑ) À» »ç¿ëÇØ¶ó; ÀÌ´Â ³Î¸® Áö¿øµÇ°í ÀÖÀ¸¸ç ¿À·¡µÈ ½Ã±×³Î ½Ã½ºÅÛÀÌ °®°í ÀÖ´ø ¹®Á¦°¡ ¾ø´Ù. POSIX ½Ã±×³Î ½Ã½ºÅÛÀº sigset_t µ¥ÀÌŸ ŸÀÔ »ç¿ë¿¡ ±âÃÊÇϴµ¥ sigemptyset(), sigillset(), sigaddset(), sigdelset() °ú sigismember() µéÀÇ ÀÏ·ÃÀÇ ¿¬»êÀ» ÅëÇØ Á¶ÀÛµÉ ¼ö ÀÖ´Ù. sigsetops(3) ¿¡¼ ÀÌ¿¡ ´ëÇØ ÀÐÀ» ¼ö Àִµ¥ manipulate ½Ã±×³Î Çڵ鸵À» ¼³Á¤Çϱâ À§Çؼ´Â sigaction(2), sigprocmask(2) ¿Í sigsuspend(2) ¸¦ »ç¿ëÇØ¶ó (´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â ¸Ç ÆäÀÌÁö¸¦ º¸¶ó). ÀϹÝÀûÀ¸·Î ¸ðµç ½Ã±×³Î Çڵ鷯´Â ¸Å¿ì ª°í °£´ÜÇÏ°Ô ¸¸µé°í °æÀï »óŸ¦ ÁÖÀÇÇØ¼ ã¾Æ¶ó. ½Ã±×³ÎÀº º»ÁúÀûÀ¸·Î ºñµ¿±âÀûÀ̱⠶§¹®¿¡ ½±°Ô °æÀï »óŸ¦ ¾ß±âÇÒ ¼ö ÀÖ´Ù. ¼¹ö¿¡ ´ëÇØ °øÅëµÈ °ü·Ê°¡ Á¸ÀçÇÑ´Ù: SIGHUP ½Ã±×³ÎÀ» ¹ÞÀ¸¸é ¸ðµç ·Î±× ÆÄÀÏÀ» ´Ý°í ¼³Á¤ÆÄÀÏÀ» ´Ù½Ã ¿¾î ´Ù½Ã ÀÐÀº ÈÄ ·Î±× ÆÄÀÏÀ» ´Ù½Ã ¿¾î¾ß ÇÑ´Ù. À̸¦ ÅëÇØ ¼¹ö¸¦ ÁßÁöÇÏÁö ¾Ê°í Àç¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç µ¥ÀÌŸ ¼Õ½Ç¾øÀÌ ·Î±× ¼øÈ¯ (rotation) À» ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ °ü·Ê¸¦ µû¶ó¾ß ÇÏ´Â ¼¹ö¸¦ ÀÛ¼ºÇϰí ÀÖ´Ù¸é À̸¦ Áö¿øÇϱ⠹ٶõ´Ù. Michal Zalewski [2001] Àº ½Ã±×³Î Çڵ鷯°¡ ¾î¶»°Ô ¾Ç¿ëµÇ´Â°¡¿¡ ´ëÇÑ ÈǸ¢ÇÑ Áöµµ¼¸¦ ÀÛ¼ºÇÏ¿´°í ½Ã±×³Î °æÀï ¹®Á¦¸¦ Á¦°ÅÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ±Ç°í¸¦ ÇÏ¿´´Ù. ÀúÀÚ´Â ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ À§ÇØ ¿ä¾àÀ» º¸±â¸¦ ±ÇÇÑ´Ù; ´ÙÀ½Àº ÀúÀÚÀÇ ±Ç°í¾ÈÀ¸·Î Michal ÀÇ °Í°ú À¯»çÇÑ °ÍÀÌ´Ù:
3.6. ÄõÅÍ¿Í Çѵµ¸¹Àº À¯´Ð½º °è¿ ½Ã½ºÅÛÀº ÆÄÀϽýºÅÛ ÄõÅÍ (ÇÒ´ç) ¿Í ÇÁ·Î¼¼½º ÀÚ¿ø Çѵµ¸¦ Áö¿øÇÏ´Â ¸ÞÄ«´ÏÁòÀ» °®°í ÀÖÀ¸³à¸ç ¸®´ª½ºµµ Ʋ¸²¾øÀÌ À̸¦ Áö¿øÇÑ´Ù. ÀÌ ¸ÞÄ«´ÏÁòÀº ¼ºñ½º ºÎÀÎ °ø°ÝÀ» ¿¹¹æÇϴµ¥ ƯÈ÷ À¯¿ëÇѵ¥ °¢ »ç¿ëÀÚ°¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÚ¿ø¿¡ Çѵµ¸¦ ¼³Á¤ÇÔÀ¸·Î½á ÇÑ ¸íÀÇ »ç¿ëÀÚ°¡ ¸ðµç ½Ã½ºÅÛ ÀÚ¿øÀ» ¼ÒºñÇÏ´Â °ÍÀ» ¾î·Æ°Ô ÇÒ ¼ö ÀÖ´Ù. ÆÄÀϽýºÅÛ ÄõÅÍ¿Í ÇÁ·Î¼¼½º ÀÚ¿ø Çѵµ ¸ðµÎ ``hard" ¿Í ``soft" Çѵµ¸¦ °®´Âµ¥ ¿©±â¼ »ç¿ëµÈ Àü¹® ¿ë¾î¿¡ ÁÖÀÇÇØ¶ó. ¿ë¾î°¡ ¾à°£ ´Ù¸¥ Àǹ̸¦ °®´Â´Ù. »ç¿ëµÉ ¼ö ÀÖ´Â ½ºÅ丮Áö ºí·Ï ¼ö¿Í/¶Ç´Â °íÀ¯ ÆÄÀÏ ¼ö (¾ÆÀ̳ëµå) ¿¡ ´ëÇØ °¢ ¸¶¿îÆ®Æ÷ÀÎÆ®¿¡ ½ºÅ丮Áö (ÆÄÀϽýºÅÛ) ÄõÅÍ Çѵµ¸¦ Á¤ÀÇÇÒ ¼ö ÀÖÀ¸¸ç »ç¿ëÀÚ ¶Ç´Â ±×·ì¿¡ ´ëÇØ ÀÌ·¯ÇÑ Çѵµ¸¦ ¼³Á¤ÇÒ ¼öµµ ÀÖ´Ù. ``hard" ÄõÅÍ Çѵµ´Â Àý´ë·Î ÃʰúÇØ¼´Â ¾ÈµÇ´Â ÇѵµÀÌ¸ç ¹Ý¸é ``soft" ÄõÅÍ Çѵµ´Â ÀϽÃÀûÀ¸·Î ÃʰúµÉ ¼ö ÀÖ´Ù. quota(1), quotactl(2) °ú quotaon(8) À» º¸¶ó. rlimit ¸ÞÄ«´ÏÁòÀº ÆÄÀÏ Å©±â, ÀÚ½Ä ÇÁ·Î¼¼½º ¼ö, ¿ÀÇ ÆÄÀÏ ¼ö µî°ú °°ÀÌ ¸¹Àº ÇÁ·Î¼¼½º ÄõÅ͸¦ Áö¿øÇÑ´Ù. ``soft" Çѵµ (ÇöÀç Çѵµ) ¿Í "hard" Çѵµ (»óÀ§ Çѵµ) °¡ ÀÖÀ¸¸ç soft Çѵµ´Â ¾ðÁ¦³ª ÃʰúµÉ ¼ö ¾øÁö¸¸ È£ÃâÀ» ÅëÇØ hard Çѵµ °ªÀ¸·Î »óÇâ ¼³Á¤µÉ ¼ö ÀÖ´Ù. getrlimit(), setrlimit() °ú getrusage() ¸¦ º¸¶ó. PAM ¸ðµâ pam_limits ¸¦ Æ÷ÇÔÇÏ¿© ÀÌ·¯ÇÑ Çѵµ¸¦ ¼³Á¤Çϱâ À§ÇÑ ¿©·¯°¡Áö ¹æ½ÄÀÌ ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. 3.7. µ¿Àû ¸µÅ© ¶óÀ̺귯¸®½ÇÁ¦ÀûÀ¸·Î ¸ðµç ÇÁ·Î±×·¥Àº ½ÇÇàµÇ´Â ¶óÀ̺귯¸®¿¡ ÀÇÁ¸Çϴµ¥ ¸®´ª½º¸¦ Æ÷ÇÔÇÑ ÇöÀç ´ëºÎºÐÀÇ À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼ ÇÁ·Î±×·¥Àº µ¿Àû ¸µÅ© ¶óÀ̺귯¸® (Dynamically linked libraries, DLLs) ¸¦ »ç¿ëÇϵµ·Ï ÄÄÆÄÀϵȴÙ. ÀÌ·¯ÇÑ ¹æ½Ä¿¡ ÀÇÇØ ¶óÀ̺귯¸®¸¦ °»½ÅÇÒ ¼ö ÀÖÀ¸¸ç ±× ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥Àº °¡´ÉÇÑ °æ¿ì »õ·Î¿î ¹öÀü (¾Æ¸¶µµ Çâ»óµÈ) À» »ç¿ëÇÒ °ÍÀÌ´Ù. µ¿Àû ¸µÅ© ¶óÀ̺귯¸®´Â ÀϹÝÀûÀ¸·Î ¸î°³ÀÇ Æ¯Á¤ µð·ºÅ丮µé¿¡ ³õÀ̴µ¥ º¸Åë /lib, /usr/lib, PAM ÀÇ °æ¿ì /lib/security, X À©µµ¿ìÀÇ °æ¿ì /usr/X11R6/lib °ú /usr/local/lib µð·ºÅ丮µéÀÌ ÀÖ´Ù. ÇÁ·Î±×·¥¿¡¼ ÀÌ·¯ÇÑ Ç¥ÁØ °ü·Ê¸¦ »ç¿ëÇØ¾ß Çϴµ¥, µð¹ö±ëÁßÀÌ ¾Æ´Ï¶ó¸é ÇöÀç µð·ºÅ丮·ÎºÎÅÍ °è»êµÈ °ªÀ» µ¿Àû ¸µÅ© ¶óÀ̺귯¸®¿¡ ´ëÇÑ ¼Ò½º·Î »ç¿ëÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù (°ø°ÝÀÚ°¡ ÀÚ½ÅÀÌ ¼±ÅÃÇÑ ``¶óÀ̺귯¸®" °ªÀ» Ãß°¡ÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù). ¶óÀ̺귯¸® ³×Àְ̹ú À̵鿡 ´ëÇÑ ½Éº¼¸¯ »ý¼º¿¡ ÀÖ¾î Æ¯º°ÇÑ °ü·Ê°¡ ÀÖ´Ù. ƯÈ÷ ½Éº¼¸¯ »ý¼ºÀ» ÅëÇØ ¶óÀ̺귯¸®¸¦ °»½ÅÇÒ ¼ö ÀÖÀ¸¸ç ¿À·¡µÇ°í ¿ª ȣȯ¼ºÀÌ ¾ø´Â ¶óÀ̺귯¸® »ç¿ëÀ» ¿øÇÏ´Â ÇÁ·Î±×·¥À» Áö¿øÇÒ ¼öµµ ÀÖ´Ù. Ưº°ÇÑ ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¶§ ƯÁ¤ ¶óÀ̺귯¸® ¶Ç´Â ¶óÀ̺귯¸®³»ÀÇ Æ¯Á¤ ÇÔ¼ö¸¸À» ÀçÁ¤ÀÇÇÒ ¼ö ÀÖ´Â ¹æ¹ýµéµµ ÀÖ´Ù. ÀÌ´Â À©µµ¿ì °è¿ ½Ã½ºÅÛ¿¡ ´ëÇÑ À¯´Ð½º °è¿ ½Ã½ºÅÛÀÇ ÀåÁ¡ÀÌ´Ù; ÀúÀÚ´Â À¯´Ð½º °è¿ ½Ã½ºÅÛÀÌ ¶óÀ̺귯¸® °»½Å¿¡ ´ëÇØ ´õ¿í ÈǸ¢ÇÑ ½Ã½ºÅÛÀ̶ó°í ¹Ï°í Àִµ¥ À̰ÍÀÌ À¯´Ð½º¿Í ¸®´ª½º ½Ã½ºÅÛÀÌ À©µµ¿ì ±â¹Ý ½Ã½ºÅÛº¸´Ù ´õ¿í ¾ÈÁ¤ÇÏ´Ù°í Æò°¡µÇ´Â ÇѰ¡Áö ÀÌÀ¯ÀÌ´Ù. ¸ðµç ¸®´ª½º ½Ã½ºÅÛÀ» Æ÷ÇÔÇÏ¿© GNU glibc ¿¡ ±âÃÊÇÑ ½Ã½ºÅÛ¿¡¼ ÇÁ·Î±×·¥ ½Ãµ¿Áß¿¡ ÀÚµ¿ÀûÀ¸·Î °Ë»öµÇ´Â µð·ºÅ丮 ¸ñ·ÏÀº /etc/ld.so.conf ÆÄÀÏ¿¡ ÀúÀåµÇ¾î ÀÖ´Ù. ¸¹Àº ·¹µåÇÞ¿¡¼ ÆÄ»ýµÈ ¹èÆ÷ÆÇµéÀº ÀϹÝÀûÀ¸·Î /etc/ld.so.conf ÆÄÀÏ¿¡ /usr/local/lib ÀÌ Æ÷ÇԵǾî ÀÖÁö ¾Ê´Ù. ÀúÀÚ´Â À̸¦ ¹ö±×¶ó°í »ý°¢Çϴµ¥ ÀÌ·¯ÇÑ ¹èÆ÷ÆÇ¿¡¼ ¸¹Àº ÇÁ·Î±×·¥µéÀ» ÀÛµ¿½Ã۱â À§Çؼ´Â /usr/local/lib ¸¦ /etc/ld.so.conf ¿¡ Ãß°¡ÇÏ´Â ¼öÁ¤ ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù. ¶óÀ̺귯¸®¿¡¼ ´ÜÁö ¸î°³ÀÇ ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇÏ°í ³ª¸ÓÁö¸¦ ±×´ë·Î ÀÌ¿ëÇÏ·Á¸é /etc/ld.so.preload ¿¡ ÀçÁ¤ÀÇ ¶óÀ̺귯¸® (.o ÆÄÀÏ) À̸§À» ³Ö¾îÁÙ ¼ö ÀÖ´Ù; ÀÌ·± ``¼±ÀûÀç" ¶óÀ̺귯¸®´Â Ç¥ÁØ ¶óÀ̺귯¸®¿¡ ¿ì¼±µÈ´Ù. ÀÌ ¼±ÀûÀç ÆÄÀÏÀº ÀϹÝÀûÀ¸·Î ÀÀ±Þ ÆÐÄ¡¸¦ À§ÇØ »ç¿ëµÇ´Âµ¥ ¹èÆ÷ÆÇÀº Ãâ½ÃµÉ ¶§ ÀϹÝÀûÀ¸·Î ÀÌ·¯ÇÑ ÆÄÀÏÀ» Æ÷ÇÔÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÇÁ·Î±×·¥ ½Ãµ¿½Ã¿¡ ÀÌ·± ¸ðµç µð·ºÅ丮¸¦ °Ë»öÇÏ´Â °ÍÀº ¸Å¿ì ¸¹Àº ½Ã°£ÀÌ °É¸®´Âµ¥ ½ÇÁ¦·Î´Â ij½Ì ¹æ¹ýÀÌ »ç¿ëµÈ´Ù. ldconfig(8) ÇÁ·Î±×·¥Àº µðÆúÆ®·Î /etc/ld.so.conf ÆÄÀÏÀ» Àоîµé¿© µ¿Àû ¸µÅ© µð·ºÅ丮 (Ç¥ÁØ °ü·Ê¸¦ µû¸¥´Ù) ¿¡ ÀûÀýÇÑ ½Éº¼¸¯ ¸µÅ©¸¦ ¼³Á¤ÇÑ ÈÄ ³ªÁß¿¡ ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÒ Ä³½Ã¸¦ /etc/ld.so.cache ¿¡ ÀÛ¼ºÇÑ´Ù. µû¶ó¼ ldconfig °¡ DLL ÀÌ Ãß°¡µÉ¶§¸¶´Ù, DLL ÀÌ Á¦°ÅµÉ¶§ ¶Ç´Â DLL µð·ºÅ丮µéÀÌ º¯°æµÉ ¶§ ½ÇÇàµÇ¾î¾ß ÇÑ´Ù; ldconfig ¸¦ ½ÇÇà½ÃŰ´Â °ÍÀº ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÒ ¶§ ÆÐŰÁö °ü¸®ÀÚ°¡ ÀÚÁÖ ¼öÇàÇÏ´Â Á¶Ä¡ÁßÀÇ ÇϳªÀÌ´Ù. ½Ãµ¿½Ã ÇÁ·Î±×·¥Àº µ¿Àû ·Î´õ¸¦ »ç¿ëÇØ /etc/ld.so.cache ÆÄÀÏÀ» ÀÐ¾î µéÀÎ ÈÄ ÇÊ¿ä·Î ÇÏ´Â ¶óÀ̺귯¸®¸¦ ÀûÀçÇÏ´Â °ÍÀÌ´Ù. ´Ù¾çÇÑ È¯°æ º¯¼ö°¡ ÀÌ ÇÁ·Î¼¼½º¸¦ Á¦¾îÇÒ ¼ö ÀÖÀ¸¸ç »ç½Ç ÀÌ ÇÁ·Î¼¼½º¸¦ ÀçÁ¤ÀÇÇÒ ¼ö Àִ ȯ°æ º¯¼ö°¡ ÀÖ´Ù (µû¶ó¼ Ưº°ÇÑ ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â °æ¿ì ÀáÁ¤ÀûÀ¸·Î ´Ù¸¥ ¶óÀ̺귯¸®·Î ´ëüÇÒ ¼ö ÀÖ´Ù). ¸®´ª½º¿¡¼ LD_LIBRARY_PATH ´Â Ç¥ÁØ µð·ºÅ丮 ÁýÇÕ¿¡ ¾Õ¼ ¿ì¼±ÀûÀ¸·Î ¶óÀ̺귯¸®°¡ °Ë»öµÇ´Â ÄÝ·ÐÀ¸·Î ºÐ¸®µÈ µð·ºÅ丮 ÁýÇÕÀÌ´Ù; ÀÌ´Â »õ·Î¿î ¶óÀ̺귯¸® µð¹ö±ë ¶Ç´Â Ưº°ÇÑ ¸ñÀûÀ» À§ÇÑ ºñÇ¥ÁØ ¶óÀ̺귯¸® »ç¿ëÇÒ ¶§ À¯¿ëÇÏÁö¸¸ ÀÌ·¯ÇÑ µð·ºÅ丮¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Â ÇØ´ç »ç¿ëÀÚ°¡ À̵éÀ» ½Å·ÚÇØ¾ß ÇÔÀ» ¸í½ÉÇØ¶ó. LD_RELOAD º¯¼ö´Â /etc/ld.so.preload ÆÄÀÏÀÌ ÇÏ´Â °Íó·³ Ç¥ÁØ ÁýÇÕÀ» ÀçÁ¤ÀÇÇÏ´Â ÇÔ¼öµéÀ» °®´Â °´Ã¼ ÆÄÀÏÀ» ¿°ÅÇÑ´Ù. LD_DEBUG º¯¼ö´Â µð¹ö±ë Á¤º¸¸¦ º¸¿©ÁØ´Ù; ``all" ·Î ¼³Á¤µÈ´Ù¸é µð¹ö±ë½Ã¿¡ µ¿Àû ¸µÅ© ÇÁ·Î¼¼½º¿¡ ´ëÇÑ ¹æ´ëÇÑ Á¤º¸¸¦ º¸¿©ÁØ´Ù. »ç¿ëÀÚ°¡ µ¿Àû ¸µÅ© ¶óÀ̺귯¸®¸¦ Á¦¾îÇÒ ¼ö ÀÖ°Ô Çã¿ëÇÏ´Â °ÍÀº Ưº°ÇÑ Á¶Ä¡¸¦ ÃëÇÏÁö ¾Ê´Â´Ù¸é setuid/setgid ÇÁ·Î±×·¥ÀÇ °æ¿ì ¸Å¿ì À§ÇèÇÒ °ÍÀÌ´Ù. µû¶ó¼ GNU glibc ±¸Çö¿¡¼ setuid ¶Ç´Â setgid ÇÁ·Î±×·¥ÀÇ °æ¿ì ÀÌ·¯ÇÑ º¯¼ö (¶Ç´Â ´Ù¸¥ À¯»çÇÑ º¯¼ö) ´Â ¹«½ÃµÇ°Å³ª ±×µéÀÌ ÇÒ ¼ö ÀÖ´Â °ÍÀÌ Á¦ÇѵȴÙ. GNU glibc ¶óÀ̺귯¸®´Â ÇÁ·Î±×·¥ÀÇ credentials À» °Ë»çÇÔÀ¸·Î½á setuid ¶Ç´Â setgid ÇÁ·Î±×·¥ÀÎÁö¸¦ °áÁ¤ÇÑ´Ù; uid ¿Í euid ¶Ç´Â gid ¿Í egid °¡ ´Ù¸¥ °æ¿ì ¶óÀ̺귯¸®´Â setuid/setgid ÇÁ·Î±×·¥ (¶Ç´Â ÀÌ·¯ÇÑ ÇÁ·Î±×·¥ÀÇ ÀÚ¼Õ) À̶ó°í °£ÁÖÇØ¼ ¸µÅ©¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Â ´É·ÂÀ» ¸Å¿ì Á¦ÇÑÇÑ´Ù. GNU glibc ¶óÀ̺귯¸®¸¦ ÀûÀçÇÑ´Ù¸é ÀÌ·¯ÇÑ Çö»óÀ» º¼ ¼ö ÀÖ´Ù; ƯÈ÷ elf/rtld.c ¿Í sysdeps/generic/dl-sysdep.c ÆÄÀÏÀ» º¸¶ó. ÀÌ´Â uid ¿Í gid ¸¦ euid ¿Í egid ¿Í °°°Ô ¸¸µé¾î¼ ÇÁ·Î±×·¥À» È£ÃâÇÏ´Â °æ¿ì ÀÌ·¯ÇÑ º¯¼öµéÀÌ ÃÖ´ëÇÑ ¿µÇâÀ» ¹ÌÄ¥ °ÍÀÓÀ» ÀǹÌÇÑ´Ù. ´Ù¸¥ À¯´Ð½º °è¿ ½Ã½ºÅÛÀº ÀÌ »óȲÀ» ´Ù¸£Áö¸¸ µ¿ÀÏÇÑ ÀÌÀ¯·Î ´Ù·é´Ù: setuid/setgid ÇÁ·Î±×·¥Àº ȯ°æ º¯¼ö ¼Â¿¡ ÀÇÇØ ºÎ´çÇÏ°Ô ¿µÇâÀ» ¹ÞÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ¸®´ª½º ½Ã½ºÅÛ¿¡ ´ëÇØ¼ ÀúÀÚ°¡ ÀÛ¼ºÇÑ ¹®¼ÀÎ Program Library HOWTO ¿¡¼ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù. 3.8. °¨»ç¿©·¯°¡Áö À¯´Ð½º °è¿ ½Ã½ºÅÛÀº °¨»ç¸¦ ´Ù¸£°Ô ´Ù·ç´Âµ¥ ¸®´ª½º¿¡¼ ´ëºÎºÐÀÇ °øÅëµÈ ``°¨»ç" ¸ÞÄ«´ÏÁòÀº syslogd(8) ·Î º¸Åë klogd(8) °ú ÇÔ²² ÀÛµ¿ÇÑ´Ù. ¶ÇÇÑ wtmp(5), utmp(5), lastlog(8) °ú acct(2) ¸¦ »ìÆìº¼ ¼öµµ ÀÖ´Ù. ¾ÆÆÄÄ¡ À¥¼¹ö¿Í °°Àº ¾î¶² ¼¹ö ÇÁ·Î±×·¥µéÀº Àڽŵ鸸ÀÇ °¨»ç ÃßÀû (trail) ÇÁ·Î±×·¥À» °®°í ÀÖ´Ù. FHS ¿¡ µû¶ó °¨»ç ·Î±×´Â /var/log ¶Ç´Â ±× ÇϺΠµð·ºÅ丮¿¡ ÀúÀåµÇ¾î¾ß ÇÑ´Ù. 3.9. PAM½ã ¼Ö¶ó¸®½º¿Í °ÅÀÇ ¸ðµç ¸®´ª½º ½Ã½ºÅÛÀº ÀÎÁõÀ» À§ÇØ PAM (Pluggable Authenticatoin Module, ÀåÂø½Ä ÀÎÁõ ¸ðµâ) À» »ç¿ëÇÑ´Ù. PAM Àº ÀÎÁõ ¹æ¹ýÀÇ ·±Å¸ÀÓ ¼³Á¤À» Çã¿ëÇÑ´Ù (¿¹, ÆÐ½º¿öµå, ½º¸¶Æ® Ä«µå µîÀÇ »ç¿ë). PAM »ç¿ë¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 10.6절 ¸¦ º¸¶ó. 3.10. À¯´Ð½º °è¿ ½Ã½ºÅÛÀ» À§ÇÑ Àü¹®ÀûÀÎ º¸¾È È®À广´ëÇÑ ¾çÀÇ ¿¬±¸°ú °³¹ßÀÌ ´Ù¾çÇÑ Ä¿¹Â´ÏƼÀÇ º¸¾È ¿ä±¸¸¦ Áö¿øÇϱâ À§ÇØ À¯´Ð½º °è¿ ½Ã½ºÅÛÀ» È®ÀåÇØ¿Ô´Ù. ¿¹¸¦ µé¾î, ¸î°¡Áö À¯´Ð½º °è¿ ½Ã½ºÅÛÀº ¹Ì±¹ÀÇ ´ÙÁß ¼öÁØÀÇ ±º¿ë º¸¾ÈÀ» Áö¿øÇϱâ È®ÀåµÇ¾îÁ³´Ù. ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇÏ·Á¸é ÀÌ·¯ÇÑ È®Àå°ú ÇÔ²² ÀÛµ¿µÉ ¼ö ÀÖµµ·Ï ¼ÒÇÁÆ®¿þ¾î ¼³°è¸¦ ÇÏ·Á°í ³ë·ÂÇØ¾ß ÇÑ´Ù. FreeBSD ´Â jail(2) ¶ó´Â »õ·Î¿î ½Ã½ºÅÛ È£ÃâÀ» °®°í ÀÖ´Ù. jail ½Ã½ºÅÛ È£ÃâÀº ȯ°æÀ» ¸¹Àº °¡»ó ¸Ó½ÅÀ¸·Î ÇϺÎ-ÆÄƼ¼Å´×ÇÒ ¼ö ÀÖ°Ô Áö¿øÇÑ´Ù (``super-chroot" ÀǹÌ); ÀÌ´Â ÀÎÅÍ³Ý ¼ºñ½º °ø±Þ¾÷ÀÚ (ISP) °¡ °¡»ó ¸Ó½Å ¼ºñ½º¸¦ Á¦°øÇÒ ¼ö Àִ ȯ°æÀ» ±¸ÃàÇϴµ¥ ÀÖ¾î ¸Å¿ì ³Î¸® »ç¿ëµÇ°í ÀÖ´Ù. jail ³»¿¡¼ ¸ðµç ÇÁ·Î¼¼½º (·çÆ® ¼ÒÀ¯ÀÇ ÇÁ·Î¼¼½ºÀÏÁö¶óµµ) ´Â jail ·Î Á¦ÇÑµÈ ¿äû ¹üÀ§¸¦ °®´Â´Ù. FreeBSD °¡ óÀ½ ¼³Ä¡µÇ¾î ºÎÆÃµÉ ¶§ ¾î¶°ÇÑ ÇÁ·Î¼¼½ºµµ jail ³»¿¡´Â Á¸ÀçÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÇÁ·Î¼¼½º°¡ jail ³»¿¡ ³õÀÏ ¶§ ±× ÇÁ·Î¼¼½º ¹× ¸ðµç ÀÚ¼Õ ÇÁ·Î¼¼½º´Â ±× jail ³»¿¡ Á¸ÀçÇÒ °ÍÀÌ´Ù. ÀÏ´Ü jail ³»¿¡ ÀÖ´Ù¸é ÆÄÀÏ ³×ÀÓ-°ø°£Àº chroot(2) (ÀϹÝÀûÀÎ chroot À̽ºÄÉÀÌÇÁ ·çÆ® (route) ´Â ºí·°µÇ¾î ÀÖ´Ù) ¸¦ ÅëÇØ¼¸¸ Á¢±ÙÇÒ ¼ö ÀÖÀ¸¸ç ³×Æ®¿öÅ© ÀÚ¿øÀº ƯÁ¤ IP ÁÖ¼ÒÀÇ °æ¿ì¸¸ ¹ÙÀεùÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ½Ã½ºÅÛ ÀÚ¿ø Á¶ÀÛ ¹× Ư±ÇÀ» °®´Â ¿¬»êÀ» ¼öÇàÇÒ ¼ö ÀÖ´Â ´É·ÂÀº °©ÀÚ±â Ãà¼ÒµÇ¸ç ´Ù¸¥ ÇÁ·Î¼¼½º¿Í »óÈ£ÀÛ¿ëÇÒ ¼ö ÀÖ´Â ´É·Âµµ µ¿ÀÏ jail ³»ÀÇ ÇÁ·Î¼¼½º·Î¸¸ Á¦ÇѵȴÙ. °¢ jail Àº ÇϳªÀÇ IP ÁÖ¼Ò¿¡ ¹Ù¿îµåµÇ¾î ÀÖÀ½À» ÁÖ¸ñÇØ¶ó; jail ³»ÀÇ ÇÁ·Î¼¼½º´Â ³ª°¡°Å³ª µé¾î¿À´Â Á¢¼Ó¿¡ ´ëÇØ ´Ù¸¥ ¸ðµç IP ÁÖ¼Ò¸¦ »ç¿ëÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù. POSIX ´É·Â°ú Ưº°ÇÑ ¸¶¿îÆ®-time ¿É¼Ç°ú °°ÀÌ ¸®´ª½º¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾à°£ÀÇ È®ÀåÀº ÀÌ¹Ì ³íÀǵǾúÀ¸¸ç ¸®´ª½º ½Ã½ºÅÛ¿¡ ´ëÇØ Á¦ÇÑµÈ ½ÇÇà ȯ°æÀ» »ý¼ºÇϱâ À§ÇØ ¾à°£ÀÇ ³ë·ÂÀÌ ÀÖ¾î ¿Ô´Ù; ¸¹Àº ´Ù¸¥ Á¢±Ù ¹æ¹ýÀÌ ÀÖ´Ù. ¹Ì±¹ÀÇ National Security Agency (NSA) ´Â Àü¹®ÈµÈ ¾ð¾î·Î º¸¾È Á¤Ã¥ÀÇ Á¤ÀǸ¦ Áö¿øÇϰí ÀÌ Á¤Ã¥À» Àû¿ëÇÏ´Â Security-Enhanced Linux (Flask) ¸¦ °³¹ßÇß´Ù. Medusa DS9 Àº Ä¿³Î ¼öÁØ¿¡¼ »ç¿ëÀÚ °ø°£ Àΰ¡ ¼¹ö¸¦ Áö¿øÇÔÀ¸·Î½á ¸®´ª½º¸¦ È®ÀåÇÑ´Ù. LIDS ´Â °ü¸®ÀÚ·Î ÇÏ¿©±Ý ½Ã½ºÅÛÀ» ·ÎÅ© ´Ù¿î (lock down) ÇÒ ¼ö ÀÖ°Ô ÇÔÀ¸·Î½á ÆÄÀϰú ÇÁ·Î¼¼½º¸¦ º¸È£ÇÑ´Ù. ``Rule Set Based Access Control" ½Ã½ºÅÛ RSBAC ´Â Abrams ¿Í Lapadula ¿¡ ÀÇÇÑ Generalized Framework for Access Control (GFAC) ¿¡ ±âÃÊÇϴµ¥ ¸î¸î Ä¿³Î ¸ðµâ¿¡ ±âÃÊÇØ Á¢±Ù Á¦¾î¸¦ ÇÒ ¼ö ÀÖ´Â À¯¿¬ÇÑ ½Ã½ºÅÛÀ» Á¦°øÇÑ´Ù. Subterfugue ´Â ``observing and playing with the reality of software" ÀÇ »À´ë·Î ½Ã½ºÅÛ È£ÃâÀ» °¡·Îä ±× ¸Å°³º¯¼ö¿Í/¶Ç´Â ¹Ýȯ°ªÀ» º¯°æÇØ sandbox, ÃßÀû±â µîÀ» ±¸ÇöÇÒ ¼ö ÀÖ´Ù; ÀÌ´Â º¯°æ¾øÀÌ (¾î¶°ÇÑ Ä¿³Î ¼öÁ¤µµ ÇÊ¿äÇÏÁö ¾Ê´Ù) ¸®´ª½º 2.4 ÇÏ¿¡¼ ÀÛµ¿ÇÑ´Ù. Janus ´Â Á¦ÇÑµÈ ½ÇÇà ȯ°æ³»¿¡¼ ½Å·ÚµÇÁö ¾ÊÀº ¾ÖÇø®ÄÉÀ̼ÇÀ» sandboxing Çϱâ À§ÇÑ º¸¾È µµ±¸ÀÌ´Ù. ¾î¶² »ç¶÷Àº sandbox ±¸ÇöÀ¸·Î "Linux on Linux" À» ±¸ÇöÇÑ User-mode Linux µµ »ç¿ëÇß´Ù. ´õ¿í º¹ÀâÇÑ º¸¾È ¸ðµ¨À» ±¸ÇöÇϱâ À§ÇÑ ¸¹Àº ´Ù¸¥ Á¢±Ù ¹æ¹ýÀÌ Àֱ⠶§¹®¿¡ Linus Torvals ´Â »óÀÌÇÑ º¸¾È Á¤Ã¥ÀÌ »ðÀ﵃ ¼ö ÀÖµµ·Ï ÀϹÝÀûÀÎ Á¢±Ù ¹æ¹ýÀÌ °³¹ßµÇ¾î¾ß ÇÑ´Ù°í ¿äûÇß´Ù; ÀÌ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â http://mail.wirex.com/mailman/listinfo/linux-security-module ¸¦ º¸¶ó. ´Ù¾çÇÑ À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼ º¸¾È¿¡ ´ëÇØ ¸¹Àº ´Ù¸¥ È®ÀåµéÀÌ ÀÖÁö¸¸ ÀÌ´Â ½ÇÁ¦·Î ÀÌ ¹®¼°¡ ´Ù·ç´Â ¹üÀ§¸¦ ³Ñ¾î¼±´Ù. 4장. ¸ðµç ÀÔ·ÂÀ» È®ÀÎÇØ¶ó
¾î¶² ÀÔ·ÂÀº ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀڷκÎÅÍ ¿Ã ¼ö Àִµ¥ ÀÌ·± ÀԷµéÀº »ç¿ëÇϱâ Àü¿¡ ±× Á¤´ç¼ºÀ» ÀÔÁõÇϰųª ÇÊÅ͸µµÇ¾î¾ß ÇÑ´Ù. ¹«¾ùÀÌ ÇÕ¹ýÀûÀÎ °ÍÀΰ¡¸¦ °áÁ¤Çؼ ±× Á¤ÀÇ¿Í ÀÏÄ¡ÇÏ´Â ¾Ê´Â ¸ðµç °ÍÀ» °ÅÀýÇØ¾ß ÇÑ´Ù. ¹«¾ùÀÌ ºñÇÕ¹ýÀûÀÎ °ÍÀΰ¡¸¦ ½Äº°Çؼ ±×·¯ÇÑ °æ¿ì¸¦ °ÅÀýÇÏ´Â Äڵ带 ÀÛ¼ºÇÏ´Â °Í°ú °°Àº ¹Ý´ëÀÇ °æ¿ì´Â ÇÏÁö¸¶¶ó. ºñÇÕ¹ýÀûÀÎ ÀÔ·ÂÀÇ Áß¿äÇÑ ½Ç·Ê¸¦ ´Ù·ç´Â °ÍÀ» ÀØÀ» ¼ö Àֱ⠶§¹®ÀÌ´Ù. ±×·¸Áö¸¸ ºñÇÕ¹ýÀûÀÎ °ªÀ» ½Äº°ÇØ¾ß ÇÏ´Â ÁÁÀº ÀÌÀ¯°¡ Àִµ¥ ÀÌ´Â ¹Ýµå½Ã È®ÀÎ (validation) Äڵ带 öµÎö¹ÌÇÏ°Ô ÀÛ¼ºÇϱâ À§ÇÑ ÀÏ·ÃÀÇ Å×½ºÆ® (º¸Åë ¸Ó¸®¼Ó¿¡¼ ½ÇÇàµÇ´Â) ¿Í °°´Ù. ÀúÀÚ´Â ÀÔ·Â ÇÊÅ͸¦ ¼³Á¤ÇÒ ¶§ ÇÊÅ͸µµÇÁö ¾ÊÀ» ¼ö ÀÖ´Â ºñÇÕ¹ýÀûÀÎ °ªÀÌ ÀÖ´ÂÁö º¸±â À§ÇØ ¸¶À½¼ÓÀ¸·Î ÇÊÅ͸¦ °ø°ÝÇÑ´Ù. ´ÙÀ½Àº ÀԷ¿¡ µû¶ó ÀÔ·Â ÇÊÅͰ¡ ¿¹¹æÇÒ Çʿ䰡 ÀÖ´Â °øÅëµÈ ºñÇÕ¹ýÀûÀÎ °ªµéÀÇ ¿¹ÀÌ´Ù: ºó ¹®ÀÚ¿, ".", "..", "../", "/" ¶Ç´Â "." ·Î ½ÃÀÛÇÏ´Â ¸ðµç °Í, ¾È¿¡ "/" ¶Ç´Â "&" °¡ ÀÖ´Â ¸ðµç °Í, ¸ðµç Á¦¾î ¹®ÀÚ (ƯÈ÷ NIL °ú °³Çà) ¿Í/¶Ç´Â "high bit" ÀÌ ¼³Á¤µÇ¾î ÀÖ´Â ¸ðµç ¹®ÀÚ (ƯÈ÷ ½ÊÁø¼ö 254 ¿Í 255 °ª). ´Ù½Ã Çѹø ÀÛ¼ºÇÑ ÄÚµå´Â "bad" °ª¿¡ ´ëÇØ °Ë»çµÇÁö ¾Ê¾Æ¾ß ÇÑ´Ù: ¹Ýµå½Ã ÆÐÅÏÀÌ ÀÔ·Â °ªÀ» ÇÕ¹ýÀûÀÎ °ªÀ¸·Î ¾ö°ÝÈ÷ Á¦ÇÑÇϵµ·Ï À̸¦ ¸¶À½¼ÓÀ¸·Î °Ë»çÇØ¾ß ÇÑ´Ù. ÆÐÅÏÀÌ ÃæºÐÈ÷ ¾ö¹ÐÇÏÁö ¾Ê´Ù¸é ´Ù¸¥ ¹®Á¦°¡ ÀÖ´Â Áö¸¦ »ìÆì º¸±â À§ÇØ ÆÐÅÏÀ» ÁÖÀDZí°Ô ÀçÁ¶»çÇØ¾ß ÇÑ´Ù. ÃÖ´ë ¹®ÀÚ ±æÀÌ (ÀûÀýÇÏ´Ù¸é ÃÖ¼Ò ±æÀÌ) ¸¦ Á¦ÇÑÇÏ°í ±×·¯ÇÑ ±æÀ̰¡ ÃʰúµÉ ¶§ ¹Ýµå½Ã Á¦¾î°¡ µÇµµ·Ï ÇØ¶ó (¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇÑ ´õ¿í ¸¹Àº Á¤º¸´Â 5장 À» º¸¶ó). ´ÙÀ½Àº ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀڷκÎÅÍ ¿Â °Íµé »ç¿ëÇϱâ Àü¿¡ È®ÀÎÇØ¾ß ÇÏ´Â ¾à°£ÀÇ °øÅëÀûÀÎ µ¥ÀÌŸ ŸÀÔ°ú ÀԷµéÀÌ´Ù:
À§¿¡ ¾ð±ÞÇÑ »çÇ×À» °í·ÁÇÏÁö ¾Ê´Â´Ù¸é ÇÕ¹ýÀû ¹®ÀÚ ÆÐÅÏ¿¡ ÇÁ·Î±×·¥ ³»ºÎ ¶Ç´Â °á°ú·Î½á »ý±â´Â Ãâ·Â¿¡ ´ëÇØ Ưº°ÇÑ Àǹ̸¦ °®´Â ¹®ÀÚµé ¶Ç´Â ÀÏ·ÃÀÇ ¹®ÀÚµéÀ» Æ÷ÇÔÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù:
ÀÌ·¯ÇÑ Å×½ºÆ®´Â ÃßÈÄ ¼öÁ¤À» À§ÇØ Å¸´ç¼º Å×½ºÆ®¸¦ ½±°Ô »ìÆìº¼ ¼ö ÀÖµµ·Ï ÇÑ °÷¿¡ ÁýÁߵǾî ÀÖ¾î¾ß ÇÑ´Ù. Ÿ´ç¼º Å×½ºÆ®°¡ ½ÇÁ¦·Î Á¤È®ÇÔÀ» È®ÀÎÇØ¶ó; ÀÌ´Â ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÒ ÀÔ·Â (ÆÄÀÏ À̸§, À̸ÞÀÏ ÁÖ¼Ò ¶Ç´Â URL µî) À» °Ë»çÇÒ ¶§ ƯÈ÷ ¹®Á¦°¡ µÈ´Ù. ´ë°³ ÀÌ·¯ÇÑ Å×½ºÆ®´Â °Ë»ç ÇÁ·Î±×·¥°ú ½ÇÁ¦ µ¥ÀÌŸ¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÌ ´Ù¸¥ °¡Á¤À» ÇÏ´Â °æ¿ì ¹Ì¹¦ÇÑ ¿¡·¯¸¦ °®´Âµ¥ ¼ÒÀ§ "´ë¸® (deputy) ¹®Á¦" ¸¦ ¾ß±âÇÑ´Ù. °ü·ÃµÈ Ç¥ÁØÀÌ ÀÖ´Ù¸é À̸¦ »ìÆìº¸°í ¶ÇÇÑ ÇÁ·Î±×·¥ÀÌ °¢ÀÚ°¡ ¾Ë¾Æ¾ß Çʿ䰡 ÀÖ´Â È®ÀåÀ» °¡Áö°í ÀÖ´ÂÁö »ìÆìº¸±â À§ÇØ °Ë»öÇØ¶ó. »ç¿ëÀÚ ÀÔ·ÂÀ» ÇØ¼®ÇÒ ¶§ ÀϽÃÀûÀ¸·Î ¸ðµç ±ÇÇÑÀ» ¾ø¾Ö°Å³ª ´õ ³ª¾Æ°¡¼ º°°³ÀÇ ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÏ´Â °Í (ÆÄ¼ÀÇ ±ÇÇÑÀ» ¿µ±¸ÀûÀ¸·Î ¾ø¾Ö°í ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ÆÄ¼ ¿äû¿¡ ´ëÇØ º¸¾È °Ë»ç¸¦ ¼öÇàÇÑ´Ù) Àº ÁÁÀº »ý°¢ÀÌ´Ù. ÀÌ´Â ÆÄ½Ì ŽºÅ©°¡ º¹ÀâÇϰųª (lex ¶Ç´Â yacc ¿Í À¯»çÇÑ µµ±¸¸¦ »ç¿ëÇÏ´Â °æ¿ì) ¶Ç´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î (¿¹, C ¿Í C++) °¡ ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇØ º¸È£ÇÏÁö ¾Ê´Â´Ù¸é ƯÈ÷ µé¾î¸Â´Â´Ù. ±ÇÇÑ ÃÖ¼ÒÈ¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾ò±â À§Çؼ´Â 6.3절 À» º¸¶ó. º¸¾È °áÁ¤ (¿¹, »ç¿ëÀÚ¿¡°Ô ·Î±×ÀÎ Çã¿ë) ¿¡ µ¥ÀÌŸ¸¦ »ç¿ëÇÒ ¶§ ¹Ýµå½Ã ½Å·ÚÇÒ ¼ö Àִ ä³ÎÀ» »ç¿ëÇØ¶ó. ¿¹¸¦ µé¾î °ø°³ ÀÎÅͳݿ¡¼ »ç¿ëÀÚ¸¦ ÀÎÁõÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀ¸·Î ¸Ó½Å IP ÁÖ¼Ò ¶Ç´Â Æ÷Æ® ³Ñ¹ö¸¦ »ç¿ëÇÏÁö ¸¶¶ó. ´ëºÎºÐÀÇ È¯°æ¿¡¼ ÀÌ Á¤º¸´Â ¾î¼¸é ¾ÇÀÇÀÖ´Â »ç¿ëÀÚ¿¡ ÀÇÇØ ¼³Á¤µÉ ¼ö ÀÖ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 6.9절 ¸¦ º¸¶ó. ´ÙÀ½ ÇϺΠÀýÀº ´Ù¾çÇÑ Á¾·ùÀÇ ÀÔ·ÂÀ» ³íÀÇÇÑ´Ù; ÀÔ·ÂÀº ȯ°æ º¯¼ö, umask °ª µî°ú °°Àº ÇÁ·Î¼¼½º »óŸ¦ Æ÷ÇÔÇÔÀ» ÁÖ¸ñÇØ¶ó. ¸ðµç ÀÔ·ÂÀÌ ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀÚ¿¡ ÀÇÇØ Á¦¾îµÉ ¼ö´Â ¾ø´Âµ¥ µû¶ó¼ ÀÌ·¯ÇÑ »ç¿ëÀÚ°¡ Á¦¾îÇÒ ¼ö ÀÖ´Â ±×·¯ÇÑ ÀԷ¿¡ ´ëÇØ¼¸¸ ÁÖÀǸ¦ ±â¿ïÀÌ¸é µÈ´Ù. 4.1. ¸í·É ÇูÀº ÇÁ·Î±×·¥Àº ¸í·É Çà (command line) ¿¡¼ ÀÔ·ÂÀ» ¹Þ´Â´Ù. ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀÚ´Â setuid/setgid ÇÁ·Î±×·¥ÀÇ ¸í·ÉÇà µ¥ÀÌŸ¸¦ Á¦°øÇϴµ¥ µû¶ó¼ setuid/setgid ÇÁ·Î±×·¥Àº ÀáÀçÀûÀ¸·Î À§ÇùÀÌ µÇ´Â ¸í·É Çà °ªµé·ÎºÎÅÍ ÀÚ½ÅÀ» º¸È£ÇØ¾ß ÇÑ´Ù. °ø°ÝÀÚ´Â execve(3) È£Ãâ°ú °°Àº ¸í·É ÇàÀ» ÅëÇØ ±×Àú ¸ðµç Á¾·ùÀÇ µ¥ÀÌŸ¸¦ º¸³¾ °ÍÀÌ´Ù. µû¶ó¼ setuid/setgid ÇÁ·Î±×·¥Àº ¸í·É Çà ÀÔ·ÂÀ» ¿Ïº®È÷ È®ÀÎÇØ¾ß ÇÏ¸ç ¸í·É Çà Àμö 0 À¸·Î º¸°íµÈ ÇÁ·Î±×·¥ (°ø°ÝÀÚ´Â À̸¦ NULL À» Æ÷ÇÔÇÑ ¾î¶°ÇÑ °ªÀ¸·Îµµ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù) ÀÇ À̸§À» ¹Ï¾î¼´Â ¾ÈµÈ´Ù. 4.2. ȯ°æ º¯¼öµðÆúÆ®·Î ȯ°æ º¯¼ö´Â ºÎ¸ð ÇÁ·Î¼¼½º·ÎºÎÅÍ »ó¼ÓµÈ´Ù. ±×·¯³ª ÇÁ·Î±×·¥ÀÌ ´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¶§ È£ÃâÇÏ´Â ÇÁ·Î±×·¥ÀÌ È¯°æ º¯¼ö¸¦ ÀÓÀÇÀÇ °ªÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â setuid/setgid ÇÁ·Î±×·¥ÀÇ °æ¿ì À̵éÀÇ È£ÃâÀÚ°¡ ÁÖ¾îÁø ȯ°æ º¯¼öµéÀ» ¿Ïº®È÷ Á¦¾îÇÒ ¼ö Àֱ⠶§¹®¿¡ À§ÇèÇÏ´Ù. ȯ°æ º¯¼ö´Â º¸Åë »ó¼ÓµÇ±â ¶§¹®¿¡ ÀÌ´Â ¶ÇÇÑ °úµµÀûÀ¸·Î Àû¿ëµÇ´Âµ¥ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ ¾î¶² ´Ù¸¥ ÇÁ·Î±×·¥À» È£ÃâÇÒ ¼öµµ ÀÖÀ¸¸ç Ưº°ÇÑ Á¶Ä¡°¡ ¾ø´Ù¸é ÀáÀçÀûÀ¸·Î À§ÇèÇÑ È¯°æ º¯¼ö¸¦ ÀÚ½ÅÀÌ È£ÃâÇÑ ÇÁ·Î±×·¥¿¡ ³Ñ°ÜÁÙ ¼ö ÀÖ´Ù. ´ÙÀ½ ÇϺΠÀýÀº ȯ°æ º¯¼ö ¹× À̸¦ °®°í ÇÏ´Â ÀÏÀ» ³íÀÇÇÑ´Ù. 4.2.1. ¸î¸î ȯ°æ º¯¼ö´Â À§ÇèÇÏ´Ù¸î¸î ȯ°æ º¯¼öµéÀº ¸ðÈ£ÇÑ, ¹Ì¹¦ÇÑ ¶Ç´Â ºñ°øÀÎµÈ (undocumented) ¹æ½ÄÀ¸·Î ¸¹Àº ¶óÀ̺귯¸®¿Í ÇÁ·Î±×·¥À» Á¦¾îÇϱ⠶§¹®¿¡ À§ÇèÇÏ´Ù. ¿¹¸¦ µé¾î IFS º¯¼ö´Â ¾î¶² ¹®ÀÚ°¡ ¸í·É Çà ÀμöµéÀ» ±¸ºÐÇÏ´Â Áö¸¦ °áÁ¤Çϱâ À§ÇØ sh °ú bash ½©¿¡ ÀÇÇØ »ç¿ëµÈ´Ù. ½©Àº ¸î°¡Áö ÇÏÀ§ ¼öÁØ È£Ãâ (C ¿¡¼ system(3) °ú popen(3) ¶Ç´Â ÆÞ¿¡¼ back-tick ¿¬»êÀÚ) ¿¡ ÀÇÇØ È£ÃâµÇ±â ¶§¹®¿¡ IFS º¯¼ö¸¦ ¿¹¿ÜÀûÀÎ °ªÀ¸·Î ¼³Á¤ÇÑ´Ù¸é ¸í¹éÈ÷ ¾ÈÀüÇÑ È£ÃâÀ» ÆÄ±«ÇÒ °ÍÀÌ´Ù. ÀÌ µ¿ÀÛÀº sh ¿Í bash ¿¡ ¹®¼ÈµÇ¾î ÀÖÁö¸¸ ±× Àǹ̴ ¸ðÈ£ÇÏ´Ù; ¸¹Àº ¿À·¡µÈ »ç¿ëÀڵ鸸ÀÌ ½ÇÁ¦·Î ÀǵµµÈ ¸ñÀû¿¡ »ç¿ëÇϱ⠶§¹®ÀÌ ¾Æ´Ï¶ó º¸¾ÈÀ» ±ú¶ß¸®´Âµ¥ IFS º¯¼ö¸¦ »ç¿ëÇϱ⠶§¹®¿¡ ÀÌ¿¡ ´ëÇØ ¾Ë°í ÀÖ´Ù. ´Ù¿í ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀº °ÍÀº ¸ðµç ȯ°æ º¯¼ö°¡ ¹®¼ÈµÇ¾î ÀÖÁö ¾ÊÀ¸¸ç ÀÖ´Ù°í ÇÏ´õ¶óµµ ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ À§ÇèÇÑ È¯°æ º¯¼ö¸¦ º¯°æ ¹× Ãß°¡ÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. µû¶ó¼ ÀÌ ¹®Á¦¿¡ ´ëÇÑ À¯ÀÏÇÑ ½ÇÁ¦ ÇØ°áÃ¥ (¹ØºÎºÐ¿¡ ±â¼úµÇµíÀÌ) Àº ÇÊ¿äÇÑ È¯°æ º¯¼ö¸¸ ¼±ÅÃÇÏ°í ³ª¸ÓÁö ¸ðµç º¯¼ö´Â ¹ö¸®´Â °ÍÀÌ´Ù. 4.2.2. ȯ°æ º¯¼ö ÀúÀå Æ÷¸ËÀº À§ÇèÇÏ´ÙÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¥Àº ȯ°æ º¯¼ö¿¡ Á¢±ÙÇϱâ À§ÇØ Ç¥ÁØ Á¢±Ù ·çƾÀ» »ç¿ëÇϴµ¥ ¿¹¸¦ µé¾î, C ¿¡¼´Â getenv(3) À» ÀÌ¿ëÇÏ¿© ȯ°æ º¯¼ö¸¦ ¾ò°í POSIX Ç¥ÁØ ·çƾ putenv(3) ¶Ç´Â BSD È®Àå setenv(3) ¸¦ ÀÌ¿ëÇÏ¿© À̸¦ ¼³Á¤Çϸç unsetenv(3) À» ÀÌ¿ëÇÏ¿© À̸¦ Á¦°ÅÇÑ´Ù. setenv(3) ´Â ¸®´ª½º¿¡¼µµ ±¸ÇöµÇ¾î ÀÖÀ½À» ÀúÀÚ´Â ¾ð±ÞÇÑ´Ù. ±×·¯³ª Å©·¢Ä¿°¡ ±×·¸°Ô ¿µ¸®ÇÒ ÇÊ¿ä´Â ¾øÀ¸¸ç Å©·¢Ä¿´Â execve(2) ¸¦ »ç¿ëÇÏ¿© ÇÁ·Î±×·¥¿¡ ³Ñ°ÜÁö´Â ȯ°æ º¯¼ö µ¥ÀÌŸ ¿µ¿ªÀ» Á÷Á¢ÀûÀ¸·Î Á¦¾îÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ´Ù¼ÒÀÇ ´Ù·ç±â Èûµç °ø°ÝÀ» Çã¿ëÇϸç ȯ°æ º¯¼ö°¡ ½ÇÁ¦·Î ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö ¾Ë¾Æ¾ß¸¸ ÀÌÇØÇÒ ¼ö ÀÖ´Ù. ¸®´ª½º¿¡¼ ȯ°æ º¯¼öÀÇ ½ÇÁ¦ ÀÛµ¿ ¹æ¹ý¿¡ ´ëÇÑ ¿ä¾àÀº environ(5) À» º¼ ¼ö ÀÖ´Ù. ¿ä¾àÇϸé ȯ°æ º¯¼ö´Â ³»ºÎÀûÀ¸·Î ¹®ÀÚ¿¡ ´ëÇÑ Æ÷ÀÎÅÍ ¹è¿ÀÇ Æ÷ÀÎÅÍ·Î ÀúÀåµÇ´Âµ¥ ÀÌ ¹è¿Àº ¼ø¼ÀûÀ¸·Î ÀúÀåµÇ¸ç NULL Æ÷ÀÎÅÍ (À̸¦ ÅëÇØ ¹è¿ÀÌ ¾ðÁ¦ ³¡³ª´ÂÁö¸¦ ¾Ë ¼ö ÀÖ´Ù) ·Î ³¡³´Ù. ¹®ÀÚ¿¡ ´ëÇÑ Æ÷ÀÎÅ͵éÀº Â÷·Ê·Î ``NAME=value" ÇüÅÂÀÇ NIL ·Î ³¡³ª´Â ¹®ÀÚ¿ °ªÀ» °¡¸®Å²´Ù. ÀÌ´Â ¸î°¡Áö ÇÔÃàµÈ ÀǹÌÀ» °®´Âµ¥ ¿¹¸¦ µé¾î ȯ°æ º¯¼ö À̸§Àº = ±âÈ£ ¸¦ Æ÷ÇÔÇÒ ¼ö ¾øÀ¸¸ç À̸§°ú °ªÀº NIL ¹®ÀÚ¸¦ ³»ÀåÇÒ ¼ö ¾ø´Ù. ±×·¯³ª ÀÌ Æ÷¸ËÀÇ ´õ¿í À§ÇèÇÑ ÇÔÃàµÈ Àǹ̴ µ¿ÀÏ º¯¼ö À̸§À» °®À¸³ª ´Ù¸¥ °ªÀ» °®´Â ´ÙÁß ¿£Æ®¸®¸¦ Çã¿ëÇÑ´Ù´Â °ÍÀÌ´Ù (¿¹, SHELL ¿¡ ´ëÇØ ÇѰ¡Áö ÀÌ»óÀÇ °ª). ÀϹÝÀûÀÎ ¸í·É ½©Àº À̸¦ ±ÝÁöÇÏ´Â ¹Ý¸é Áö¿ªÀûÀ¸·Î ÀÛ¾÷À» ÇÏ´Â Å©·¢Ä¿´Â execve(2) ¸¦ ÀÌ¿ëÇÏ¿© ÀÌ·± »óȲÀ» ¸¸µé ¼ö ÀÖ´Ù. ÀÌ·± ½ºÅ丮Áö Æ÷¸Ë(°ú ¼³Á¤µÇ´Â ¹æ½Ä) °ú °ü·ÃµÈ ¹®Á¦´Â ÇÁ·Î±×·¥ÀÌ ÀÌ °ªÀ»ÀÌ À¯È¿ÇÑÁö º¸±â À§ÇØ ÀÌ·¯ÇÑ °ªµé Áß Çϳª¸¦ °Ë»çÇÒ ¼ö ÀÖÁö¸¸ ½ÇÁ¦·Î´Â ´Ù¸¥ °ªÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. ¸®´ª½º¿¡¼ GNU glibc ´Â À̷κÎÅÍ ÇÁ·Î±×·¥À» º¸È£ÇÏ·Á°í Çϴµ¥ glibc 2.1 ¿¡¼ getenv Àº ´Ã óÀ½ ÀÏÄ¡ÇÏ´Â ¿£Æ®¸®¸¦ ¾ò°í setenv ¿Í putenv ´Â ´Ã óÀ½ ÀÏÄ¡ÇÏ´Â ¿£Æ®¸®¸¦ ¼³Á¤Çϸç unsetenv ´Â ½ÇÁ¦·Î ¸ðµç ÀÏÄ¡ÇÏ´Â ¿£Æ®¸®ÀÇ ¼³Á¤À» ÇØÁ¦ÇÒ °ÍÀÌ´Ù (ÀÌ·± ¹æ½ÄÀ¸·Î unsetenv ¸¦ ±¸ÇöÇÑ GNU glibc ±¸ÇöÀÚ¿¡°Ô ÃàÇÏ!). ±×·¯³ª ¸î¸î ÇÁ·Î±×·¥Àº Á÷Á¢ÀûÀ¸·Î ȯ°æ º¯¼ö·Î °¡¼ ¸ðµç ȯ°æ º¯¼ö¿¡ ´ëÇØ ¹Ýº¹ Àû¿ëÇϴµ¥ ÀÌ·± °æ¿ì óÀ½ÀÌ ¾Æ´Ñ ¸¶Áö¸·À¸·Î ÀÏÄ¡ÇÏ´Â ¿£Æ®¸®¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. µû¶ó¼ óÀ½ ÀÏÄ¡ÇÏ´Â ¿£Æ®¸®¿¡ ´ëÇØ¼´Â Å©·¡Ä¿·ÎºÎÅÍ º¸È£ÇÒ ¼ö ÀÖÁö¸¸ ½ÇÁ¦ »ç¿ëµÈ °ªÀÌ ¸¶Áö¸·À¸·Î ÀÏÄ¡ÇÏ´Â ¿£Æ®¸®¶ó¸é Å©·¢Ä¿´Â À̸¦ ÀÌ¿ëÇØ º¸È£ ·çƾÀ» ÇÇÇÒ °ÍÀÌ´Ù. 4.2.3. ÇØ°á¹æ¾È - ÃßÃâ ¹× Á¦°Åº¸¾ÈÀûÀÎ setuid/setgid ÇÁ·Î±×·¥¿¡ ´ëÇØ ÀÔ·ÂµÉ Çʿ䰡 Àִ ȯ°æ º¯¼öÀÇ °£´ÜÇÑ ¸®½ºÆ®°¡ ÁÖÀDZí°Ô ÃßÃâµÇ¾î¾ß ÇÑ´Ù. ±× ÈÄ Àüü ȯ°æ º¯¼ö¸¦ Áö¿ì°í ÇÊ¿äÇÑ ¾à°£ÀÇ È¯°æ º¯¼öµéÀ» ¾ÈÀüÇÑ °ªÀ¸·Î Àç¼³Á¤ÇØ¾ß ÇÑ´Ù. ÇÏÀ§ ÇÁ·Î±×·¥À» È£ÃâÇÑ´Ù¸é ½ÇÁ¦·Î ´õ¿í ÁÁÀº ¹æ¹ýÀº ¾ø´Ù: ¸ðµç À§ÇèÇÑ °ªÀ» ¿°ÅÇÒ ¼ö ÀÖ´Â ½ÇÁ¦ÀûÀÎ ¹æ¹ýÀº ¾ø´Ù. Á÷Á¢Àû ¶Ç´Â °£Á¢ÀûÀ¸·Î È£ÃâÇÒ ¸ðµç ÇÁ·Î±×·¥ÀÇ ¼Ò½º Äڵ带 °ËÅäÇÑ´Ù°í ÇÏ´õ¶óµµ Äڵ带 ÀÛ¼ºÇÑ ÈÄ ´©±º°¡°¡ »õ·Î¿î ºñ°øÀÎµÈ È¯°æ º¯¼ö¸¦ Ãß°¡ÇÒ ¼ö ÀÖÀ¸¸ç À̵é Áß Çϳª¸¦ °ø°Ý¿¡ ÀÌ¿ëÇÒ ¼öµµ ÀÖ´Ù. C/C++ ¿¡¼ ȯ°æÀ» Áö¿ì´Â °£´ÜÇÑ ¹æ¹ýÀº Àü¿ª º¯¼ö environ ¸¦ NULL ·Î ¼³Á¤ÇÏ´Â °ÍÀÌ´Ù. Àü¿ª º¯¼ö environ Àº <unistd.h> ÆÄÀÏ¿¡ Á¤ÀǵǾî Àִµ¥ C/C++ »ç¿ëÀÚ´Â ÀÌ Çì´õ ÆÄÀÏÀ»#include ¸¦ ½á¼ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ¾²·¹µå¸¦ »ý¼ºÇϱâ Àü¿¡ environ À» Á¶ÀÛÇÒ Çʿ䰡 ÀÖÁö¸¸ ÇÁ·Î±×·¥ ½ÇÇà Ãʱâ (º¸Åë ¾²·¹µå°¡ »ý¼ºµÇ±â Àü) ¿¡ À̸¦ Á¶ÀÛÇϱ⠶§¹®¿¡ °ÅÀÇ ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. Àü¿ª º¯¼ö environ ÀÇ Á¤ÀÇ´Â ¿©·¯°¡Áö Ç¥ÁØ¿¡ Á¤ÀǵǾî ÀÖ´Ù; °ø½ÄÀû Ç¥ÁØÀÌ ÀÌ °ªÀÇ Á÷Á¢Àû º¯°æÀ» ¹¬°úÇÏ´Â Áö´Â ¸íÈ®ÇÏÁö ¾ÊÀ¸¸ç ÀúÀÚ´Â À̸¦ º¯°æÇϴµ¥ ÀÖ¾î ¹®Á¦°¡ ÀÖ¾ú´ø À¯´Ð½º °è¿ ½Ã½ºÅÛÀº Àß ¸ð¸£°í ÀÖ´Ù. ÀúÀÚ´Â º¸Åë environ À» Á÷Á¢ÀûÀ¸·Î ¼öÁ¤ÇÑ´Ù; ÀÌ·¯ÇÑ ÇÏÀ§ ¼öÁØ ÄÄÆ÷ÅÏÆ®¸¦ Á¶ÀÛÇÏ´Â °ÍÀº ¾Æ¸¶µµ À̽İ¡´ÉÇÏÁö ¾ÊÁö¸¸ ÀÌ´Â ±ú²ýÇÑ (¾ÈÀüÇÑ) ȯ°æÀ» ¾òÀ» ¼ö ÀÖ°Ô º¸ÁõÇÑ´Ù. ÃßÈÄ Àüü º¯¼ö ÁýÇÕ¿¡ Á¢±ÙÇÒ Çʿ䰡 ÀÖ´Â µå¹® °æ¿ì¿¡´Â environ º¯¼ö °ªÀ» ¾îµðµç ÀúÀåÇÒ ¼ö ÀÖÀ¸³ª ÀÌ´Â °ÅÀÇ ÇÊ¿äÇÏÁö ¾Ê´Ù; °ÅÀÇ ¸ðµç ÇÁ·Î±×·¥Àº À̵éÁß ´ÜÁö ÀϺΠ°ª¸¸À» ÇÊ¿ä·Î ÇÏ¸ç ³ª¸ÓÁö´Â ¹ö¸°´Ù. ȯ°æÀ» Áö¿ì´Â ¶Ç ´Ù¸¥ ¹æ¹ýÀº ºñ°øÀÎµÈ clearenv() ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. clearenv() ÇÔ¼ö´Â º°´Ù¸¥ ¿ª»ç¸¦ °®°í Àִµ¥ ÀÌ´Â POSIX 1 ¿¡ Á¤ÀǵǾî ÀÖ´Ù°í ¾Ë·ÁÁ® ÀÖÁö¸¸ ¾î¶² ¿¬À¯ÀÎÁö ÀüÇô ÀÌ Ç¥ÁØ¿¡ Æ÷ÇÔµÇÁö ¾Ê¾Ò´Ù. ±×·¯³ª clearenv() ´Â POSIX 9 (Æ÷Æ®¶õ 77 ÀÇ POSIX ¹ÙÀεù) ¿¡ Á¤ÀǵǾî ÀÖÀ¸¸ç µû¶ó¼ ÀÌ¿¡ ´ëÇØ ÁØ °ø½Ä »óÅ·ΠÀÖ´Ù. ¸®´ª½º¿¡¼ clearenv() ´Â <stdlib.h> ÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖÁö¸¸ #include ¸¦ ½á¼ Æ÷ÇÔÇϱâ Àü¿¡ __USE_MISC °¡ #define ¿¡ ÀÇÇØ Á¤ÀǵǾî ÀÖ´ÂÁö È®ÀÎÇØ¾ß ÇÑ´Ù. ¾à°£ ´õ¿í´õ °ø½ÄÀûÀÎ Á¢±Ù ¹æ¹ýÀº __USE_MISC ¸¦ Á¤ÀÇÇØ¼ _SVID_SOURCE ¶Ç´Â _BSD_SOURCE °¡ #define ¿¡ ÀÇÇØ Á¤ÀÇµÇ°Ô ÇÏ¿© <features.h> ÆÄÀÏÀ» #include ¿¡ ÀÇÇØ Æ÷ÇÔÇÏ´Â °ÍÀÌ´Ù - ÀÌ´Â °ø½ÄÀûÀΠƯ¡À» °®´Â Å×½ºÆ® ¸ÅÅ©·ÎÀÌ´Ù. °ÅÀÇ È®½ÇÈ÷ ÀçÃß°¡ÇØ¾ß Çϴ ȯ°æ º¯¼ö´Â ÇÁ·Î±×·¥ ½ÇÇàÀ» À§ÇØ °Ë»öµÇ´Â µð·ºÅ丮 ¸ñ·ÏÀÎ PATH ÀÌ´Ù; PATH ´Â ÇöÀç µð·ºÅ丮¸¦ Æ÷ÇÔÇÏÁö ¾Ê¾Æ¾ß ÇÏ¸ç º¸Åë ``/bin:/usr/bin" °ú °°ÀÌ °£´ÜÇÑ ÇüÅÂÀÌ´Ù. ÀϹÝÀûÀ¸·Î IFS (µðÆúÆ®´Â °ø¹éÀÌ Ã¹ ¹®ÀÚÀÎ `` \t\n") ¿Í TZ (timezone, ½Ã°£´ë) ¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¸®´ª½º°¡ IFS ¶Ç´Â TZ °¡ ¼³Á¤µÇÁö ¾Ê¾Ò´Ù°í ÇØ¼ ÀÛµ¿ÇÏÁö ¾Ê´Â °ÍÀº ¾Æ´ÏÁö¸¸ ¾î¶² System V ¿¡ ±âÃÊÇÑ ½Ã½ºÅÛÀº TZ °ªÀ» ¼³Á¤ÇÏÁö ¾Ê´Â °æ¿ì ¹®Á¦ÀÇ ¼ÒÁö°¡ µÈ´Ù. ¾î¶² ½©Àº IFS °ªÀÌ ¼³Á¤µÇ¾î¾ß ÇÑ´Ù´Â ·ç¸Óµµ ÀÖ´Ù. ¸®´ª½º¿¡¼ ¼³Á¤ÇÒ ¼ö ÀÖ´Â °øÅëµÈ ȯ°æ º¯¼ö ¸ñ·ÏÀ» ¾ò±â À§Çؼ´Â environ(5) ¸¦ º¸¶ó. ½ÇÁ¦·Î »ç¿ëÀÚ°¡ Á¦°øÇÑ °ªµéÀÌ ÇÊ¿äÇÏ´Ù¸é ±× °ªÀÌ ÇÕ¹ýÀûÀÎ °ª¿¡ ´ëÇÑ ÆÐÅϰú ÀÏÄ¡ÇÏ´ÂÁö ¾î¶² ÇÕ´çÇÑ ÃÖ´ë ±æÀ̳»¿¡ ÀÖ´ÂÁö¸¦ º¸ÁõÇϱâ À§ÇØ ¿ì¼±ÀûÀ¸·Î °Ë»çÇØ¶ó. ¿øÄ¢ÀûÀ¸·Î´Â /etc µð·ºÅ丮¿¡ Ç¥ÁØÀûÀÎ ¾ÈÀüÇÑ È¯°æ º¯¼ö °ª¿¡ ´ëÇÑ Á¤º¸¸¦ °®°í ÀÖ´Â ½Å·ÚÇÒ ¼ö Àִ ǥÁØ ÆÄÀÏÀÌ ÀÖÀ» ¼öµµ ÀÖÁö¸¸ ÇöÀç ÀÌ·¯ÇÑ ¸ñÀûÀ» À§ÇØ Á¤ÀÇµÈ Ç¥ÁØ ÆÄÀÏÀº ¾ø´Ù. ºñ½ÁÇÑ ÀÌÀ¯·Î PAM ¸ðµâÀ» °®°í ÀÖ´Â ½Ã½ºÅÛ¿¡ ´ëÇØ pam_env ¸¦ Á¶»çÇÒ ¼öµµ ÀÖ´Ù. ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ½©À» »ç¿ëÇÏ·Á ÇÑ´Ù¸é ``-" ¿É¼ÇÀ» »ç¿ëÇØ ``/usr/bin/env" ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖ´Ù (½ÇÇàµÇ´Â ÇÁ·Î±×·¥ÀÇ ¸ðµç ȯ°æ º¯¼ö¸¦ Áö¿î´Ù). ±âº»ÀûÀ¸·Î /usr/bin/env ¸¦ È£ÃâÇÏ¿© ÀÌ¿¡ ``-" ¿É¼ÇÀ» ÁÖ°í ¼³Á¤ÇÏ·Á°í ÇÏ´Â º¯¼ö¿Í °ª (name=value ÇüÅ·Î) À» ¾´ ÈÄ ½ÇÇà½Ãų ÆÄÀÏ À̸§°ú ±× Àμö¸¦ ¼³Á¤ÇÑ´Ù. ´ëºÎºÐÀº ¿ÏÀüÇÑ °æ·Î À̸§ (/usr/bin/env) À» »ç¿ëÇÏ¿© ÇÁ·Î±×·¥À» È£ÃâÇÏ±æ ¿øÇϴµ¥ ``env" ¿Í´Â ´Þ¸® »ç¿ëÀÚ°¡ À§ÇèÇÑ PATH °ªÀ» ¸¸µé ¼ö ÀÖ´Ù. GNU env ´Â ``-i" ¿Í ``--ignore-environment" ¿É¼Ç (½ÃÀÛÇÏ´Â ÇÁ·Î±×·¥ÀÇ È¯°æÀ» Áö¿î´Ù) À» µ¿ÀÏÇÏ°Ô Çã¿ëÇÔÀ» ÁÖ¸ñÇØ¶ó. ±×·¯³ª À̸¦ ´Ù¸¥ ¹öÀüÀÇ env ¿¡ À̽ÄÇÒ ¼ö´Â ¾ø´Ù. ȯ°æÀ» Á÷Á¢ÀûÀ¸·Î Àç¼³Á¤ÇÒ ¼ö ¾øµµ·Ï ÇÏ´Â ¾ð¾î·Î setuid/setgid ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù¸é ´Ù¸¥ Á¢±Ù ¹æ¹ýÀº ``wrapper" ÇÁ·Î±×·¥À» »ý¼ºÇÏ´Â °ÍÀÌ´Ù. wrapper ´Â ȯ°æ ÇÁ·Î±×·¥À» ¾ÈÀüÇÑ °ªÀ¸·Î ¼³Á¤ÇÑ ÈÄ ´Ù¸¥ ÇÁ·Î±×·¥À» È£ÃâÇÑ´Ù. ÁÖÀÇ: wrapper °¡ ½ÇÁ¦·Î ÀǵµÇÏ´Â ÇÁ·Î±×·¥À» È£ÃâÇÒ °ÍÀÎÁö¸¦ È®ÀÎÇØ¶ó; ÀÎÅÍÇÁ¸®Æ¼µå ÇÁ·Î±×·¥À̶ó¸é ÀÎÅÍÇÁ¸®ÅÍ·Î ÇÏ¿©±Ý Ưº°ÇÑ setuid/setgid ±ÇÇÑÀÌ ÁÖ¾îÁø ÇÁ·Î±×·¥¿Ü¿¡ ´Ù¸¥ ÇÁ·Î±×·¥À» ÀûÀçÇÒ ¼ö ÀÖ°Ô ÇÏ´Â °¡´ÉÇÑ °æÀï »óŰ¡ ¾øÀ½À» È®ÀÎÇØ¶ó. 4.3. ÆÄÀÏ ±â¼úÀÚÇÁ·Î±×·¥Àº ÀÏ·ÃÀÇ "¿ÀÇ ÆÄÀÏ ±â¼úÀÚ" Áï ¹Ì¸® ¿·Á ÀÖ´Â ÆÄÀÏÀ» ³Ñ°Ü¹Þ´Â´Ù. setuid/setgid ÇÁ·Î±×·¥Àº »ç¿ëÀÚ°¡ ¾î¶² ÆÄÀÏÀ» ¿ÀÇÂÇÒ °ÍÀÎÁö ¹× ¹«¾ù¿¡ ¿ÀÇÂÇÒ °ÍÀÎÁö (Çã°¡ ÇѰ賻¿¡¼) ¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù´Â »ç½ÇÀ» ó¸®ÇØ¾ß ÇÑ´Ù. setuid/setgid ÇÁ·Î±×·¥Àº »õ·Î¿î ÆÄÀÏÀ» ¿¶§ ´Ã °íÁ¤µÈ ÆÄÀÏ ±â¼úÀÚ id ·Î ¿¸± °ÍÀ̶ó°í °¡Á¤ÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ¶ÇÇÑ Ç¥ÁØ ÀÔ·Â (stdin), Ç¥ÁØ Ãâ·Â (stdout) °ú Ç¥ÁØ ¿¡·¯ (stderr) ÀÌ Å͹̳ÎÀ» ÂüÁ¶ÇÏ´ÂÁö ¶Ç´Â µ¿µîÇÏ°Ô ¿·Á ÀÖ´ÂÁö °¡Á¤ÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ÀÌ¿¡ ´ëÇÑ ³í¸®Àû ±Ù°Å´Â ½±´Ù; °ø°ÝÀÚ°¡ ÇÁ·Î±×·¥ ½ÃÀÛÀü¿¡ ÆÄÀÏ ±â¼úÀÚ¸¦ ¿°Å³ª ´ÝÀ» ¼ö Àֱ⠶§¹®¿¡ ¿¹±âÄ¡ ¾ÊÀº »óȲÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. °ø°ÝÀÚ°¡ Ç¥ÁØ Ãâ·ÂÀ» ´Ý´Â ´Ù¸é ÇÁ·Î±×·¥ÀÌ ´ÙÀ½ ÆÄÀÏÀ» ¿ ¶§ ÀÌ ÆÄÀÏÀÌ Ç¥ÁØ Ãâ·ÂÀÎ °Íó·³ ¿·ÁÁú °ÍÀÌ¸ç °ð ¸ðµç Ç¥ÁØ Ãâ·ÂÀ» ±× ÆÄÀÏ·Î º¸³¾ °ÍÀÌ´Ù. ¾î¶² C ¶óÀ̺귯¸®´Â stdin, stdout ¿Í stderr ÀÌ (/dev/null ¿¡) ÀÌ¹Ì ¿·ÁÁ® ÀÖÁö ¾Ê´Ù¸é À̵éÀ» ÀÚµ¿ÀûÀ¸·Î ¿ °ÍÀÌ´Ù. ¹°·Ð ¸ðµç À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡ µ¿ÀÏÇÏ°Ô Àû¿ëµÇÁö´Â ¾Ê´Â´Ù. 4.4. ÆÄÀÏ ÄÁÅÙÃ÷ÇÁ·Î±×·¥ÀÌ ÆÄÀϷκÎÅÍ ¸í·ÉÀ» ¹Þ´Â´Ù ÇÏ´õ¶óµµ ƯÈ÷ ´ÜÁö ½Å·ÚÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ¸¸ÀÌ ±× ³»¿ëÀ» Á¦¾îÇÒ ¼ö ¾ø´Ù¸é ±× ÆÄÀÏÀ» ½Å·ÚÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. º¸Åë ÀÌ´Â ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀÚ°¡ ÆÄÀÏ, ±× µð·ºÅ丮 ¶Ç´Â ¸ðµç Á¶»ó µð·ºÅ丮¸¦ º¯°æÇÒ ¼ö ¾ø¾î¾ß ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ±×·¸Áö ¾Ê´Ù¸é ±× ÆÄÀÏÀ» Á¶½É½º·´°Ô ´Ù·ï¾ß ÇÑ´Ù. ÆÄÀϳ» ¸í·ÉÀÌ ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀڷκÎÅÍ ¿Â °ÍÀ̶ó¸é ÆÄÀϷκÎÅÍÀÇ ÀÔ·ÂÀÌ ÀÌ Ã¥À» ÅëÇØ ±â¼úÇÑ ¹Ù¿Í °°ÀÌ º¸È£µÇ°í ÀÖ´ÂÁö¸¦ È®ÀÎÇØ¶ó. ƯÈ÷ ÀÏ·ÃÀÇ ÇÕ¹ýÀûÀÎ °ªµé°ú ÀÏÄ¡µÇ´ÂÁö ¹öÆÛ ¿À¹öÇ÷ο찡 ¾ø´Â Áö¸¦ °Ë»çÇØ¶ó. 4.5. À¥ ±â¹Ý ¾ÖÇø®ÄÉÀÌ¼Ç ÀÔ·Â (ƯÈ÷ CGI ½ºÅ©¸³Æ®)CGI ½ºÅ©¸³Æ®¿Í °°Àº À¥ ±â¹Ý ¾ÖÇø®ÄÉÀ̼ÇÀº ´Ù¼ÒÀÇ ½Å·ÚµÈ ¼¹ö¿¡¼ ½ÇÇàµÇ°í À¥À» ÅëÇØ ¾î¶»°Ôµç ÀÔ·Â µ¥ÀÌŸ¸¦ ¾ò¾î¾ß ÇÑ´Ù. ÀÔ·Â µ¥ÀÌŸ´Â ÀϹÝÀûÀ¸·Î ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀڷκÎÅÍ ¿À±â ¶§¹®¿¡ ÀÌ ÀÔ·Â µ¥ÀÌŸÀÇ Á¤´ç¼ºÀº ÀÔÁõµÇ¾î¾ß Çϴµ¥ ½ÇÀº ÀÌ Á¤º¸°¡ ½ÇÁ¦ ½Å·ÚÇÒ ¼ö ¾ø´Â Á¦ »ïÀڷκÎÅÍ ¿Ã ¼öµµ ÀÖ´Ù; ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 6.13절 À» º¸¶ó. ¿¹¸¦ µé¾î, CGI ½ºÅ©¸³Æ®´Â ÀÏ·ÃÀÇ Ç¥ÁØ È¯°æ º¯¼öµé°ú Ç¥ÁØ ÀÔ·ÂÀ» ÅëÇØ ÀÌ Á¤º¸¸¦ ³Ñ°Ü¹Þ´Â´Ù. ÀÌ ÅØ½ºÆ®ÀÇ ³ª¸ÓÁö´Â CGI ½ºÅ©¸³Æ®°¡ µ¿Àû À¥ ÄÁÅÙÆ®¸¦ ±¸ÇöÇÏ´Â °¡Àå °øÅëµÈ ±â¼úÀ̱⠶§¹®¿¡ À̸¦ ±¸Ã¼ÀûÀ¸·Î ³íÀÇÇÒ °ÍÀÌ´Ù. ¹°·Ð ÀϹÝÀûÀÎ ÇÙ½ÉÀº ´ëºÎºÐÀÇ ´Ù¸¥ µ¿Àû À¥ ÄÁÅÙÆ® ±â¹ý¿¡ µ¿ÀÏÇÏ°Ô Àû¿ëµÈ´Ù ¸¹Àº CGI ½ºÅ©¸³Æ®ÀÇ ÀÔ·ÂÀº ¼ÒÀ§ ``URL-encoded" Æ÷¸ËÀ¸·Î Á¦°øµÇ±â ¶§¹®¿¡, Áï ¾î¶² °ªÀÌ %HH Æ÷¸Ë (HH ´Â ±× ¹ÙÀÌÆ®¿¡ ´ëÇÑ ½ÊÀ°Áø¼ö ÄÚµå) À¸·Î ¾²¿© Àֱ⶧¹®¿¡ ÇѰ¡Áö Ãß°¡ÀûÀÎ º¹À⼺À» ´õÇÑ´Ù. °¢ÀÚ ¶Ç´Â CGI ¶óÀ̺귯¸®´Â ÀÔ·ÂÀ» URL-decoding ÇÑ ÈÄ ±× ¹ÙÀÌÆ® °ªÀÌ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´ÂÁö °Ë»çÇÔÀ¸·Î½á ÀÌ·¯ÇÑ ÀÔ·ÂÀ» Á¤È®È÷ ´Ù·ï¾ß ÇÑ´Ù. %00 (NIL) °ú %0A (°³Çà) °ú °°Àº ¹®Á¦°¡ ÀÖ´Â °ªÀ» Æ÷ÇÔÇÑ ¸ðµç °ªÀ» Á¤È®È÷ ´Ù·ï¾ß ÇÑ´Ù. ÀÔ·ÂÀ» ÇÑ ¹ø ÀÌ»ó µðÄÚµåÇÏÁö ¸¶¶ó. ±×·¸Áö ¾ÊÀ¸¸é %2500 °°Àº ÀÔ·ÂÀº ÀÌ»óÇÏ°Ô ´Ù·ïÁú °ÍÀÌ´Ù (``%25" ´Â ``%" ·Î ÀüȯµÇ¸ç ±× °á°ú »ý±ä ``%00" Àº Ʋ¸®°Ô NIL ¹®ÀÚ·Î ÀüȯµÉ °ÍÀÌ´Ù). CGI ½ºÅ©¸³Æ®´Â ÀϹÝÀûÀ¸·Î ÀԷ¿¡ Ưº° ¹®ÀÚ¸¦ Æ÷ÇÔÇÔÀ¸·Î½á °ø°Ý¹Þ´Âµ¥ À§ÀÇ ¼³¸íÀ» º¸¶ó. À¥ ±â¹Ý ¾ÖÇø®ÄÉÀ̼ǿ¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ´Ù¸¥ µ¥ÀÌŸ ÇüÅ´ ``ÄíŰ"ÀÌ´Ù. »ç¿ëÀÚ´Â ÀÓÀÇÀÇ ÄíŰ °ªÀ» Á¦°øÇÒ ¼ö ÀÖÀ¸¸ç µû¶ó¼ Ưº°ÇÑ »çÀü Á¶Ä¡¸¦ ÃëÇÏÁö ¾Ê´Â´Ù¸é ½Å·ÚµÉ ¸® ¾ø´Ù. ¶ÇÇÑ ÄíŰ´Â »ç¿ëÀÚ ÃßÀû¿¡ »ç¿ëÇÒ ¼ö Àִµ¥ ÀÌ´Â ¸¹Àº »ç¿ëÀڵ鿡 ´ëÇØ »ç»ýȰ Ä§ÇØ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Ù. ±× °á°ú ¸¹Àº »ç¿ëÀÚ´Â Äí۸¦ ±ÝÁöÇϰí ÀÖÀ¸¸ç µû¶ó¼ °¡´ÉÇÏ´Ù¸é À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº ÄíŰ »ç¿ëÀÌ ÇÊ¿äÄ¡ ¾Êµµ·Ï ¼³°èµÇ¾î¾ß ÇÑ´Ù (±×·¯³ª °¢ »ç¿ëÀÚµéÀ» ÀÎÁõÇØ¾ß ÇÒ¶§¿¡ ´ëÇÑ ÀúÀÚÀÇ ³íÀǸ¦ º¸¶ó). ÀúÀÚ´Â ÇöÀç ¼¼¼ÇÀÌ Á¾·áµÈ ÈÄ¿¡µµ ³²¾ÆÀÖ´Â ¿µ¼ÓÀûÀÎ ÄíŰ »ç¿ëÀ» ÇÇÇϰųª Á¦ÇÑÇϵµ·Ï ±ÇÇÑ´Ù. Á¤¸»·Î ¹Ì±¹ÀÇ ¿¡ÀÌÀü½ÃµéÀº Ưº°ÇÑ È¯°æÀ» Á¦¿ÜÇϰí´Â »ç»ýȰ Ä§ÇØ¿¡ ´ëÇÑ ¿ì·Á¶§¹®¿¡ ¿µ¼ÓÀûÀÎ ÄíŰ »ç¿ëÀÌ ±ÝÁöµÇ¾î ÀÖ´Ù; OMB guidance in memorandum M-00-13 (June 22, 2000) ¸¦ º¸¶ó. Äí۸¦ »ç¿ëÇÒ ¶§ ¸î¸î ºê¶ó¿ìÀú´Â ´ç½ÅÀº »ç»ýȰ ÇÁ·ÎÆÄÀÏ (¼¹öÀÇ ·çÆ® µð·ºÅ丮³»¿¡ p3p.xml À̶ó´Â) À» °®°í ÀÖ´Ù°í ÁÖÀåÇÒ ¼ö ÀÖÀ½¿¡ ÁÖÀÇÇØ¶ó. ¸î¸î HTML ÆûÀº ¾î¶² ºñÇÕ¹ýÀûÀÎ °ªÀ» ¿¹¹æÇϱâ À§ÇØ Å¬¶óÀÌ¾ðÆ® Ãø¿¡¼ÀÇ ÀÔ·Â °Ë»ç¸¦ Æ÷ÇÔÇϰí ÀÖÀ¸¸ç ÀÌ´Â ÀϹÝÀûÀ¸·Î ÀÚ¹Ù½ºÅ©¸³Æ®/ECMA ½ºÅ©¸³Æ® ¶Ç´Â ÀÚ¹Ù¸¦ »ç¿ëÇÏ¿© ±¸ÇöµÈ´Ù. ÀÌ °Ë»ç´Â ¾î¶°ÇÑ ³×Æ®¿öÅ© Á¢±Ùµµ ¿äÇÏÁö ¾ÊÀ¸¸é¼ ``Áï°¢Àû"À¸·Î ÇÒ ¼ö Àֱ⠶§¹®¿¡ »ç¿ëÀÚ¿¡°Ô À¯¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ Á¾·ùÀÇ ÀÔ·Â °Ë»ç´Â °ø°ÝÀÚ°¡ °Ë»ç¸¦ ¹ÞÁö ¾Ê°íµµ À¥ ¼¹ö¿¡ Á÷Á¢ÀûÀ¸·Î ºñÇÕ¹ýÀûÀÎ °ªÀ» º¸³¾ ¼ö Àֱ⶧¹®¿¡ º¸¾È¿¡ ´ëÇØ¼´Â ¹«¿ëÁö¹°ÀÌ´Ù. À̸¦ ¸·´Â °ÍÀÌ ¾î·ÁÁö´Â ¾ÊÁö¸¸ ÀÓÀÇÀÇ µ¥ÀÌŸ¸¦ À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ º¸³»´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ÀϹÝÀûÀ¸·Î ¼¹ö´Â Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ °Ë»ç¸¦ º¸¾ÈÀûÀ¸·Î ¼öÇàÇϵµ·Ï ÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ¸ðµç ÀÚ½ÅÀÇ ÀÔ·Â (Æû µ¥ÀÌŸ, ÄíŰ µî) ¿¡ ´ëÇØ °Ë»ç¸¦ ¼öÇàÇØ¾ß ÇÑ´Ù. ¿ä¾àÇϸé ÀϹÝÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ®´Â ``½Å·ÚÇÒ ¼ö Àִ ä³Î"ÀÌ ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù. ÀÌ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 6.9절 À» º¸¶ó. ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®»çÀÇ Active Server Pages (ASP) ¸¦ »ç¿ëÇÏ´Â »ç¶÷µéÀº ÀÔ·Â À¯È¿È¿¡ ´ëÇÑ ÂªÀº ³íÀǸ¦ http://heap.nologin.net/aspsec.html ÀÇ Jerry Connolly ·ÎºÎÅÍ ¾òÀ» ¼ö ÀÖ´Ù. 4.6. ´Ù¸¥ ÀÔ·ÂÇÁ·Î±×·¥Àº ¸ðµç ÀÔ·ÂÀÌ Á¦¾îµÇ°í ÀÖ´ÂÁö¸¦ º¸ÁõÇØ¾ß ÇÑ´Ù; ÀÌ´Â setuid/setgid ÇÁ·Î±×·¥ÀÇ °æ¿ì ¸Å¿ì ¸¹Àº ÀÔ·ÂÀÌ Àֱ⠶§¹®¿¡ ƯÈ÷ ¾î·Æ´Ù. ÇÁ·Î±×·¥ÀÌ °í·ÁÇØ¾ß ÇÏ´Â ´Ù¸¥ ÀÔ·ÂÀ¸·Î´Â ÇöÀç µð·ºÅ丮, ½Ã±×³Î, ¸Þ¸ð¸® ¸Ê (mmaps), System V IPC ¿Í umask (»õ·Ó°Ô »ý¼ºµÈ ÆÄÀÏÀÇ µðÆúÆ® Çã°¡¸¦ °áÁ¤ÇÑ´Ù) °¡ ÀÖ´Ù. ÇÁ·Î±×·¥ ½Ãµ¿½Ã µð·ºÅ丮¸¦ ÀûÀýÇÑ ¿ÏÀüÇÑ À̸§À» °®´Â µð·ºÅ丮·Î º¯°æ (chdir(2) ¸¦ »ç¿ëÇÏ¿©) ÇÏ´Â °ÍÀ» °í·ÁÇØ¶ó. 4.7. Àΰ£ ¾ð¾î (·ÎÄÉÀÏ) ¼±Åôõ¿í ¸¹Àº »ç¶÷µéÀÌ ÄÄÇ»Å͸¦ °®°ÔµÇ°í ÀÎÅͳÝÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô µÊ¿¡ µû¶ó ¸¹Àº ¾ð¾î¿Í ¹®È¸¦ Áö¿øÇÏ´Â ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¿ä±¸°¡ Á¡Á¡ Áõ´ëµÇ¾î ¿Ô´Ù. ÀÌ·¯ÇÑ ¾ð¾î¿Í ´Ù¸¥ ¹®ÈÀû ¿ä¼ÒÀÇ °áÇÕÀ» º¸Åë ``·ÎÄÉÀÏ (locale)" À̶ó°í ÇÑ´Ù. ´Ù¼öÀÇ ·ÎÄÉÀÏÀ» Áö¿øÇÒ ¼ö ÀÖµµ·Ï ÇÁ·Î±×·¥À» ¼öÁ¤ÇÏ´Â °úÁ¤°ú ÇÁ·Î±×·¥¿¡ °¢ ·ÎÄÉÀÏÀÇ Á¤º¸¸¦ Á¦°øÇÏ´Â °úÁ¤À» °¢°¢ ``±¹Á¦È (internalization)" (i18n) ¿Í ``Áö¿ªÈ (localization)" (l10n) ¶ó°í ÇÑ´Ù. Àü¹ÝÀûÀ¸·Î ±¹Á¦È´Â ÈǸ¢ÇÑ ÀÛ¾÷ÀÌÁö¸¸ º¸¾È ¾Ç¿ë¿¡ ´ëÇÑ ´Ù¸¥ ±âȸ¸¦ Á¦°øÇÑ´Ù. ÀáÀçÀûÀ¸·Î ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀÚ°¡ ¿øÇÏ´Â ·ÎÄÉÀÏ¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇϱ⠶§¹®¿¡ ·ÎÄÉÀÏ ¼±ÅÃÀº ÀûÀýÈ÷ º¸È£µÇÁö ¸øÇÑ´Ù¸é °ø°Ý¿¡ ¾Ç¿ëµÉ ¼ö ÀÖ´Â ¶Ç´Ù¸¥ ÀÔ·ÂÀÌ µÈ´Ù. 4.7.1. ·ÎÄÉÀÏ ¼±Åà ¹æ¹ýsetuid/setgid ÇÁ·Î±×·¥À» Æ÷ÇÔÇÏ¿© ·ÎÄ÷Π½ÇÇàµÇ´Â ÇÁ·Î±×·¥¿¡¼ ·ÎÄÉÀÏ Á¤º¸´Â ȯ°æ º¯¼ö¿¡ ÀÇÇØ Á¦°øµÈ´Ù. µû¶ó¼ ´Ù¸¥ ¸ðµç ȯ°æ º¯¼ö¿Í °°ÀÌ ÀÌ °ªÀº ÃßÃâµÇ¾î »ç¿ëÀü À¯È¿ÇÑ ÆÐÅÏ¿¡ ´ëÇØ °Ë»çµÇ¾î¾ß ÇÑ´Ù. À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ °æ¿ì ÀÌ Á¤º¸´Â (Accept-Language request header ¸¦ ÅëÇØ) À¥ ºê¶ó¿ìÀú¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. ±×·¯³ª ¸ðµç À¥ ºê¶ó¿ìÀú°¡ ÀÌ Á¤º¸¸¦ ÀûÀýÈ÷ ³Ñ°ÜÁÖÁö ¾Ê±â ¶§¹®¿¡ (¸ðµç »ç¿ëÀÚ°¡ ÀûÀýÈ÷ À¥ ºê¶ó¿ìÀú¸¦ ¼³Á¤ÇÏÁö ¸øÇϱ⠶§¹®¿¡) »ý°¢ÇÏ´Â °Íº¸´Ù ±×´ÙÁö ¸¹ÀÌ »ç¿ëµÇÁö ¾Ê°í ÀÖ´Ù. ´ë°³ À¥ ºê¶ó¿ìÀú¿¡¼ ¿äûµÈ ¾ð¾î´Â Æû °ªÀ¸·Î ´Ü¼øÈ÷ ³Ñ°ÜÁö´Âµ¥ ÀÌ °ªÀº ´Ù¸¥ ¸ðµç Æû °ª°ú ¸¶Âù°¡Áö·Î »ç¿ëÀü¿¡ ±× Ÿ´ç¼ºÀÌ °Ë»çµÇ¾î¾ß ÇÑ´Ù. °¢°¢ÀÇ °æ¿ì¿¡ ÀÖ¾î ·ÎÄÉÀÏ Á¤º¸´Â Á¤¸»·Î ÀÌÀü Àý¿¡¼ ³íÀÇÇÑ ÀÔ·ÂÀÇ Æ¯º°ÇÑ °æ¿ìÀÌ´Ù. ±×·¯³ª ÀÌ ÀÔ·ÂÀº °ÅÀÇ °í·ÁµÇ°í ÀÖÁö ¾Ê±â ¶§¹®¿¡ ÀúÀÚ´Â À̸¦ º°µµ·Î ³íÀÇÇÏ´Â °ÍÀÌ´Ù. ƯÈ÷ µÚ¿¡¼ ³íÀÇÇÒ Æ÷¸Ë ¹®ÀÚ¿°ú °áÇÕµÉ ¶§ »ç¿ëÀÚ°¡ Á¦¾îÇÏ´Â ¹®ÀÚ¿Àº °ø°ÝÀÚ·Î ÇÏ¿©±Ý ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î ÀÓÀÇÀÇ ¸í·É ½ÇÇà, µ¥ÀÌŸ ÆÄ±« ¹× ´Ù¸¥ ºÎÀû´çÇÑ ÇàÀ§¸¦ ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. 4.7.2. ·ÎÄÉÀÏ Áö¿ø ¸ÞÄ«´ÏÁòÀ¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡´Â ·ÎÄÉÀÏ ¼±Åà ¸Þ¼¼Áö¸¦ Áö¿øÇÏ´Â ``catgets" ¿Í ``gettext" ¶ó ºÒ¸®´Â µÎ Áß¿äÇÑ ¶óÀ̺귯¸® ÀÎÅÍÆäÀ̽º°¡ ÀÖ´Ù. catgets ¹æ¹ý¿¡¼ ¸ðµç ¹®ÀÚ¿¿¡´Â ¸Þ½ÃÁö Å×À̺íÀ» »öÀÎÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Â °íÀ¯ ¼ýÀÚ°¡ ÇÒ´çµÈ´Ù. ¹Ý´ë·Î gettext ¹æ¹ý¿¡¼´Â ¿ø·¡ ¹®ÀÚ¿À» Àüȯ½ÃŲ Å×À̺íÀ» °Ë»öÇϴµ¥ ¹®ÀÚ¿ (º¸Åë ¿µ¾î·Î µÈ) ÀÌ »ç¿ëµÈ´Ù. catgets(3) Àº X/Open Portability Guide, Volume 3 °ú Single Unix Specificatoin À» ÅëÇØ ¼ö¿ëµÈ Ç¥ÁØÀÌ¸ç µû¶ó¼ ÇÁ·Î±×·¥ÀÌ À̸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. gettext ÀÎÅÍÆäÀ̽º´Â º»·¡ UniForum Á¦¾ÈÀÓ¿¡µµ ºÒ±¸ÇÏ°í °ø½Ä Ç¥ÁØÀº ¾Æ´Ñµ¥ ÀúÀÚ´Â À̰ÍÀÌ º¸´Ù ³Î¸® »ç¿ëµÇ°í ÀÖ´Â ÀÎÅÍÆäÀ̽º¶ó°í »ý°¢ÇÑ´Ù (½ã°ú º»ÁúÀûÀ¸·Î ¸ðµç GNU ÇÁ·Î±×·¥¿¡ ÀÇÇØ »ç¿ëµÇ°í ÀÖ´Ù). À̷лó catgets °¡ ¾à°£ ´õ ºü¸£Áö¸¸ ¿À´Ã³¯ ¸Ó½Å¿¡¼´Â ±â²¯ÇØ¾ß ÃÖ¼ÒÇÑ (ÀÌÂ÷ÀûÀÎ ¹®Á¦) À̸ç catgets() ¿¡¼ °íÀ¯ ½Äº°ÀÚ¸¦ À¯È¿ÇÏ°Ô ÇÏ·Á´Â ºÎ±â (bookkeeping) ³ë·ÂÀº gettext() ÀÎÅÍÆäÀ̽º¸¦ ´õ¿í »ç¿ëÇϱ⠽±°Ô ¸¸µé°í ÀÖ´Ù. ÀúÀÚ´Â ´ÜÁö gettext() °¡ »ç¿ëÇϱ⿡ ´õ¿í ½±±â ¶§¹®¿¡ À̸¦ »ç¿ëÇ϶ó°í ±ÇÇØ¿Ô´Ù. ±×·¯³ª ÀúÀÚÀÇ ¸»À» °ðÀ̵èÁö´Â ¸¶¶ó; ´õ¿í ±æ°í ¼³¸íÀûÀÎ ºñ±³¸¦ À§Çؼ´Â gettext ¿¡ ´ëÇÑ GNU ¹®¼ (info:gettext#catgets) ¸¦ º¸¶ó. catget(3) È£Ãâ (°ú °ü·Ã catopen(3) È£Ãâ) Àº ȯ°æ º¯¼ö NLSPATH °¡ ±¹Á¦ÈµÈ ¸Þ½ÃÁö¸¦ ¾ò´Âµ¥ »ç¿ëµÇ´Â ÆÄÀÏÀ̸§À» Á¦¾îÇϴµ¥ »ç¿ëµÉ ¼ö Àֱ⠶§¹®¿¡ ƯÈ÷ º¸¾È ¹®Á¦¿¡ Ãë¾àÇÏ´Ù. GNU C ¶óÀ̺귯¸®´Â setuid/setgid ÇÁ·Î±×·¥¿¡ ´ëÇØ NLSPATH ¸¦ ¹«½ÃÇϴµ¥ ÀÌ´Â À¯¿ëÇÏÁö¸¸ ´Ù¸¥ ±¸Çö¿¡¼ ½ÇÇàµÇ°í ÀÖ´Â ÇÁ·Î±×·¥À» º¸È£ÇÏÁö ¸øÇÏ¸ç ¶ÇÇÑ ÀÌ·¯ÇÑ º¸È£°¡ ÇÊ¿äÄ¡ ¾Ê¾Æ º¸ÀÌ´Â CGI ½ºÅ©¸³Æ®¿Í °°Àº ´Ù¸¥ ÇÁ·Î±×·¥µµ º¸È£ÇÏÁö ¸øÇÑ´Ù. ³Î¸® »ç¿ëµÇ°í ÀÖ´Â ``gettext" ÀÎÅÍÆäÀ̽º´Â ÀúÀÚ°¡ ¾Ë±â·Î ¾ÇÀǼºÀÖ´Â NLSPATH ¼³Á¤¿¡ Àû¾îµµ °ø°Ý¹ÞÀ» °¡´É¼ºÀº ¾ø´Ù. ±×·¯³ª ÀúÀÚ´Â ¾ÇÀǼºÀÖ´Â LC_ALL ¶Ç´Â LC_MESSAGES ¼³Á¤Àº ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖÀ» °Í°°´Ù°í »ý°¢ÇÑ´Ù. ¶ÇÇÑ cat-compat.c ÆÄÀϳ» gettext ÀÇ bindtextdomain() ·çƾÀ» »ç¿ëÇÑ´Ù¸é ÀÌ´Â NLSPATH ¿¡ ÀÇÁ¸ÇÑ´Ù. 4.7.3. ÇÕ¹ýÀûÀÎ °ª¿ì¼± ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀÚ¿¡°Ô ¿øÇÏ´Â ·ÎÄÉÀÏ¿¡ ´ëÇÑ Á¤º¸ ¼³Á¤À» Çã¿ëÇÑ´Ù¸é Á¦°øµÈ ±¹Á¦È Á¤º¸°¡ ´ÜÁö ±ÔÄ¢¿¡ ¸Â´Â ·ÎÄÉÀÏ À̸§¸¸À» Çã¿ëÇÏ´Â ¾ö¹ÐÇÑ (narrow) ÇÊÅ͸¦ ¸¸Á·½ÃŰ´ÂÁö È®ÀÎÇØ¶ó. »ç¿ëÀÚ ÇÁ·Î±×·¥ (ƯÈ÷ setuid/setgid ÇÁ·Î±×·¥) ÀÇ °æ¿ì ÀÌ·¯ÇÑ °ªÀº NLSPATH, LANGUAGE, LANG, ¿¹Àü LINGUAS, LC_ALL °ú ´Ù¸¥ LC_* (ƯÈ÷ LC_MESSAGES ¹× LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC ¿Í LC_TIME ¸¦ Æ÷ÇÔ) °ªÀ» ÅëÇØ µé¾î¿Ã °ÍÀÌ´Ù. À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ °æ¿ì »ç¿ëÀÚ°¡ ¿äûÇÑ ¾ð¾î Á¤º¸ÀÇ ¼³Á¤Àº Accept-Language request header ¶Ç´Â Æû °ªÀ» ÅëÇØ ÀÌ·ç¾î Áú °ÍÀÌ´Ù (¾ÖÇø®ÄÉÀ̼ÇÀº Content-Language heading ¸¦ ÅëÇØ ¹ÝȯµÇ´Â µ¥ÀÌŸÀÇ ½ÇÁ¦ ¾ð¾î ¼³Á¤À» ³ªÅ¸³»¾ß ÇÑ´Ù). »ç¿ëÀÚ°¡ ȯ°æ º¯¼ö¸¦ ¼³Á¤ÇÒ ¼ö Àְųª (¿¹, setuid/setgid ÇÁ·Î±×·¥) ÀÔ·Â ÇÊÅ͸µÀÇ ÀϺκÐÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù¸é (¿¹, CGI ½ºÅ©¸³Æ®¿¡ ´ëÇØ) ȯ°æ º¯¼ö ÇÊÅ͸µ½Ã ÀÌ °ªÀ» °Ë»çÇØ¾ß ÇÑ´Ù. GNU C ¶óÀ̺귯¸® glibc ´Â setuid/setgid ÇÁ·Î±×·¥¿¡ ´ëÇØ LANG ¿¡ ¸î¸î °ª (ƯÈ÷ "/" ·Î ½ÃÀÛÇÏ´Â ¸ðµç °ª) À» Çã¿ëÇÏÁö ¾ÊÁö¸¸ ÇÊÅ͸µ¿¡¼ ¿¡·¯°¡ ¹ß°ßµÇ¾î ¿Ô´Ù (·¹µåÇÞ»ç´Â 2000³â 9¿ù 1ÀÏ¿¡ glibc ¹ö±× ¼öÁ¤À» ÇÏ¿© °»½ÅÆÇÀ» ¹èÆ÷ÇÏ¿´´Ù). ÀÌ·¯ÇÑ Á¾·ùÀÇ ÇÊÅ͸µÀÌ ¸ðµç Ç¥ÁØÀÌ ÇÊ¿ä·Î ÇÏÁö´Â ¾Ê´Âµ¥ µû¶ó¼ °¢ÀÚ ÀÚ½ÅÀÌ ÇÊÅ͸µÇÏ´Â °ÍÀÌ ´õ¿í ¾ÈÀüÇÏ´Ù. ÀúÀÚ´Â ¾ð¾î ¼³Á¤ ÇÊÅ͸µ¿¡ ´ëÇÑ ¾î¶² º»º¸±âµµ ¹ß°ßÇÏÁö ¸øÇßÀ¸¸ç ´ÙÀ½Àº ÀÌ ¹®Á¦¿¡ ´ëÇÑ ÀúÀÚÀÇ ¿¬±¸¿¡ ±âÃÊÇÑ Á¦¾ÈÀÌ´Ù. ¿ì¼± ÇÕ¹ýÀûÀÎ ¼³Á¤ °ª¿¡ ´ëÇØ ¸î¸¶µð. ¾ð¾î ¼³Á¤Àº ÀϹÝÀûÀ¸·Î IETF RFC 1766 ¿¡ Á¤ÀÇµÈ Ç¥ÁØ Å±׸¦ »ç¿ëÇÏ¿© ¼³Á¤µÈ´Ù (±âº» ű׷ΠµÎ ¹®ÀÚÀÇ ±¹°¡ Äڵ带 »ç¿ëÇÏ¸ç ´ë½Ã±âÈ£·Î ±¸ºÐµÇ´Â ¼±ÅÃÀûÀÎ ÇϺΠűװ¡ µû¸¦ ¼ö ÀÖ´Ù; ÀúÀڴ ȯ°æ º¯¼ö ¼³Á¤ÀÌ ´ë½Å ¹ØÁÙÀ» »ç¿ëÇÔÀ» ¹ß°ßÇß´Ù). ±×·¯³ª À̰ÍÀº ±×´ÙÁö À¯¿¬ÇÏÁö ¾ÊÀ¸¸ç µû¶ó¼ ¼¼ ¹®ÀÚÀÇ ±¹°¡ Äڵ尡 °ð »ç¿ëµÉ ¼öµµ ÀÖ´Ù. ¶ÇÇÑ µÎ°³ÀÇ ÁÖ¿äÇÏÁö¸¸ ±×´ÙÁö ȣȯµÇÁö ¾Ê´Â È®Àå Æ÷¸ËÀÎ X/Open Æ÷¸Ë°ú CEN Æ÷¸Ë (European Community Standard) ÀÌ ÀÖ´Ù; µÑ ¸ðµÎ¸¦ Çã¿ëÇÏ°í ½ÍÀ»Áöµµ ¸ð¸¥´Ù. ÀϹÝÀûÀÎ °ªÀº ``C" (C ·ÎÄÉÀÏ), ``EN" (¿µ¾î), ``FR_fr" ( ÇÁ¶û½º ¿µ¿ª±ÇÀÇ ÇÁ¶û½º¾î) ¸¦ Æ÷ÇÔÇÑ´Ù. ¶ÇÇÑ ¸¹Àº »ç¶÷µéÀÌ Ç¥ÁØÀÌ ¾Æ´Ñ À̸§À» »ç¿ëÇϰí Àִµ¥ ÀÌ´Â ÀÌ ¹®Á¦¿¡ ´ëóÇϱâ À§ÇØ ``alias" ½Ã½ºÅÛÀ» °³¹ßÇϱâ À§ÇØ ÇÁ·Î±×·¥ÀÌ °¡Á³´ø À̸§ÀÌ´Ù (GNU gettext ¿Í X11 °æ¿ì °¢°¢ /usr/share/locale/locale.alises ¿Í /usr/lib/X11/locale/locale.aliases ¸¦ º¸¶ó); À̵éÀº º¸Åë Çã¿ëµÇ¾î¾ß ÇÑ´Ù. gettext() °°Àº ¶óÀ̺귯¸®´Â ¸ðµç ÀÌ·¯ÇÑ º¯ÇüÀ» Çã¿ëÇØ¾ß ÇÏ¸ç °¡´ÉÇÑ ÀûÀýÇÑ °ªÀ» ã¾Æ¾ß ÇÑ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â FSF [1999] ¸¦ ÂüÁ¶ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ±×·¯³ª ÇÊ¿äÄ¡ ¾ÊÀº ¹®ÀÚ, ƯÈ÷ (½Å·ÚÇÒ ¼ö ÀÖ´Â µð·ºÅ丮¿¡¼ ¹þ¾î³¯ ¼ö ÀÖ°Ô ÇÏ´Â) ``/" °ú (»óÀ§ µð·ºÅ丮·Î À̵¿ÇÒ ¼ö ÀÖ°Ô ÇÏ´Â) ``.." ¹®ÀÚ´Â ÇÊÅͰ¡ Çã¿ëÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. NLSPATH ¿¡¼ ´Ù¸¥ À§ÇèÇÑ ¹®ÀÚ´Â (´ëü¸¦ ³ªÅ¸³»´Â) ``%" °ú (µð·ºÅ丮 ±¸ºÐÀÚÀÎ) ``:" ÀÌ´Ù; ´Ù¸¥ ¸Ó½Å¿¡ ´ëÇÑ ¹®¼¿¡¼´Â ¾î¶² ±¸ÇöÀº ´Ù¸¥ °ªÀ» À§ÇØ À̵éÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù°í Á¦¾ÈÇÏÁö¸¸ À̵éÀ» ±ÝÁöÇÏ´Â °ÍÀÌ °¡Àå ¾ÈÀüÇÑ °ÍÀÌ´Ù. 4.7.4. ÃÖÁ¾ °á°ú¿ä¾àÇϸé ÀúÀÚ´Â ½Å·ÚµÈ »ç¿ëÀÚ°¡ °ªÀ» Á¦°øÇÏÁö ¾Êµµ·Ï ÇÑ´Ù¸é NLSPATH ¸¦ ´Ü¼øÈ÷ Áö¿ì°Å³ª Àç¼³Á¤Çϵµ·Ï ±ÇÇÑ´Ù. HTTP ¿¡¼ Accept-Language heading, ·ÎÄÉÀÏÀ» ÁöÁ¤ÇÏ´Â Æû °ª ¹× LANGUAGE, LANG, ¿¹Àü LINGUAS, LC_ALL °ú ´Ù¸¥ LC_* °ª¿¡ ´ëÇØ null (empty) °ªÀ» Çã¿ëÇϰųª ¶Ç´Â ´ÙÀ½ÀÇ Á¤±Ô Ç¥Çö½Ä°ú ÀüºÎ ÀÏÄ¡ÇÏ´Â °ªµé¸¸À» Çã¿ëÇϱâ À§ÇØ ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀڷκÎÅÍÀÇ ·ÎÄÉÀÏÀ» ÇÊÅ͸µÇضó:
ÀúÀÚ´Â ÀÌ ÆÐÅϰú ÀÏÄ¡ÇÏÁö ¾Ê´Â ¾î¶°ÇÑ ÇÕ¹ýÀûÀÎ ·ÎÄÉÀϵµ ¹ß°ßÇÏÁö ¸øÇßÁö¸¸, ÀÌ ÆÐÅÏÀº ·ÎÄÉÀÏ °ø°Ý¿¡ ´ëÇØ¼ º¸È£ÇÏ´Â °Íó·³ º¸ÀδÙ. ¹°·Ð ¿äûµÈ ·ÎÄÉÀÏ¿¡¼ ¾òÀ» ¼ö ÀÖ´Â ¸Þ½ÃÁö°¡ ÀÖ´Ù°í º¸ÁõÇÒ ¼ö´Â ¾øÁö¸¸ ±×·¯ÇÑ °æ¿ì ÀÌ·± ·çƾµéÀº µðÆúÆ® ¸Þ½ÃÁö (º¸Åë ¿µ¾î)·Î µ¹¾Æ°¥ °ÍÀ̸ç Àû¾îµµ À̰ÍÀÌ º¸¾È °ü·Ã ¹®Á¦°¡ µÇÁö´Â ¾Ê´Â´Ù. ¹°·Ð ¾ð¾î´Â ¼º¹® (written) ½Éº¼À» ³ªÅ¸³»´Â Ç¥ÁØÀûÀÎ ¹æ½ÄÀ¸·Î Áö¿øµÇ¾î¾ß Çϸç ÀÌ´Â ¹®ÀÚ ÀÎÄÚµù ³íÀÇ·Î À̲ö´Ù. 4.8. ¹®ÀÚ ÀÎÄÚµù4.8.1. ¹®ÀÚ ÀÎÄÚµù ¼Ò°³¹Ì±¹ÀεéÀº ¿À·§µ¿¾È ¾Æ½ºÅ° ¹®ÀÚ¼ÂÀ» ÀÌ¿ëÇÏ¿© ÅØ½ºÆ®¸¦ ¼·Î ±³È¯Çß´Ù; º»·¡ ¹Ì±¹ÀÇ ¸ðµç ½Ã½ºÅÛµéÀÌ ¾Æ½ºÅ°¸¦ Áö¿øÇϱ⠶§¹®¿¡ ¿µ¾î ÅØ½ºÆ®¸¦ ¼Õ½±°Ô ±³È¯ÇÒ ¼ö ÀÖ´Ù. ºÒÇàÈ÷µµ ¾Æ½ºÅ°´Â °ÅÀÇ ¸ðµç ´Ù¸¥ ¾ð¾îÀÇ ¹®ÀÚ¸¦ ´Ù·ç±â¿¡´Â ºÎÀûÀýÇÏ´Ù. ¿À·§µ¿¾È ¿©·¯ ³ª¶óµéÀº ´Ù¸¥ ¾ð¾î·Î ÅØ½ºÆ®¸¦ ±³È¯ÇÏ´Â ¿©·¯°¡Áö ±â¹ýÀ» äÅÃÇØ¿ÔÀ¸¸ç ÀÌ´Â ´õ¿í ´õ »óÈ£ ¿¬°áµÈ ¼¼»ó¿¡¼ µ¥ÀÌŸ¸¦ ±³È¯ÇÏ´Â °ÍÀ» ¾î·Æ°Ô ¸¸µé°í ÀÖ´Ù. ´õ¿í ÃÖ±Ù¿¡ ISO ´Â ISO 10646, Universal Multiple-Octet Coded Character Set (UCS) À» °³¹ßÇߴµ¥ UCS ´Â ¼¼»óÀÇ ¸ðµç ¹®ÀÚ °¢°¢¿¡ ´ëÇØ À¯ÀÏÇÑ 31 ºñÆ® °ªÀ» Á¤ÀÇÇÏ´Â ÄÚµåÈµÈ ¹®ÀÚ¼ÂÀÌ´Ù. UCS ÀÇ Ã¹ 65536 ¹®ÀÚ (µû¶ó¼ 16 ºñÆ®¿¡ ²À¸Â´Ù) ´Â Basic Multilingual Plane (BMP) À̶ó°í ĪÇϸç BMP ´Â °ÅÀÇ ¿À´Ã³¯ ¸ðµç ±¸¾î¸¦ ´Ù·ç·Á°í ÇÑ´Ù. Unicode Æ÷·³Àº À¯´ÏÄÚµå Ç¥ÁØÀ» °³¹ßÇϰí Àִµ¥ ÀÌ´Â UCS ¿¡ ÁßÁ¡À» µÎ¾î »óÈ£ ÀÌ¿ëÀ» µ½±â À§ÇØ ¾à°£ÀÇ Ãß°¡ÀûÀÎ ÇÕÀǸ¦ Ãß°¡ÇÑ´Ù. ¿ª»çÀûÀ¸·Î À¯´ÏÄÚµå¿Í ISO 10646 Àº °æÀï ±×·ìÀÌ °³¹ßÇßÁö¸¸ °í¸¿°Ôµµ µÎ ±×·ìÀº °øµ¿ ÀÛ¾÷ÀÇ Çʿ伺À» ±ú´Þ¾ÒÀ¸¸ç ÇöÀç ¼·Î Çù·ÂÇÏ¸ç °³¹ßÇϰí ÀÖ´Ù. ±¹Á¦ÈµÈ ¹®ÀÚ¸¦ ´Ù·ç´Â »õ·Î¿î ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÛ¼ºÇϰí ÀÖ´Ù¸é ±¹Á¦ÀûÀÎ ¹®ÀÚ¸¦ ´Ù·ç±â À§ÇÑ ±âÃÊ·Î ISO 10646/À¯´ÏÄڵ带 »ç¿ëÇØ¾ß ÇÑ´Ù. ±×·¯³ª ´Ù¾çÇÑ ¿¾³¯ (¾ð¾î¿¡ ƯÁ¤ÀûÀÎ) ¹®ÀÚ¼ÂÀ¸·Î ¾²¿©Áø ¿¾³¯ ¹®¼¸¦ ó¸®ÇÒ Çʿ䰡 ÀÖÀ» ¼ö Àִµ¥ ÀÌ °æ¿ì¿¡ ÀÖ¾î ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚ°¡ ´Ù¸¥ ¹®¼ÀÇ ¹®Àڼ ¼³Á¤À» Á¦¾îÇÒ ¼ö ¾øµµ·Ï º¸ÁõÇÒ Çʿ䰡 ÀÖ´Ù (ÀÌ´Â ¹®¼ÀÇ ÇØ¼®¿¡ »ó´çÈ÷ ¿µÇâÀ» ¹ÌÄ¥ ¼ö Àֱ⠶§¹®ÀÌ´Ù). 4.8.2. UTF-8 ¼Ò°³´ëºÎºÐÀÇ ¼ÒÇÁÆ®¿þ¾î´Â 16 ºñÆ® ¶Ç´Â 32 ºñÆ® ¹®ÀÚ¸¦ ´Ù·çµµ·Ï ¼³°èµÇÁö ¾Ê¾Ò´Âµ¥ ÀÌÁ¦ºÎÅÍ 8 ºñÆ® ÀÌ»óÀÇ Æ÷°ýÀûÀÎ ¹®ÀÚ¼ÂÀ» »ý¼ºÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ°Ô µÇ¾ú´Ù. µû¶ó¼ ±âÁ¸ ÇÁ·Î±×·¥ ¹× ¶óÀ̺귯¸®°¡ ´õ¿í ½±°Ô ´Ù·ê ¼ö ÀÖ´Â Æ÷¸ËÀ¸·Î ÀÌ·¯ÇÑ ÀáÀçÀûÀ¸·Î ±¹Á¦ÀûÀÎ ¹®ÀÚ¸¦ ÀÎÄÚµåÇÒ ¼ö ÀÖµµ·Ï UTF-8 À̶ó´Â ƯÁ¤ Æ÷¸ËÀÌ °³¹ßµÇ¾ú´Ù. UTF-8 Àº ´Ù¸¥ °÷Áß¿¡¼ IEFT-RFC 2279 ¿¡ Á¤ÀǵǾî ÀÖÀ¸¸ç ÀÌ ¶§¹®¿¡ ÀÚÀ¯·ÎÀÌ ÀÐÇôÁö°í »ç¿ëµÉ ¼ö ÀÖ´Â Àß Á¤ÀÇµÈ Ç¥ÁØÀÌ´Ù. UTF-8 Àº °¡º¯ ³Êºñ (variable-width) ÀÎÄÚµùÀ¸·Î 0 ¿¡¼ 0x7f (127) ±îÁö ¹øÈ£°¡ ¸Å°ÜÁø ¹®ÀÚµé ÀÚ½ÅÀ» ½Ì±Û ¹ÙÀÌÆ®·Î ÀÎÄÚµåÇÏ¸ç ¹Ý¸é ´õ¿í Å« °ªÀ» °®´Â ¹®ÀÚµéÀº ±× °ª¿¡ µû¶ó Á¤º¸°¡ 2 ¿¡¼ 6 ¹ÙÀÌÆ®·Î ÀÎÄÚµåµÈ´Ù. ÀÎÄÚµùÀº ƯÈ÷ ´ÙÀ½ÀÇ Á¤È®ÇÑ Æ¯¼ºÀ» °®µµ·Ï ¼³°èµÇ¾î¿Ô´Ù (ÀÌ Á¤º¸ÀÇ Ãâó´Â RFC ¹× ¸®´ª½º utf-8 ¸ÇÆäÀÌÁöÀÌ´Ù):
¿ä¾àÇϸé UTF-8 º¯È¯ Æ÷¸ËÀº ´Ù¸¥ Á¤È®ÇÑ Æ¯¼ºÀ» °®À» »Ó ¾Æ´Ï¶ó ¸ðµç ¼¼°èÀÇ ¾ð¾î¸¦ Áö¿øÇÒ ¼ö ÀÖ°í Áö±ÝÀ¸·Î¼´Â ¹Ì±¹ ¾Æ½ºÅ° ÆÄÀϰú ¿ªÇà ȣȯ¼ºÀ» °®°í Àֱ⠶§¹®¿¡ ±¹Á¦È ÅØ½ºÆ® Á¤º¸¸¦ ±³È¯Çϴµ¥ ÀÖ¾î °¡Àå À¯·ÂÇÑ ¹æ¹ýÀÌ µÇ°í ÀÖ´Ù. ¸¹Àº °æ¿ì¿¡ ÀÖ¾î ÀúÀÚ´Â À̸¦ »ç¿ëÇϱæ ÃßõÇÏ¸ç Æ¯È÷ ÅØ½ºÆ® ÆÄÀϳ»¿¡¼ µ¥ÀÌŸ¸¦ Á¤·ÄÇÒ ¶§´Â À̸¦ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù. 4.8.3. UTF-8 º¸¾È ÀïÁ¡UTF-8 À» ¾ð±ÞÇÏ´Â ÀÌÀ¯´Â ¾î¶² ¹ÙÀÌÆ® ½ÃÄö½º°¡ ºñÇÕ¹ýÀûÀÎ UTF-8 À̸ç À̰ÍÀÌ ¾Ç¿ëµÉ ¼ö ÀÖ´Â º¸¾È ±¸¸ÛÀÏ ¼öµµ Àֱ⠶§¹®ÀÌ´Ù. UTF-8 ÀÎÄÚ´õ´Â ``°¡´ÉÇÑ °¡Àå ªÀº" ÀÎÄÚµùÀ» »ç¿ëÇÑ´Ù°í ¾Ë·ÁÁ® ÀÖÁö¸¸ ¼øÁøÇÑ µðÄÚ´õ°¡ ÇÊ¿äÀÌ»óÀ¸·Î ±ä ÀÎÄÚµùÀ» ¹Þ¾ÆµéÀÏ ¼öµµ ÀÖ´Ù. Á¤¸»·Î ´õ¿í ÃʱâÀÇ Ç¥ÁØÀº µðÄÚ´õ°¡ ``non-shortest form" ÀÎÄÚµùÀ» ¹Þ¾ÆµéÀ̵µ·Ï Çã¿ëÇß´Ù. ¿©±â¼ÀÇ ¹®Á¦´Â À̰ÍÀÌ ÀáÀçÀûÀ¸·Î À§ÇèÇÑ ÀÔ·ÂÀÌ ´Ù¼öÀÇ ¹æ½ÄÀ¸·Î Ç¥ÇöµÉ ¼ö ÀÖÀ¸¸ç µû¶ó¼ À§ÇèÇÑ ÀÔ·ÂÀ» °Ë»çÇÏ´Â º¸¾È ·çƾÀ» ¹«·ÂȽÃų ¼öµµ ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù´Â °ÍÀÌ´Ù. RFC ´Â ´ÙÀ½°ú °°ÀÌ ¹®Á¦Á¡À» ±â¼úÇϰí ÀÖ´Ù:
ÀÌ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ ³íÀÇ´Â http://www.cl.cam.ac.uk/~mgk25/unicode.html ¿¡¼ Marjus Kuhn ÀÇ UTF-8 and Unicode FAQ for Unis/Linux ·ÎºÎÅÍ ¾òÀ» ¼ö ÀÖ´Ù. 4.8.4. UTF-8 ÇÕ¹ýÀûÀÎ °ªµû¶ó¼ UTF-8 ÀÔ·ÂÀ» ¹Þ¾ÆµéÀÏ ¶§ À¯È¿ÇÑ UTF-8 ÀÎÁö¸¦ °Ë»çÇÒ Çʿ䰡 ÀÖ´Ù. Ç¥ 4-1 Àº ¸ðµç ÇÕ¹ýÀûÀÎ UTF-8 ½ÃÄö½º ¸ñ·ÏÀÌ´Ù; ÀÌ Ç¥¿Í ÀÏÄ¡ÇÏÁö ¾Ê´Â ¸ðµç ¹®ÀÚ ½ÃÄö½º´Â ÇÕ¹ýÀûÀÎ UTF-8 ½ÃÄö½º°¡ ¾Æ´Ï´Ù. Ç¥¿¡¼ ù¹øÂ° ¿Àº UTF-8 ·Î ÀÎÄÚµåµÇ´Â ´Ù¾çÇÑ ¹®ÀÚ°ªµéÀÌ´Ù. µÎ¹øÂ° ¿Àº ÀÌ ¹®ÀÚµéÀÌ ¾î¶»°Ô ¹ÙÀ̳ʸ® °ªÀ¸·Î ÀÎÄÚµåµÇ´Â Áö¸¦ º¸¿©ÁØ´Ù; ``x" ´Â µ¥ÀÌŸ (0 ¶Ç´Â 1) °¡ ³õÀÌ´Â °÷À» ³ªÅ¸³½´Ù. ±×·¯³ª ¸î¸î °ªµéÀº °¡´ÉÇÑ °¡Àå ªÀº ÀÎÄÚµùÀÌ ¾Æ´Ï±â ¶§¹®¿¡ Çã¿ëµÇÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ¸¶Áö¸· ¿Àº °¢ ¹ÙÀÌÆ®°¡ °¡Áú ¼ö ÀÖ´Â (16Áø¹ý) À¯È¿ÇÑ °ªÀ» ³ªÅ¸³½´Ù. µû¶ó¼ ÇÁ·Î±×·¥Àº ¸ðµç ¹®ÀÚ°¡ ¼¼¹øÂ° ¿ÀÇ ÆÐÅÏ ÁßÀÇ Çϳª¿Í ÀÏÄ¡ÇÏ´ÂÁö °Ë»çÇØ¾ß ÇÑ´Ù. ``-" ´Â ÇÕ¹ýÀûÀÎ °ª (Æ÷°ýÀûÀÎ ) ÀÇ ¹üÀ§¸¦ ³ªÅ¸³½´Ù. ¹°·Ð ½ÃÄö½º°¡ ÇÕ¹ýÀûÀÎ UTF-8 ½ÃÄö½º¶ó°í ÇØ¼ À̸¦ ¼ö¿ëÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÏÁö´Â ¾ÊÀ¸¸ç (½º½º·Î ´Ù¸¥ °Ë»ç¸¦ ÇÒ Çʿ䰡 ÀÖ´Ù) ÀϹÝÀûÀ¸·Î ´Ù¸¥ °Ë»ç¸¦ Çϱâ Àü¿¡ UTF-8 ÇÕ¹ý¼º¿¡ ´ëÇØ ¸ðµç UTF-8 µ¥ÀÌŸ¸¦ °Ë»çÇØ¾ß ÇÑ´Ù. 표 4-1. ÇÕ¹ýÀûÀÎ UTF-8 ½ÃÄö½º
¾Õ¿¡¼ ¾ð±ÞÇßµíÀÌ ¹®Àڼ¿¡ ´ëÇÑ Ç¥ÁØ¿¡´Â ISO 10646 °ú Unicode µÎ°³°¡ ÀÖÀ¸¸ç À̵éÀº ¹®ÀÚ ÁöÁ¤À» µ¿±âÈÇϴµ¥ µ¿ÀÇÇÏ¿´´Ù. ISO/IEC 10646 °ú IETF RFC ³»ÀÇ UTF-8 ÀÇ Á¤ÀÇ´Â Uniforum ÀÇ Unicode °¡ Áö¿øÇÏ´Â ¹üÀ§¹ÛÀÇ ¹®ÀÚµéÀ» ÀÎÄÚµåÇϱâ À§ÇØ ÇöÀç 5 ¿Í 6 ¹ÙÀÌÆ® ½ÃÄö½º¸¦ Áö¿øÇÑ´Ù. ±×·¯³ª ÀÌ °ªµéÀÌ Unicode ¹®ÀÚ¸¦ Áö¿øÇϴµ¥ »ç¿ëÇÒ ¼ö ¾øÀ¸¸ç ISO 10646 ÀÇ ÇâÈÄ ¹öÀü¿¡¼µµ µ¿ÀÏÇÑ ÇѰ踦 °®À» °ÍÀ¸·Î »ý°¢µÈ´Ù. µû¶ó¼ ´ëºÎºÐÀÇ ¸ñÀû¿¡ ´ëÇØ 5 ¿Í 6 ¹ÙÀÌÆ® UTF-8 ÀÎÄÚµùÀº ÇÕ¹ýÀûÀÌÁö ¾ÊÀ¸¸ç º¸Åë À̸¦ ¹ö·Á¾ß ÇÑ´Ù (Ưº°ÇÑ ¸ñÀûÀÌ ¾Æ´Ñ °æ¿ì¶ó¸é). ÀÌ·¯ÇÑ ÀÏ·ÃÀÇ À¯È¿ÇÑ °ªµéÀ» °áÁ¤ÇÏ´Â °ÍÀº ¾î·Á¿ì¸ç »ç½Ç ÀÌ ¹®¼ÀÇ Ãʱ⠹öÀü¿¡´Â ´Ù¼ÒÀÇ Æ²¸° ¿£Æ®¸®¸¦ °®°í ÀÖ¾ú´Ù (¾î¶² °æ¿ì¿¡ ÀÖ¾î ³Ê¹« ±ä ¹®ÀÚ¸¦ Çã¿ëÇß´Ù). ¾ð¾î °³¹ßÀÚµéÀº ¶óÀ̺귯¸®¿¡ À¯È¿ÇÑ UTF-8 °ªÀ» °Ë»çÇÏ´Â ÇÔ¼ö¸¦ Æ÷ÇÔÇØ¾ß Çϴµ¥ À̸¦ ¿Ã¹Ù¸£°Ô °Ë»çÇÏ´Â °ÍÀº ¸Å¿ì ¾î·Æ±â ¶§¹®ÀÌ´Ù. ¾î¶² °æ¿ì¿¡ ÀÖ¾î¼ 16Áø¹ý ½ÃÄö½º C0 80 À» ºÎÁÖÀÇÇÏ°Ô ÀÚ¸£°í (³»ºÎÀûÀ¸·Î »ç¿ëÇϰí) ½ÍÀ» ¼öµµ ÀÖ´Ù°í ÀúÀÚ´Â ¾ð±ÞÇÑ´Ù. ÀÌ´Â Çã¿ëµÇ´Â °æ¿ì ¾Æ½ºÅ° NUL (NIL) À» ³ªÅ¸³¾ ¼ö ÀÖ´Â ³Ê¹« ±ä ½ÃÄö½ºÀÌ´Ù. C ¿Í C++ ¿¡¼ º¸Åë ¹®ÀÚ¿¿¡ NIL ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ´Â °ÍÀº ¹®Á¦°¡ »ý±â±â ¶§¹®¿¡ NIL À» µ¥ÀÌŸ ½ºÆ®¸²ÀÇ ÀϺκÐÀ¸·Î ³ªÅ¸³»±æ ¿øÇÒ ¶§ ÀÌ ½ÃÄö½º¸¦ »ç¿ëÇØ¿Ô´Ù; ÀÚ¹ÙÁ¶Â÷µµ ÀÌ·¯ÇÑ ¿¹¸¦ »ç¿ëÇϰí ÀÖ´Ù. µ¥ÀÌŸ¸¦ ó¸®ÇÒ ¶§ C0 80 À» ³»ºÎÀûÀ¸·Î´Â ÀÚÀ¯·Ó°Ô »ç¿ëÇØ¶ó ±×·¯³ª ±â¼úÀûÀ¸·Î À̸¦ µ¥ÀÌŸ¿¡ ÀúÀåÇϱâ Àü¿¡ ´Ù½Ã 00 À¸·Î ½ÇÁ¦ÀûÀ¸·Î ÀüÈ¯ÇØ¾ß ÇÑ´Ù. Çʿ信 µû¶ó UTF-8 µ¥ÀÌŸ ½ºÆ®¸²³»ÀÇ ÀÔ·ÂÀ¸·Î C0 80 À» ºÎÁÖÀÇÇÏ°Ô ¹Þ¾ÆµéÀÏ ¼öµµ ÀÖ´Ù. ÀÌ ½ÃÄö½º´Â »óÈ£¿î¿ë¼º¿¡ µµ¿òÀ» Áֱ⠶§¹®¿¡ º¸¾È¿¡ ÇØ¸¦ ³¢Ä¡Áö ¾Ê´Â´Ù¸é ÀÌ ½ÃÄö½º¸¦ ¼ö¿ëÇÏ´Â °ÍÀÌ ¾Æ¸¶µµ ÁÁÀº ½À°üÀÌ´Ù. À̸¦ ´Ù·ç´Â °ÍÀº ¾î·Á¿ï ¼ö ÀÖ´Ù. º¯È¯À» ´Ù·ç±â À§ÇØ ftp://ftp.unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.c ¿¡¼ ¾òÀ» ¼ö ÀÖ´Â Unicode ¿¡¼ °³¹ßÇÑ C ·çƾÀ» »ìÆìº¼ ¼öµµ ÀÖ´Ù. ÀúÀÚ¿¡°Ô ÀÌ ·çƾÀÌ ¿ÀÇ ¼Ò½º ¼ÒÇÁÆ®¿þ¾îÀÎÁö ¸íÈ®ÇÏÁö´Â ¾Ê´Ù (¶óÀ̼¾½º¿¡ ¼öÁ¤°¡´É ¿©ºÎ°¡ ¸íÈ®È÷ ¾ð±ÞµÇ¾î ÀÖÁö ¾Ê´Ù) µû¶ó¼ ÁÖÀÇÇØ¶ó. 4.8.5. UTF-8 °ü·Ã ÀïÁ¡ÀÌ Àý¿¡¼´Â UTF-8 À» ±â¼úÇߴµ¥ ÀÌ´Â °¡Àå ³Î¸® ¾²ÀÌ´Â UCS ¸ÖƼ¹ÙÀÌÆ® ÀÎÄÚµùÀ̱⠶§¹®ÀÌ´Ù. ÀÌ´Â ¸¹Àº ±¹Á¦È ÅØ½ºÆ® ó¸® ¹®Á¦¸¦ °£´ÜÇÏ°Ô ÇÑ´Ù. ±×·¯³ª UTF-8 ¸¸ÀÌ À¯ÀÏÇÑ ÀÎÄÚµùÀº ¾Æ´Ï¸ç UTF-8 °ú °°Àº Á¾·ùÀÇ ¹®Á¦Á¡À» °®°í °°Àº ¿¬À¯·Î ÀÎÇØ À¯È¿¼ºÀ» Æò°¡ÇØ¾ß ÇÏ´Â UTF-16 °ú UTF-7 °ú °°Àº ´Ù¸¥ ÀÎÄÚµùµµ ÀÖ´Ù. ´Ù¸¥ ¹®Á¦´Â ISO 10646/À¯´ÏÄڵ忡¼ ÇѰ¡Áö ÀÌ»óÀÇ ¹æ¹ýÀ¸·Î ¾î¶² ±¸ (phrase) °¡ Ç¥ÇöµÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î ¾î¶² °Á¶µÈ ¹®ÀÚ´Â ¾Ç¼¾Æ®¸¦ °®´Â ÇϳªÀÇ ¹®ÀÚ ¹× ÀÏ·ÃÀÇ ¹®ÀÚ (±âº» ¹®ÀÚ + º°µµÀÇ ±¸¼º ¾Ç¼¾Æ®) ·Î Ç¥ÇöµÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ µÎ ÇüÅ´ µ¿ÀÏÇÏ°Ô ³ªÅ¸³¯ ¼öµµ ÀÖ´Ù. ¶ÇÇÑ ³¢¿ö ³ÖÀ» ¼ö ÀÖ´Â zero-width °ø¹éÀ¸·Î ÀÌ´Â ¿Ü°ü»ó À¯»çÇÑ ¾ÆÀÌÅÛÀÌ ´Ù¸£°Ô »ý°¢µÇµµ·Ï ÇÑ´Ù. ÀÌ·¯ÇÑ ¼û°ÜÁø ÅØ½ºÆ®°¡ ÇÁ·Î±×·¥À» ¹æÇØÇÒ ¼ö ÀÖ´Â »óȲÀ» Á¶½ÉÇØ¶ó. ÀÌ´Â ÀϹÝÀûÀ¸·Î ÇØ°áÇϱ⠾î·Á¿î ¹®Á¦ÀÌ´Ù; ´ëºÎºÐÀÇ ÇÁ·Î±×·¥Àº ¿Ïº®È÷ Ưº°ÇÑ ½ÃÄö½º°¡ ³ªÅ¸³¯ ¼ö ÀÖ´Â ¹æ¹ýÀ» Ŭ¶óÀÌ¾ðÆ®°¡ ¾Ë ¼ö ÀÖ°Ô²û ¾ö°ÝÇÑ Á¦¾î¸¦ ÇÏÁö ¸øÇÑ´Ù (À̴ Ŭ¶óÀ̾ðÆ®ÀÇ ÆùÆ®, µð½ºÇ÷¹ÀÌ Æ¯¼º, ·ÎÄÉÀÏ µî¿¡ ÀÇÁ¸Çϱ⠶§¹®ÀÌ´Ù). 4.9. ÀԷ¿¡¼ ±³Â÷ »çÀÌÆ®ÀÇ ¾ÇÀÇÀÖ´Â ÄÁÅÙÆ®¸¦ ¿¹¹æÇضó¾î¶² ÇÁ·Î±×·¥Àº ½Å·ÚµÇÁö ¾ÊÀº ÇÑ »ç¿ëÀڷκÎÅÍ µ¥ÀÌŸ¸¦ ¹Þ¾Æ À̸¦ µÎ ¹øÂ° »ç¿ëÀÚ¿¡°Ô ³Ñ°ÜÁִµ¥ ±× ÈÄ µÎ ¹øÂ° »ç¿ëÀÚÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀº µÎ ¹øÂ° »ç¿ëÀÚ¿¡°Ô ÇØ·Î¿î ¹æ½ÄÀ¸·Î ±× µ¥ÀÌŸ¸¦ ó¸®ÇÒ ¼öµµ ÀÖ´Ù. À̴ ƯÈ÷ À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀϹÝÀûÀÎ ¹®Á¦·Î ``cross-site malicious content" ¶ó°í ºÎ¸¦ °ÍÀÌ´Ù. ¿ä¾àÇϸé ÀԷ¿¡ ´ëÇÑ °Ë»ç, ÇÊÅ͸µ ¶Ç´Â ÀÎÄÚµùÀ» ÇÑ ÈÄ À̸¦ ¹Þ¾Æµé¿©¾ß ÇÑ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 6.13절 À» º¸¶ó. ±âº»ÀûÀ¸·Î ÀÌ´Â ¸ðµç À¥ ¾ÖÇø®ÄÉÀÌ¼Ç ÀÔ·ÂÀÌ (ÀÌ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â ¹®ÀÚµéÀÌ Á¦°ÅµÇµµ·Ï) ÇÊÅ͸µ, (ÀÌ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â ¹®ÀÚµéÀÌ ¹®Á¦¸¦ ¿¹¹æÇÏ´Â ¹æ½ÄÀ¸·Î ÀÎÄÚµåµÇµµ·Ï) ÀÎÄÚµù ¶Ç´Â (´ÜÁö "¾ÈÀüÇÑ" µ¥ÀÌŸ¸¸ÀÌ ¸ñÀûÁö¿¡ µµ´ÞÇÔÀ» º¸ÁõÇϱâ À§ÇØ) À¯È¿ÈµÇ¾î¾ß ÇÔÀ» ÀǹÌÇÑ´Ù. ÇÊÅ͸µ°ú À¯È¿È´Â ´ë°³ ÀԷ¿¡¼ ÇàÇØÁ®¾ß ÇÏÁö¸¸ ÀÎÄÚµùÀº ÀÔ·Â ¶Ç´Â Ãâ·Â½Ã ÇàÇØÁú ¼ö ÀÖ´Ù. µ¥ÀÌŸ¸¦ ºÐ¼®¾øÀÌ ±×Àú Åë°ú½ÃŰ·Á¸é ¾Æ¸¶µµ ÀԷ½à µ¥ÀÌŸ¸¦ ÀÎÄÚµùÇÏ´Â °ÍÀÌ ´õ¿í ÁÁÁö¸¸ (ÀÌ °æ¿ì´Â ÀØÁö ¾ÊÀ» °ÍÀÌ´Ù) µ¥ÀÌŸ¸¦ ó¸®ÇÑ´Ù¸é Ãâ·Â½Ã ÀÎÄÚµù¿¡ ´ëÇØ¼´Â ³íÀǵéÀÌ ÀÖ´Ù. 4.10. ´Ù½Ã º¸³»Áú ¼öµµ ÀÖ´Â HTML/URIs ¸¦ ÇÊÅ͸µÇضóCross-site malicious content ¸¦ ¿¹¹æÇØ¾ß ÇÏ´Â ÇѰ¡Áö Ưº°ÇÑ °æ¿ì´Â ÇÑ »ç¿ëÀڷκÎÅÍ HTML ¶Ç´Â XHTML À» ¹Þ¾Æ À̸¦ ´Ù¸¥ »ç¿ëÀÚ¿¡°Ô Àü´ÞÇϵµ·Ï ¼³°èµÈ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÌ´Ù (ÀÌ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 6.13절 À» º¸¶ó). ´ÙÀ½ ÇϺΠÀýÀº ÀÌ·¯ÇÑ Æ¯Á¤ Á¾·ùÀÇ ÀÔ·ÂÀ» ÇÊÅ͸µÇÏ´Â °ÍÀÌ °øÅë ¿ä±¸»çÇ×À̱⠶§¹®¿¡ ÀÌ¿¡ ´ëÇØ ³íÀÇÇÑ´Ù. 4.10.1. ¸î¸î HTML µ¥ÀÌŸ¸¦ Á¦°Å ¹× ±ÝÁöÇØ¶ó¸ðµç °¡´ÉÇÑ (X)HTML űװ¡ ¾î¶² °ÍÀÌ¶óµµ ¿µÇâÀ» ³¢Ä¥ ¼ö ¾øµµ·Ï À̸¦ Á¦°ÅÇÏ´Â °ÍÀÌ °¡Àå ¾ÈÀüÇѵ¥ ÀÌÀÇ Á¦°Å´Â ºñ±³Àû ½±´Ù. À§¿¡¼ ¾ð±ÞÇßµíÀÌ ÇÕ¹ýÀûÀÎ ¹®ÀÚ ¸ñ·ÏÀ» È®ÀÎÇØ¼ ¸ñ·Ï¿¡ ¾ø´Â ±×·¯ÇÑ ¹®ÀÚµéÀ» °ÅÀý ¶Ç´Â Á¦°ÅÇØ¾ß ÇÑ´Ù. ÀÌ ÇÊÅÍ¿¡¼ ÇÕ¹ýÀûÀÎ ¹®ÀÚ ¸ñ·Ï¿¡ ÀÖ´Â ´ÙÀ½ ¹®ÀÚ´Â ´Ù¸¸ Æ÷ÇÔ½ÃŰÁö ¸¶¶ó: ``<", ``>" ¿Í ``&" (¼Ó¼º¿¡ »ç¿ëµÈ´Ù¸é ÀÌÁß ÀοëºÎÈ£ ``quot;"). ºê¶ó¿ìÀú°¡ HTML ½ºÆå¿¡ µû¶ó ÀÛµ¿ÇÑ´Ù¸é ``>" ´Â Á¦°ÅµÉ ÇÊ¿ä´Â ¾øÁö¸¸ ½ÇÁ¦·Î´Â Á¦°ÅµÇ¾î¾ß ÇÑ´Ù. ÀÌ´Â ¾î¶² ºê¶ó¿ìÀú´Â ÆäÀÌÁö ÀúÀÚ°¡ ½ÇÁ¦·Î ½ÃÀÛ ``<" ű׸¦ ³õ¾Æ ``µµ¿òÀÌ µÇµµ·Ï" Çϳª¸¦ ³¢¿ö³Ö¾ú´Ù°í °¡Á¤Çϱ⠶§¹®À¸·Î °ø°ÝÀÚ´Â ÀÌ µ¿ÀÛÀ» ¾Ç¿ëÇÏ¿© ¹Ù¶÷Á÷ÇÏÁö ¸øÇÑ ``<" ¸¦ ¸¸µé±â À§ÇØ ``>" ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. º¸Åë HTML Àü¼Û¿¡ »ç¿ëµÇ´Â ¹®ÀÚ¼ÂÀº ISO-8859-1 (±¹Á¦È ÅØ½ºÆ®¸¦ º¸³¾ ¶§¿¡µµ) ÀÌ¸ç µû¶ó¼ ÇÊÅÍ´Â ¶ÇÇÑ ´ëºÎºÐÀÇ Á¦¾î ¹®ÀÚ (°³Çà°ú ÅÇÀº ¹«¹æÇÏ´Ù) ¹× °íÂ÷ (high-order) ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖ´Â ¹®ÀÚ¸¦ Á¦°ÅÇØ¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ Á¢±Ù¹æ¹ýÀÇ ¹®Á¦Á¡Àº ½ÇÁ¦·Î »ç¿ëÀÚ¸¦ ³î¶ó°Ô ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ¸·Î ¸ðµç ±¹Á¦È ÅØ½ºÆ®°¡ ¸»¾øÀÌ Á¦°ÅµÈ´Ù¸é À̸¦ ÀûÀº »ç¶÷Àº ´çȤ½º·¯¿ï °ÍÀÌ´Ù. ¹«È¿ÇÑ ¹®ÀÚ°¡ °æ°í¾øÀÌ Á¶¿ëÈ÷ Á¦°ÅµÈ´Ù¸é ±× µ¥ÀÌŸ´Â µ¹ÀÌų ¼ö ¾øÀÌ ºÐ½ÇµÇ¾î ÃßÈÄ ´Ù½Ã ¾òÀ» ¼ö ¾øÀ» °ÍÀÌ´Ù. ÇѰ¡Áö ´ë¾ÈÀº ±×·¯ÇÑ ¹®ÀÚ¸¦ ±ÝÁöÇÏ¿© ÀÌ ¹®ÀÚ¸¦ »ç¿ëÇÏ·Á°í ÇÏ´Â »ç¿ëÀÚ¿¡°Ô ¿¡·¯ ¸Þ¼¼Áö¸¦ µÇµ¹·Á º¸³»´Â °ÍÀÌ´Ù. ÀÌ´Â Àû¾îµµ »ç¿ëÀÚ¿¡°Ô °æ°í¸¦ ÇÏÁö¸¸ »ç¿ëÀÚµéÀÌ Ã£´Â ±â´É¼ºÀ» ÁÖÁö´Â ¾Ê´Â´Ù. ´Ù¸¥ ´ë¾ÈÀº ÀÌ µ¥ÀÌŸ¸¦ ÀÎÄÚµù ¶Ç´Â À¯È¿ÈÇÏ´Â °ÍÀÌ´Ù. 4.10.2. HTML µ¥ÀÌŸ ÀÎÄÚµù°ÅÀÇ ¾ÈÀüÇÑ ´ë¾ÈÀº °áÁ¤ÀûÀÎ ¹®ÀÚ¸¦ º¯È¯½ÃÄÑ À̵éÀÌ HTML ¿¡¼ Åë»óÀûÀÎ Àǹ̸¦ °¡Áú ¼ö ¾øµµ·Ï ÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â ¸ðµç "<", ">" ¿Í "&" ¸¦ °¢°¢ "<", ">" ¿Í "&" ·Î º¯È¯½ÃÅ´À¸·Î½á ÇàÇØÁú ¼ö ÀÖ´Ù. ÀÓÀÇÀÇ ±¹Á¦È ¹®ÀÚ´Â "&#value;" Æ÷¸ËÀ» ÀÌ¿ëÇÏ¿© Latin-1 À¸·Î ÀÎÄÚµùµÉ ¼ö ÀÖ´Ù - ¸¶Áö¸·ÀÇ ¼¼¹ÌÄÝ·ÐÀ» ÀØÁö ¸¶¶ó. ±¹Á¦È ¹®ÀÚ¸¦ ÀÎÄÚµùÇÑ´Ù´Â °ÍÀº ¹°·Ð ÀÔ·Â ÀÎÄÚµùÀÌ ¹«¾ùÀÎÁö¸¦ ¾Ë¾Æ¾ß ÇÔÀ» ÀǹÌÇÑ´Ù. ¿©±â¼ ÇѰ¡Áö °¡´ÉÇÑ À§ÇèÀº ÀÌ·¯ÇÑ ÀÎÄÚµùÀÌ ¿ì¿¬È÷ µÎ¹ø ÇØ¼®µÈ´Ù¸é °ø°Ý´çÇϱ⠽¬¿ï °ÍÀ̶ó´Â °ÍÀÌ´Ù. ±×·¯³ª Àû¾îµµ ÀÌ Á¢±Ù ¹æ¹ýÀº ÃßÈÄ »ç¿ëÀÚ¿¡°Ô ÀÔ·ÂÀÇ "Àǵµ" ¸¦ º¼ ¼ö ÀÖµµ·Ï Çã¿ëÇÑ´Ù. 4.10.3. HTML µ¥ÀÌŸ È®Àξ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¿©ÇÏÆ° ÀÛµ¿Çϱâ À§Çؼ´Â Á¦ »ïÀڷκÎÅÍ HTML À» ¹Þ¾Æµé¿© À̸¦ »ç¿ëÀڵ鿡°Ô Àü¼ÛÇØ¾ß ÇÑ´Ù. ÁÖÀÇ - ÀÌ ½ÃÁ¡¿¡¼ À§ÇèÇÑ °÷À» °È°íÀÖ´Ù ; ½ÇÁ¦·Î À̸¦ ÇàÇÏ±æ ¿øÇÏ´ÂÁö¸¦ È®½ÅÇØ¶ó. ÀÓÀÇÀÇ °÷¿¡¼ ¿Â HTML À» ¹Þ¾ÆµéÀδٴ ¾ÆÀ̵ð¾î´Â À̸¦ ¿Ã¹Ù¸£°Ô ÀÌÇØÇÏ´Â °ÍÀÌ ¹«Ã´ ¾î·Æ±â ¶§¹®¿¡ »ó´çÇÑ º¸¾È °ß½ÀÀÚµé »çÀÌ¿¡¼µµ ÀǰßÀÌ ºÐºÐÇÏ´Ù. ±×·¯³ª ¾ÖÇø®ÄÉÀ̼ÇÀÌ HTML À» ¹Þ¾Æµé¿©¾ß Çϰí ÀÌ·²¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Ù°í ¹Ï´Â´Ù¸é Àû¾îµµ ¾ÈÀüÇÑ HTML ¸í·É ¸ñ·ÏÀ» È®ÀÎÇÏ¿© ´ÜÁö À̵鸸À» Çã¿ëÇØ¶ó. ´ÙÀ½Àº ¾ÖÇø®ÄÉÀÌ¼Ç (°Ô½ºÆ®ºÏ°ú °°Àº) ¿¡ À¯¿ëÇÒ ¼ö ÀÖ´Â ÃÖ¼ÒÇÑÀÇ ¾ÈÀüÇÑ HTML ű׼ÂÀÌ´Ù: <p> (paragraph), <b> (bold), <i> (italics), <em> (emphasis), <strong> (strong emphasis), <pre> (preformatted text), <br> (forced line break - ¸¶Ä§ űװ¡ ÇÊ¿äÇÏÁö ¾ÊÀ½À» ÁÖ¸ñÇØ¶ó) °ú À̵éÀÇ ¸¶Ä§ ű׵é. ´ÜÁö ÀûÀº ÀÏ·ÃÀÇ ``¾ÈÀüÇÑ" HTML ¸í·Éµé¸¸ÀÌ ¼ö¿ëµÊÀ» º¸ÁõÇÒ Çʿ䰡 ÀÖÀ»»Ó ¾Æ´Ï¶ó À̵éÀÌ ÀûÀýÈ÷ Æ÷°³Áö°í ´ÝÈûÀ» º¸ÁõÇÒ Çʿ䰡 ÀÖ´Ù. XML ¿¡¼´Â À̸¦ ``well-formed" µ¥ÀÌŸ¶ó°í ÇÑ´Ù. Ç¥ÁØ HTML (<p> ¾Õ¿¡ Á¦°øµÇÁö ¾ÊÀº ³»Æ÷µÈ </p> ¸¦ Áö¿øÇÏ´Â °ÍÀº ¹«¹æÇÒ °ÍÀÌ´Ù) À» ¼ö¿ëÇÏ·Á¸é ¾à°£ÀÇ ¿¹¿Ü°¡ ÀÖÀ» ¼ö ÀÖÁö¸¸ ¿ÏÀüÈ÷ ÀϹÝÀûÀÎ HTML À» ¼ö¿ëÇÏ·Á°í ÇÏ´Â °ÍÀº ´ëºÎºÐÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ÇÊ¿äÇÏÁö ¾Ê´Ù. ½Ç·Î HTML ´ë½Å XHTML À» °í¼öÇÏ·Á°í ÇÑ´Ù¸é well-formedness °¡ ¿ä±¸µÈ´Ù. ¶ÇÇÑ HTML ű״ ´ë¼Ò¹®ÀÚ ±¸ºÐÀ» ÇÏÁö ¾Ê´Âµ¥ ű״ ´ë¹®ÀÚ, ¼Ò¹®ÀÚ ¶Ç´Â À̵éÀÇ Á¶ÇÕÀÏ ¼ö ÀÖ´Ù. ±×·¯³ª XHTML À» ¼ö¿ëÇÏ·Á°í ÇÑ´Ù¸é ¸ðµç ű׸¦ ¼Ò¹®ÀڷΠǥÇöÇÒ Çʿ䰡 ÀÖ´Ù (XML Àº ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇϴµ¥ XML À» »ç¿ëÇÏ´Â XHTML Àº ¼Ò¹®ÀڷΠű׸¦ Ç¥ÇöÇØ¾ß ÇÑ´Ù). ´ÙÀ½Àº À̸¦ À§ÇØ ÀÓÀÇ·Î »ÌÀº ¾à°£ÀÇ ÆÁÀÌ´Ù. Á¦°øµÈ ÅØ½ºÆ®°¡ ¸ÞÀÎ »çÀÌÆ®·ÎºÎÅÍÀÇ (º¯Á¶¸¦ ¿¹¹æÇϱâ À§ÇØ) ÅØ½ºÆ®·Î À߸ø ÇØ¼®µÉ ¼ö ¾øµµ·Ï º¸Åë ¹«¾ùÀÌ HTML ÅØ½ºÆ®¿Í Çã¿ë ű׼ÂÀ» µÑ·¯½ÒÁö¸¦ ¼³°èÇØ¾ß ÇÑ´Ù. ¼Ó¼º ÇüÅÂ¿Í ±× °ªÀ» °Ë»çÇÏÁö ¾Ê´Â´Ù¸é ¸ðµç ¼Ó¼ºÀ» ¼ö¿ëÇÏÁö ¸¶¶ó; »ç¿ëÀڵ鿡°Ô ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â ÀÚ¹Ù½ºÅ©¸³Æ®¿Í °°Àº °ÍÀ» Áö¿øÇÏ´Â ¸¹Àº ¼Ó¼ºµéÀÌ ÀÖ´Ù. À§ ¸ñ·Ï¿¡¼ ÀúÀÚ°¡ ¾î¶°ÇÑ ¼Ó¼ºµµ Æ÷ÇÔÇÏÁö ¾Ê¾ÒÀ½À» ¾Ë¾ÆÂ÷·ÈÀ» °ÍÀÌ´Ù. ÀÌ´Â °¡Àå ¾ÈÀüÇÑ ¹æÄ§ÀÌ´Ù. ºÒ¾ÈÀüÇÑ Å±װ¡ »ç¿ëµÇ¸é µÉ ¼ö ÀÖ´Â ÇÑ °æ°í ¸Þ¼¼Áö¸¦ ÁÖ¾î¾ß ÇÏÁö¸¸ ½ÇÁ¦·Î ¾µ¸ðÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó¸é Áß´ëÇÑ ¹®ÀÚ¸¦ ÀÎÄÚµù (¿¹, "<" ´Â "<" ·Î) ÇÔÀ¸·Î½á »ç¿ëÀÚ¸¦ ¾ÈÀüÇÏ°Ô º¸È£ÇÔ°ú µ¿½Ã¿¡ µ¥ÀÌŸ ¼Õ½ÇÀ» ¿¹¹æÇÑ´Ù. 4.10.4. ÇÏÀÌÆÛÅØ½ºÆ® ¸µÅ© (URIs/URLs) È®ÀÎÁÖÀDZíÀº µ¶ÀÚ¶ó¸é ÀúÀÚ°¡ ÇÏÀÌÆÛÅØ½ºÆ® ¸µÅ© ÅÂ±× <a> ¸¦ ¾ÈÀüÇÑ HTML ű׷ΠÆ÷ÇÔÇÏÁö ¾Ê¾ÒÀ½À» ¾Ë¾ÆÂ÷·ÈÀ» °ÍÀÌ´Ù. ºÐ¸íÈ÷ <'a href="safe URI"> (ÇÏÀÌÆÛÅØ½ºÆ® ¸µÅ©) ¸¦ ¾ÈÀüÇÑ ¸ñ·Ï (¼Ó¼ºÀÇ ³»¿ëÀ» °Ë»çÇÏÁö ¾Ê¾Ò´Ù¸é ´Ù¸¥ ¸ðµç ¼Ó¼ºÀ» Çã¿ëÇÏÁö ¾ÊÀ¸¸ç) ¿¡ Ãß°¡ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀÌ À̸¦ ÇÊ¿ä·Î ÇÑ´Ù¸é ±×·¸°Ô ÇØ¶ó. ±×·¯³ª Á¦»ïÀÚ¿¡°Ô ¸µÅ© »ý¼ºÀ» Çã¿ëÇÏ´Â °ÍÀº ¾ÈÀüÇÑ URI [1] ¸¦ Á¤ÀÇÇÏ´Â °ÍÀÌ ¸Å¿ì Èûµç °ÍÀ¸·Î ¾Ë·ÁÁ® Àֱ⠶§¹®¿¡ ºñ±³Àû ´ú ¾ÈÀüÇÏ´Ù. ¸¹Àº ºê¶ó¿ìÀú´Â »ç¿ëÀÚ¿¡°Ô À§ÇèÇÒ ¼ö ÀÖ´Â ¸ðµç Á¾·ùÀÇ URI ¸¦ ¹Þ¾ÆµéÀδÙ. ÀÌ ÀýÀº ´Ù¸¥ »ç¿ëÀÚ¿¡°Ô ´Ù½Ã °Ç³×ÁÙ Á¦»ïÀڷκÎÅÍÀÇ URI ¸¦ È®ÀÎÇÏ´Â ¹æ¹ýÀ» HTML ³»·Î º´ÇÕµÈ URI ¸¦ Æ÷ÇÔÇØ¼ ³íÀÇÇÑ´Ù. ¿ì¼± ´Ù¾çÇÑ ½ºÆå¿¡ Á¤ÀÇµÈ °Í°ú °°ÀÌ URI ±¸¹®À» °£·«È÷ »ìÆìº¸ÀÚ. URIs ´Â Àý´ëÀû ¶Ç´Â »ó´ëÀûÀÏ ¼ö ÀÖ´Ù. Àý´ëÀû URI ÀÇ ±¸¹®Àº ´ÙÀ½°ú °°´Ù:
URI ´Â "http" ¿Í °°Àº ½ºÅ´ À̸§, "://" ¹®ÀÚ, "www.dwheeler.com" °ú °°Àº authority, µð·ºÅ丮 ¶Ç´Â ÆÄÀÏ À̸§°ú °°ÀÌ º¸ÀÌ´Â °æ·Î, ÁúÀÇ ¾ÕÀÇ ¹°À½Ç¥ ¹× ´Ü¶ô (fragment) ½Äº°ÀÚ ¾ÕÀÇ ÇØ½Ã ("#") ·Î ½ÃÀÛÇÑ´Ù. °¢°ýÈ£´Â ¼±ÅÃÀûÀÎ ºÎºÐÀ» µÑ·¯½Ñ´Ù - ¿¹·Î ¸¹Àº URIs ´Â ½ÇÁ¦·Î ÁúÀÇ ¶Ç´Â ´Ü¶ôÀ» Æ÷ÇÔÇÏÁö´Â ¾Ê´Â´Ù. ¸î¸î ½ºÅ´Àº µ¥ÀÌŸÁß ÀϺθ¦ Çã¿ëÇÏÁö ¾ÊÀ» ¼ö ÀÖÀ¸³ª (¿¹, °æ·Î, ÁúÀÇ ¶Ç´Â ´Ü¶ô) ¸¹Àº ½ºÅ´Àº ±× °íÀ¯ÀÇ Ãß°¡ÀûÀÎ ¿ä°ÇÀ» °®´Â´Ù. ¸¹Àº ½ºÅ´Àº authority Çʵ尡 ´ÙÀ½ ±¸¹®À» »ç¿ëÇÏ¿© ¼±ÅÃÀûÀÎ »ç¿ëÀÚ À̸§, ÆÐ½º¿öµå ¹× Æ÷Æ®¸¦ ½Äº°ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù:
"host" ´Â À̸§ ("www.dwheeler.com") ¶Ç´Â IPv4 ¼ýÀÚ ÁÖ¼Ò (127.0.0.1) ÀÏ ¼ö ÀÖ´Ù. »ó´ëÀû URI ´Â ÇöÀç °´Ã¼¿¡ ´ëÇØ ÇÑ °´Ã¼¸¦ ÂüÁ¶ÇÏ¸ç ±¸¹®Àº ÆÄÀÏ À̸§°ú °°ÀÌ º¸ÀδÙ:
´ëºÎºÐÀÇ URI ¿¡¼ Çã¿ëµÈ ¹®ÀÚ´Â Á¦ÇÑµÈ ¼ö·Î µû¶ó¼ ÀÌ ¹®Á¦¸¦ ÇÇÇϱâ À§Çؼ´Â ´Ù¸¥ 8-ºñÆ® ¹®ÀÚ¸¦ %hh ¿Í °°ÀÌ URL ÀÎÄÚµåÇÒ ¼öµµ ÀÖ´Ù (hh ´Â 8ºñÆ® ¹®ÀÚÀÇ 16Áø¹ý °ªÀÌ´Ù). À¯È¿ÇÑ URIs ¿¡ ´ëÇÑ ´õ¿í ¼¼ºÎÀûÀÎ Á¤º¸´Â IEFT RFC 2396 ¹× °ü·Ã ½ºÆåÀ» º¸¶ó. URIs ÀÇ ±¸¹®À» º¸¾Ò±â ¶§¹®¿¡ °¢ ºÎºÐÀÇ À§ÇèÀ» Á¶»çÇØº¸ÀÚ:
¹°·Ð ´Ü¼øÇÔ°úÀÇ ÀýÃæÀÌ ÀÖ´Ù. °£´ÜÇÑ ÆÐÅÏÀÌ ÀÌÇØÇϱ⠴õ¿í ½±Áö¸¸ ±×´ÙÁö ¼¼·ÃµÇÁö´Â ¾Ê´Ù (µû¶ó¼ ¼¼·ÃµÈ ÆÐÅÏ¿¡ ºñÇØ ³Ê¹« Çã°¡ÀûÀ̰ųª ³Ê¹« Á¦ÇÑÀûÀÏ ¼ö ÀÖ´Ù). º¹ÀâÇÑ ÆÐÅÏÀº ´õ¿í ¾ö°ÝÇÒ ¼ö ÀÖÁö¸¸ ´õ¿í ¸¹Àº ¿¡·¯¸¦ °¡Áú °Í °°ÀÌ º¸ÀÌ¸ç »ç¿ëÇϱâ À§ÇØ ´õ ¸¹Àº ¼º´ÉÀ» ÇÊ¿ä·Î ÇÏ¸ç ¾î¶² »óȲ¿¡ ÀÖ¾î ±¸ÇöÇÏ±â ¾î·Æ´Ù. ´ÙÀ½Àº ¸Å¿ì °£´ÜÇϸç Á÷Á¢ ¼ÕÀ¸·Î ¶Ç´Â Á¤±Ô Ç¥Çö½ÄÀ» ÅëÇØ ±¸ÇöµÉ ¼ö ÀÖ´Â "°£´ÜÇϰí ÀϹÝÀûÀ¸·Î ¾ÈÀüÇÑ (simple mostly safe)" URI ÆÐÅÏ¿¡ ´ëÇÑ ÀúÀÚÀÇ Á¦¾ÈÀÌ´Ù; ´ÙÀ½ ÆÐÅÏÀ» Çã¿ëÇØ¶ó:
ÀÌ ÆÐÅÏÀº ÁúÀÇ, ´Ü¶ô, Æ÷Æ® ¶Ç´Â »ó´ë URIs ¿Í °°ÀÌ ¸¹Àº ÀáÀçÀûÀ¸·Î À§ÇèÇÑ ´É·ÂÀ» Çã¿ëÇÏÁö ¾ÊÀ¸¸ç ´ÜÁö ¾à°£ÀÇ ½ºÅ´¸¸À» Çã¿ëÇÑ´Ù. ÀÌ´Â URL À̽ºÄÉÀÌÇÁ ¹× ¼¹ö°¡ ´Ù·ê ¼ö ¾øÀ» ¼öµµ ÀÖ´Â ¹®ÀÚ¸¦ ÁöÁ¤Çϱâ À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Â "%" ¹®ÀÚÀÇ »ç¿ëÀ» ±ÝÁöÇÑ´Ù. ÀÌ´Â ":" ¶Ç´Â URL À̽ºÄÉÀÌÇÁ¸¦ Çã¿ëÇÏÁö ¾Ê±â ¶§¹®¿¡ Æ÷Æ® ³Ñ¹ö ÁöÁ¤À» Çã¿ëÇÏÁö ¾ÊÀ¸¸ç À̸¦ ÀÌ¿ëÇØ¼ ´õ¿í À§ÇèÇÑ URI ·Î ¸®µð·º¼Ç½ÃŰ´Â °ÍÀº ¾î·Á¿ï °ÍÀÌ´Ù (À̽ºÄÉÀÌÇÁ ¹®ÀÚ°¡ ¾ø±â ¶§¹®¿¡). ¶ÇÇÑ ¸¹Àº ´Ù¸¥ ¹®ÀÚÀÇ »ç¿ëÀ» ¿¹¹æÇÑ´Ù: ¸¹Àº ¼Åø¸® ¼³°èµÈ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº ¸¹Àº ¿¹±âÄ¡ ¸øÇÑ ¹®ÀÚ¸¦ ´Ù·ê ¼ö ¾øÀ» °ÍÀÌ´Ù. ±×·³¿¡µµ ºÒ±¸Çϰí "ÀϹÝÀûÀ¸·Î ¾ÈÀüÇÑ (mostly safe)" URI ´Â ÇϺΠµð·ºÅ丮 ("/" ¸¦ ÅëÇØ) ¿Í »óÀ§ µð·ºÅ丮·Î ¿Ã¶ó°¡·Á´Â ½Ãµµ (".." ¸¦ ÅëÇØ) ¿Í °°Àº ¸¹Àº Àǽɽº·¯¿î URIs ¸¦ Çã¿ëÇÑ´Ù; ÀÌ·¯ÇÑ Á¾·ùÀÇ ºñÇÕ¹ýÀûÀÎ ÁúÀÇ´Â ¼¹ö°¡ Àâ¾Æ¾ßÇÑ´Ù. ÀúÀÚ°¡ ÀÌ·¯ÇÑ ºñÇÕ¹ýÀûÀÎ ÁúÀǰ¡ º¸¾È ¾àÁ¡ÀÎ °æ¿ì¸¦ ¸ð¸§¿¡µµ ºÒ±¸Çϰí ÀÌ´Â ¾î¶² ºñÇÕ¹ýÀûÀΠȣ½ºÆ® ½Äº°ÀÚ (¿¹, "20.20") ¸¦ Çã¿ëÇÑ´Ù. ¾î¶² À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº ÇϺΠµð·ºÅ丮¸¦ ÁúÀÇ µ¥ÀÌŸ·Î ó¸®ÇÑ´Ù (´õ ³ª»Ú°Ô´Â ¸í·É µ¥ÀÌŸ·Î); ÀÌ´Â ¸ðµç ¼Åõ¸£°Ô ¼³°èµÈ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¹ß°ßÇÒ ¼ö´Â ¶§¹®¿¡ ÀϹÝÀûÀ¸·Î ¿¹¹æÇϱâ Èûµé´Ù. ¿©·¯ºÐÀÌ ¸ðµç °æ·ÎÀÇ »ç¿ëÀ» ±ÝÁöÇÒ ¼öµµ ÀÖÁö¸¸ ÀÌ´Â ´ëºÎºÐÀÇ ÀÎÅÍ³Ý Á¤º¸¸¦ ÂüÁ¶ÇÏ´Â °ÍÀ» ºÒ°¡´ÉÇÏ°Ô ¸¸µé °ÍÀÌ´Ù. ÆÐÅÏÀº Áö¿ªÀû ¼¹ö Á¤º¸¿¡ ´ëÇÑ ÂüÁ¶ ("http:///", "http://localhost/" ¿Í "http://127.0.0.1" °ú °°Àº ÆÐÅÏÀ» ÅëÇØ) ¹× ³»ºÎ ³×Æ®¿öÅ©»óÀÇ ¼¹ö¿¡ Á¢±ÙÇÏ´Â °ÍÀ» Çã¿ëÇÑ´Ù; 4.11절 ¿¡ ±Ç°íµÈ¹Ù¿Í °°ÀÌ resulting HTTP Get ¿äûÀ» µ¿ÀÛ¿¡ ´ëÇÑ ¿äûÀÌ ¾Æ´Ñ Á¤º¸¿¡ ´ëÇÑ ¿äûÀ¸·Î¸¸ Á¤È®È÷ ÇØ¼®ÇÏ´Â ¼¹ö¿¡ ÀÇÁ¸ÇØ¾ß ÇÒ °ÍÀÌ´Ù. ÀÌ ÆÐÅÏÀº ÁúÀÇ ÆûÀ» Çã¿ëÇÏÁö ¾Ê±â ¶§¹®¿¡ ¸¹Àº °æ¿ì¿¡ ÀÖ¾î ÀÌ´Â ÃæºÐÇØ¾ß ÇÑ´Ù. ºÒÇàÈ÷µµ "ÀϹÝÀûÀ¸·Î ¾ÈÀüÇÑ" ÆÐÅÏÀº ¶ÇÇÑ ¸¹Àº ¼öÀÇ ±ÔÄ¢¿¡ ¸Â°í À¯¿ëÇÑ URIs ¸¦ ¸·´Â´Ù. ¿¹¸¦ µé¾î, ¸¹Àº À¥»çÀÌÆ®´Â "?" ¹®ÀÚ¸¦ »ç¿ëÇÏ¿© ƯÁ¤ ¹®¼¸¦ ½Äº°ÇÑ´Ù (¿¹, ´º½º »çÀÌÆ®»óÀÇ ±â»çµé). "#" ¹®ÀÚ´Â ¹®¼ÀÇ Æ¯Á¤ ÀýÀ» ÁöÁ¤Çϴµ¥ À¯¿ëÇÏ¸ç »ó´ë URIs ¸¦ Çã¿ëÇÏ´Â °ÍÀº ³íÀÇ¿¡¼ ´Ù·ïÁú °ÍÀÌ´Ù. ´Ù¾çÇÑ Çã¿ë ¹®ÀÚ¿Í URL À̽ºÄÉÀÌÇÁ´Â "ÀϹÝÀûÀ¸·Î ¾ÈÀüÇÑ" ÆÐÅÏ¿¡ Æ÷ÇԵǾî ÀÖÁö ¾Ê´Ù. ¿¹¸¦ µé¾î URL À̽ºÄÉÀÌÇÁ¸¦ Çã¿ëÇÏÁö ¾Ê´Â´Ù¸é ¸¹Àº ºñ¿µ¾î±Ç ÆäÀÌÁö¸¦ Á¢±ÙÇÏ´Â °ÍÀº ¾î·Æ´Ù. Á¤¸»·Î ±×·± ±â´É¼ºÀ» ÇÊ¿ä·Î ÇÑ´Ù¸é »ç¿ëÀÚ·Î ÇÏ¿©±Ý ´õ¿í ³ôÀº À§Çè¿¡ ³ëÃâµÇµµ·Ï ÇÏ´Â ¹Ý¸é ´õ¿í ¸¹Àº ±â´É¼ºÀ» ÁÖ°í ÀÖÀ½À» ±ú´ÞÀ¸¸é¼ ´ú ¾ÈÀüÇÑ ÆÐÅÏÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÁúÀǸ¦ Çã¿ëÇÏÁö¸¸ Àû¾îµµ »ç¿ëµÇ´Â ÇÁ·ÎÅäÄݰú Æ÷Æ®¸¦ Á¦ÇÑÇÏ´Â ÇÑ ÆÐÅÏÀº ´ÙÀ½°ú °°Àºµ¥ ÇÊÀÚ´Â À̸¦ "°£´ÜÇÏ°í ¾î´ÀÁ¤µµ ¾ÈÀüÇÑ ÆÐÅÏ (simple somewhat safe pattern)" À̶ó°í ºÎ¸¦ °ÍÀÌ´Ù:
ÀÌ ÆÐÅÏÀº ºñÇÕ¹ýÀûÀÎ À̽ºÄÉÀÌÇÁ, ´ÙÁß ÁúÀÇ, ftp ¿¡¼ÀÇ ÁúÀÇ µîÀ» Çã¿ëÇϱ⠶§¹®¿¡ ½ÇÁ¦·Î È¿°úÀûÀÌÁö´Â ¾Ê´Ù. ÀÌ´Â ºñ±³Àû °£´ÜÇÑ °ÍÀ» ÀÌ¿ëÇÑ´Ù. ½ÇÁ¦·Î URIs ¸¦ ÇÕ¹ýÀûÀÎ °ªÀ¸·Î Á¦ÇÑÇÏ´Â "¾î´ÀÁ¤µµ ¾ÈÀüÇÑ (somewhat safe)" ÆÐÅÏÀ» »ý¼ºÇÏ´Â °ÍÀº ²Ï ¾î·Æ´Ù. ´ÙÀ½Àº ÀúÀÚ°¡ "º¹ÀâÇÏÁö¸¸ ¾î´ÀÁ¤µµ ¾ÈÀüÇÑ ÆÐÅÏ (sophisticated somewhat safe pattern)" ÀÌ¶óµµ ºÎ¸£´Â ÆÐÅÏÀ¸·Î °ø¹éÀº ¹«½ÃµÇ¸ç ÁÖ¼®Àº "#" À¸·Î ½ÃÀ۵ȴÙ:
À§¿Í °°Àº º¹ÀâÇÑ ÆÐÅϵµ ¸ðµç ºñÇÕ¹ýÀûÀÎ URIs ¸¦ ±ÝÁöÇÏÁö´Â ¾Ê´Â´Ù. ¿¹¸¦ µé¾î ´Ù½Ã "20.20" Àº ÇÕ¹ýÀûÀÎ µµ¸ÞÀÎ À̸§ÀÌ ¾Æ´ÏÁö¸¸ ÆÐÅÏÀº À̸¦ Çã¿ëÇÑ´Ù; ±×·¯³ª ÀúÀÚ°¡ ¾Æ´ÂÇÑ ÀÌ´Â ¾î¶°ÇÑ º¸¾È ¹®Á¦µµ ¾ß±âÇÏÁö ¾Ê´Â´Ù. º¹ÀâÇÑ ÆÐÅÏÀº Á¦¾î¹®ÀÚ¸¦ ³ªÅ¸³»´Â URL À̽ºÄÉÀÌÇÁ¸¦ ±ÝÁöÇÑ´Ù (¿¹, $1F ¸¦ ÅëÇØ %00) - Çã¿ëµÈ °¡Àå ÀÛÀº À̽ºÄÉÀÌÇÁ °ªÀº %20 (¾Æ½ºÅ° ½ºÆäÀ̽º) ÀÌ´Ù. Á¦¾î ¹®ÀÚ¸¦ ±ÝÁöÇÔÀ¸·Î½á ¾î¶² ¹®Á¦¸¦ ¿¹¹æÇÏÁö¸¸ ¶ÇÇÑ Á¦ÇÑÀûÀÌ´Ù; ¸ðµç Á¦¾î ¹®ÀÚ¸¦ ÀÓÀÇÀÇ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î Àü¼ÛÇÏ´Â °ÍÀ» Áö¿øÇÏ·Á¸é "2-9" ¸¦ "0-9" ·Î º¯°æÇضó. ÀÌ ÆÐÅÏÀº °æ·Î¿¡ ¸ðµç ´Ù¸¥ URL À̽ºÄÉÀÌÇÁ °ªÀ» Çã¿ëÇϴµ¥ ±¹Á¦È ¹®ÀÚ¿¡ À¯¿ëÇÏÁö¸¸ À̸¦ ´Ù·ê ¼ö ¾ø´Â ¾à°£ÀÇ ½Ã½ºÅÛ¿¡¼ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Ù. ÆÐÅÏÀº Àû¾îµµ °ø¹é, °³Çà, ÀÌÁßÀοëºÎÈ£ ¹× ´Ù¸¥ À§ÇèÇÑ ¹®ÀÚ°¡ URI ¿¡ »ç¿ëµÊÀ» ±ÝÁöÇÏ¸ç µû¶ó¼ URI ¸¦ »ý¼º ¹®¼¿¡ º´ÇÕÇÒ ¶§ ´Ù¸¥ Á¾·ùÀÇ °ø°ÝÀ» ¿¹¹æÇÑ´Ù. ¸¹Àº °÷¿¡¼ ÆÐÅÏÀÌ "+" ¸¦ Çã¿ëÇÔÀ» ÁÖ¸ñÇØ¶ó. ½ÇÁ¦ÀûÀ¸·Î "+" ´Â Á¾Á¾ ÁúÀÇ¿Í ´Ü¶ô¿¡¼ °ø¹é ¹®ÀÚ ´ë½Å »ç¿ëµÈ´Ù. ºÒÇàÈ÷ À§¿¡¼ ¾ð±ÞÇßµíÀÌ ÁúÀÇ µ¥ÀÌŸ¸¦ Çã¿ëÇÏ´Â ¸ðµç ±â¹ýÀ» ÅëÇØ ÀÛµ¿ÇÒ ¼ö ÀÖ´Â °ø°ÝÀÌ Àִµ¥ ÁúÀǰ¡ Çã¿ëµÇ¾î ÀÖ´Ù¸é ÀÌ¿¡ ´ëÇØ ½ÇÁ¦ÀûÀ¸·Î ÈǸ¢ÇÑ ¹æ¾î´Â ¾øÀ» °Í °°´Ù. ±×·¡¼ À§ ÆÐÅÏ¿¡¼ ÁúÀÇ µ¥ÀÌŸÀÇ »ç¿ëÀ» Á¦°ÅÇÒ ¼ö ÀÖÁö¸¸ "º¹ÀâÇϰí ÀϹÝÀûÀ¸·Î ¾ÈÀüÇÑ (sophisticated mostly safe)" ÆÐÅÏÀ» »êÃâÇÏ´Â ´Ù¸¥ ÆûÀ» Çã¿ëÇØ¾ß ÇÑ´Ù.
ÀúÀÚ°¡ ¸»ÇÒ ¼ö ÀÖ´Â °Ç ´ÜÁö ÀÌ·¯ÇÑ ÆÐÅÏÀÌ »ç¿ëÀÚ¿¡ ÀÇÇØ ¼±ÅÃµÈ ÇÏÀÌÆÛÅØ½ºÆ® ¾ÞÄ¿ (<a> ű×) ¸¦ °Ë»çÇϱâ À§Çؼ¸¸ »ç¿ëµÈ´Ù¸é ÀÌ Á¢±Ù ¹æ¹ýÀº ¶ÇÇÑ À¥ ¹ö±×ÀÇ »ðÀÔÀ» ¿¹¹æÇÑ´Ù. À¥ ¹ö±×´Â ¸ÞÀÎ ÆäÀÌÁö¸¦ »ý¼ºÇÑ À¥¼¹ö ÀÌ¿ÜÀÇ ´©±º°¡¿¡°Ô ´©°¡ ÄÁÅÙÆ®¸¦ Àоú´ÂÁö ¹× ¾ðÁ¦ Àоú´ÂÁö¿Í °°Àº Á¤º¸¸¦ ÃßÀûÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ´Ü¼øÇÑ ÅØ½ºÆ®ÀÌ´Ù - ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 7.6절 À» º¸¶ó. ÀÌ´Â µ¿ÀÏÇÑ °Ë»ç ±ÔÄ¢À» °®°í¼ <img> (À̹ÌÁö) ű׸¦ »ç¿ëÇÑ´Ù¸é ±×·¸Áö ¾Ê´Ù - À̹ÌÁö ű״ Áï°¢ÀûÀ¸·Î ·ÎµåµÇ¾î ´©±º°¡¿¡°Ô À¥ ¹ö±×¸¦ Ãß°¡ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ´Ù½Ã Çѹø ¸»Çؼ ÀÌ´Â ¾î¶°ÇÑ ¼Ó¼ºµµ Çã¿ëÇÏÁö ¾Ê¾Ò´Ù°í ÃßÁ¤ÇÑ´Ù; ¸¹Àº ¼Ó¼ºµéÀº ²Ï À§ÇèÇÏ¸ç ¿©·¯ºÐÀÌ Á¦°øÇÏ·Á°í ÇÏ´Â º¸¾ÈÀ» µ¹ÆÄÇÒ ¼ö ÀÖ´Ù ÀÌ·¯ÇÑ ¸ðµç ÆÐÅϵéÀº Àüü URI °¡ ÆÐÅϰú ÀÏÄ¡ÇÔÀ» ¿ä±¸ÇÔÀ» ÁÖ¸ñÇϱ⠹ٶõ´Ù. ÀÌ·¯ÇÑ ÆÐÅϵéÀÇ ºÎÀûÀýÇÔÀº À̵éÀÌ ¸¹Àº À¯¿ëÇÑ ÆÐÅÏÀ» ±ÝÁöÇÏ´Â ¹æ½ÄÀ¸·Î Çã¿ë°¡´ÉÇÑ ÆÐÅÏÀ» Á¦ÇÑÇÑ´Ù´Â °ÍÀÌ´Ù (¿¹, À̵éÀº »õ·Î¿î URI ½ºÅ´ÀÇ »ç¿ëÀ» ¹æÇØÇÑ´Ù). ¶ÇÇÑ ¾î¶² ÆÐÅϵµ ¾î¶² À¥»çÀÌÆ®°¡ ÁúÀǸ¦ ¹Þ¾ÒÀ» ¶§ ÀÌ ÀÌ»óÀ¸·Î ¼öÇàÇÏ´Â ½ÇÁ¦ÀûÀÎ ¹®Á¦¸¦ ¿¹¹æÇÒ ¼ö´Â ¾ø´Ù - ±×¸®°í ÀÌ·¯ÇÑ À¥»çÀÌÆ®´Â Á¶Á÷¿¡ ³»ºÎÀûÀÌ´Ù. ±× °á°ú·Î GET ÁúÀǸ¦ action À¸·Î ¹Þ¾ÆµéÀÌ´Â À¥»çÀÌÆ®°¡ ÀÖ¾î¾ß¸¸ URI °¡ ½ÇÁ¦·Î ¾ÈÀüÇÒ °ÍÀÌ´Ù (4.11절À» º¸¶ó). ÇÕ¹ýÀûÀÎ URLs/URIs ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â IEFT RFC 2396 À» º¸¶ó; µµ¸ÞÀÎ ³×ÀÓ ±¸¹®Àº IEFT RFC 1034 ¿¡¼ ´õ¿í ½ÉµµÀÖ°Ô ³íÀǵǰí ÀÖ´Ù. 4.10.5. ´Ù¸¥ HTML ű׾Ƹ¶µµ ´õ¿í ¸¹Àº HTML ű×ÀÇ Áö¿øÀ» °í·ÁÇÒ ¼öµµ ÀÖ´Ù. ¸í¹éÇÑ ´ÙÀ½ ¼±ÅÃÀº <ol> (ordered list), <ul> (unordered list) ¹× <li> (list item) °ú °°Àº ¸®½ºÆ® ÁöÇâ ű׵éÀÌ´Ù. ±×·¯³ª ¾î¶² ½ÃÁ¡ ÈÄ¿¡´Â ½ÇÁ¦·Î ¿ÏÀüÇÑ ÃâÆÇ °ü·Ã ű׸¦ Çã¿ëÇϰí ÀÖ´Ù (ÀÌ·± °æ¿ì Á¦°øÀÚ¸¦ ½Å·ÚÇϰųª ¿©±â ³íÀÇµÉ °Íº¸´Ù ´õ¿í ¾ö°ÝÇÑ °Ë»ç¸¦ ¼öÇàÇÒ Çʿ䰡 ÀÖ´Ù). ´õ¿í´õ Áß¿äÇÏ°Ô Ãß°¡µÇ´Â ¸ðµç »õ·Î¿î ±â´É¼ºÀº ¿¡·¯¿¡ ´ëÇÑ ±âȸ¸¦ »ý¼ºÇÑ´Ù (¶ÇÇÑ ¾Ç¿ëµÉ ¼öµµ ÀÖ´Ù). ´Ù¸¥ ¿¹·Î´Â µ¿ÀÏÇÑ URI ÆÐÅÏÀ» °®°í <img> ű׸¦ Çã¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ´Â Á¦»ïÀÚ¿¡°Ô ¹®¼¸¦ ´©°¡ ¾ðÁ¦ Àоú´ÂÁö ½Äº°ÇÒ ¼ö ÀÖ´Â À¥ ¹ö±×¸¦ ¹®¼¿¡ ³¢¿ö³Ö´Â °ÍÀ» Çã¿ëÇϱ⠶§¹®¿¡ ´ëü·Î ´ú ¾ÈÀüÇÏ´Ù°í ¾Ë·ÁÁ® ÀÖ´Ù. À¥ ¹ö±×¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 7.6절 À» º¸¶ó. 4.10.6. °ü·Ã ÀïÁ¡À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº ¸í½ÃÀûÀ¸·Î ¹®Àڼ (º¸Åë ISO-8859-1) À» ÁöÁ¤ÇØ¾ß ÇÏ¸ç ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀڷκÎÅÍÀÇ µ¥ÀÌŸ°¡ »ç¿ëµÈ´Ù¸é ´Ù¸¥ ¹®ÀÚ¸¦ Çã¿ëÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾ò±â À§Çؼ´Â 8.5절 À» º¸¶ó. ÀÌ·¯ÇÑ Á¾·ùÀÇ ÀÔ·ÂÀ» ÇÊÅ͸µÇÏ´Â °ÍÀÌ À߸øµÇ´Â °ÍÀº ½±±â ¶§¹®¿¡ ´Ù¸¥ ´ë¾Èµéµµ ¶ÇÇÑ ³íÀÇµÇ¾î ¿Ô´Ù. ÇѰ¡Áö ¿É¼ÇÀº »ç¿ëÀڵ鿡°Ô HTML º¸´Ù ´õ¿í °£´ÜÇÑ ¿©·¯ºÐÀÌ ¼³°èÇÑ ´Ù¸¥ ¾ð¾î¸¦ »ç¿ëÇÒ °ÍÀÎÁö ¹¯´Â °ÍÀÌ´Ù - ±× ¾ð¾î¿¡´Â ¸Å¿ì Á¦ÇÑµÈ ±â´É¼ºÀ» ºÎ¿©ÇÑ´Ù. ´Ù¸¥ Á¢±Ù ¹æ¹ýÀº HTML À» ¾î¶² ³»ºÎÀÇ "¾ÈÀüÇÑ" Æ÷¸ËÀ¸·Î ºÐ¼®ÇÑ ÈÄ ±× ¾ÈÀüÇÑ Æ÷¸ËÀ» ´Ù½Ã HTML À¸·Î ÀüȯÇÏ´Â °ÍÀÌ´Ù ÀÔ·Â, Ãâ·Â ¶Ç´Â µÑ ¸ðµÎ¿¡ ´ëÇØ ÇÊÅ͸µÀ» ÇàÇÒ ¼ö ÀÖ´Ù. CERT ´Â µ¥ÀÌŸ°¡ µ¿Àû ÆäÀÌÁöÀÇ ÀϺκÐÀÌ µÇ±â ÀüÀÎ Ãâ·Â µ¿¾È¿¡ µ¥ÀÌŸ¸¦ ÇÊÅ͸µÇϵµ·Ï ±Ç°íÇÑ´Ù. ÀÌ´Â ¿Ã¹Ù¸£°Ô ÇàÇØÁø´Ù¸é ÀÌ·¯ÇÑ Á¢±Ù ¹æ¹ýÀÌ ¸ðµç µ¿Àû ÄÁÅÙÆ®°¡ ÇÊÅ͸µµÊÀ» º¸ÀåÇϱ⠶§¹®ÀÌ´Ù. CERT ´Â µ¿Àû ÄÁÅÙÆ®°¡ HTTP ÀÌ¿ÜÀÇ ´Ù¸¥ ¹æ¹ýÀ» ÅëÇØ À¥»çÀÌÆ®ÀÇ µ¥ÀÌŸº£À̽º¿¡ µé¾î°¥ ¼ö Àֱ⶧¹®¿¡ ÀÔ·Â ½ÃÀÇ ÇÊÅ͸µÀº ±×´ÙÁö È¿°úÀûÀÌÁö ¾ÊÀ¸¸ç ÀÌ·± °æ¿ì¿¡ ÀÖ¾î À¥ ¼¹ö´Â ÀÔ·Â ÇÁ·Î¼¼½ºÀÇ ÀϺκÐÀ¸·ÎÀÇ µ¥ÀÌŸ¸¦ ÀüÇô º¼ ¼ö ¾øÀ» °ÍÀ̶ó°í ¹Ï°í ÀÖ´Ù. µ¿Àû ÆäÀÌÁö°¡ µé¾î°¡´Â ¸ðµç °÷¿¡¼ ÇÊÅ͸µÀÌ ±¸ÇöµÇÁö ¾Ê´Â´Ù¸é µ¥ÀÌŸ ¿ä¼Ò´Â ¼Õ»óµÈ ä·Î ³²¾ÆÀÖÀ» ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀúÀÚ´Â ¸ðµç °æ¿ì¿¡ ´ëÇØ ÀÌÁ¡¿¡ ´ëÇØ CERT ¿¡ µ¿ÀÇÇÏÁö ¾Ê´Â´Ù. ¹®Á¦´Â ÀԷ¸¸Å ¸ðµç Ãâ·ÂÀ» ÇÊÅ͸µÇÏ´Â °ÍÀ» ÀØ´Â °ÍÀº ½¬¿ì¸ç ¼Õ»óµÈ ÀÔ·ÂÀ» ½Ã½ºÅÛÀ¸·Î ³Ö´Â °ÍÀ» Çã¿ëÇÏ´Â °ÍÀº ¾î¶µç ÀϾ±æ ±â´Ù¸®´Â Àç¾ÓÀ̶ó´Â °ÍÀÌ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥Àº ±× ÀÔ·ÂÀ» ¾î¶µç ÇÊÅ͸µÇؾßÇÏ¸ç µû¶ó¼ ÀÔ·Â ÇÊÅ͸µÀÇ ÀϺκÐÀ¸·Î ¸ðµç ÀÌ·¯ÇÑ °Ë»ç¸¦ Æ÷ÇÔÇÏ´Â °ÍÀÌ ¶§¶§·Î ´õ¿í ÁÁ´Ù (±×·¡¼ °ü¸®ÀÚ´Â ±ÔÄ¢ÀÌ ½ÇÁ¦·Î ¹«¾ùÀÓÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù). ¸¶Áö¸·À¸·Î ¾î¶² º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥¿¡¼ °ªÀ» Ãâ·ÂÇÒ ¼ö ÀÖ´Â ¸¹Àº ´Ù¸¥ ÇÁ·Î±×·¥ À§Ä¡°¡ ÀÖÁö¸¸ µ¥ÀÌŸ°¡ ÀÔ·ÂÀ¸·Î µé¾î°¥ ¼ö ÀÖ´Â ¹æ½Ä°ú À§Ä¡´Â ¸î°¡Áö ¸¸ÀÌ ÀÖ´Ù´Â °ÍÀÌ´Ù.; ÀÌ·¯ÇÑ °æ¿ì¿¡ ÀÖ¾î¼ ÀÔ·Â ÇÊÅ͸µÀ» ÇÏ´Â °ÍÀÌ ´õ¿í ÁÁÀº °ßÇØÀÏ °ÍÀÌ´Ù. 4.11. ºñÁúÀǸ¦ ¼öÇàÇÏ´Â HTTP GET À» ±ÝÁöÇØ¶óHTTP ¸¦ »ç¿ëÇÏ´Â À¥ ±â¹Ý ¾ÖÇø®ÄÉÀ̼ÇÀº ÁúÀÇ¿ÜÀÇ ´Ù¸¥ °Í¿¡ ´ëÇØ HTTP ``GET" ¶Ç´Â ``HEAD" ¸Þ½îµå¸¦ »ç¿ëÇÏÁö ¸øÇϵµ·Ï ÇÑ´Ù. HTTP ´Â ¿©·¯°¡Áö ¸¹Àº ¸Þ½îµåµéÀ» Æ÷ÇÔÇϰí Àִµ¥ °¡Àå ³Î¸® »ç¿ëµÇ°í ÀÖ´Â µÎ°¡Áö ¸Þ½îµå´Â GET °ú POST ÀÌ´Ù. GET °ú POST ¸ðµÎ ÆûÀ¸·Î µ¥ÀÌŸ¸¦ Àü¼ÛÇϴµ¥ »ç¿ëÇÒ ¼ö Àִµ¥ GET ¸Þ½îµå´Â URL ·Î µ¥ÀÌŸ¸¦ Àü¼ÛÇÏ´Â ¹Ý¸é POST ¸Þ½îµå´Â µ¥ÀÌŸ¸¦ °³º°ÀûÀ¸·Î Àü¼ÛÇÑ´Ù. ºñÁúÀÇ (µ¥ÀÌŸ º¯°æ, µ· ÀÌü ¶Ç´Â ¼ºñ½º ¼¸í°ú °°Àº) ¸¦ ¼öÇàÇϱâ À§ÇØ GET ¸Þ½îµå¸¦ »ç¿ëÇÒ ¶§ÀÇ º¸¾È ¹®Á¦´Â °ø°ÝÀÚ°¡ ¾ÇÀÇÀÖ´Â Æû µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÏ´Â URL °ú ÇÏÀÌÆÛÅØ½ºÆ® ¸µÅ©¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. °ø°ÝÀÚ°¡ ¼Ó´Â »ç¶÷ÀÌ ¸µÅ© (ÇÏÀÌÆÛÅØ½ºÆ® ¸µÅ©ÀÇ °æ¿ì) ¸¦ Ŭ¸¯Çϰųª ¶Ç´Â ±×Àú ÆäÀÌÁö (HTML ÀÇ img ű׸¦ °®´Â À̹ÌÁö¿Í °°Àº ´Ù¸¥ °÷¿¡ Æ÷ÇÔµÈ transcluded Á¤º¸ÀÇ °æ¿ì) ¸¦ º¸µµ·Ï ³³µæ½ÃŲ´Ù¸é ¼Ó´Â »ç¶÷Àº GET À» ¼öÇàÇÒ °ÍÀÌ´Ù. GET ÀÌ ¼öÇàµÉ ¶§ °ø°ÝÀÚ°¡ »ý¼ºÇÑ ¸ðµç Æû µ¥ÀÌŸ´Â ¼Ó´Â »ç¶÷¿¡ ÀÇÇØ ÁöÁ¤µÈ ¸µÅ©·Î º¸³»Áú °ÍÀÌ´Ù. À̰ÍÀÌ 6.13절 ¿¡¼ ½ÉµµÀÖ°Ô ³íÀÇµÉ cross-site malicious attack ÀÌ´Ù. ¾ÇÀÇÀÖ´Â cross-site °ø°ÝÀÌ ¼öÇàÇÒ ¼ö ÀÖ´Â ´Ü ÇϳªÀÇ µ¿ÀÛÀº »ç¿ëÀÚ·Î ÇÏ¿©±Ý ¿¹»óÄ¡ ¸øÇÑ µ¥ÀÌŸ¸¦ º¸µµ·Ï ÇÏ´Â °ÍÀ¸·Î ÀÌ´Â ±×´ÙÁö ½É°¢ÇÑ ¹®Á¦´Â ¾Æ´Ï´Ù. ±×·¯³ª ÀÌ ´É·ÂÀ» ÀÌ¿ëÇØ¼ ¾î¶² °ø°ÝÀ» ÇàÇÒ ¼ö Àֱ⠶§¹®¿¡ ¿©ÀüÈ÷ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ºñÇÕ¹ýÀûÀÎ ¶Ç´Â ¿¬·ç½Ãų ¼ö ÀÖ´Â ÀÚ·á (material) À» ¿äûÇÏ´Â °ÍÀ¸·ÎºÎÅÍ ³ª¿Ã ¼ö ÀÖ´Â ¿¹±âÄ¡ ¸øÇßÁö¸¸ ½ÇÁ¦ ¼¼°è¿¡ ¿µÇâÀ» ³¢Ä¥ ¼ö ÀÖ´Â ¹«¾ùÀΰ¡¸¦ ¿äûÇÏ´Â »ç¿ëÀÚ¶§¹®¿¡ ¶Ç´Â »ç¿ëÀÚ·Î ÇÏ¿©±Ý º¸ÅëÀº ³ëÃâµÉ ¼ö ¾øÁö¸¸ °ø°ÝÀÚ¿¡°Ô ³ëÃâµÉ Áö ¸ð¸¦ ¾î¶² ¹æ½ÄÀ¸·Î Á¤º¸¸¦ ¿äûÇϰԲû ÇÔÀ¸·Î½á ÇÁ¶óÀ̹ö½Ã°¡ ¼Õ½ÇµÉ °¡´É¼ºÀÌ ÀÖ´Ù. ±×·¯³ª ¾ÇÀÇÀûÀÎ °ø°ÝÀÚ°¡ µ¥ÀÌŸ º¸±â¸¸ÀÌ ¾Æ´Ï¶ó cross-site ¸µÅ©¸¦ ÅëÇØ µ¥ÀÌŸ º¯°æÀ» ¾ß±âÇÒ ¼ö ÀÖ´Ù¸é ´õ¿í ´õ ½É°¢ÇÑ È¿°ú¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Ù. ´ëºÎºÐÀÇ CGI ¶óÀ̺귯¸®¿Í °°Àº ÀüÇüÀûÀÎ HTTP ÀÎÅÍÆäÀ̽º´Â µ¥ÀÌŸ¸¦ ¾ò´Âµ¥ ÀÖ¾î GET °ú POST ¸¦ µ¿ÀÏÇÑ ¹æ½ÄÀ» °®´Â ¸Þ½îµå·Î ´Ù·ç´Â °ÍÀÌ µµ¿òÀÌ µÇ±â ¶§¹®¿¡ º¸Åë ÀÌ µÑÀÇ Â÷À̸¦ °¨Ãá´Ù. ±×·¯³ª ½ÇÁ¦·Î µ¥ÀÌŸ ÁúÀÇÀÌ¿ÜÀÇ ¹«¾ùÀΰ¡¸¦ ¾ß±âÇÏ´Â µ¿ÀÛ¿¡ ´ëÇØ¼´Â ¿äûÀÌ POST ÀÌ¿ÜÀÇ ¾î¶² °ÍÀÎÁö¸¦ ¾Ë±â À§ÇØ °Ë»çÇØ¶ó; ¸¸¾à ±×·¸´Ù¸é ÁÖ¾îÁø µ¥ÀÌŸ·Î ä¿öÁø ÆûÀ» º¸¿©¼ »ç¿ëÀڵ鿡°Ô ±×µéÀÌ ¿äûÇÑ °ÍÀÎÁö¸¦ È®ÀÎÇϵµ·Ï ¹°¾î¶ó. ÀÌ´Â cross-site malicious content °ø°ÝÀ» ¿¹¹æÇÒ °ÍÀÌ¸ç µ¿½Ã¿¡ ÇÑ ¹øÀÇ Å¬¸¯À¸·Î µ¿ÀÛÀ» È®ÀÎÄÉ ÇÏ´Â ÆíÀǼºÀ» »ç¿ëÀÚ¿¡°Ô Á¦°øÇÏ´Â °ÍÀÌ´Ù. Á¤¸» ÀÌ µ¿ÀÛÀº HTTP ½ºÆå¿¡ ÀÇÇØ °·ÂÈ÷ ÃßõµÇ°í ÀÖ´Ù. HTTP 1.1 ½ºÆå (IEFT RFC 2616 9.1.1. Àý) ¿¡ µû¸£¸é GET °ú POST ¸Þ½îµå´Â °Ë»öÀÌ¿ÜÀÇ ´Ù¸¥ µ¿ÀÛÀ» ÃëÇÏ´Â Àǹ̸¦ °¡Á®¼´Â ¾ÈµÈ´Ù. ÀÌ·¯ÇÑ ¸Þ½îµåµéÀº ¾ÈÀüÇÏ´Ù°í °í·ÁµÇ¾î¾ß ÇÑ´Ù. ÀÌ´Â »ç¿ëÀÚ ¿¡ÀÌÀüÆ®·Î ÇÏ¿©±Ý Ưº°ÇÑ ¹æ½ÄÀ¸·Î POST, PUT °ú DELETE ¿Í °°Àº ´Ù¸¥ ¸Þ½îµå¸¦ ³ªÅ¸³¾ ¼ö ÀÖ°Ô ÇÏ¸ç µû¶ó¼ »ç¿ëÀÚ´Â ¾Æ¸¶µµ ¾ÈÀüÇÏÁö ¸øÇÑ µ¿ÀÛÀÌ ¿äûµÇ°í ÀÖ´Ù´Â »ç½ÇÀ» ¾Ë°Ô µÈ´Ù. 4.12. ÇÕ´çÇÑ ÀÔ·Â ½Ã°£ ¹× ·Îµå ·¹º§À» Á¦ÇÑÇØ¶óƯÈ÷ µé¾î¿À´Â ³×Æ®¿öÅ© µ¥ÀÌŸ¿¡ ŸÀӾƿô°ú ·Îµå ·¹º§ Çѵµ¸¦ ¼³Á¤ÇØ ³õ¾Æ¶ó. ±×·¸Áö ¾Ê´Ù¸é °ø°ÝÀÚ°¡ ²÷ÀÓ¾øÀÌ ¼ºñ½º¸¦ ¿äûÇÔÀ¸·Î½á ¼ºñ½º ºÎÀÎ °ø°ÝÀ» ½±°Ô ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 5장. ¹öÆÛ¿À¹öÇ÷οì ÇÇÇϱâ
±ØÈ÷ °øÅëÀûÀÎ º¸¾È °áÇÔÀº "¹öÆÛ ¿À¹öÇ÷οì" ¿¡ ´ëÇÑ Ãë¾à¼ºÀÌ´Ù. ¹öÆÛ ¿À¹öÇ÷οì´Â "¹öÆÛ ¿À¹ö·±" À̶ó°íµµ Çϴµ¥ "stack smashing" °ú "heap smashing" °ø°ÝÀ» Æ÷ÇÔÇÏ¿© ¸¹Àº Á¾·ùÀÇ ¹öÆÛ ¿À¹öÇÃ·Î¿ì °ø°ÝÀÌ ÀÖ´Ù. ±â¼úÀûÀ¸·Î ¹öÆÛ ¿À¹öÇ÷οì´Â ÇÁ·Î±×·¥ÀÇ ³»ºÎÀûÀÎ ±¸Çö°ú °ü·ÃµÈ ¹®Á¦ÀÌÁö¸¸ ÀúÀÚ°¡ À̸¦ µ¶ÀÚÀûÀÎ Àå¿¡¼ ´Ù·ê¸¸Å ³Î¸® ¾Ë·ÁÁø ½É°¢ÇÑ ¹®Á¦ÀÌ´Ù. ÀÌ ÁÖÁ¦°¡ ¾ó¸¶³ª Áß¿äÇÑ Áö¿¡ ´ëÇØ ÀÌÇØ½Ã۱â À§ÇØ CERT ¿¡¼´Â 1998 ³â¿¡´Â 13 °³ ±Ç°í¾È Áß 9°³ ¹× 1999 ³â¿¡´Â Àû¾îµµ Àý¹ÝÀÇ ±Ç°í¾È¿¡ ¹öÆÛ ¿À¹öÇ÷ο츦 Æ÷ÇÔÇß´Ù. ¹ö±×Æ®·¢¿¡ ´ëÇÑ 1999 ³âÀÇ ºñ°ø½ÄÀû Á¶»ç´Â ´ë·« ÀÀ´äÀÚÀÇ 2/3 °¡ ¹öÆÛ ¿À¹öÇ÷ο찡 ½Ã½ºÅÛ º¸¾ÈÀ» Ãë¾àÇÏ°Ô ÇÏ´Â ÁÖµÈ ¿äÀÎÀÌ¿´´Ù°í ´À²¼À½À» ¹ß°ßÇß´Ù (³ª¸ÓÁö ÀÀ´äÀÚ´Â ¿À¼³Á¤À» ÁÖµÈ ¿äÀÎÀ¸·Î ½Äº°ÇÏ¿´´Ù) [Cowan 1999]. ÀÌ´Â Àß ¾Ë·ÁÁø ¿À·¡µÈ ¹®Á¦·Î ¾ÆÁ÷²¯ °è¼ÓÇØ¼ ¹®Á¦·Î ´ëµÎµÇ°í ÀÖ´Ù [McGraw 2000]. ¹öÆÛ ¿À¹öÇ÷οì´Â º¸Åë ¹®ÀÚµéÀÇ ¹®ÀÚ¿ÀÎ ÀÏ·ÃÀÇ °ªµéÀ» °íÁ¤µÈ ±æÀ̸¦ °®´Â ¹öÆÛ¿¡ ÀÛ¼ºÇϰí Àû¾îµµ ÇÑ °ªÀ» ¹öÆÛÀÇ °æ°è ¿ÜºÎ (º¸Åë ¹öÆÛ °æ°è¸¦ ³Ñ¾î¼±´Ù) ¿¡ ÀÛ¼ºÇÒ ¶§ ÀϾÙ. ¹öÆÛ ¿À¹öÇ÷οì´Â »ç¿ëÀڷκÎÅÍÀÇ ÀÔ·ÂÀ» ¹öÆÛ³»·Î ÀоîµéÀÏ ¶§ ÀϾ ¼ö ÀÖÁö¸¸ ¶ÇÇÑ ÇÁ·Î±×·¥³»¿¡¼ ´Ù¸¥ Á¾·ùÀÇ ÇÁ·Î¼¼½Ì µ¿¾È¿¡ ÀϾ ¼öµµ ÀÖ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ ¹öÆÛ ¿À¹öÇ÷ο츦 Çã¿ëÇÑ´Ù¸é ÀÌ´Â ´ë°³ °ø°ÝÀÚ¿¡ ÀÇÇØ ¾Ç¿ëµÉ ¼ö ÀÖ´Ù. ¹öÆÛ°¡ Áö¿ªÀûÀÎ C º¯¼ö¶ó¸é ¿À¹öÇ÷οì´Â ÇÔ¼ö·Î ÇÏ¿©±Ý °ø°ÝÀÚ°¡ ¼±ÅÃÇÑ Äڵ带 ½ÇÇà½Ã۵µ·Ï Çϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ Æ¯Á¤ º¯ÇüÀ» ´ë°³ "stack smashing" °ø°ÝÀ̶ó°í ÇÑ´Ù. Èü¿¡¼ ¹öÆÛ´Â ´õ¿í ÁÁÁö ¾ÊÀºµ¥ °ø°ÝÀÚ°¡ ÇÁ·Î±×·¥³»ÀÇ ´Ù¸¥ º¯¼ö¸¦ Á¦¾îÇϱâ À§ÇØ ¿À¹öÇÃ·Î¿ì µîÀ» »ç¿ëÇÒ ¼ö ÀÖÀ» Áöµµ ¸ð¸¥´Ù. ´õ¿í ¼¼ºÎÀûÀÎ »çÇ×Àº Aleph1 [1996], Mudge[1995] ¶Ç´Â Nathan P. Smith ÀÇ "Stack Smashing Security Vulnerabilities" À¥»çÀÌÆ® http://destroy.net/machines/security/ ¿¡¼ ãÀ» ¼ö ÀÖ´Ù. ´ëºÎºÐÀÇ »óÀ§ ¼öÁØ ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â ÀÚµ¿ÀûÀ¸·Î ¹è¿ÀÇ Å©±â¸¦ Á¶Á¤Çϰųª (¿¹, ÆÞ) ¶Ç´Â º¸Åë ¹öÆÛ ¿À¹öÇ÷ο츦 ŽÁöÇØ¼ ¿¹¹æÇϱ⠶§¹®¿¡ (¿¹, Ada95) º»ÁúÀûÀ¸·Î ÀÌ ¹®Á¦´Â ¾ø´Ù.±×·¯³ª C ¾ð¾î´Â ÀÌ ¹®Á¦¿¡ ´ëÇØ ¾î¶°ÇÑ º¸È£µµ Á¦°øÇÏÁö ¾ÊÀ¸¸ç C++ µµ ¶ÇÇÑ ÀÌ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â ¹æ½ÄÀ¸·Î ½±°Ô »ç¿ëµÉ ¼ö ÀÖ´Ù. ¾î¼Àºí·¯µµ ¶ÇÇÑ ¾î¶°ÇÑ º¸È£µµ Á¦°øÇÏÁö ¾Ê´Âµ¥ º¸Åë ÀÌ·¯ÇÑ º¸È£¸¦ Á¦°øÇÏ´Â ¾î¶² ¾ð¾î (¿¹, Ada ¿Í ÆÄ½ºÄ®) µéÀº ÀÌ º¸È£ ±â´ÉÀ» ¼º´ÉÀûÀÎ Ãø¸é¿¡¼ ±ÝÁöÇÒ ¼ö ÀÖ´Ù. ´ëºÎºÐÀÇ ÇÁ·Î±×·¥ÀÌ ´Ù¸¥ ¾ð¾î·Î ÀÛ¼ºµÈ´Ù ÇÏ´õ¶óµµ ¸¹Àº ¶óÀ̺귯¸® ·çƾÀº C ¶Ç´Â C++ ·Î ÀÛ¼ºµÇ¾î ÀÖÀ¸¸ç °á°úÀûÀ¸·Î ÀÌ ·çƾÀ» È£ÃâÇÏ´Â glue Äڵ嵵 ¸¶Âù°¡ÁöÀε¥ µû¶ó¼ ¿øÇÏ´Â ¸¸Å ´Ù¸¥ ¾ð¾îµéÀº ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇÑ ¿ÏÀüÇÑ º¸È£¸¦ Á¦°øÇÏÁö´Â ¾Ê´Â´Ù. 5.1. C/C++ ¿¡¼ÀÇ À§ÇèC »ç¿ëÀÚ´Â °æ°è (bound) ¸¦ °Ë»çÇÏÁö ¾Ê´Â À§ÇèÇÑ ÇÔ¼ö°¡ °æ°è°¡ Àý´ë·Î ÃʰúµÇÁö ¾ÊÀ» °ÍÀÌ´Ù¶ó´Â º¸ÀåÀ» ÇÏÁö ¾Ê´Â´Ù¸é À̸¦ »ç¿ëÇÏ´Â °ÍÀ» ÇÇÇØ¾ß ÇÑ´Ù. ´ëºÎºÐÀÇ °æ¿ì¿¡ ÀÖ¾î ÇÇÇØ¾ß µÉ (¶Ç´Â º¸È£¸¦ º¸ÀåÇØ¾ßÇÒ) ÇÔ¼ö´Â strcpy(3), strcat(3), sprintf(3) (ÀÌ¿Í À¯»çÇÑ vsprintf(3)) °ú gets(3) Àε¥ À̵éÀº °¢°¢ strncpy(3), strncat(3), snprintf(3) °ú fgets(3) À¸·Î ´ëüµÇ¾î¾ßÇÑ´Ù. ¹ØºÎºÐÀÇ ³íÀǸ¦ º¸¶ó. strlen(3) ÇÔ¼öµµ ÀÖ¾î¾ß µÉ Á¾°á NIL ¹®ÀÚ°¡ ÀÖÀ» °ÍÀÌ´Ù¶ó°í º¸ÀåÇÏÁö ¸øÇÑ´Ù¸é ÇÇÇØ¾ß ÇÑ´Ù. scanf(3), fscanf(3), sscant(3), vscanf(3), vsscanf(3) °ú vfscant(3) °ú °°Àº scanf() °è¿µµ »ç¿ëÇϱ⿡´Â À§ÇèÇÏ´Ù; ¹®ÀÚ¿ÀÇ ÃÖ´ë ±æÀ̸¦ Á¦¾îÇÔÀÌ ¾øÀÌ µ¥ÀÌŸ¸¦ ¹®ÀÚ¿·Î º¸³»±â À§ÇØ ÀÌ ÇÔ¼öµéÀ» »ç¿ëÇÏÁö ¸¶¶ó (%s Æ÷¸ËÀÌ Æ¯È÷ ³Î¸® ¾Ë·ÁÁø ¹®Á¦ÀÌ´Ù). ¾îµð¿¡ »ç¿ëÇÏ´À³Ä¿¡ µû¶ó ¹öÆÛ ¿À¹ö·±À» Çã¿ëÇÒ ¼ö ÀÖ´Â ´Ù¸¥ À§ÇèÇÑ ÇÔ¼ö·Î´Â realpath(3), getopt(3), getpass(3), streadd(3), strecpy(3) °ú strtrns(3) µéÀÌ ÀÖ´Ù. getwd(3) ÇÔ¼ö¿¡ ÁÖÀÇÇØ¾ßÇϴµ¥ getwd(3) ÇÔ¼ö¿¡ º¸³»Áö´Â ¹öÆÛ´Â Àû¾îµµ PATH_MAX ¹ÙÀÌÆ® ±æÀÌ¿©¾ß ÇÑ´Ù. ºÒÇàÈ÷ snprintf() º¯ÇüµéÀº Ãß°¡ÀûÀÎ ¹®Á¦¸¦ °®°í ÀÖ´Ù. sprintf() °¡ ISO 1990 (ANSI 1989) Ç¥Áس»ÀÇ Ç¥ÁØ C ÇÔ¼öÀÌÁö¸¸ °ø½ÄÀûÀ¸·Î snprintf() ´Â Ç¥ÁØ C ÇÔ¼ö°¡ ¾Æ´Ï¸ç µû¶ó¼ ¸ðµç ½Ã½ºÅÛµéÀÌ snprintf() ¸¦ Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. ´õ¿í ¾ÈÁÁÀº °ÍÀº ¾î¶² ½Ã½ºÅÛÀÇ snprintf() °¡ ½ÇÁ¦ÀûÀ¸·Î ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇÑ º¸È£¸¦ Á¦°øÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù; ½Ã½ºÅÛµéÀÌ ±×Àú sprintf ¸¦ Á÷Á¢ÀûÀ¸·Î È£ÃâÇÑ´Ù. ¸®´ª½º libc4 ÀÇ ¿¹Àü ¹öÀüµéÀº ÀÌ·¯ÇÑ ²ûÁ÷ÇÑ ¹®Á¦¸¦ ¾ß±âÇÏ´Â "libbsd" ¿¡ ÀÇÁ¸ÇßÀ¸¸ç ÀúÀÚ´Â ¿¹ÀüÀÇ ¾î¶² HP ½Ã½ºÅ۵鵵 µ¿ÀÏÇÑ ¹®Á¦°¡ ÀÖÀ½À» µé¾ú´Ù. snprintf ÀÇ ¸®´ª½º ÇöÀç ¹öÀüÀº ÀûÀýÈ÷ ÀÛµ¿ÇÑ´Ù°í ¾Ë·ÁÁ® ÀÖ´Ù. Áï, ÀÌ´Â ½ÇÁ¦ÀûÀ¸·Î ¿äûµÈ °æ°è¸¦ Ä§ÇØÇÏÁö ¾Ê´Â´Ù. snprintf() ÀÇ ¹Ýȯ°ªµµ ¸¶Âù°¡Áö·Î °®°¡ÁöÀÌ´Ù; Single Unix Specification (SUS) ¹öÀü 2 ¿Í C99 Ç¥ÁØÀº snprintf() °¡ ¹ÝȯÇÏ´Â °ª¿¡ Â÷À̰¡ ÀÖ´Ù. ¸¶Áö¸·À¸·Î Àû¾îµµ snprintf ÀÇ ¾î¶² ¹öÀüÀº ¹®ÀÚ¿ÀÌ NIL ·Î ³¡³¯ °ÍÀÓÀ» º¸ÀåÇÏÁö ¾Ê´Â °Íó·³ º¸ÀδÙ; ¹®ÀÚ¿ÀÌ ³Ê¹« ±æ¸é NIL À» ÀüÇô Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. GTK ÀÇ ±âº»À¸·Î GNU C ¶óÀ̺귯¸®ÀÎ glibc ¿Í´Â ´Ù¸¥ glib ¶óÀ̺귯¸®´Â g_snprintf() ¸¦ °®°í ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. ÀÌ´Â Àϰü¼ºÀÖ´Â ¹Ýȯ ÀÇ¹Ì Ã¼°è¸¦ °®À¸¸ç ´Ã NIL ·Î ³¡³ª°í °¡Àå Áß¿äÇÑ °ÍÀº ´Ã ¹öÆÛ ±æÀ̸¦ ħ¹üÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù. 5.2. C/C++ ¿¡¼ÀÇ ¶óÀ̺귯¸® ¼Ö·ç¼ÇC/C++ ¿¡¼ ÇѰ¡Áö ÇØ°á¹æ¹ýÀº ¹öÆÛ ¿À¹öÇÃ·Î¿ì ¹®Á¦¸¦ °®Áö ¾Ê´Â ¶óÀ̺귯¸® ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ù ÇϺΠÀýÀº ÀÛµ¿µÉ ¼ö ÀÖÁö¸¸ ´ÜÁ¡À» °®´Â Ç¥ÁØ C ¶óÀ̺귯¸® ¼Ö·ç¼ÇÀ» ±â¼úÇÏ¸ç ´ÙÀ½ ÀýÀº ¹öÆÛ¿¡ ´ëÇÑ °íÁ¤µÈ ±æÀÌ ¹× µ¿ÀûÀ¸·Î ÀçÇÒ´çµÈ Á¢±Ù ¹æ¹ý¿¡ ´ëÇÑ ÀϹÝÀûÀÎ º¸¾È ÀïÁ¡À» ±â¼úÇÑ´Ù. ´ÙÀ½ ÇϺΠÀýÀº strlcpy ¿Í libmib ¿Í °°Àº ´Ù¾çÇÑ ´ëü ¶óÀ̺귯¸®¸¦ ±â¼úÇÑ´Ù. 5.2.1. Ç¥ÁØ C ¶óÀ̺귯¸® ¼Ö·ç¼ÇC ¿¡¼ ¹öÆÛ ¿À¹öÇ÷ο츦 ¿¹¹æÇϴ ǥÁØÀûÀÎ ÇØ°á¹æ¹ý (¸î¸î C++ ÇÁ·Î±×·¥¿¡¼µµ »ç¿ëµÈ´Ù) Àº ÀÌ·¯ÇÑ ¹®Á¦¿¡ ´ëÇØ º¸È£Çϴ ǥÁØ C ¶óÀ̺귯¸® È£ÃâÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ Á¢±Ù ¹æ¹ýÀº Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼öÀÎ strncpy(3) °ú strncat(3) ¿¡ ¸Å¿ì ÀÇÁ¸ÇÑ´Ù. ÀÌ Á¢±Ù ¹æ¹ýÀ» ¼±ÅÃÇÑ´Ù¸é ´ÙÀ½¿¡ ÁÖÀÇÇØ¶ó: ÀÌ È£ÃâÀº ¾à°£Àº ³î¶ö¸¸ÇÑ Àǹ̸¦ °®À¸¸ç ÀûÀýÈ÷ »ç¿ëÇϱⰡ ¾î·Æ´Ù. strncpy(3) ÇÔ¼ö´Â ¼Ò½º ¹®ÀÚ¿ ±æÀ̰¡ Àû¾îµµ ¼ö½ÅÁö ¹®ÀÚ¿ ±æÀÌ¿Í °°´Ù¸é ¼ö½ÅÁö ¹®ÀÚ¿À» NIL ·Î ³¡³»Áö ¾Ê´Âµ¥ µû¶ó¼ strncpy(3) À» È£ÃâÇÑ ÈÄ ¼ö½ÅÁö ¹®ÀÚ¿ÀÇ ¸¶Áö¸· ¹®ÀÚ¸¦ È®½ÇÈ÷ NIL ·Î ¼³Á¤Çضó. µ¿ÀÏÇÑ ¹öÆÛ¸¦ ¿©·¯¹ø Àç»ç¿ëÇÏ·Á°í ÇÏ´Ù¸é È¿°úÀûÀÎ Á¢±Ù ¹æ¹ýÀº ¹öÆÛ°¡ ½ÇÁ¦º¸´Ù ÇÑ ¹®ÀÚ ÂªÀ¸¸ç »ç¿ëÇϱâ Àü¿¡ ¸¶Áö¸· ¹®ÀÚ¸¦ NIL ·Î ¼³Á¤ÇÑ´Ù°í strncpy() ¿¡ ¾Ë·ÁÁÖ´Â °ÍÀÌ´Ù. strncpy(3) °ú strncat(3) µÑ ¸ðµÎ´Â »ç¿ëÇÒ ¼ö ÀÖ°Ô ³²¾ÆÀÖ´Â °ø¹éÀ» °Ç³×ÁÙ °ÍÀ» ¿ä±¸Çϴµ¥ À̴ Ʋ¸®±â ½¬¿î °è»êÀ¸·Î À̸¦ Ʋ¸°´Ù¸é ¹öÆÛ ¿À¹öÇÃ·Î¿ì °ø°ÝÀ» Çã¿ëÇÒ °ÍÀÌ´Ù. ¿À¹öÇ÷ο찡 ÀϾ´Â Áö¸¦ °áÁ¤Çϱâ À§ÇÑ ´Ü¼øÇÑ ¸ÞÄ«´ÏÁòÀ» Àý´ë·Î Á¦°øÇÏÁö ¸¶¶ó. ¸¶Áö¸·À¸·Î strncpy(3) Àº strncpy(3) ÀÌ ¼ö½ÅÁöÀÇ ³ª¸ÓÁö¸¦ NIL ·Î ä¿ì±â¶§¹®¿¡ ¾Æ¸¶ ´ëüµÇ´Â strcpy(3) ¿¡ ºñÇØ ¼º´É¸é¿¡¼ »ó´çÇÑ ºÒÀÌÀÍÀ» °®°í ÀÖ´Ù. ÀúÀÚ´Â ÀÌ·¯ÇÑ ¸¶Áö¸· »çÇ׿¡ ´ëÇØ ³î¶ó¿òÀ» Ç¥ÇöÇÑ À̸ÞÀÏÀ» ¹Þ¾Ò´Âµ¥ ÀÌ´Â Kernighan °ú Ritchie µÎ¹øÂ°ÆÇ [Kernighan 1988, page 249] ¿¡ ¸íÈ®È÷ ¼³¸íµÇ¾î ÀÖÀ¸¸ç ÀÌ µ¿ÀÛÀº ¸®´ª½º, FreeBSD ¹× ¼Ö¶ó¸®½º ¸ÇÆäÀÌÁö¿¡ ¸í¹éÈ÷ ¹®¼ÈµÇ¾î ÀÖ´Ù. ÀÌ´Â ´ÜÁö strcpy ´ë½Å strncpy ¸¦ ¾²´Â °ÍÀº ´ëºÎºÐÀÇ °æ¿ì¿¡ ÀÖ¾î ¾î¶°ÇÑ Àû´çÇÑ ÀÌÀ¯¾øÀÌ ¼º´É¸é¿¡¼ °¡Â÷¾ø´Â ÀúÇϸ¦ ¾ß±âÇÒ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù. ¹öÆÛ ¿À¹öÇ÷ο츦 ¿¹¹æÇÏ´Â µ¿½Ã¿¡ sprintf() ¸¦ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ À̶§ ÁÖÀǸ¦ ±â¿ïÀÏ Çʿ䰡 ÀÖ´Ù; ÃßõÇϱ⠾î·Á¿ï¸¸Å À̸¦ À߸ø Àû¿ëÇÏ´Â °ÍÀÌ ½±´Ù. sprintf Á¦¾î ¹®ÀÚ¿Àº ´Ù¾çÇÑ º¯È¯ ÁöÁ¤ÀÚ (¿¹, "%s") ¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖÀ¸¸ç Á¦¾î ÁöÁ¤ÀÚ´Â ¼±ÅÃÀûÀÎ ÇÊµå ³Êºñ (¿¹, "%10s") ¿Í Á¤È®µµ ("%.10s") ÁöÁ¤À» °¡Áú ¼ö ÀÖ´Ù. ÀÌ´Â ²Ï À¯»çÇÏ°Ô º¸ÀÌÁö¸¸ (´ÜÁö Â÷ÀÌ´Â ¸¶Ä§Ç¥ÀÌ´Ù) À̵éÀº ¸Å¿ì ´Ù¸£´Ù. ÇÊµå ³Êºñ´Â ´ÜÁö ÃÖ¼Ò ±æÀ̸¦ ÁöÁ¤ÇÏ¸ç ¹öÆÛ ¿À¹öÇ÷ο츦 ¿¹¹æÇϴµ¥ ÀÖ¾î ¿ÏÀüÈ÷ ¾µ¸ð¾ø´Ù. ¹Ý´ë·Î Á¤È®µµ ÁöÁ¤Àº ±× ƯÁ¤ ¹®ÀÚ¿ÀÌ ¹®ÀÚ¿ º¯È¯ ÁöÁ¤ÀÚ·Î »ç¿ëµÉ ¶§ Ãâ·Â¿¡¼ °¡Áú ¼ö ÀÖ´Â ÃÖ´ë ±æÀ̸¦ ÁöÁ¤ÇÑ´Ù - µû¶ó¼ ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇØ º¸È£Çϱâ À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Ù. Á¤È®µµ ÁöÁ¤Àº ¹®ÀÚ¿À» ´Ù·ê ¶§ ´ÜÁö ÃÑ ÃÖ´ë ±æÀ̸¦ ÁöÁ¤ÇÔÀ» ÁÖ¸ñÇØ¶ó; ´Ù¸¥ º¯È¯ ¿¬»ê°ú´Â ´Ù¸¥ Àǹ̸¦ °®´Â´Ù. Å©±â°¡ "*" ·Î ÁÖ¾îÁö¸é ÃÖ´ë Å©±â¸¦ º¯¼ö·Î¼ ³Ñ°ÜÁÙ ¼ö ÀÖ´Ù (¿¹, sizeof() ¿¬»êÀÇ °á°ú). ÀÌ´Â ¿¹·Î¼ °¡Àå ½±°Ô º¸¿©Áø´Ù - ´ÙÀ½ ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇØ º¸È£Çϴ Ʋ¸° ±×¸®°í ¿ÇÀº ¹æ½ÄÀÌ´Ù:
À̷лó sprintf() ´Â º¹ÀâÇÑ Æ÷¸ËÀ» ÁöÁ¤Çϴµ¥ »ç¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡ ¸Å¿ì µµ¿òÀÌ µÇ´Â ¹Ý¸é ½½ÇÁ°Ôµµ sprintf() ¸¦ Ʋ¸®°Ô »ç¿ëÇÏ´Â °ÍÀº ½±´Ù. Æ÷¸ËÀÌ º¹ÀâÇÏ´Ù¸é ¼ö½ÅÁö°¡ Àüü Æ÷¸ËÀÇ °¡´ÉÇÑ ÃÖ´ë Å©±â¿¡ ´ëÇØ ÃæºÐÈ÷ Å©¸ç Á¤È®µµ Çʵå´Â ´ÜÁö ÇÑ º¯¼öÀÇÅ©±â¸¸ Á¦¾îÇÏ´ÂÁö¸¦ È®ÀÎÇÒ Çʿ䰡 ÀÖ´Ù. "°¡´ÉÇÑ °¡Àå Å« (largest possible)" °ªÀº º¹ÀâÇÑ Ãâ·ÂÀÌ »ý¼ºµÇ°í ÀÖÀ» ¶§ °áÁ¤ÇÏ±â ¾î·Æ´Ù. ÇÁ·Î±×·¥ÀÌ °¡´ÉÇÑ °¡Àå ±ä Á¶ÇÕ¿¡ ´ëÇØ ÃæºÐÇÑ °ø°£À» ÇÒ´çÇÏÁö ¾Ê´Â´Ù¸é ¹öÆÛ ¿À¹öÇÃ·Î¿ì °ø°ÝÀ» ¹Þ±â ½¬¿ï °ÍÀÌ´Ù. ¶ÇÇÑ sprintf() ´Â Àüü ¿¬»êÀÌ ³¡³ ÈÄ ¼ö½ÅÁö¿¡ NUL À» Ãß°¡ÇÑ´Ù - ÀÌ ¿©ºÐÀÇ ¹®ÀÚ´Â Àر⠽¬¿ì¸ç ÀÌ ¹®ÀÚ Çϳª°¡ ¾øÀ½À¸·Î½á ¿¡·¯°¡ »ý±æ ¼ö ÀÖ´Â ±âȸ¸¦ »ý¼ºÇÑ´Ù. ±×·¡¼ À̰ÍÀÌ ÀÛµ¿ÇÏ´õ¶óµµ ¾î¶² »óȲ¿¡¼ »ç¿ëÇÏ´Â °ÍÀº ¹«Ã´ °ï¶õÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ À§ Äڵ忡 ´ëÇÑ ¾ð±Þ - sizeof() ¿¬»êÀÌ ¹è¿ÀÇ Å©±â¸¦ »ç¿ëÇßÀ½À» ÁÖ¸ñÇØ¶ó. Äڵ尡 º¯°æµÇ¾î "buf" °¡ ¾î¶² ÇÒ´ç ¸Þ¸ð¸®¿¡ ´ëÇÑ Æ÷ÀÎÅͶó¸é ¸ðµç "sizeof()" ¿¬»êÀº º¯°æµÇ¾î¾ß ÇÒ °ÍÀÌ´Ù (¶Ç´Â sizeof ´Â ´ÜÁö Æ÷ÀÎÅÍÀÇ Å©±â¸¦ ÃøÁ¤ÇÒ °ÍÀ̸ç ÀÌ´Â ´ëºÎºÐÀÇ °ª¿¡ ´ëÇØ ÃæºÐÇÑ °ø°£ÀÌ ¾Æ´Ï´Ù). 5.2.2. Á¤Àû ¹× µ¿Àû ÇÒ´ç ¹öÆÛstrncpy ¿Í °°Àº ÇÔ¼öµéÀº Á¤ÀûÀ¸·Î ÇÒ´çµÈ ¹öÆÛ¸¦ ´ÙµÑ ¶§ À¯¿ëÇѵ¥ ÀÌ´Â ¹öÆÛ°¡ "°¡Àå ±ä À¯¿ëÇÑ Å©±â (longest useful size)" ¿¡ ´ëÇØ ÇÒ´çµÇ¾î ±×¶§ºÎÅÍ °íÁ¤µÈ Å©±â·Î ¸Ó¹°·¯ ÀÖ´Â ÇÁ·Î±×·¡¹Ö Á¢±Ù ¹æ¹ýÀÌ´Ù. ´ë¾ÈÀº ¹öÆÛ¸¦ ÇÊ¿ä·Î ÇÒ¶§¸¶´Ù ±× Å©±â¸¦ µ¿ÀûÀ¸·Î ÀçÇÒ´çÇÏ´Â °ÍÀÌ´Ù. µÎ Á¢±Ù ¹æ¹ý ¸ðµÎ º¸¾È¿¡ ¹ÐÁ¢ÇÏ°Ô °ü·ÃµÇ¾î ÀÖ´Ù. °íÁ¤µÈ ±æÀÌÀÇ ¹öÆÛ¸¦ »ç¿ëÇÒ ¶§ ÀϹÝÀûÀÎ º¸¾È ¹®Á¦°¡ Àִµ¥ ¹öÆÛ°¡ °íÁ¤µÈ ±æÀ̸¦ °®´Â ´Ù´Â »ç½ÇÀÌ ¾Ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ´Â strncpy(3) ¹× strncat(3), snprintf(3), strlcpy(3), strlcat(3) °ú ´Ù¸¥ ±×·¯ÇÑ ÇÔ¼öµé°ú °ü·ÃµÈ ¹®Á¦ÀÌ´Ù. ±âº» °³³äÀº °ø°ÝÀÚ°¡ ½ÇÁ¦ ±ä ¹®ÀÚ¿À» ¼³Á¤Çؼ ¹®ÀÚ¿ÀÇ ³¡ÀÌ À߸± ¶§ ¸¶Áö¸· °á°ú°¡ °ø°ÝÀÚ°¡ ¿øÇß´ø °Í (°³¹ßÀÚ°¡ ÀǵµÇß´ø °Í ´ë½Å¿¡) ÀÏ °ÍÀÌ´Ù¶ó´Â °ÍÀÌ´Ù. ¾Æ¸¶µµ ¹®ÀÚ¿Àº ¿©·¯ ÀÛÀº Á¶°¢À¸·ÎºÎÅÍ ¿¬°áµÈ´Ù; °ø°ÝÀÚ°¡ Àüü ¹öÆÛ¿Í ±æÀ̰¡ °°Àº ù Á¶°¢À» ¸¸µé ¼öµµ ÀÖÀ¸¸ç µû¶ó¼ ÃßÈÄ ¸ðµç ¹®ÀÚ¿À» ¿¬°áÇÏ·Á´Â ½Ãµµ´Â ¹«¿ëÁö¹°ÀÌ µÈ´Ù. ´ÙÀ½ ¾à°£ÀÇ Æ¯Á¤ ¿¹ÀÌ´Ù:
Á¤ÀûÀ¸·Î ÇÒ´çµÈ ¹öÆÛ¸¦ »ç¿ëÇÒ ¶§ ¼Ò½º ¹× ¼ö½ÅÁö ÀμöÀÇ ±æÀ̸¦ ½ÇÁ¦·Î °í·ÁÇÒ Çʿ䰡 ÀÖ´Ù. ÀԷ°ú °á°úµÇ´Â Áß°£ °è»êÀÇ Á¤»ó¼º (sanity) À» °Ë»çÇÔÀ¸·Î½á ¶ÇÇÑ À̸¦ ´Ù·ê ¼ö ÀÖ´Ù. ´Ù¸¥ ´ë¾ÈÀº °íÁ¤µÈ Å©±âÀÇ ¹öÆÛ¸¦ »ç¿ëÇÏ´Â ´ë½Å ¸ðµç ¹®ÀÚ¿À» µ¿ÀûÀ¸·Î ÀçÇÒ´çÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÀϹÝÀûÀÎ Á¢±Ù ¹æ¹ýÀº ÇÁ·Î±×·¥ÀÌ ÀÓÀÇ Å©±âÀÇ ÀÔ·ÂÀ» ´Ù·ê ¼ö Àֱ⠶§¹®¿¡ (¸Þ¸ð¸®¸¦ ´Ù ¼ÒºñÇÒ ¶§±îÁö) GNU ÇÁ·Î±×·¡¹Ö Áöħ¿¡ ÀÇÇØ ÃßõµÇ°í ÀÖ´Ù. ¹°·Ð µ¿ÀûÀ¸·Î ÇÒ´çµÈ ¹®ÀÚ¿°ú °ü·ÃµÈ ÁÖ¿ä ¹®Á¦´Â ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. ¸Þ¸ð¸®´Â ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇØ °ÆÁ¤Çß´ø ºÎºÐÀ̶ó±â º¸´Ù´Â ÇÁ·Î±×·¥³»ÀÇ ¾î¶² ´Ù¸¥ °÷¿¡¼ ¼ÒºñµÉ ¼öµµ ÀÖ´Ù; ¸ðµç ¸Þ¹«¸® ÇÒ´çÀÌ ½ÇÆÐÇÒ °ÍÀÌ´Ù. ¶ÇÇÑ µ¿Àû ÀçÇÒ´çÀº ¸Þ¸ð¸®°¡ ºñÈ¿À²ÀûÀ¸·Î ÇÒ´çµÇ°Ô Çϱ⠶§¹®¿¡ ±â¼úÀûÀ¸·Î ÇÁ·Î±×·¥ÀÌ ¾µ ¼ö ÀÖ´Â ÃæºÐÇÑ °¡»ó ¸Þ¸ð¸®°¡ ÀÖ´Ù°í ÇÏ´õ¶óµµ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÏ°Ô µÇ´Â °ÍÀº ÀüÀûÀ¸·Î °¡´ÉÇÏ´Ù. À̿ܿ¡µµ ¸Þ¸ð¸®°¡ ºÎÁ·Çϱâ Àü¿¡ ÇÁ·Î±×·¥ÀÌ ¾Æ¸¶µµ ¸¹Àº °¡»ó ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù; ÀÌ´Â "thrashing" Áï ÄÄÇ»ÅͰ¡ ¸ðµç ½Ã°£À» µð½ºÅ©¿Í ¸Þ¸ð¸®»çÀ̸¦ ¿Õº¹Çϴµ¥ (À¯¿ëÇÑ ÀÛ¾÷À» ÇÏ´Â ´ë½Å) ¼ÒºñÇÏ´Â »óȲÀ¸·Î ³¡³¯ °ÍÀÌ´Ù. ÀÌ´Â ¼ºñ½º ºÎÀÎ °ø°Ý°ú °°Àº È¿°ú¸¦ °¡Áú °ÍÀÌ´Ù. ÀÔ·Â Å©±â¿¡ ´ëÇÑ ¾î¶² ÇÕ¸®ÀûÀÎ Á¦ÇÑÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¥Àº µ¿ÀûÀ¸·Î ÇÒ´çµÈ ¹®ÀÚ¿À» »ç¿ëÇÏ´Â °æ¿ì ¸Þ¹«¸®°¡ °í°¥µÉ ¶§ ¾ÈÀüÇÏ°Ô ½ÇÆÐÇϵµ·Ï ¼³°èµÇ¾î¾ß ÇÑ´Ù. 5.2.3. strlcpy and strlcatOpenBSD ¿¡ ÀÇÇØ »ç¿ëµÈ ´ë¾ÈÀº Miller ¿Í de Raadt [Miller 1999] ¿¡ ÀÇÇÑ strlcpy(3) °ú strlcat(3) ÀÌ´Ù. ÀÌ´Â C ¹®ÀÚ¿ º¹»ç ¹× ¿¬°á¿¡ ´Ù¸¥ (¿¡·¯°¡ ´ú »ý±â´Â) ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ´Â ÃÖ¼ÒÇÑÀÇ Á¤Àû Å©±â¸¦ °®´Â ¹öÆÛ Á¢±Ù ¹æ¹ýÀÌ´Ù. ÀÌ ÇÔ¼öÀÇ ¼Ò½º¿Í ¹®¼´Â ftp://ftp.openbsd.org/pub/OpenBSD/src/lib/libc/string/strlcpy.3 ¿¡¼ »õ·Î¿î BSD ½ºÅ¸ÀÏ ¿ÀÇ ¼Ò½º ¶óÀ̼¾½ºÇÏ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. ¿ì¼± ´ÙÀ½Àº ¿øÇü (prototype) ÀÌ´Ù:
µÎ ÇÔ¼ö ¸ðµÎ Àμö·Î¼ (º¹»çµÇ´Â ¹®ÀÚÀÇ ÃÖ´ë ¼ö°¡ ¾Æ´Ñ) ¼ö½ÅÁö ¹öÆÛÀÇ Àý´ë ũ۸¦ ÃëÇÏ¸ç ¸¶Áö¸·À» Á¾°á ¹®ÀÚ NIL ·Î ä¿ì´Â °ÍÀ» º¸ÀåÇÑ´Ù (Å©±â°¡ 0º¸´Ù Å©´Ù¸é). size ¿¡ NIL À» À§ÇÑ ¹ÙÀÌÆ®¸¦ Æ÷ÇÔÇØ¾ß ÇÔÀ» ±â¾ïÇØ¶ó. strlcpy ÇÔ¼ö´Â NUL ·Î ³¡³ª´Â ¹®ÀÚ¿ ¼Ò½º¸¦ NIL ·Î ³¡³ª´Â °á°úÀÎ dst (destination) ·Î size-1 ¹®ÀÚ±îÁö º¹»çÇÑ´Ù. strlcat ÇÔ¼ö´Â dst ³¡¿¡ NIL ·Î ³¡³ª´Â ¹®ÀÚ¿ ¼Ò½º¸¦ Ãß°¡ÇÑ´Ù. ÀÌ´Â ±â²¯ÇØ¾ß size-strlen(dst)-1 ¹ÙÀÌÆ®¸¦ NIL ·Î ³¡³ª´Â °á°ú¿¡ Ãß°¡ÇÒ °ÍÀÌ´Ù. strlcpy(3) °ú strlcat(3) ÀÇ ÇѰ¡Áö Áß¿äÇÏÁö ¾ÊÀº ´ÜÁ¡Àº ´ëºÎºÐÀÇ À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡ µðÆúÆ®·Î ¼³Ä¡µÇ¾î ÀÖÁö ¾Ê´Ù´Â °ÍÀÌ´Ù. OpenBSD ¿¡´Â <string.h> ³»¿¡ Á¸ÀçÇÑ´Ù. ÀÌ´Â ±×·¸°Ô ¾î·Á¿î ¹®Á¦´Â ¾Æ´Ï¸ç À̵éÀº ÀÛÀº ÇÔ¼öÀ̱⠶§¹®¿¡ °¢ÀÚ ÇÁ·Î±×·¥ ¼Ò½º¿¡ À̵éÀ» Æ÷ÇÔÇÒ ¼ö ÀÖÀ¸¸ç À̵éÀ» ÀûÀçÇÒ ¼ö ÀÖ´Â º°µµÀÇ ÀÛÀº ÆÐŰÁö¸¦ ¸¸µé ¼öµµ ÀÖ´Ù. À̸¦ ÀÚµ¿ÀûÀ¸·Î ´Ù·ç±â À§ÇØ autoconf ¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ´õ¿í ¸¹Àº ÇÁ·Î±×·¥ÀÌ À̵é ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù¸é ¿À·¡Áö ¾Ê¾Æ À̵éÀº ¸®´ª½º ¹èÆ÷ÆÇ ¹× ´Ù¸¥ À¯´Ð½º ½Ã½ºÅÛ °è¿ÀÇ Ç¥ÁØ ºÎºÐÀÌ µÉ °ÍÀÌ´Ù. ¶ÇÇÑ ÀÌ ÇÔ¼öµéÀº glib ¶óÀ̺귯¸®¿¡ ÃÖ±Ù¿¡ Ãß°¡µÇ¾úÀ¸¸ç (ÇÊÀÚ´Â À̸¦ À§ÇØ ÆÐÄ¡¸¦ Á¦ÃâÇÏ¿´´Ù) µû¶ó¼ glib ¸¦ »ç¿ëÇÔÀ¸·Î½á À̵éÀ» ÀÌ¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù (¹Ì·¡¿¡). glib ¿¡¼´Â glib ¶óÀ̺귯¸® ³×ÀÌ¹Ö °ü·Ê¿¡ ÀÏÄ¡ÇÏ´Â g_strlcpy ¿Í g_strlcat ·Î À̸§Áö¾îÁ³´Ù. ¶ÇÇÑ strlcat(3) Àº Á¦°øµÈ Å©±â°¡ 0 À̰ųª ¶Ç´Â ¼ö½ÅÁö ¹®ÀÚ¿ dst (ÁÖ¾îÁø ¹®ÀÚ³»¿¡¼) ³»¿¡ NIL ¹®ÀÚ°¡ ¾ø´Ù¸é ¾à°£ ´Ù¸¥ Àǹ̸¦ °®´Â´Ù. OpenBSD ¿¡¼´Â Å©±â°¡ 0 ÀÌ¸é ¼ö½ÅÁö ¹®ÀÚ¿ÀÇ ±æÀÌ´Â 0 À¸·Î °£ÁֵȴÙ. Å©±â°¡ 0 ÀÌ ¾Æ´ÏÁö¸¸ ¼ö½ÅÁö ¹®ÀÚ¿ (¹®ÀÚÀÇ Å©±â ¼ö³»¿¡¼) ³»¿¡ NIL ¹®ÀÚ°¡ ¾ø´Ù¸é ¼ö½ÅÁöÀÇ ±æÀ̰¡ Å©±â¿Í °°´Ù°í °£ÁÖÇÑ´Ù. ÀÌ·¯ÇÑ ±ÔÄ¢µéÀº ³»Àå NIL ¹®ÀÚ°¡ ¾ø´Â ¹®ÀÚ¿À» Àϰü¼ºÀÖ°Ô ´Ù·é´Ù. ºÒÇàÈ÷ Àû¾îµµ ¼Ö¶ó¸®½º´Â ¿ø·¡ ¹®¼¿¡ ÀÌ·¯ÇÑ ±ÔÄ¢µéÀ¸ µéÀ» ±¸Ã¼ÀûÀ¸·Î ¸í½ÃÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ À̵éÀ» µû¸£Áö ¾Ê´Â´Ù. ÀúÀÚ´Â Todd Miller ¿¡°Ô ¸»ÇßÀ¸¸ç µÑ ¸ðµÎ OpenBSD ÀÇ¹Ì Ã¼°è°¡ ¿Ç´Ù´Â °Í¿¡ µ¿ÀÇÇÏ¿´´Ù (¼Ö¶ó¸®½º´Â ¿ÇÁö ¾Ê´Ù). Áõ¸íÀº °£´ÜÇÏ´Ù: ¾î¶°ÇÑ Á¶°ÇÇÏ¿¡¼µµ strlcat ¶Ç´Â strlcpy °¡ Å©±â ¹üÀ§¹Û¿¡¼ ¼ö½ÅÁö ³»ÀÇ ¹®ÀÚµéÀ» Á¶»çÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù; ÀÌ·¯ÇÑ Á¢±ÙÀº ¹üÀ§°¡ ÃʰúµÈ ¸Þ¸ð¸®¸¦ Á¢±ÙÇÔÀ¸·Î½á ÄÚ¾î ´ýÇÁ¸¦ ¾ß±âÇÒ ¼öµµ ÀÖÀ¸¸ç ´õ ³ª¾Æ°¡¼´Â ±â¾ï ÀåÄ¡ ´ëÀÀ ÀÔÃâ·Â (memory-mapped I/O) ¸¦ ÅëÇØ Çϵå¿þ¾î »óÈ£ÀÛ¿ëÀ» ¾ß±âÇÒ ¼öµµ ÀÖ´Ù. µû¶ó¼, ´ÙÀ½°ú °°Àº °æ¿ì:
Á¤È®ÇÑ ´äÀº 3 (0+3=3) ÀÌÁö¸¸ ¼Ö¶ó¸®½º´Â ¼ö½ÅÁö³»ÀÇ "Å©±â" ±æÀ̸¦ ³Ñ¾î¼´Â ¹®ÀÚ¸¦ ºÎÁ¤È®ÇÏ°Ô º¸±â¶§¹®¿¡ ´äÀÌ 4 ¶ó°í ÁÖÀåÇÒ °ÍÀÌ´Ù. ¿ì¼± ÀúÀÚ´Â Å©±â°¡ 0 À̰ųª ¼ö½ÅÁö°¡ NIL ¹®ÀÚ¸¦ °®Áö ¾Ê´Â °æ¿ì¸¦ ÇÇÇ϶ó°í Á¦¾ÈÇÑ´Ù. glib ÀÇ ÇâÈÄ ¹öÀü¿¡¼´Â ÀÌ Â÷À̰¡ ¾øÀ» °ÍÀÌ¸ç ´Ã OpenBSD ÀÇ ÀÇ¹Ì Ã¼°è¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. 5.2.4. libmibÀÚµ¿ÀûÀ¸·Î ¹®ÀÚ¿À» µ¿ÀûÀ¸·Î ÀçÇÒ´çÇÏ´Â C ÀÇ ÇѰ¡Áö Åø¼ÂÀº ``libmib ÇÒ´ç ¹®ÀÚ¿ ÇÔ¼ö" ÀÌ´Ù. ÀÌ´Â Forrest J. Cavalier III ¿¡ ÀÇÇÑ °ÍÀ¸·Î http://www.mibsoftware.com/libmib/astring ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. libmib ¿¡´Â µÎ°¡Áö º¯ÇüÀÌ Àִµ¥ ``libmib-open" Àº ¼öÁ¤°ú Àç¹èÆ÷¸¦ Çã¿ëÇÏ´Â X11°ú À¯»çÇÑ ¶óÀ̼¾½ºÇÏÀÇ ¿ÀÇ ¼Ò½ºÃ³·³ º¸ÀÌÁö¸¸ Àç¹èÆ÷½Ã ´Ù¸¥ À̸§À» ¼±ÅÃÇØ¾ß ÇÑ´Ù. ±×·¯³ª °³¹ßÀÚ´Â À̰ÍÀÌ ``¿Ïº®È÷ °Ë»çµÇÁö ¾Ê¾ÒÀ» Áöµµ ¸ð¸¥´Ù" ¶ó°í ¸»Çϰí ÀÖ´Ù. °è¼ÓÇØ¼ ¹ßÀüµÈ libmib ¸¦ ¾ò±â À§Çؼ´Â °¡ÀÔÀ» À§ÇØ µ·À» ÁöºÒÇØ¾ß ÇÑ´Ù. ¹®¼´Â ¿ÀǼҽº°¡ ¾Æ´ÏÁö¸¸ ÀÚÀ¯·ÎÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù. 5.2.5. C++ std::string classC++ °³¹ßÀÚ´Â ³»ÀåµÇ¾î ÀÖ´Â std::string Ŭ·¡½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ½ºÅ丮Áö°¡ ÇÊ¿äÇѸ¸Å Ä¿Áö´Â µ¿ÀûÀÎ Á¢±Ù ¹æ¹ýÀÌ´Ù. ±×·¯³ª ÀÌ Å¬·¡½ºÀÇ µ¥ÀÌŸ°¡ ¹öÆÛ ¿À¹öÇÃ·Î¿ì ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Â ``char *" ·Î ¼Ò¸®¾øÀÌ º¯È¯µÉ ¼ö ÀÖÀ½À» ¾ð±ÞÇÏ´Â °ÍÀº Áß¿äÇÏ´Ù. µû¶ó¼ ÀÌ Å¬·¡½º·ÎºÎÅÍ º¯È¯ÇÒ ¶§ ÁÖÀÇÇÒ Çʿ䰡 ÀÖ´Ù. 5.2.6. Libsafe·ç½¼Æ® Å×Å©³î·ÎÁö»çÀÇ Arash Baratloo, Timothy Tsai ¿Í Navjot Singh ´Â stack smashing °ø°Ý¿¡ Ãë¾àÇÏ´Ù°í ¾Ë·ÁÁø ¸î°¡Áö ¶óÀ̺귯¸® ÇÔ¼öÀÇ wrapper ÀÎ Libsafe ¸¦ °³¹ßÇß´Ù. ÀÌ wrapper (À̵éÀº ¹Ìµé¿þ¾î¶ó°í ºÎ¸¥´Ù) ´Â strcpy(3) °ú °°Àº C ¶óÀ̺귯¸® ÇÔ¼öÀÇ ¼öÁ¤ ¹öÀüÀ» Æ÷ÇÔÇÑ °£´ÜÇÑ µ¿Àû ÀûÀç ¶óÀ̺귯¸®·Î ÀÌ ¼öÁ¤ ¹öÀüÀº ¿ø·¡ ±â´É¼ºÀ» ±¸ÇöÇÏÁö¸¸ ¸ðµç ¹öÆÛ ¿À¹öÇ÷ο찡 ÇöÀç ½ºÅà ÇÁ·¹ÀÓ³»¿¡ Æ÷ÇԵǾî ÀÖÀ½À» º¸ÀåÇÏ´Â ¹æ½ÄÀ¸·Î ±¸ÇöµÇ¾î ÀÖ´Ù. Ãʱ⠼º´É ºÐ¼®Àº ÀÌ ¶óÀ̺귯¸®ÀÇ ¿À¹öÇìµå°¡ ¸Å¿ì ÀÛ´Ù°í Á¦¾ÈÇÑ´Ù. Libsafe ³í¹®°ú ¼Ò½º ÄÚµå´Â http://www.bell-labs.com/org/11356/libsafe.html ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. Libsafe ¼Ò½ºÄÚµå´Â ¿ÏÀüÇÑ ¿ÀÇÁ ¼Ò½º LGPL ¶óÀ̼¾½ºÇÏ¿¡ ¾òÀ» ¼ö ÀÖÀ¸¸ç ¸¹Àº ¸®´ª½º ¹èÆ÷¾÷üµéÀÌ À̸¦ »ç¿ëÇÏ·Á°í Çϰí ÀÖ´Ù. Libsafe ÀÇ Á¢±Ù ¹æ¹ýÀº ¾î´À Á¤µµ À¯¿ëÇÑ °Íó·³ º¸ÀδÙ. Libsafe ´Â ¸®´ª½º ¹èÆ÷¾÷ÀÚ¿¡ ÀÇÇÑ Æ÷ÇÔÀÌ È®½ÇÈ÷ °í·ÁµÇ°í ÀÖÀ¸¸ç ¶ÇÇÑ ´Ù¸¥ Á¡¿¡ ÀÇÇØ¼µµ °í·ÁÇÒ °¡Ä¡°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î ÀúÀÚ´Â ¸Çµå·¹ÀÌÅ© 7.1 ¹öÀüÀÌ À̸¦ Æ÷ÇÔÇÔÀ» ¾Ë°í ÀÖ´Ù. ±×·¯³ª ¼ÒÇÁÆ®¿þ¾î °³¹ßÀڷμ Libsafe ´Â öÀúÇÑ ¹æ¾î (defense-in-depth) ¸¦ Áö¿øÇÏ´Â À¯¿ëÇÑ ¸ÞÄ«´ÏÁòÀ̸¸ ½ÇÁ¦·Î ¹öÆÛ ¿À¹öÇ÷ο츦 ¿¹¹æÇÏÁö´Â ¸øÇÑ´Ù. ÄÚµå °³¹ßµ¿¾È¿¡ Libsafe ¿¡¸¸ ÀÇÁ¸ÇÏÁö ¾Ê¾Æ¾ß ÇÒ ¸î°¡Áö ÀÌÀ¯°¡ ´ÙÀ½¿¡ ¼³¸íµÈ´Ù:
Libsafe °³¹ßÀÚ ÀÚ½ÅÀº ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ°¡ libsafe ¸¸ ÀÇÁ¸Çؼ´Â ¾ÈµÈ´Ù¶ó°í ÀÎÁ¤Çϰí ÀÖ´Ù. ´ÙÀ½Àº À̵éÀÇ ¸»ÀÌ´Ù:
5.2.7. ´Ù¸¥ ¶óÀ̺귯¸®glibc °¡ ¾Æ´Ñ glib ¶óÀ̺귯¸®´Â C ÇÁ·Î±×·¡¸Ó¿¡°Ô ¸¹Àº À¯¿ëÇÑ ÇÔ¼ö¸¦ Á¦°øÇϰí ÀÖ´Â ³Î¸® »ç¿ëµÉ ¼ö ÀÖ´Â ¿ÀÇ ¼Ò½º ¶óÀ̺귯¸®ÀÌ´Ù. GTK+ °ú GNOME ¸ðµÎ glib ¸¦ »ç¿ëÇÑ´Ù. ¾Õ¿¡¼ ¾ð±ÞÇÑ ¹Ù¿Í °°ÀÌ glib ¹öÀü 1.3.2 ¿¡ ÀúÀÚ°¡ Á¦ÃâÇÑ ÆÐÄ¡¸¦ ÅëÇØ g_strlcpy() ¿Í g_strlcat() °¡ Ãß°¡µÇ¾ú´Ù. ÀÌ´Â glib ÀÇ ³ªÁß ¹öÀüÀÌ »ç¿ëµÉ ¼ö Àֱ⸸ ÇÏ´Ù¸é ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ À̽ļºÀÖ°Ô »ç¿ëÇÏ´Â °ÍÀ» ´õ¿í ½±°Ô ÇÑ´Ù. ÇöÀç ½ÃÁ¡¿¡¼ ÀúÀÚ´Â glib ¶óÀ̺귯¸® ÇÔ¼ö°¡ ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇØ º¸È£ÇÔÀ» ¸í¹éÈ÷ º¸ÀÌ´Â ºÐ¼®À» ÇÏÁö ¾Ê¾Ò´Ù. ±×·¯³ª ¸¹Àº glib ÇÔ¼ö´Â ÀÚµ¿ÀûÀ¸·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇϸç ÀÚµ¿ÀûÀ¸·Î ½ÇÆÐ¸¦ °¡·Îç ¾î¶°ÇÑ ÇÕ´çÇÑ ¹æ½ÄÀÌ ¾øÀÌ ½ÇÆÐÇÑ´Ù (¿¹, ´ë½Å ´Ù¸¥ ¾î¶² °ÍÀ» ÇÏ·Á°í ÇÔÀÌ ¾øÀÌ). ±× °á°ú·Î ¸¹Àº °æ¿ì¿¡ ÀÖ¾î ´ëºÎºÐÀÇ glib ÇÔ¼ö´Â ´ëºÎºÐÀÇ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥¿¡ »ç¿ëµÉ ¼ö ¾ø´Ù. GNOME ÁöħÀº g_strdup_printf() ¿Í °°Àº ÇÔ¼ö »ç¿ëÀ» ÃßõÇϴµ¥ ÀÌ´Â ¸Þ¸ð¸® °í°¥ÀÌ ¹ß»ýÇÒ ¶§ ÇÁ·Î±×·¥ÀÌ Áï°¢ÀûÀ¸·Î Å©·¡½¬Çصµ ¹«¹æÇÏ´Ù¸é ÁÁ´Ù. ±×·¯³ª À̸¦ ¹Þ¾ÆµéÀÏ ¼ö ¾ø´Ù¸é ÀÌ·± ·çƾÀ» »ç¿ëÇÏ´Â °ÍÀº ÀûÀýÇÏÁö ¸øÇÏ´Ù. 5.3. C/C++ ¿¡¼ÀÇ ÄÄÆÄÀÏ ¼Ö·ç¼Ç¿ÏÀüÈ÷ ´Ù¸¥ Á¢±Ù ¹æ¹ýÀº °æ°è °Ë»ç¸¦ ÇÏ´Â ÄÄÆÄÀÏ ¹æ¹ýÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù ([Sitaker 1999] ¸¦ ÂüÁ¶Çضó). ÀúÀÚ ÀǰßÀ¸·Î´Â ÀÌ·¯ÇÑ µµ±¸´Â ´Ù¼öÀÇ º¸È£ °èÃþ¸¦ °®´Â °æ¿ì ¸Å¿ì À¯¿ëÇÏÁö¸¸ À¯ÀÏÇÑ º¸È£Ã¥À¸·Î ÀÌ ±â¹ýÀ» »ç¿ëÇÏ´Â °ÍÀº Çö¸íÇÏÁö ¾Ê´Ù. ÀÌ¿¡ ´ëÇØ¼´Â Àû¾îµµ µÎ°¡Áö ÀÌÀ¯°¡ ÀÖ´Ù. ¿ì¼± ´ëºÎºÐÀÇ ÀÌ·¯ÇÑ µµ±¸µéÀº ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇÑ ºÎºÐÀûÀÎ º¸È£¸¸À» Á¦°øÇÑ´Ù (¿ÏÀüÇÑ º¸È£´Â ÀϹÝÀûÀ¸·Î 12-30 ¹è Á¤µµ ´À¸®´Ù); C ¿Í C++ Àº ´Ü¼øÈ÷ ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇØ º¸È£Çϵµ·Ï ¼³°èµÇÁö ¾Ê¾Ò´Ù. µÎ¹øÂ° ¿ÀÇ ¼Ò½º ÇÁ·Î±×·¥¿¡ ´ëÇØ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇϱâ À§ÇØ ¾î¶² µµ±¸°¡ »ç¿ëµÉ °ÍÀ̶ó´Â °ÍÀ» È®½ÅÇÒ ¼ö ¾ø´Ù; ÁÖ¾îÁø ½Ã½ºÅÛ¿¡ ´ëÇØ¼ ``Åë»óÀûÀÎ" ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÏ´Â °ÍÀÌ °©Àڱ⠺¸¾È °áÇÔÀ» Á¦°øÇÒ ¼öµµ ÀÖ´Ù. °¡Àå À¯¿ëÇÑ µµ±¸ÁßÀÇ Çϳª´Â Ç¥ÁØ GNU C ÄÄÆÄÀÏ·¯ gcc ¸¦ ¼öÁ¤ÇÑ "StackGuard" ÀÌ´Ù. StackGuard ´Â ``canary" ¶ó°í ºÒ¸®´Â ``guard" °ªÀ» ¹Ýȯ ÁÖ¼Ò ¾Õ¿¡ Ãß°¡ÇÔÀ¸·Î½á ÀÛµ¿ÇÑ´Ù; ¹öÆÛ ¿ÀÆÛÇ÷ο찡 ¹Ýȯ ÁÖ¼Ò¸¦ °ãÃľ²¸é canary °ªÀÌ º¯°æµÇ¾î ½Ã½ºÅÛÀº À̸¦ »ç¿ëÇϱâ Àü¿¡ À̸¦ ŽÁöÇÑ´Ù. ÀÌ´Â ¸Å¿ì À¯ÀÍÇÏÁö¸¸ ´Ù¸¥ °ªÀ» °ãÃľ²´Â ¹öÆÛ ¿À¹öÇÃ·Î¿ì °ø°ÝÀ» ¿¹¹æÇÏÁö´Â ¸øÇÑ´Ù. canary ¸¦ ``PointGuard" ¶ó°í ºÒ¸®´Â ´Ù¸¥ µ¥ÀÌŸ ¾ÆÀÌÅÛ¿¡ Ãß°¡ÇÒ ¼ö ÀÖµµ·Ï StackGuard ¸¦ È®ÀåÇÑ ÀÛ¾÷ÀÌ ÀÖ´Ù. PointGuard ´Â ÀÚµ¿ÀûÀ¸·Î ƯÁ¤ °ªÀ» º¸È£ÇÒ °ÍÀÌ´Ù (¿¹, ÇÔ¼ö Æ÷ÀÎÅÍ ¹× longjump ¹öÆÛ). ±×·¯³ª PointGuard ¸¦ »ç¿ëÇØ¼ ´Ù¸¥ º¯¼ö ŸÀÔÀ» º¸È£Çϱâ À§Çؼ´Â ƯÁ¤ ÇÁ·Î±×·¡¸ÓÀÇ ÁßÀ縦 ÇÊ¿ä·Î ÇÑ´Ù (ÇÁ·Î±×·¡¸Ó´Â canary ¸¦ ÀÌ¿ëÇØ ¾î¶² µ¥ÀÌŸ °ªÀÌ º¸È£µÇ¾î¾ß ÇÏ´Â Áö¸¦ ½Äº°ÇØ¾ß ÇÑ´Ù). ÀÌ´Â À¯ÀÍÇÒ ¼ö ÀÖÁö¸¸ º¸È£°¡ ÇÊ¿äÇÏ´Ù°í (±×·¯³ª ¾î¶µç º¸È£°¡ ÇÊ¿äÇÑ) »ý°¢ÇÏÁö ¸øÇß´ø µ¥ÀÌŸ °ª¿¡ ´ëÇÑ º¸È£¸¦ ¿ì¿¬È÷ »ý·«ÇϱⰡ ½±´Ù . StackGuard, PointGuard ¹× ´Ù¸¥ ´ë¾È¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â Cowan [1999] ¸¦ ÂüÁ¶Çضó. °ü·Ã ¹®Á¦·Î½á ¸®´ª½º¿¡¼´Â Ä¿³ÎÀ» ¼öÁ¤Çؼ ½ºÅà ¼¼±×¸ÕÆ®¸¦ ½ÇÇàºÒ°¡´ÉÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù; ÀÌ·¯ÇÑ ÆÐÄ¡°¡ Á¸ÀçÇÑ´Ù (Solar Designer ÀÇ ÆÐÄ¡¸¦ º¸¶ó http://www.openwall.com/linux/ ). ±×·¯³ª ÀÌ ¹®¼ ÀÛ¼º ½ÃÁ¡¿¡¼ ÀÌ´Â ¸®´ª½º Ä¿³Î³»·Î ±¸ÃàµÇÁö ¾Ê¾Ò´Ù. ÀÌ ±Ùº»Àû ÀÌÀ¯ÀÇ ÀϺκÐÀº À̰ÍÀÌ »ý°¢ÇÏ´Â °Í¸¸Å º¸È£¸¦ ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù; °ø°ÝÀÚ°¡ °£´ÜÈ÷ ½Ã½ºÅÛÀ¸·Î ÇÏ¿©±Ý ÇÁ·Î±×·¥³» ´Ù¸¥ ``interesting" À§Ä¡¸¦ È£ÃâÇϵµ·Ï ÇÒ ¼ö ÀÖ´Ù (¿¹, ¶óÀ̺귯¸®, Èü ¶Ç´Â Á¤Àû µ¥ÀÌŸ ¼¼±×¸ÕÆ®³»). ¶ÇÇÑ ¶§¶§·Î ¸®´ª½º¿¡¼´Â ¿¹¸¦ µé¾î ½Ã±×³Î ¹× GCC ``trampolines" ¸¦ ±¸ÇöÇϱâ À§ÇÑ °æ¿ì¿Í °°ÀÌ ½ºÅÿ¡ ½ÇÇà°¡´ÉÇÑ Äڵ尡 ÀÖ¾î¾ß ÇÑ´Ù. Solar Designer ÆÐÄ¡´Â ÀÌ·± °æ¿ì¸¦ ´Ù·çÁö¸¸ ÆÐÄ¡¸¦ º¹ÀâÇÏ°Ô ¸¸µç´Ù. °³ÀÎÀûÀ¸·Î ÀúÀÚ´Â À̰ÍÀÌ ¾î´ÀÁ¤µµ °ø°ÝÀ» ¾î·Æ°Ô ¸¸µé°í ±âÁ¸ÀÇ ´Ù¾çÇÑ °ø°Ýµé¿¡ ´ëÇØ º¸È£Çϱ⠶§¹®¿¡ ÁÖ¿ä ¸®´ª½º ¹èÆ÷ÆÇ¿¡ °áÇյǴ °ÍÀ» º¸°í ½Í´Ù. ±×·¯³ª ÀúÀÚ´Â À̰ÍÀÌ »ý°¢ÇÏ´Â °Í¸¸Å ¸¹Àº º¸È£¸¦ Ãß°¡ÇÏÁö ¸øÇÏ¸ç ºñ±³Àû ½±°Ô ¶Õ¾îÁú ¼ö ÀÖ´Ù´Â ¸®´©½º Åä¹ßÁî¿Í ´Ù¸¥ ÀÌ¿¡ µ¿ÀÇÇÑ´Ù. http://lwn.net/980806/a/linus-noexec.html ¿¡¼ ÀÌ Áö¿øÀ» Æ÷ÇÔÇÏÁö ¾Ê´Â ¸®´©½º Åä¹ßÁîÀÇ ¼³¸íÀ» ÀÐÀ» ¼ö ÀÖ´Ù. ¿ä¾àÇϸé ÀÚüÀûÀ¸·Î ¹öÆÛ ¿À¹öÇ÷ο츦 º¸È£ÇÏ´Â Á¤È®ÇÑ ÇÁ·Î±×·¥À» °³¹ßÇÏ´Â µ¥ ¿ì¼±ÀûÀ¸·Î ÁßÁ¡À» µÎ´Â °ÍÀÌ ´õ¿í ÁÁ´Ù. µû¶ó¼ ¿©·¯ºÐÀÌ À̸¦ ´Ù ÀÐÀº ÈÄ ¹Ýµå½Ã Ãß°¡ÀûÀÎ ¾ÈÀü¸ÁÀ¸·Î½á StackGuard ¿Í °°Àº ±â¹ý ¹× µµ±¸¸¦ »ç¿ëÇØ¶ó. ÄÚµå ÀÚü¿¡¼ ¹öÆÛ ¿À¹öÇ÷ο츦 Á¦°ÅÇϱâ À§ÇØ ´õ¿í ´õ ÀÛ¾÷ÇÑ´Ù¸é º¸È£¸¦ À§ÇØ StackGuard °¡ È£ÃâµÉ "¾àÁ¡"Àº ¾øÀ» °ÍÀ̱⶧¹®¿¡ StackGuard ´Â ´õ¿í ´õ È¿°úÀûÀÏ °Í°°´Ù. 5.4. ´Ù¸¥ ¾ð¾î¹öÆÛ ¿À¹öÇÃ·Î¿ì ¹®Á¦´Â ÆÞ, ÆÄÀ̽ã, ÀÚ¹Ù ¹× ¾Æ´Ù95 ¿Í °°Àº ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ »ç¿ëÇÏÀÚ´Â ÁÖÀå¿¡ ´ëÇÑ ÈǸ¢ÇÑ ÀÌÀ¯ÀÌ´Ù. °á±¹ ¿À´Ã³¯ »ç¿ëµÇ´Â °ÅÀÇ ¸ðµç ÇÁ·Î±×·¡¹Ö ¾ð¾î (¾î¼Àºí·¯ÀÌ¿ÜÀÇ) µéÀº ¹öÆÛ ¿À¹öÇ÷ο츦 ¿¹¹æÇÑ´Ù. ÀÌ·¯ÇÑ ´Ù¸¥ ¾ð¾î¸¦ »ç¿ëÇÑ´Ù°í ÇØ¼ ¸ðµç ¹®Á¦¸¦ Á¦°ÅÇÏ´Â °ÍÀº ¹°·Ð ¾Æ´Ï´Ù; ƯÈ÷ NIL ¹®ÀÚ¿Í °ü·ÃÇØ¼ 7.2절 ÀÇ ³íÀǸ¦ º¸¶ó. ±×·¯ÇÑ ´Ù¸¥ ¾ð¾îÀÇ ÀÎÇÁ¶ó (¿¹, ·±Å¸ÀÓ ¶óÀ̺귯¸®) ¸¦ ¾µ ¼ö ÀÖ°í ÀÌ ÀÎÇÁ¶ó°¡ ¾ÈÀüÇÔÀ» º¸ÀåÇØ¾ß ÇÏ´Â ´Ù¸¥ ¹®Á¦°¡ ÀÖ´Ù. ¿©·¯ºÐÀº ¹öÆÛ ¿À¹öÇ÷ο츦 ¿¹¹æÇÏ´Â º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» °³¹ßÇÒ ¶§ ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ »ç¿ëÇÏ´Â °ÍÀ» È®½ÇÈ÷ °í·ÁÇØ¾ß ÇÑ´Ù. 6장. ÇÁ·Î±×·¥ ³»ºÎ ±¸Á¶È ¹× Á¢±Ù ¹æ¹ý
6.1. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥¿¡ ´ëÇØ ÈǸ¢ÇÑ ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î¸µ ¿ø¸®¸¦ µû¸£¶óSaltzer [1974] ¿Í ³ªÁß¿¡ Saltzer °ú Schroeder [1975] ´Â º¸¾ÈÀûÀÎ º¸È£ ½Ã½ºÅÛ ¼³°è ¿ø¸®¿¡ ´ëÇÑ ´ÙÀ½ ¸ñ·ÏÀ» ÀÛ¼ºÇߴµ¥ ÀÌ´Â ÇöÀç±îÁöµµ À¯È¿ÇÏ´Ù:
º¸¾È¿¡ ´ëÇØ ÈǸ¢ÇÑ ¿©·¯°¡Áö ´Ù¸¥ ¼³°è ¿ø¸®µéÀº Peter Neumann's CHATS Principles ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. 6.2. ÀÎÅÍÆäÀ̽º¸¦ ¾ÈÀüÇÏ°Ô ÇØ¶óÀÎÅÍÆäÀ̽º´Â ÃÖ¼ÒÇÑ (°¡´ÉÇÑ ´Ü¼øÇÑ), Á¤¹ÐÇÑ (´ÜÁö ÇÊ¿ä·Î ÇÑ ±â´É¸¸À» Á¦°ø) ¹× °í·ÁµÈ (non-bypassable) °ÍÀÌ¾ß ÇÑ´Ù. ½Å·Ú´Â ÃÖ¼ÒȵǾî¾ß ÇÑ´Ù. »ç¿ëÀÚ°¡ º¼ ¼ö ÀÖ´Â µ¥ÀÌŸ¸¦ Á¦ÇÑÇÏ´Â °ÍÀ» °í·ÁÇØ¶ó. ¾ÖÇø®ÄÉÀÌ¼Ç ¹× µ¥ÀÌŸ ºä¾îµéÀÌ ¿ÜºÎ¿¡¼ °³¹ßµÈ ÆÄÀÏÀ» Ç¥½ÃÇϱâ À§ÇØ »ç¿ëµÉ ¼ö ÀÖÀ¸¸ç µû¶ó¼ º¸¾ÈÀûÀÎ sandbox ¸¦ »ý¼ºÇϱâ À§ÇØ ÇÊ¿äÇÑ »ó¼¼ÇÑ ÀÛ¾÷À» ÇÒ Çʿ䰡 ¾ø°í ÀÇÇâÀÌ ¾ø´Ù¸é ÀϹÝÀûÀ¸·Î ºä¾îµéÀÌ ÇÁ·Î±×·¥ (½ºÅ©¸³Æ® ¶Ç´Â ¸ÅÅ©·Î) À» ¹Þ¾ÆµéÀÌ´Â °ÍÀ» Çã¿ëÇÏÁö ¸¶¶ó. °¡Àå À§ÇèÇÑ °ÍÀº ¾ÖÇø®ÄÉÀ̼ÇÀÌ ÀûÀçµÉ ¶§ ¹×/¶Ç´Â µ¥ÀÌŸ°¡ Ãʱ⿡ Ç¥½ÃµÉ ¶§ ½ÇÇàµÇ´Â ÀÚµ¿ ½ÇÇà ¸ÅÅ©·ÎÀÌ´Ù; º¸¾È °üÁ¡¿¡¼ º¸¾ÒÀ» ¶§ ¸ÅÅ©·Î°¡ ¹«¾ùÀ» ÇÒ °ÍÀÎÁö¸¦ ±ØÈ÷ °·ÂÇÏ°Ô Á¦¾îÇÏÁö ¾Ê´Â´Ù¸é ¹ß»ýÇÏ±æ ±â´Ù¸®´Â Àç¾ÓÀÎ °ÍÀÌ´Ù. ±×¸®°í ¿¹Àü °æÇèÀº ½ÇÁ¦ sandbox ¸¦ ±¸ÇöÇÏ´Â °ÍÀº ¾î·Æ´Ù°í º¸¿©¿Ô´Ù. 6.3. ±ÇÇÑÀ» ÃÖ¼ÒÈÇØ¶ó¾Õ¿¡¼ ¾ð±ÞÇßµíÀÌ ÇÁ·Î±×·¥ÀÌ ±× ÀÛ¾÷À» Çϴµ¥ ÇÊ¿äÇÑ ÃÖ¼ÒÇÑÀÇ ±ÇÇÑÀ» °®´Â °ÍÀº Áß¿äÇÑ ÀϹÝÀûÀÎ ¿ø¸®ÀÌ´Ù (ÀÌ´Â "ÃÖ¼ÒÇÑÀÇ ±ÇÇÑ" À̶ó°í ÁöĪµÈ´Ù). ÀÌ·± ¹æ½Ä¿¡¼ ÇÁ·Î±×·¥ÀÌ ÆÄ±«µÈ´ÙÇÏ´õ¶ó°í ±× ¼Õ»óÀº Á¦ÇѵȴÙ. °¡Àå ±Ø´ÜÀûÀÎ ¿¹´Â ´Ü¼øÈ÷ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀüÇô ÀÛ¼ºÇÏÁö ¾Ê´Â °ÍÀÌ´Ù -ÀÌ·² ¼ö ÀÖ´Ù¸é º¸Åë ÀÌ·¸°Ô ÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î °¡´ÉÇÏ´Ù¸é ÇÁ·Î±×·¥À» setuid ¶Ç´Â setgid ÇÁ·Î±×·¥À¸·Î ¸¸µéÁö ¸¶¶ó; ±×Àú ÀϹÝÀûÀÎ ÇÁ·Î±×·¥À» ¸¸µé¾î À̸¦ ½ÇÇà½Ã۱â Àü¿¡ °ü¸®ÀÚ°¡ ±× ÀÚ°ÝÀ¸·Î ·Î±×ÀÎÇϵµ·Ï ÇØ¶ó. ¸®´ª½º¿Í À¯´Ð½º¿¡¼ ÇÁ·Î¼¼½ºÀÇ ±ÇÇÑÀ» ±âº»ÀûÀ¸·Î °áÁ¤ÇÏ´Â °ÍÀº ÇÁ·Î¼¼½º¿Í °ü·ÃµÈ id ¼ÂÀÌ´Ù; °¢ ÇÁ·Î¼¼½º´Â »ç¿ëÀÚ¿Í ±×·ì¿¡ ´ëÇØ ½ÇÁ¦ (real), À¯È¿ (effective) ¹× À¯º¸ (saved) id ¸¦ °®°í ÀÖ´Ù. ¸®´ª½º´Â ¶ÇÇÑ ÆÄÀϽýºÅÛ uid ¿Í gid ¸¦ °®´Â´Ù. ÀÌ·¯ÇÑ °ªÀ» Á¶ÀÛÇÏ´Â °ÍÀº ±ÇÇÑÀ» ÃÖ¼ÒÇÑÀ¸·Î À¯ÁöÇϴµ¥ ÀÖ¾î¼ °áÁ¤ÀûÀε¥ À̸¦ ÃÖ¼ÒÈÇÏ´Â ¸î°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù (¹ØºÎºÐ¿¡ ³íÀǵȴÙ). ¶ÇÇÑ chroot(2) ¸¦ ÀÌ¿ëÇØ¼ ÇÁ·Î±×·¥ÀÌ º¼ ¼ö ÀÖ´Â ÆÄÀÏÀ» ÃÖ¼ÒÈÇÒ ¼ö ÀÖ´Ù. ¸®´ª½º¿Í À¯´Ð½º¿¡¼´Â ±ÇÇÑÀ» °áÁ¤ÇÏ´Â ¾à°£ÀÇ ´Ù¸¥ °ªµéÀÌ Àִµ¥ ¿¹¸¦ µé¾î POSIX ´É·Â (¸®´ª½º 2.2 ÀÌ»ó ¹× ¸î¸î ´Ù¸¥ À¯´Ð½º °è¿ ½Ã½ºÅÛÀÌ À̸¦ Áö¿øÇÑ´Ù) ÀÌ ÀÖ´Ù. 6.3.1. Çã°¡µÇ´Â ±ÇÇÑÀ» ÃÖ¼ÒÈÇØ¶ó¾Æ¸¶ °¡Àå È¿°úÀûÀÎ ±â¹ýÀº Çã°¡µÈ °¡Àå ³ôÀº ±ÇȯÀ» ´Ü¼øÈ÷ ÃÖ¼ÒÈÇÏ´Â °ÍÀÌ´Ù. ƯÈ÷ ÇÁ·Î±×·¥¿¡°Ô °¡´ÉÇÑ ·çÆ® ±ÇÇÑÀ» ÁÖÁö ¾Êµµ·Ï ÇØ¶ó. ÇÁ·Î±×·¥ÀÌ ´ÜÁö ÀÛÀº ÆÄÀϼ¿¡ Á¢±ÙÇÒ Çʿ丸 ÀÖ´Ù¸é ÇÁ·Î±×·¥À» setuid root ·Î ¸¸µéÁö ¸¶¶ó; ¿©·¯ ±â´É¿¡ ´ëÇØ º°°³ÀÇ »ç¿ëÀÚ ¶Ç´Â ±×·ì »ý¼ºÀ» °í·ÁÇØ¶ó. °øÅëÀûÀÎ ±â¹ýÀº Ưº° ±×·ìÀ» »ý¼ºÇؼ ÆÄÀÏÀÇ ±×·ì ¼ÒÀ¯±ÇÀ» ÀÌ ±×·ìÀ¸·Î º¯°æÇÑ ÈÄ ÇÁ·Î±×·¥À» ÀÌ ±×·ì¿¡ setgid ·Î ¸¸µå´Â °ÍÀÌ´Ù. ±×·ì ¸â¹ö½ÊÀÌ ´õ¿í ÀûÀº ±ÇÇÑÀ» Çã°¡Çϱ⠶§¹®¿¡ (ƯÈ÷ ÆÄÀÏ Çã°¡±ÇÀ» º¯°æÇÒ ±ÇÇÑÀ» ÁÖÁö´Â ¾Ê´Â´Ù) ÇÁ·Î±×·¥À» setuid ´ë½Å setgid ·Î ¸¸µå´Â °ÍÀÌ ´õ¿í ÁÁ´Ù. ÀÌ´Â °ÔÀÓ¿¡¼ °íµæÁ¡ÀÇ °æ¿ì¿¡ º¸Åë ÇàÇØÁø´Ù. °ÔÀÓÀº ´ë°³ setgid games À¸·Î µæÁ¡ ÆÄÀÏÀº ±×·ì games °¡ ¼ÒÀ¯Çϰí ÇÁ·Î±×·¥ ±× ÀÚü¿Í À̵éÀÇ ¼³Á¤ ÆÄÀÏÀº ´Ù¸¥ ´©±º°¡ (·çÆ®) °¡ ¼ÒÀ¯ÇÑ´Ù. µû¶ó¼ °ÔÀÓ¿¡ ħÀÔÇÑ °ø°ÝÀÚ°¡ °íµæÁ¡À» º¯°æÇÒ ¼ö´Â ÀÖÁö¸¸ °ÔÀÓÀÇ ½ÇÇà ¶Ç´Â ±× ¼³Á¤ ÆÄÀÏÀ» º¯°æÇÒ ±ÇÇÑÀ» ¾òÁö´Â ¸øÇÑ´Ù. ÈÄÀÚ´Â Áß¿äÇÏ´Ù; °ø°ÝÀÚ°¡ °ÔÀÓÀÇ ½ÇÇà ¶Ç´Â ±× ¼³Á¤ ÆÄÀÏ (½ÇÇà ÆÄÀÏÀÌ ¹«¾ùÀ» ÀÛµ¿½Ãų °ÇÁö¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Â) À» º¯°æÇÒ ¼ö ÀÖ´Ù¸é °ÔÀÓÀ» Áñ±â´Â »ç¿ëÀÚµéÀ» Á¦¾îÇÒ ¼öµµ ÀÖ´Ù. »õ·Î¿î ±×·ì »ý¼ºÀÌ ÃæºÐÇÏÁö ¾Ê´Ù¸é ÀÏ·ÃÀÇ ÀÚ¿øµéÀ» °ü¸®ÇÏ´Â »õ·Î¿î ÁØ»ç¿ëÀÚ (½ÇÁ¦·Î Ưº°ÇÑ ¿ªÇÒÀ» ÇÏ´Â) »ý¼ºÀ» °í·ÁÇØ¶ó. À¥¼¹ö°¡ ÀüÇüÀûÀ¸·Î ÀÌ·± ¹æ½ÄÀε¥ ¶§¶§·Î À¥¼¹ö´Â ´Ù¸¥ »ç¿ëÀÚ¿Í ºÐ¸®µÉ ¼ö ÀÖµµ·Ï Ưº°ÇÑ »ç¿ëÀÚ (``nobody") ·Î ¼³Á¤µÈ´Ù. Á¤¸»·Î À¥¼¹ö´Â ÀÌÁ¡¿¡¼ ±³À°ÀûÀÌ´Ù: À¥¼¹ö´Â ±¸µ¿Çϱâ À§ÇØ ÀüÇüÀûÀ¸·Î ·çÆ® ±ÇÇÑÀ» ÇÊ¿ä·Î ÇÏÁö¸¸ (Æ÷Æ® 80 ¿¡ ºÎÂøµÉ ¼ö ÀÖµµ·Ï) ÀÏ´Ü ½ÃÀÛµÇ¸é ´ë°³ ¸ðµç ±ÇÇÑÀ» ¹ö¸®°í ``nobody" »ç¿ëÀڷμ ÀÛµ¿ÇÑ´Ù. ´ë°³ ÁØ»ç¿ëÀÚ´Â ÀڱⰡ ½ÇÇà½ÃŲ ±âº» ÇÁ·Î±×·¥À» ¼ÒÀ¯ÇÏÁö ¾ÊÀ¸¸ç µû¶ó¼ ±× °èÁ¤¿¡ ħÀÔÇÑ´Ù°í ÇØ¼ ÇÁ·Î±×·¥ ÀÚü¸¦ º¯°æÇÒ ¼ö´Â ¾ø´Ù. ±× °á°ú·Î ÀÛµ¿ÁßÀÎ À¥¼¹ö¿¡ ħÀÔÇÏ´Â °ÍÀÌ ÀϹÝÀûÀ¸·Î Àüü ½Ã½ºÅÛÀÇ º¸¾ÈÀ» ÀÚµ¿ÀûÀ¸·Î ÆÄ±«ÇÏÁö´Â ¸øÇÑ´Ù. ÇÁ·Î±×·¥¿¡ ·çÆ® ±ÇÇÑÀ» ÁÖ¾î¾ß ÇÑ´Ù¸é ÇÁ·Î±×·¥ÀÌ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀ» ÃÖ¼ÒÈÇÏÀÚ¸¶ÀÚ POSIX ´É·Â »ç¿ëÀ» °í·ÁÇØ¶ó. POSIX ´Â ¸®´ª½º 2.2 ÀÌ»ó ¹× ´Ù¸¥ À¯´Ð½º °è¿ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇÁ·Î±×·¥ ½ÃÀÛÈÄ¿¡ Áï°¢ÀûÀ¸·Î cap_set_proc(3) ¶Ç´Â ¸®´ª½º °íÀ¯ÀÇ capsetp(3) À» È£ÃâÇÔÀ¸·Î½á ÇÁ·Î±×·¥ÀÇ ´É·ÂÀ» ¿µ±¸È÷ ´ÜÁö ½ÇÁ¦ ÇÊ¿ä·Î ÇÏ´Â ´É·ÂÀ¸·Î °¨¼Ò½Ãų ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ³×Æ®¿öÅ© ½Ã°£ µ¥¸ó ( ntpd) ´Â ÇöÀç ½Ã°£À» ¼öÁ¤ÇÒ Çʿ䰡 Àֱ⶧¹®¿¡ ÀüÅëÀûÀ¸·Î ·çÆ® ±ÇÇÑÀ¸·Î ½ÇÇàµÈ´Ù. ±×·¯³ª ntpd °¡ ´ÜÁö ÇϳªÀÇ ´É·Â CAP_SYS_TIME ¸¸ÀÌ ÇÊ¿äÇϵµ·Ï ÆÐÄ¡°¡ °³¹ßµÇ¾úÀ¸¸ç µû¶ó¼ °ø°ÝÀÚ°¡ ntpd ¿¡ ´ëÇÑ Á¦¾î¸¦ ¾ò´Â´Ù ÇÏ´õ¶óµµ ÇÁ·Î±×·¥À» ¾Ç¿ëÇÏ´Â °ÍÀº ´õ¿í ¾î·Á¿ï °ÍÀÌ´Ù. ´Ù¸¥ Á¶Ä¡°¡ ÃëÇØÁöÁö ¾Ê´Â´Ù¸é POSIX ´É·ÂÀ» »ç¿ëÇØ ±ÇÇÑÀ» À¯ÁöÇÏ´Â °ÍÀº ÇÁ·Î¼¼½º°¡ ·çÆ® »ç¿ëÀÚ id ¸¦ °è¼ÓÇØ¼ °¡Á®¾ß ÇÔÀ» ¿ä±¸Çϱ⠶§¹®¿¡ ÀúÀÚ´Â ``¾î´À Á¤µµ Á¦ÇÑÀû" À̶ó°í ¸»ÇÏ°í ½Í´Ù. ¼³Á¤ ÆÄÀÏ, ¹ÙÀ̳ʸ® µîÀÇ ¸¹Àº Áß¿äÇÑ ÆÄÀÏÀº ·çÆ®°¡ ¼ÒÀ¯ÇØ¾ß Çϱ⠶§¹®¿¡ ÀÌ·¯ÇÑ Á¦ÇÑµÈ ´É·ÂÀ» °®´Â ÇÁ·Î±×·¥À» Á¦¾îÇÏ´Â °ø°ÝÀÚ´Â ¿©ÀüÈ÷ ÁÖ¿ä ½Ã½ºÅÛ ÆÄÀÏ ¼öÁ¤ ¹× ¿ÏÀüÇÑ ·çÆ® ¼öÁØÀÇ ±ÇÇÑÀ» ¾òÀ» ¼ö ÀÖ´Ù. ¸®´ª½º Ä¿³Î È®Àå (¹öÀü 2.4.X ¹× 2.2.19 À̻󿡼 ¾µ ¼ö ÀÖ´Ù) Àº »ç¿ë°¡´ÉÇÑ ±ÇÇÑÀ» Á¦ÇÑÇÏ´Â ´õ¿í ÁÁÀº ¹æ¹ýÀ» Á¦°øÇÑ´Ù; ÇÁ·Î±×·¥ÀÌ ¸ðµç POSIX ´É·ÂÀ» °®´Â ·çÆ®·Î ½ÇÇàµÇ¾î ºÒÇÊ¿äÇÑ ´É·ÂÀº Á¦°ÅÇϰí prctl(PR_SET_KEEPCAPS,1) À» È£ÃâÇÑ ÈÄ ·çÆ®°¡ ¾Æ´Ñ ÇÁ·Î¼¼½º·Î º¯°æÇϱâ À§ÇØ setuid() ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. PR_SET_KEEPCAPS ¼³Á¤Àº ÇÁ·Î¼¼½º°¡ 0 ÀÌ ¾Æ´Ñ °ªÀ¸·Î setuid ¸¦ ÇÒ ¶§ POSIX ´É·ÂÀÌ Á¦°ÅµÇÁö ¾Êµµ·Ï ÇÁ·Î¼¼½º¿¡ Ç¥½Ã¸¦ Çϸç ÀÌ ÇÁ·Î¼¼½º ¼³Á¤Àº exec() ¿¡¼ Á¦°ÅµÈ´Ù. ±×·¯³ª PR_SET_KEEPCAPS ´Â ´õ¿í »õ·Î¿î ¸®´ª½º Ä¿³Î ¹öÀü¿¡ ´ëÇÑ ¸®´ª½º °íÀ¯ÀÇ È®ÀåÀ̶ó´Â °Í¿¡ ÁÖÀÇÇØ¶ó. Çã°¡µÇ´Â ±ÇÇÑÀÇ ÃÖ¼Òȸ¦ ´Ü¼øÇÏ°Ô Çϱâ À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸®´ª½º °íÀ¯ÀÇ ÇѰ¡Áö µµ±¸´Â SuSe ¿¡ ÀÇÇØ °³¹ßµÈ ``compartment" µµ±¸ÀÌ´Ù. ÀÌ´Â ÆÄÀϽýºÅÛ ·çÆ®, uid gid ¹×/¶Ç´Â capability set À» ¼³Á¤ÇÑÈÄ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŲ´Ù. À̴ ƯÈ÷ ¾î¶² ´Ù¸¥ ÇÁ·Î±×·¥À» ¼öÁ¤ÇÏÁö ¾Ê°í ½ÇÇà½Ã۴µ¥ Æí¸®ÇÏ°Ô ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº 0.5 ¹öÀüÀÇ ±¸¹®ÀÌ´Ù:
µû¶ó¼ anonymous ftp ¼¹ö¸¦ ´õ¿í ¾ÈÀüÇÏ°Ô ±¸µ¿½Ãų ¼ö ÀÖ´Ù:
ÀÌ ¹®¼ ÀÛ¼º ½ÃÁ¡¿¡¼ µµ±¸´Â ¹Ì¿Ï¼ºÀ̰í ÀüÇüÀûÀÎ ¸®´ª½º ¹èÆ÷ÆÇ¿¡¼ ¾òÀ» ¼ö´Â ¾øÁö¸¸ »óȲÀº ºü¸£°Ô º¯ÇÒ °ÍÀÌ´Ù. http://www.suse.de/~marc ¿¡¼ ÇÁ·Î±×·¥À» ´Ù¿î·Îµå¹ÞÀ» ¼ö ÀÖ´Ù. ¸ðµç À¯´Ð½º °è¿ ½Ã½ºÅÛÀÌ POSIX ´É·ÂÀ» ±¸ÇöÇÏÁö´Â ¾ÊÀ¸¸ç PR_SET_KEEPCAPS Àº ÇöÀç ¸®´ª½º¿¡¼¸¸ Áö¿øÇÔÀ» ÁÖ¸ñÇØ¶ó. µû¶ó¼ ÀÌ Á¢±Ù ¹æ¹ýÀº À̽ļºÀ» ÇÑ´Ù; ±×·¯³ª µµ¿òÀÌ µÇ´Â °æ¿ì¿¡¸¸ À̸¦ ´ÜÁö ¼±ÅÃÀûÀÎ º¸È£¼ö´ÜÀ¸·Î »ç¿ëÇÑ´Ù¸é ½ÇÁ¦ÀûÀ¸·Î À̽ļºÀ» Á¦ÇÑÇÏÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ¶ÇÇÑ ¸®´ª½º Ä¿³Î 2.2 ¹öÀü ÀÌ»óÀº ÇÏÀ§ ¼öÁØ È£ÃâÀ» Æ÷ÇÔÇÏÁö¸¸ À̵éÀ» »ç¿ëÇϱ⠿ëÀÌÇÏ°Ô ÇÏ´Â C ¼öÁØ ¶óÀ̺귯¸®´Â ¸î¸î ¸®´ª½º ¹èÆ÷ÆÇ¿¡´Â ¼³Ä¡µÇ¾î ÀÖÁö ¾Ê¾Æ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ À̵éÀÇ »ç¿ëÀ» ¾à°£ º¹ÀâÇÏ°Ô Çϰí ÀÖ´Ù. ¸®´ª½º¿¡¼ POSIX ´É·Â ±¸Çö¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â http://linux.kernel.org/pub/linux/libs/security/linux-privs ¸¦ º¸¶ó. FreeBSD ´Â ±ÇÇÑ Á¦ÇÑÀ» À§ÇØ jail() ÇÔ¼ö¸¦ °®°í ÀÖ´Ù: ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â jail ¹®¼ ¸¦ º¸¶ó. ¶ÇÇÑ ±ÇÇÑ Á¦ÇÑÀ» À§ÇØ ¸¹Àº Àü¹®ÈµÈ µµ±¸ ¹× È®ÀåµéÀÌ ÀÖ´Ù; 3.10절 À» º¸¶ó. 6.3.2. ±ÇÇÑÀÌ »ç¿ëµÉ ¼ö ÀÖ´Â ½Ã°£À» ÃÖ¼ÒÈÇØ¶ó°¡´ÉÇÑ »¡¸® ¿µ±¸ÀûÀ¸·Î ±ÇÇÑÀ» Æ÷±âÇØ¶ó. ¸®´ª½º¸¦ Æ÷ÇÔÇÑ ¸î¸î À¯´Ð½º °è¿ ½Ã½ºÅÛÀº ``ÀÌÀü" ID °ªÀ» ÀúÀåÇϰí ÀÖ´Â ``À¯º¸µÈ (saved)" ID ¸¦ ±¸ÇöÇÑ´Ù. °¡Àå °£´ÜÇÑ Á¢±Ù ¹æ¹ýÀº ÀûÀýÇÑ °æ¿ì (¿¹, setgroups(2) »ç¿ë) ¸ðµç Ãß°¡µÈ ±×·ìÀ» Àç¼³Á¤ÇÑ ÈÄ ½Å·ÚµÇÁö ¾ÊÀº id ¿¡ ´Ù¸¥ id ¸¦ µÎ¹ø ¼³Á¤ÇÏ´Â °ÍÀÌ´Ù. setuid/setgid ÇÁ·Î±×·¥¿¡¼´Â ƯÈ÷ fork(2) ½ÇÇà Á÷ÈÄ¿¡ ½ÇÁ¦ uid ¿Í gid ¿¡ ´ë°³ À¯È¿ uid ¿Í gid ¸¦ ¼³Á¤ÇØ¾ß ÇÏ¸ç Æ¯º°ÇÑ ÀÌÀ¯°¡ ¾ø´Ù¸é À̸¦ ´ç¿¬È÷ ÇØ¾ß ÇÑ´Ù. ·çÆ®¿¡¼ ´Ù¸¥ ±ÇÇÑÀ¸·Î Ãà¼Ò½Ãų ¶§ gid ¸¦ ¿ì¼±ÀûÀ¸·Î º¯°æ½ÃÄÑ¾ß Çϸç ÀÌ·¸Áö ¾ÊÀº °æ¿ì ÀÛ¿ëÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ÁÖ¸ñÇØ¶ó - ·çÆ® ±ÇÇÑÀ» ¹ö¸°´Ù¸é ´õ ÀÌ»ó º¯°æ ½Ãų ¼ö ¾øÀ» °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÃÖ¼Òȸ¦ ¹æÇØÇϱâ À§ÇØ POSIX ´É·ÂÀ» »ç¿ëÇÏ´Â Àß ¾Ë·ÁÁø °ü·Ã ¹ö±×°¡ ÀÖÀ½À» ¾ð±ÞÇÏ´Â °ÍÀº °¡Ä¡°¡ ÀÖ´Ù. ÀÌ ¹ö±×´Â ¸®´ª½º Ä¿³Î 2.2.0 ¿¡¼ 2.2.15 ¹× ¾Æ¸¶µµ POSIX ´É·ÂÀ» °®´Â ¸¹Àº ´Ù¸¥ À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â http://www.securityfocus.com ÀÇ ¹ö±×Æ®·¢ id 1322 ¸¦ º¸¶ó. ´ÙÀ½Àº ¿ä¾àÀÌ´Ù:
sendmail ÀÌ »ç¿ëÇÏ´Â ÇѰ¡Áö Á¢±Ù ¹æ¹ýÀº setuid(getuid()) ÈÄ¿¡ setuid(0) ¸¦ ÇÏ·Á°í ÇÏ´Â °ÍÀÌ´Ù; ÀϹÝÀûÀ¸·Î ÀÌ´Â ½ÇÆÐÇØ¾ß ÇÑ´Ù. ¼º°øÇÑ´Ù¸é ÇÁ·Î±×·¥Àº ÁßÁöÇØ¾ß ÇÑ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â http://sendmail.net/?feed=000607linuxbug ¸¦ º¸¶ó. Àå±âÀûÀ¸·Î º¸¾ÒÀ» ¶§ ±âº»ÀûÀÎ ½Ã½ºÅÛÀ» °»½ÅÇÏ´Â °ÍÀÌ ´õ¿í ÁÁÀº Á¢±Ù ¹æ¹ýÀÓ¿¡µµ ºÒ±¸ÇÏ°í ´Ü±âÀûÀ¸·Î ÀÌ´Â ´Ù¸¥ ÇÁ·Î±×·¥¿¡¼ ÁÁÀº °³³äÀÏ ¼ö ÀÖ´Ù. 6.3.3. ±ÇÇÑÀÌ ÇÊ¿äÇÑ ½Ã°£À» ÃÖ¼ÒÈÇØ¶óÇÁ·Î±×·¥ÀÌ ÇÊ¿äÇÒ ¶§¸¸ À¯È¿ÇÑ ±ÇÇÑÀ» °®À½À» º¸ÀåÇϱâ À§Çؼ setuid(2), seteuid(2) ¿Í °ü·Ã ÇÔ¼ö¸¦ »ç¿ëÇØ¶ó. À§¿¡ ¾ð±ÞÇßµíÀÌ »ç¿ëÀÚ ÀÔ·ÂÀ» ÇØ¼®ÇÏ´Â µ¿¾ÈÀº ±ÇÇÑÀÌ ±ÝÁöµÇµµ·Ï ´õ¿í ÀϹÝÀûÀ¸·Î´Â ±ÇÇÑÀÌ ½ÇÁ¦ ÇÊ¿äÇÒ ¶§¸¸ ±ÇÇÑÀÌ À¯È¿ÇÔÀ» º¸ÀåÇÏ°í ½ÍÀ» °ÍÀÌ´Ù. ¾î¶² ¹öÆÛ ¿À¹öÇÃ·Î¿ì °ø°ÝÀº ¼º°øÇÑ´Ù¸é ÇÁ·Î±×·¥À¸·Î ÇÏ¿©±Ý ÀÓÀÇÀÇ Äڵ带 ½ÇÇà½ÃŰ°Ô ÇÒ ¼ö ÀÖÀ¸¸ç ÄÚµå´Â ÀϽÃÀûÀ¸·Î Ãà¼ÒµÇ¾ú´ø ±ÇÇÑÀ» ´Ù½Ã ÀÌ¿ëÇÒ ¼ö ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. µû¶ó¼ °¡´ÉÇÑ ±ÇÇÑÀ» ¿ÏÀüÈ÷ Ãà¼Ò½ÃŰ´Â °ÍÀÌ ´Ã ´õ¿í ÁÁ´Ù. ´õ¿íÀÌ Çã°¡±ÇÀ» ÀϽÃÀûÀ¸·Î ±ÝÁöÇÏ´Â °ÍÀº ÇÁ·Î±×·¥ÀÌ ÆÄÀϳ»¿¡ ÀÛ¼ºÇÏÁö ¾ÊÀ¸·Á°í Çß´ø °ÍÀ» ÀÛ¼ºÇϵµ·Ï ³³µæ½ÃŰ´Â ±â¹ý°°Àº ¸ðµç Á¾·ùÀÇ °ø°ÝÀ» ¿¹¹æÇÑ´Ù. ÀÌ ±â¹ýÀº ¸¹Àº °ø°ÝÀ» ¿¡¹æÇϱ⠶§¹®¿¡ ÇÁ·Î±×·¥ÀÇ ¾î¶² ºÎºÐ¿¡¼ ±ÇÇÑÀÇ ¿ÏÀü Ãà¼Ò¸¦ ÇÒ ¼ö ¾ø´Â °æ¿ì »ç¿ëÇÒ °¡Ä¡°¡ ÀÖ´Ù. 6.3.4. ±ÇÇÑÀÌ Çã°¡µÈ ¸ðµâÀ» ÃÖ¼ÒÈÇØ¶ó´ÜÁö ¾à°£ÀÇ ¸ðµâµé¿¡¸¸ ±ÇÇÑÀÌ Çã°¡µÈ´Ù¸é ±×µéÀÌ º¸¾ÈÀûÀÎÁö¸¦ °áÁ¤ÇÏ´Â °ÍÀº ´õ¿í ½±´Ù. À̸¦ ÇàÇÏ´Â ÇѰ¡Áö ¹æ¹ýÀº ÇϳªÀÇ ¸ðµâ·Î ÇÏ¿©±Ý ±ÇÇÑÀ» »ç¿ëÇÏ°Ô ÇÏ°í ±× ÈÄ À̸¦ Ãà¼ÒÇÏ´Â °ÍÀ¸·Î µû¶ó¼ ÃßÈÄ È£ÃâµÇ´Â ´Ù¸¥ ¸ðµâÀÌ ±ÇÇÑÀ» ¿À¿ëÇÒ ¼ö ¾ø´Ù. ´Ù¸¥ Á¢±Ù ¹æ¹ýÀº º°°³ ½ÇÇà ÆÄÀÏ¿¡ º°°³ÀÇ ¸í·ÉÀ» °®´Â °ÍÀÌ´Ù; ÇÑ ¸í·ÉÀÌ ±ÇÇÑÀ» °®´Â »ç¿ëÀÚ (¿¹, ·çÆ®) ¸¦ À§ÇØ ¹æ´ëÇÑ ¾çÀÇ Å½ºÅ©¸¦ ¼öÇàÇÒ ¼ö ÀÖ´Â º¹ÀâÇÑ µµ±¸À̸ç ÇÑÆí ´Ù¸¥ µµ±¸´Â setuid ·Î ÀûÀº ¼öÀÇ ¸í·É ºÎºÐÁýÇÕ¸¸À» Çã¿ëÇÏ´Â ÀÛ°í ´Ü¼øÇÑ µµ±¸ÀÌ´Ù. ÀÛ°í ´Ü¼øÇÑ µµ±¸´Â ÀÔ·ÂÀÌ ¼ö¿ë °¡´ÉÇÑ ´Ù¾çÇÑ Á¶°ÇÀ» ÃæÁ·½ÃŰ´ÂÁö¸¦ °Ë»çÇÏ¸ç µû¶ó¼ ÀÔ·ÂÀÌ ¼ö¿ë°¡´ÉÇÏ´Ù°í °áÁ¤ÇÏ¸é µ¥ÀÌŸ¸¦ º¹ÀâÇÑ µµ±¸·Î °Ç³×ÁØ´Ù. ÀÛ°í ´Ü¼øÇÑ µµ±¸°¡ ÀÔ·Â °Ë»ç¿Í º¹ÀâÇÑ µµ±¸·Î ¹«¾ùÀ» °Ç³×ÁÙ °ÍÀÎÁö¸¦ Á¦ÇÑÇϴ öÀúÇÑ ÀÛ¾÷À» ÇØ¾ßÇÔÀ» ÁÖ¸ñÇØ¶ó ±×·¸Áö ¾Ê´Ù¸é ÀÌ´Â °ø°Ý´çÇϱ⠽¬¿ï ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ Á¢±Ù ¹æ¹ýÀº ¸î°¡Áö ¹æ½ÄÀ¸·Î °èÃþÈ (layered) µÉ ¼ö Àִµ¥ ¿¹¸¦ µé¾î º¹ÀâÇÑ »ç¿ëÀÚ µµ±¸´Â ´ÙÀ½¿¡ ´Ù¸¥ º¹ÀâÇÑ ½Å·ÚµÈ µµ±¸·Î Á¤º¸¸¦ °Ç³×ÁÖ´Â ´Ü¼øÇÑ setuid "wrapping" ÇÁ·Î±×·¥ (ÀÔ·ÂÀÌ ¾ÈÀüÇÑ °ªÀÎÁö¸¦ °Ë»çÇÑ´Ù) À» È£ÃâÇÒ ¼ö ÀÖ´Ù. ÀÌ Á¢±Ù ¹æ¹ýÀº GUI ¿¡ ±âÃÊÇÑ ÇÁ·Î±×·¥¿¡ ƯÈ÷ µµ¿òÀÌ µÈ´Ù; GUI ºÎºÐÀ» ÀÏ¹Ý »ç¿ëÀÚ·Î ½ÇÇà½ÃŰ°í º¸¾È °ü·Ã ¿äûÀ» ½ÇÁ¦ ½ÇÇàÇÒ ¼ö Àִ Ưº° ±ÇÇÑÀ» °®´Â ´Ù¸¥ ÇÁ·Î±×·¥¿¡ ³Ñ°ÜÁà¶ó. ¾î¶² ¿î¿µÃ¼Á¦´Â ÇϳªÀÇ ÇÁ·Î¼¼½º¿¡ ´ÙÁß ½Å·Ú °èÃþ °³³äÀ» °®°í Àִµ¥ Multics' rings ÀÌ ÇÑ¿¹ÀÌ´Ù. Ç¥ÁØ À¯´Ð½º¿Í ¸®´ª½º´Â À̿Ͱ°Àº ½Ì±Û ÇÁ·Î¼¼½º³»¿¡¼ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ ´ÙÁß ½Å·Ú °èÃþÀ» ºÐ¸®ÇÏ´Â ¹æ¹ýÀ» °®°í ÀÖÁö ¾Ê´Ù; Ä¿³ÎÀÇ È£ÃâÀº ±ÇÇÑÀ» Áõ°¡½ÃŰÁö¸¸ ±×·¸Áö ¾ÊÀ¸¸é ÁÖ¾îÁø ÇÁ·Î¼¼½º´Â ÇϳªÀÇ ½Å·Ú ¼öÁØÀ» °®´Â´Ù. ¸®´ª½º¿Í ´Ù¸¥ À¯´Ð½º °è¿ ½Ã½ºÅÛÀº ÇÁ·Î¼¼½º¸¦ °¢°¢ ´Ù¸¥ ±ÇÇÑÀ» °®´Â ´ÙÁß ÇÁ·Î¼¼½º·Î ºÐ±âÇÔÀ¸·Î½á ÀÌ ´É·ÂÀ» ¶§¶§·Î ¸ð»çÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô Çϱâ À§ÇØ º¸¾ÈÀûÀÎ Åë½Å ä³Î (º¸Åë ¾ð³×ÀÓµå ÆÄÀÌÇÁ ¶Ç´Â ¾ð³×ÀÓµå ¼ÒÄÏÀÌ »ç¿ëµÈ´Ù) À» ¼³Á¤ÇÑ ÈÄ ´Ù¸¥ ÇÁ·Î¼¼½º·Î ºÐ±âÇÏ¿© °¢ ÇÁ·Î¼¼½º ±ÇÇÑÀ» °¡´ÉÇÑ ¸¹ÀÌ Ãà¼Ò½ÃÄѶó. ±×¸®°í ´Ü¼øÇÑ ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇØ¼ ´ú ½Å·ÚµÈ ÇÁ·Î¼¼½º·Î ÇÏ¿©±Ý ´õ¿í ½Å·ÚµÈ ÇÁ·Î¼¼½º·ÎºÎÅÍÀÇ µ¿ÀÛÀ» ¿äûÇϵµ·ÏÇÏ¸ç ´õ¿í ½Å·ÚµÈ ÇÁ·Î¼¼½º´Â ´ÜÁö Á¦ÇÑµÈ ¿äû¼ÂÀ» Áö¿øÇϵµ·Ï º¸ÀåÇØ¶ó. ÀÌ´Â ÀÚ¹Ù 2 ¹× Fluke °¡ ÀåÁ¡À» °®´Â ºÐ¾ßÀε¥ ¿¹¸¦ µé¾î ÀÚ¹Ù 2 ´Â ´ÜÁö ƯÁ¤ ÆÄÀÏÀ» ¿ ¼öÀÖ´Â Çã°¡±Ç°ú °°ÀÌ ¹Ì¼¼ÈµÈ (fine-grained) Çã°¡±ÇÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¹ü¿ë ¿î¿µÃ¼Á¦´Â ÀϹÝÀûÀ¸·Î ÇöÀç ÀÌ·¯ÇÑ ´É·ÂÀ» °®°í ÀÖÁö ¾Ê´Ù; ÀÌ´Â °¡±î¿î ¹Ì·¡¿¡´Â º¯ÇÒ ¼ö ÀÖ´Ù. ÀÚ¹Ù¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 9.6절 ¸¦ º¸¶ó. 6.3.5. ±ÇÇÑÀ» Á¦ÇÑÇϱâ À§ÇØ FSUID »ç¿ëÀ» °í·ÁÇØ¶ó°¢°¢ÀÇ ¸®´ª½º ÇÁ·Î¼¼½º´Â ÆÄÀϽýºÅÛ »ç¿ëÀÚ id (fsuid) ¿Í ÆÄÀϽýºÅÛ ±×·ì id (fsgid) ¶ó´Â ¸®´ª½º °íÀ¯ÀÇ µÎ°³ÀÇ »óŰªÀ» °®´Â´Ù. ÀÌ µÎ°ªÀº ÆÄÀϽýºÅÛ Çã°¡±ÇÀ» °Ë»çÇÒ ¶§ »ç¿ëµÇ´Âµ¥ ÀÓÀÇ »ç¿ëÀÚ¸¦ À§ÇÑ ÆÄÀÏ ¼¹ö (NFS ¿Í °°Àº) ·Î ÀÛµ¿ÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ·Á¸é ÀÌ·¯ÇÑ ¸®´ª½º È®ÀåÀÇ »ç¿ëÀ» °í·ÁÇÒ ¼ö ÀÖ´Ù. ÀÌ È®ÀåÀ» »ç¿ëÇϱâ À§Çؼ´Â ·çÆ® ±ÇÇÑÀ» º¸À¯ÇÏ´Â µ¿½Ã¿¡ ÀÏ¹Ý »ç¿ëÀÚ ´ë½Å ÆÄÀÏÀ» Á¢±ÙÇϱâ Àü¿¡ ´ÜÁö fsuid ¿Í fsgid ¸¦ º¯°æÇضó. ÀÌ È®ÀåÀº ¸Å¿ì À¯¿ëÇÏ¸ç ´Ù¸¥ (¾Æ¸¶ ÇÊ¿äÇÑ) ±ÇÇÑÀ» Á¦°ÅÇÏÁö ¾Ê°í¼ ÆÄÀϽýºÅÛ Á¢±Ù ±ÇÇÑÀ» Á¦ÇÑÇÏ´Â ¸ÞÄ«´ÏÁòÀ» Á¦°øÇÑ´Ù. ´ÜÁö fsuid (euid ´Â ¾Æ´Ï´Ù) ¸¦ ¼³Á¤ÇÔÀ¸·Î½á Áö¿ª »ç¿ëÀÚ´Â ÇÁ·Î¼¼½º¿¡ ½Ã±×³ÎÀ» º¸³¾ ¼ö ¾ø´Ù. ¶ÇÇÑ ÀÌ·¯ÇÑ »óȲ¿¡¼ °æÀï »óÅ´ ´õ¿í ½±°Ô ÇÇÇØÁø´Ù. ±×·¯³ª ÀÌ·¯ÇÑ Á¢±Ù ¹æ¹ýÀÇ ´ÜÁ¡Àº ÀÌ·¯ÇÑ È£ÃâÀÌ ¸ðµç À¯´Ð½º °è¿ ½Ã½ºÅÛÀ¸·Î À̽ÄÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. 6.3.6. »ç¿ëÇÒ ¼ö ÀÖ´Â ÆÄÀÏÀ» ÃÖ¼ÒÈÇϱâ À§ÇØ Chroot »ç¿ëÀ» °í·ÁÇØ¶óchroot(2) ¸¦ »ç¿ëÇØ¼ ÇÁ·Î±×·¥ÀÌ º¼ ¼ö ÀÖ´Â ÆÄÀÏÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â µð·ºÅ丮¸¦ ÁÖÀDZí°Ô ¼³Á¤Çϰí (choot jail À̶ó°í ºÒ¸°´Ù) µð·ºÅ丮¿¡ Á¤È®ÇÏ°Ô µé¾î°¡¾ß ÇÔÀ» ¿äÇÑ´Ù. ÀÌ´Â ÇÁ·Î±×·¥ÀÇ º¸¾ÈÀ» Çâ»ó½ÃŰ´Â ¸Å¿ì È¿°úÀûÀÎ ±â¹ýÀÌ´Ù - º¼ ¼ö ¾ø´Â ÆÄÀÏÀ» ¹æÇØÇÏ´Â °ÍÀº ¾î·Æ´Ù. ±×·¯³ª ÀÌ´Â ÀüüÀûÀÎ °¡Á¤, ƯÈ÷ ÇÁ·Î±×·¥ÀÌ ·çÆ® ±ÇÇÑÀÌ ¾ø¾î¾ß ÇÑ´Ù´Â °¡Á¤¿¡ ÀÇÁ¸ÇÑ´Ù. ·çÆ® ±ÇÇÑÀ» ȹµæÇÒ ¾î¶°ÇÑ ¹æ¹ýµµ ¾ø¾î¾ß Çϸç chroot jail ÀÌ ÀûÀýÈ÷ ¼³Á¤µÇ¾î¾ß ÇÑ´Ù. ÀúÀÚ´Â ÀÌ ¹æ¹ýÀÌ ÀûÀýÇÑ °æ¿ì¿¡ chroot(2) ¸¦ »ç¿ëÇÒ °ÍÀ» ÃßõÇÏÁö¸¸ ÀÌ¿¡¸¸ ÀÇÁ¸ÇÏÁö¸¸ ¸¶¶ó; ´ë½Å À̸¦ °èÃþÈµÈ º¸È£¼ÂÀÇ ºÎºÐÀÌ µÇµµ·Ï ÇØ¶ó. ´ÙÀ½Àº chroot(2) »ç¿ë¿¡ ´ëÇÑ ¾à°£ÀÇ ÁÖÀǵéÀÌ´Ù:
6.3.7. Á¢±ÙÇÒ ¼ö ÀÖ´Â µ¥ÀÌŸÀÇ ÃÖ¼Òȸ¦ °í·ÁÇØ¶ó»ç¿ëÀÚ°¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â µ¥ÀÌŸÀÇ ¾çÀ» ÃÖ¼ÒÈÇÏ´Â °ÍÀ» °í·ÁÇØ¶ó. ¿¹¸¦ µé¾î »ç¿ëÀÚ°¡ µ¥ÀÌŸ¸¦ Á÷Á¢ÀûÀ¸·Î º¼ Çʿ䰡 ¾ø´Ù¸é CGI ½ºÅ©¸³Æ®¿¡¼ ÀÌ ½ºÅ©¸³Æ®°¡ »ç¿ëÇÏ´Â ¸ðµç µ¥ÀÌŸ¸¦ ¹®¼ Æ®¸® ¿ÜºÎ¿¡ ³õ¾Æ¶ó. ¾î¶² »ç¶÷Àº °ø°³ÀûÀ¸·Î ¸µÅ©¸¦ Á¦°øÇÏÁö ¾ÊÀ½À¸·Î½á ¾î¶² ´©±¸µµ µ¥ÀÌŸ¿¡ Á¢±ÙÇÒ ¼ö ¾ø´Ù´Â À߸øµÈ »ý°¢À» °®°í Àִµ¥ ÀÌ´Â °£´ÜÈ÷ ¸»Çؼ ¿ÇÁö ¾Ê´Ù. 6.3.8. »ç¿ë°¡´ÉÇÑ ÀÚ¿øÀÇ ÃÖ¼Òȸ¦ °í·ÁÇØ¶óÁÖ¾îÁø ÇÁ·Î¼¼½º°¡ »ç¿ë°¡´ÉÇÑ ÄÄÇ»ÅÍ ÀÚ¿øÀ» ÃÖ¼ÒÈÇÏ´Â °ÍÀ» °í·ÁÇØ¶ó. µû¶ó¼ °íÀå³´Ù°í ÇÏ´õ¶óµµ ¼Õ»óÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ¼ºñ½º ºÎÀÎ °ø°ÝÀ» ¿¹¹æÇÏ´Â ±âº»ÀûÀÎ ¹æ¹ýÀÌ´Ù. ³×Æ®¿öÅ© ¼¹öÀÇ °æ¿ì °øÅëÀûÀÎ Á¢±Ù ¹æ¹ýÀº °¢ ¼¼¼Ç¿¡ ´ëÇØ º°°³ÀÇ ÇÁ·Î¼¼½º¸¦ ¼³Á¤ÇÏ°í °¢ ÇÁ·Î¼¼½º¿¡ ´ëÇØ ¼¼¼ÇÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â ÃÑ CPU ½Ã°£ µîÀ» Á¦ÇÑÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á °ø°ÝÀÚ°¡ ¸Þ¸ð¸®¸¦ ¼ÒºñÇϰųª ¸ðµç CPU ¸¦ »ç¿ëÇÏ´Â ¿äûÀ» ÇÏ´Â °æ¿ì Çѵµ°¡ Àû¿ëµÇ¾î ±× ÇϳªÀÇ ¼¼¼ÇÀÌ ´Ù¸¥ ŽºÅ©¸¦ ¹æÇØÇÏÁö ¸øÇϵµ·Ï ÇÒ °ÍÀÌ´Ù. ¹°·Ð °ø°ÝÀÚ°¡ ¸¹Àº ¼¼¼ÇÀ» ¸¸µé ¼ö ÀÖÁö¸¸ ÀÌ´Â Àû¾îµµ °ø°ÝÀ» ¹æÇØÇÒ ¼ö ÀÖ´Ù. Çѵµ ¼³Á¤ ¹æ¹ý (¿¹, ulimit(1)) ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 3.6절 ¸¦ º¸¶ó. 6.4. Setuid/Setgid ½ºÅ©¸³Æ® »ý¼ºÀ» ÇÇÇØ¶ó¸¹Àº À¯´Ð½º °è¿ ½Ã½ºÅÛ Æ¯È÷ ¸®´ª½º´Â ¾Õ¿¡¼ ±â¼úÇÑ °æÀï »óŸ¦ ÇÇÇϱâ À§ÇØ ½ºÅ©¸³Æ®¿¡ ¼³Á¤µÇ¾î ÀÖ´Â setuid ¿Í setgid ºñÆ®¸¦ ´Ü¼øÈ÷ ¹«½ÃÇÑ´Ù. setuid ½ºÅ©¸³Æ®ÀÇ Áö¿ø ¿©ºÎ´Â À¯´Ð½º °è¿ ½Ã½ºÅ۵鸶´Ù ´Ù¸£±â ¶§¹®¿¡ °¡´ÉÇÑ »õ·Î¿î ¾ÖÇø®ÄÉÀ̼ǿ¡¼´Â ÃÖ¿ì¼±ÀûÀ¸·Î ÇÇÇØÁø´Ù. Ưº°ÇÑ °æ¿ì·Î ÆÞÀº setuid ÆÞ ½ºÅ©¸³Æ®¸¦ Áö¿øÇϱâ À§ÇØ Æ¯º°ÇÑ ¼³Á¤À» Æ÷ÇÔÇϰí ÀÖÀ¸¸ç µû¶ó¼ Á¤¸»·Î ÀÌ·¯ÇÑ ±â´É¼ºÀÌ ÇÊ¿äÇÏ´Ù¸é setuid ¿Í setgid »ç¿ëÀº °¡´ÉÇÏ´Ù. ÀÚ½ÅÀÇ ÀÎÅÍÇÁ¸®ÅÍ¿¡ ÀÌ·¯ÇÑ ±â´É¼ºÀ» Áö¿øÇÒ Çʿ䰡 ÀÖ´Ù¸é ÆÞ¿¡¼ ¾î¶»°Ô ÇÏ´Â Áö¸¦ Á¶»çÇØ¶ó. ±×·¸Áö ¾ÊÀº °æ¿ì °£´ÜÇÑ Á¢±Ù ¹æ¹ýÀº ¾ÈÀüÇÑ È¯°æ (ȯ°æ º¯¼ö Á¦°Å ¹× ¼³Á¤) À» »ý¼ºÇÏ´Â ÀÛÀº setuid/setgid ½ÇÇà°¡´ÉÇÑ ½ºÅ©¸³Æ®¸¦ "wrap" ÇÑ ÈÄ ½ºÅ©¸³Æ®ÀÇ Àý´ë °æ·Î¸¦ »ç¿ëÇØ¼ À̸¦ È£ÃâÇÏ´Â °ÍÀÌ´Ù. ½ºÅ©¸³Æ®°¡ °ø°ÝÀÚ¿¡ ÀÇÇØ º¯°æµÉ ¼ö ¾øÀ½À» È®ÀÎÇØ¶ó. ½© ½ºÅ©¸³ÆÃ ¾ð¾î´Â Ãß°¡ÀûÀÎ ¹®Á¦¸¦ °®°í ÀÖÀ¸¸ç ½ÇÁ¦·Î setuid/setgid ·Î ¼³Á¤µÇÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 9.4절 À» º¸¶ó. 6.5. ¾ÈÀüÇÏ°Ô ¼³Á¤ÇÏ°í ¾ÈÀüÇÑ µðÆúÆ®¸¦ »ç¿ëÇØ¶ó¼³Á¤Àº ÇöÀç º¸¾È ¹®Á¦¸¦ ¾ß±âÇÏ´Â °¡Àå Áß¿äÇÑ ¿øÀÎÀ¸·Î °í·ÁµÇ°í ÀÖ´Ù. µû¶ó¼ óÀ½ ¼³Ä¡¸¦ º¸¾ÈÀûÀ¸·Î ÇÏ¿© ½Ã½ºÅÛÀ» º¸¾ÈÀûÀ¸·Î À¯ÁöÇÑä Àç¼³Á¤ÀÌ ½±°Ô µÇµµ·Ï ³ë·ÂÇØ¾ß ÇÑ´Ù. Àý´ë·Î ¼³Ä¡ ·çƾÀÌ ``default" ÆÐ½º¿öµå¸¦ ¼³Ä¡Çϵµ·Ï ÇÏÁö ¸¶¶ó. »õ·Î¿î "users"¸¦ ¼³Ä¡ÇÒ Çʿ䰡 ÀÖ´Ù¸é ÁÁ´Ù - °ü¸®ÀÚ¿¡°Ô ÆÐ½º¿öµå¸¦ ¼³Á¤ÇÒ ½Ã°£À» ÁÖ°í (ÆÐ½º¿öµå°¡ ¼³Á¤µÇ±â Àü¿¡ ½Ã½ºÅÛÀÌ º¸¾ÈÀûÀ¸·Î À¯ÁöÇϸé¼) ±×Àú ºÒ°¡´ÉÇÑ ÆÐ½º¿öµå¸¦ °®°í À̵éÀ» ¼³Ä¡Çضó. °ü¸®ÀÚ´Â ¾Æ¸¶µµ ¼ö¹é°³ÀÇ ÆÐŰÁö¸¦ ¼³Ä¡ÇÏ°í °ÅÀÇ È®½ÇÈ÷ ÆÐ½º¿öµå ¼³Á¤À» Àؾî¹ö¸± °ÍÀÌ´Ù - µðÆúÆ® ÆÐ½º¿öµå¸¦ »ý¼ºÇÑ´Ù¸é °ü¸®ÀÚ´Â À̸¦ ¼³Á¤ÇÏ´Â °ÍÀ» ¾Ë·Á°í ÇÏÁöµµ ¾ÊÀ» °Í ÀÌ´Ù. ÇÁ·Î±×·¥Àº °ü¸®ÀÚ°¡ Á¢±Ù Á¤Ã¥À» ¼³Á¤ÇÒ ±âȸ¸¦ °®À» ¶§±îÁö °¡Àå Á¦ÇÑÀûÀÎ Á¢±Ù Á¤Ã¥À» °¡Á®¾ß ÇÑ´Ù. ½ÃÀÛ ¼³Á¤À¸·Î ``sample" °ú °°ÀÌ ½ÇÁ¦ ¾µ ¼ö ÀÖ´Â »ç¿ëÀÚ ¶Ç´Â ``¸ðµç °Í¿¡ Á¢±ÙÀ» Çã¿ëÇÏ´Â" ¼³Á¤À» »ý¼ºÇÏÁö ¸»±â ¹Ù¶õ´Ù: ¸¹Àº »ç¿ëÀÚ´Â ±×Àú ``¸ðµç °ÍÀ» ¼³Ä¡Çϸç" (¸ðµç »ç¿ëÇÒ ¼ö ÀÖ´Â ¼ºñ½º¸¦ ¼³Ä¡Çϸç) ¸¹Àº ¼ºñ½º¸¦ ¼³Á¤ÇÒ ½Ã°£Àº Àý´ë·Î ³»Áö ¾Ê´Â´Ù. ¾î¶² °æ¿ì¿¡´Â ÇÁ·Î±×·¥ÀÌ ±âÁ¸ ÀÎÁõ ½Ã½ºÅÛ¿¡ ÀÇÁ¸ÇÔÀ¸·Î½á ´õ¿í °ü´ëÇÑ Á¤Ã¥ÀÌ ¹Ù¶÷Á÷ÇÏ´Ù¶ó°í °áÁ¤ÇÒ ¼ö ÀÖÀ» Áöµµ ¸ð¸£´Âµ¥ ¿¹¸¦ µé¾î ftp ¼¹ö´Â »ç¿ëÀÚÀÇ µð·ºÅ丮·Î ·Î±×ÀÎÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ´Â ÀÚ½ÅÀÇ ÆÄÀÏ¿¡ Á¢±ÙÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù°í °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ·¯ÇÑ °¡Á¤¿¡ ÁÖÀÇÇØ¶ó. ¼³Ä¡ ½ºÅ©¸³Æ®°¡ °¡´ÉÇÑ ¾ÈÀüÇÏ°Ô ÇÁ·Î±×·¥À» ¼³Ä¡Çϵµ·Ï ÇØ¶ó. µðÆúÆ®·Î ·çÆ® ¶Ç´Â ¾î¶² ´Ù¸¥ ½Ã½ºÅÛ »ç¿ëÀÚ¿¡ ÀÇÇØ ¼ÒÀ¯µÇ´Â ¸ðµç ÆÄÀϵéÀ» ¼³Ä¡Çϰí À̵éÀ» others ¿¡°Ô´Â ¾µ ¼ö¾ø°Ô ¸¸µé¾î¶ó; ÀÌ´Â ·çÆ® ¾Æ´Ñ »ç¿ëÀÚ°¡ ¹ÙÀÌ·¯½º¸¦ ¼³Ä¡ÇÏ´Â °ÍÀ» ¿¹¹æÇÑ´Ù. Á¤¸»·Î ÀÌ ÆÄÀϵéÀ» ½Å·ÚµÈ »ç¿ëÀÚ¿Ü¿¡´Â ¾î´À ´©±¸µµ ÀÐÀ» ¼ö ¾ø°Ô ¸¸µå´Â °ÍÀÌ ÃÖ¼±ÀÌ´Ù. ¶ÇÇÑ ·çÆ® ±ÇÇÑÀÌ ¾ø´Â »ç¿ëÀÚ¿Í ¼³Ä¡ÀÚ¸¦ ¿ÏÀüÈ÷ ¹ÏÁö ¸øÇÏ´Â °ü¸®ÀÚ°¡ ¿©ÀüÈ÷ ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ·çÆ® ¾Æ´Ñ ¼³Ä¡¸¦ Çã¿ëÇØ¶ó. ¼³Ä¡ÇÒ ¶§ ¹Ýµå½Ã º¸¾È¿¡ ÇÊ¿äÇÑ ¸ðµç °¡Á¤ÀÌ ¿ÇÀºÁö °Ë»çÇØ¶ó. ¸î¸î ¶óÀ̺귯¸® ·çƾµéÀº ¾î¶² Ç÷§Æû¿¡¼´Â ¾ÈÀüÇÏÁö ¾Ê´Ù; ÀÌ¿¡ ´ëÇÑ ³íÀÇ´Â 7.1절 ¸¦ º¸¶ó. ¾ÖÇø®ÄÉÀ̼ÇÀÌ ½ÇÇàµÉ Ç÷§ÆûµéÀ» ¾Ë°í ÀÖ´Ù¸é Ç÷§ÆûµéÀÇ Æ¯Á¤ÀûÀΠƯ¡À» °Ë»çÇÒ ÇÊ¿ä´Â ¾øÁö¸¸ ÀÌ·¯ÇÑ °æ¿ì ¹Ýµå½Ã ÇÁ·Î±×·¥ÀÌ ÀÌ·¯ÇÑ Ç÷§ÆûµéÁßÀÇ Çϳª¿¡¸¸ ¼³Ä¡µÇ´ÂÁö¸¦ °Ë»çÇØ¶ó. ±×·¸Áö ¾Ê´Ù¸é ¼³Ä¡ °á°ú°¡ º¸¾ÈÀûÀÎÁö ¾Æ´ÑÁö ¸ð¸£±â ¶§¹®¿¡ ¼öÀÛ¾÷À¸·Î ÇÁ·Î±×·¥À» ¼³Ä¡ÇØ¾ß ÇÑ´Ù. ¼³Ä¡ÈÄÀÇ ¼³Á¤À» Æ÷ÇÔÇÏ¿© °¡´ÉÇÑ ¼³Á¤ÀÌ ½±°í ¸í¹éÇϵµ·Ï ¸¸µé¾î¶ó. °¡´ÉÇÑ ``º¸¾ÈÀûÀÎ" Á¢±Ù ¹æ¹ýÀ» »ç¿ëÇØ¶ó ±×·¸Áö ¾Ê´Ù¸é ¸¹Àº »ç¿ëÀÚ°¡ À§ÇèÀ» ÀÌÇØÇÔÀÌ ¾øÀÌ ºñº¸¾ÈÀûÀÎ Á¢±Ù ¹æ¹ýÀ» »ç¿ëÇÒ °ÍÀÌ´Ù. ¸®´ª½º¿¡¼´Â »ç¿ëÀÚ°¡ ±âÁ¸ ÀÎÇÁ¶ó¸¦ »ç¿ëÇÏ¿© ±×µéÀÇ ½Ã½ºÅÛÀ» ½±°Ô ¼³Á¤ÇÒ ¼ö ÀÖµµ·Ï linuxconf ¿Í °°Àº µµ±¸¸¦ ÀÌ¿ëÇØ¶ó. ¼³Á¤ ¾ð¾î°¡ ÀÖ´Ù¸é µðÆúÆ®´Â »ç¿ëÀÚ°¡ ¸íÈ®ÇÏ°Ô Á¢±ÙÀ» Çã¿ëÇÒ ¶§±îÁö À̸¦ °ÅÀýÇØ¾ß ÇÑ´Ù. °ü¸®ÀÚ°¡ ¼³Á¤ÀÌ ¹«¾ùÀ» ÇÏ´Â Áö¸¦ ÀÌÇØÇÒ ¼ö ÀÖµµ·Ï ¿¹Á¦ ¼³Á¤ ÆÄÀÏ¿¡ ¸¹Àº ¸íÈ®ÇÑ ÁÖ¼®À» Æ÷ÇÔÇØ¶ó (ÀÖ´Ù¸é). 6.6. ¾ÈÀüÇÏ°Ô ÃʱâȰªÀ» ÀûÀçÇØ¶ó¸¹Àº ÇÁ·Î±×·¥µéÀº ±×µéÀÇ µðÆúÆ® ¼³Á¤À» Çã¿ëÇÏ´Â ÃʱâÈ ÆÄÀÏÀ» Àдµ¥ °ø°ÝÀÚ°¡ ¾î¶² ÃʱâÈ ÆÄÀÏÀÌ »ç¿ëµÇ´ÂÁö¸¦ º¯°æÇÒ ¼ö ¾øÀ¸¸ç ÀÌ ÆÄÀÏÀ» »ý¼º ¶Ç´Â ¼öÁ¤ÇÒ ¼ö ¾øµµ·Ï º¸ÁõÇØ¾ß ÇÑ´Ù. ÇÁ·Î±×·¥ÀÌ ÆíÁý±â ¶Ç´Â ºê¶ó¿ìÀú·Î½á »ç¿ëµÈ´Ù¸é »ç¿ëÀÚ°¡ ´Ù¸¥ ´©±º°¡¿¡ ÀÇÇØ Á¦¾îµÇ´Â µð·ºÅ丮¸¦ º¼ ¼öµµ Àֱ⠶§¹®¿¡ ´ë°³ ÇöÀç µð·ºÅ丮¸¦ ÃʱâÈ °ü·Ã Á¤º¸ÀÇ Ãâó·Î »ç¿ëÇØ¼´Â ¾ÈµÈ´Ù. ´ë½Å ÇÁ·Î±×·¥ÀÌ ÀϹÝÀûÀÎ »ç¿ëÀÚ ¾ÖÇø®ÄÉÀ̼ÇÀ̶ó¸é »ç¿ëÀÚÀÇ È¨µð·ºÅ丮¿¡ Æ÷ÇԵǾî ÀÖ´Â ¼û°ÜÁø ÆÄÀÏ ¶Ç´Â µð·ºÅ丮·ÎºÎÅÍ ¸ðµç »ç¿ëÀÚÀÇ µðÆúÆ®¸¦ ÀûÀçÇØ¾ß ÇÑ´Ù. ÇÁ·Î±×·¥ÀÌ setuid/setgid ÀÎ °æ¿ì À̸¦ ½Å·ÚµÇÁö ¾ÊÀº (ÀáÀçÀûÀ¸·Î ÀûÀÇÀÖ´Â) ÀÔ·ÂÀ¸·Î ÇÊÅ͸µÇÏÁö ¸øÇÑ´Ù¸é »ç¿ëÀÚ¿¡ ÀÇÇØ Á¦¾îµÇ´Â ¸ðµç ÆÄÀÏÀ» ÀÐÁö ¸¶¶ó. ½Å·ÚµÈ ¼³Á¤ °ªÀÌ ¾î¶² ´Ù¸¥ °÷¿¡¼ ÀüºÎ ÀûÀçµÇ¾î¾ß ÇÑ´Ù (ÀϹÝÀûÀ¸·Î /etc ³»ÀÇ ÆÄÀϵé·ÎºÎÅÍ). 6.7. °íÀå ¾ÈÀüº¸¾ÈÀûÀÎ ÇÁ·Î±×·¥Àº ¿À·ù°¡ ¹ß»ýÇÏ¿´À» ¶§ ±×°ÍÀ» ÇÑ ºÎºÐ¿¡ ±¹ÇѽÃÄÑ Àüü ½Ã½ºÅÛÀÌ ¿ÏÀüÈ÷ ¸¶ºñµÇ´Â °ÍÀ» ¹æÁöÇÏ°í ¼öÇàÀ» °è¼ÓÇÒ ¼ö ÀÖµµ·Ï ¼³°èµÇ¾î¾ß ÇÑ´Ù, Áï ÇÁ·Î±×·¥ÀÌ ½ÇÆÐÇÏ´õ¶óµµ °¡Àå ¾ÈÀüÇÑ °á°ú°¡ ³ª¿Ã ¼ö ÀÖµµ·Ï ¼³°èµÇ¾î¾ß ÇÑ´Ù. º¸¾ÈÀÌ °áÁ¤ÀûÀÎ ÇÁ·Î±×·¥ÀÇ °æ¿ì ÀÌ´Â ¾î¶² Á¾·ùÀÇ ¿ÀÀÛµ¿ÀÌ Å½ÁöµÈ´Ù¸é ("can't get here" »óÅ¿¡ µµ´ÞÇÏ´Â ±âÇüÀÇ ÀÔ·Â µî) ÇÁ·Î±×·¥ÀÌ Áï°¢ÀûÀ¸·Î ¼ºñ½º¸¦ °ÅÀýÇÏ°í ±× ¿äû 󸮸¦ ÁßÁöÇØ¾ß ÇÑ´Ù. »ç¿ëÀÚ°¡ ¹«¾ùÀ» ¿øÇß´ÂÁö ÀÌÇØÇÏ·Á°í ÇÏÁö ¸¶¶ó; ±×Àú ¼ºñ½º¸¦ °ÅÀýÇØ¶ó. ¶§¶§·Î ÀÌ´Â »ç¿ëÀÚ °üÁ¡¿¡¼ ½Å·Ú¼º ¶Ç´Â »ç¿ë¼ºÀ» °¨¼Ò½ÃŰÁö¸¸ º¸¾ÈÀº Áõ°¡½ÃŲ´Ù. À̰ÍÀÌ ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀº ¾à°£ÀÇ °æ¿ìµµ ÀÖÁö¸¸ (¿¹, ¼ºñ½º ºÎÀÎÀÌ ±â¹Ð¼º ¶Ç´Â ¹«°á¼º ¼Õ½Çº¸´Ù ´õ¿í ³ª»Û °æ¿ì°¡ ÀÖ´Ù) °ÅÀÇ µå¹® °æ¿ìÀÌ´Ù. ÀúÀÚ°¡ ``ÀüüÀûÀ¸·Î ½ÇÆÐÇØ¶ó" °¡ ¾Æ´Ñ ``¿äû 󸮸¦ ÁßÁöÇ϶ó"´Â °Í¿¡ ÁÖ¸ñÇØ¶ó. ƯÈ÷ ´ëºÎºÐÀÇ ¼¹ö´Â ±âÇüÀÇ ÀÔ·ÂÀ» ¹ÞÀ» ¶§ ¿ÏÀüÈ÷ ¸ØÃç¼´Â ¾ÈµÇ´Âµ¥ ÀÌ·± °æ¿ì ¼ºñ½º ºÎÀÎ °ø°Ý (°ø°ÝÀÚ°¡ ¼ºñ½º »ç¿ëÀ» ¹æÇØÇϱâ À§ÇØ ±×Àú °¡ºñÁö ºñÆ®¸¦ º¸³½´Ù) ¿¡ ´ëÇÑ »ç¼ÒÇÑ ±âȸ¸¦ Á¦°øÇϱ⠶§¹®ÀÌ´Ù. ¶§¶§·Î Àüü ¼¹ö¸¦ ´Ù¿î½ÃŰ´Â °ÍÀÌ ÇÊ¿äÇѵ¥ ƯÈ÷ "can't get here" »óÅ¿¡ À̸£´Â °ÍÀº °è¼ÓÇÏ´Â °ÍÀÌ ¾î¸®¼®À» ¸¸Å °Ý·ÄÇÑ ¹®Á¦ÀÓÀ» ¾Ë¸®´Â °ÍÀÏ ¼öµµ ÀÖ´Ù. ½ÇÆÐ°¡ ŽÁöµÉ ¶§ ¾î¶² ¿¡·¯ ¸Þ½ÃÁö¸¦ º¸¿©ÁÙÁö¸¦ ÁÖÀDZí°Ô °í·ÁÇØ¶ó. ¾Æ¹«°Íµµ º¸¿©ÁÖÁö ¸øÇÑ´Ù¸é ¹®Á¦¸¦ Áø´ÜÇÏ´Â °ÍÀº ¾î·ÆÁö¸¸ ³Ê¹« ¸¹Àº Á¤º¸¸¦ º¸¿©ÁØ´Ù¸é ¹«½É°á¿¡ °ø°ÝÀÚ¸¦ µµ¿ï ¼ö ÀÖ´Ù. º¸Åë ÃÖ¼±ÀÇ Á¢±Ù ¹æ¹ýÀº "Á¢±Ù °ÅÀý (access denied)" ¶Ç´Â "±âŸ ¿¡·¯ »ý¼º (miscellaneous error encountered)" À¸·Î ÀÀ´äÇÑ ÈÄ ´õ¿í ¼¼ºÎÀûÀÎ Á¤º¸¸¦ °¨»ç ·Î±× (´©°¡ Á¤º¸¸¦ º¸´Â Áö¿¡ ´ëÇØ ´õ¿í ¸¹Àº Á¦¾î¸¦ ÇÒ ¼ö ÀÖ´Ù) ¿¡ ±â·ÏÇÏ´Â °ÍÀÌ´Ù. 6.8. °æÀï »óŸ¦ ÇÇÇØ¶ó``°æÀï »óÅ (race condition)" ´Â "À̺¥Æ®µéÀÇ »ó´ëÀûÀΠŸÀֿ̹¡ ´ëÇÑ µ¹¹ßÀûÀÎ ÀÓ°è ÀÇÁ¸¼º¶§¹®¿¡ ¹ß»ýÇÏ´Â ÀÌ»óÇÑ µ¿ÀÛ" À¸·Î Á¤ÀÇµÉ ¼ö ÀÖ´Ù [FOLDOC]. °æÀï »óÅ´ ÀϹÝÀûÀ¸·Î ÆÄÀÏ ¶Ç´Â º¯¼ö¿Í °°Àº °øÀ¯ ÀÚ¿øÀ» Á¢±ÙÇÏ´Â Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ ÇÁ·Î¼¼½º¸¦ Æ÷ÇÔÇϴµ¥ ÀÌ·¯ÇÑ ´ÙÁß Á¢±ÙÀÌ ÀûÀýÈ÷ Á¦¾îµÇÁö ¾Ê´Â °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î ÇÁ·Î¼¼½º´Â ¿øÀÚÀûÀ¸·Î (atomically) ½ÇÇàµÇÁö ¾Ê´Âµ¥ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ º»·¡ ¾î¶² µÎ ¸í·É »çÀÌ¿¡¼ À̸¦ ÀÎÅÍ·´Æ®ÇÒ ¼öµµ ÀÖ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÇ ÇÁ·Î¼¼½º°¡ ÀÌ·¯ÇÑ ÀÎÅÍ·´¼Ç¿¡ ´ëºñÇÏÁö ¾Ê¾Ò´Ù¸é ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ÀÌ ÇÁ·Î¼¼½º¸¦ ¹æÇØÇÒ ¼öµµ ÀÖ´Ù. ´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ ÀÓÀÇÀÇ Äڵ尡 µÎ ¿¬»ê »çÀÌ¿¡ ½ÇÇàµÈ´Ù ÇÏ´õ¶óµµ ¸ðµç ¿¬»ê½ÖÀÌ ½ÇÆÐÇØ¼´Â ¾ÈµÈ´Ù. °æÀï »óÅ ¹®Á¦´Â °³³äÀûÀ¸·Î ´ÙÀ½ÀÇ µÎ ¹üÁÖ·Î ºÐ·ùÇÒ ¼ö ÀÖ´Ù:
6.8.1. ½ÃÄö½Ì (ºñ¿øÀÚÀû) ¹®Á¦ÀϹÝÀûÀ¸·Î ¸ðµç ¿¬»ê½Ö¿¡ ´ëÇØ ÀÓÀÇÀÇ Äڵ尡 ÀÌµé »çÀÌ¿¡¼ ½ÇÇàµÉ ¶§ Äڵ尡 ½ÇÆÐÇÒ ¼ö ÀÖ´ÂÁö °Ë»çÇØ¾ß ÇÑ´Ù. °øÀ¯ º¯¼ö ÀûÀç ¹× ÀúÀåÀº º¸Åë º°°³ÀÇ ¿¬»êÀ¸·Î ±¸ÇöµÇ¸ç ¿øÀÚÀûÀÌ ¾Æ´ÔÀ» ÁÖ¸ñÇØ¶ó. ÀÌ´Â ``Áõ°¡ º¯¼ö (increment variable)" ¿¬»êÀÌ º¸Åë ÀûÀç, Áõ°¡ ±×¸®°í ÀúÀå ¿¬»êÀ¸·Î º¯È¯µÊÀ» ÀǹÌÇÏ¸ç µû¶ó¼ º¯¼ö ¸Þ¸ð¸®°¡ °øÀ¯µÈ´Ù¸é ´Ù¸¥ ÇÁ·Î¼¼½º°¡ Áõ°¡Çϱ⸦ °£¼·ÇÒ ¼öµµ ÀÖ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ ¿äûÀÌ Çã°¡µÇ¾ú´ÂÁö¸¦ °áÁ¤ÇØ¾ß ÇÏ¸ç ±×·¸´Ù¸é ±× ¿äû¿¡ µû¶ó ÀÛµ¿ÇØ¾ß ÇÑ´Ù. ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚ°¡ ÇÁ·Î±×·¥ÀÌ ¿äû¿¡ µû¶ó ÀÛµ¿Çϱâ Àü¿¡ Çã°¡±Ç °áÁ¤¿¡ »ç¿ëµÇ´Â ¾î¶² °Íµµ º¯°æ½Ãų ¼ö ÀÖ´Â ¹æ¹ýÀº ¾ø¾î¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ À¯ÇüÀÇ °æÀï »óÅ´ ¶§¶§·Î "time of check - time of use" (TOCTOU) °æÀï »óÅ·ΠÁöĪµÈ´Ù. 6.8.1.1. ÆÄÀϽýºÅÛ¿¡¼ÀÇ ¿øÀÚÀû µ¿ÀÛ¿øÀÚÀû µ¿ÀÛÀ» ¼öÇàÇÒ ¼ö ¾ø´Ù´Â ¹®Á¦´Â ÆÄÀϽýºÅÛ¿¡¼µµ µÇÇ®ÀÌÇÏ¿© ³ª¿Â´Ù. ÀϹÝÀûÀ¸·Î ÆÄÀϽýºÅÛÀº ¸¹Àº ÇÁ·Î±×·¥µéÀÌ »ç¿ëÇÏ´Â °øÀ¯ ÀÚ¿øÀ¸·Î ¾î¶² ÇÁ·Î±×·¥µéÀº ´Ù¸¥ ÇÁ·Î±×·¥µéÀÌ À̸¦ »ç¿ëÇÏ´Â °ÍÀ» °£¼·ÇÒ ¼öµµ ÀÖ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥µéÀº Çã°¡µÈ ¿äûÀÎÁö¸¦ °áÁ¤Çϱâ À§ÇØ access(2) ¸¦ »ç¿ëÇÏ´Â °ÍÀ» ÇÇÇØ¾ß ÇÑ´Ù. ´ÙÀ½ È£ÃâÀº open(2) ·Î »ç¿ëÀÚµéÀÌ ¾Æ¸¶µµ ½Éº¼¸¯ ¸µÅ© ¶Ç´Â ÀڽŵéÀÌ ¼±ÅÃÇÑ ÆÄÀÏÀ» »ý¼ºÇÔÀ¸·Î½á access(2) ¿Í open(2) È£Ãâ »çÀÌ¿¡ ÆÄÀÏÀ» ÀÚÁÖ ¿Å±æ ¼öµµ Àֱ⠶§¹®ÀÌ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥Àº ´ë½Å ÀÚ½ÅÀÇ À¯È¿ id ¶Ç´Â ÆÄÀϽýºÅÛ id ¸¦ ¼³Á¤ÇÑ ÈÄ Á÷Á¢ÀûÀ¸·Î open ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. access(2) ¸¦ ¾ÈÀüÇÏ°Ô »ç¿ëÇÏ´Â °ÍÀº °¡´ÉÇѵ¥ ´ÜÁö »ç¿ëÀÚ°¡ ÆÄÀÏ ¶Ç´Â ÆÄÀϽýºÅÛ ·çÆ®·ÎºÎÅÍ °æ·Î¿¡ Á¸ÀçÇÏ´Â ¸ðµç µð·ºÅ丮¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö ¾øÀ» ¶§¸¸ °¡´ÉÇÏ´Ù. ÆÄÀÏÀ» »ý¼ºÇÒ ¶§´Â O_CREAT | O_EXCL ¸ðµå¸¦ »ç¿ëÇØ¼ ¿°í ´ÜÁö ¸Å¿ì Á¦ÇÑµÈ Çã°¡ (´ÜÁö ÇöÀç »ç¿ëÀÚ¿¡°Ô¸¸) ¸¦ ÁÖ¾î¾ß ÇÑ´Ù; ¶ÇÇÑ open ½ÇÆÐ¿¡ ´ëºñÇÒ Çʿ䰡 ÀÖ´Ù. ÆÄÀÏÀ» ¿ÀÇÂÇÒ Çʿ䰡 ÀÖ´Ù¸é (¿¹, ¼ºñ½º ºÎÀÎÀ» ¿¹¹æÇϱâ À§ÇØ) ¹Ýº¹ÀûÀ¸·Î ``ÀÓÀÇÀÇ" ÆÄÀÏ À̸§À» »ý¼ºÇØ, ÀÌ À̸§ÀÇ ÆÄÀÏÀ» ¿ÀÇÂÇÏ°í ¿ÀÇ ¼º°ø½Ã ÀÌ·¯ÇÑ ¹Ýº¹À» ÁßÁöÇÒ Çʿ䰡 ÀÖ´Ù. ÀÏ¹Ý ÇÁ·Î±×·¥µéÀº ÆÄÀÏÀ» ÀûÀýÈ÷ »ý¼ºÇÏÁö ¾Ê´Â °æ¿ì º¸¾È ¾àÁ¡À» °¡Áú ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ``joe" ÅØ½ºÆ® ÆíÁý±â´Â "DEADJOE" ½Éº¼¸¯ ¸µÅ© Ãë¾à¼ºÀ̶ó°í ºÒ¸®´Â ¾àÁ¡À» °®°í ÀÖ´Ù. ½Ã½ºÅÛ Å©·¡½¬, xterm ´Ý±â ¶Ç´Â ³×Æ®¿öÅ© ¿¬°á ²÷±è°ú °°ÀÌ ºñÇ¥ÁØ ¹æ½ÄÀ¸·Î joe °¡ Á¾·áµÉ ¶§ joe ´Â ¿ÀÇ ¹öÆÛ¸¦ "DEADJOE" ÆÄÀÏ¿¡ ¹«Á¦ÇÑÀ¸·Î µ¡ºÙÀÏ ¼ö ÀÖ´Ù. ÀÌ´Â ·çÆ®°¡ ÀϹÝÀûÀ¸·Î joe ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â µð·ºÅ丮¿¡ DEADJOE ½Éº¼¸¯ ¸µÅ©¸¦ »ý¼ºÇÔÀ¸·Î½á ¾Ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¹æ¹ýÀ¸·Î joe ´Â °¡ºñÁö¸¦ ÀáÀçÀûÀ¸·Î ¹®Á¦°¡ µÉ ¼ö ÀÖ´Â ÆÄÀÏ¿¡ µ¡ºÙÀ̴µ¥ »ç¿ëµÉ ¼ö ÀÖÀ¸¸ç ÀÌ´Â ¼ºñ½º ºÎÀÎ ¹×/¶Ç´Â º»ÀÇ¾Æ´Ñ Á¢±ÙÀ» ¾ß±âÇÒ °ÍÀÌ´Ù. ´Ù¸¥ ¿¹·Î¼ ÆÄÀÏÀÇ ¸ÞŸ Á¤º¸¿¡ ÀÏ·ÃÀÇ ¿¬»ê (¼ÒÀ¯ÀÚ º¯°æ, ÆÄÀÏ stat-ing ¶Ç´Â Çã°¡±Ç ºñÆ® º¯°æ°ú °°Àº) À» ¼öÇàÇÒ ¶§ ¿ì¼± ÆÄÀÏÀ» ¿ÀÇÂÇÑ ÈÄ ÀÌ¿¡ ¿¬»êÀ» Àû¿ëÇØ¶ó. ÀÌ´Â chown(), chgrp() ¿Í chmod() ¿Í °°ÀÌ ÆÄÀÏ À̸§À» ÃëÇÏ´Â ÇÔ¼öµé ´ë½Å fchown(), fstat() ¶Ç´Â fchmod() ½Ã½ºÅÛ È£ÃâÀ» »ç¿ëÇÑ´Ù´Â °ÍÀ» ÀǹÌÇϸç ÇÁ·Î±×·¥À» ÀÛµ¿½ÃŰ´Â µµÁß¿¡ ÆÄÀÏÀÌ ´ëüµÇ´Â °ÍÀ» ¸·À» ¼ö ÀÖÀ» °ÍÀÌ´Ù (°¡´ÉÇÑ °æÀï »óÅÂ). ¿¹¸¦ µé¾î ÆÄÀÏÀ» ´ÝÀº ÈÄ chmod() ¸¦ »ç¿ëÇØ¼ Çã°¡±ÇÀ» º¯°æÇÑ´Ù¸é °ø°ÝÀÚ°¡ ÀÌ µÎ ´Ü°è »çÀÌ¿¡ ÆÄÀÏÀ» À̵¿ ¹× Á¦°ÅÇØ¼ ´Ù¸¥ ÆÄÀÏ (/etc/passwd °ú °°Àº) ¿¡ ´ëÇÑ ½Éº¼¸¯ ¸µÅ©¸¦ »ý¼ºÇÒ ¼öµµ ÀÖ´Ù. ´Ù¸¥ Àç¹ÌÀÖ´Â ÆÄÀÏÀº /dev/zero ·Î ÀÌ´Â ÇÁ·Î±×·¥¿¡ ¹«ÇÑÈ÷ ±ä ÀÔ·Â µ¥ÀÌŸ ½ºÆ®¸²À» Á¦°øÇÒ ¼ö ÀÖ´Ù; °ø°ÝÀÚ°¡ ÆÄÀÏÀÇ Áß°£ ½ºÆ®¸²À» ``±³È¯" ÇÒ ¼ö ÀÖ´Ù¸é °á°ú´Â À§ÇèÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ´Â º¹ÀâÇØÁø´Ù - ÆÄÀϵéÀ» »ý¼ºÇÒ ¶§ À̵鿡°Ô °¡´ÉÇÑ ÃÖ¼ÒÇÑÀÇ ±ÇÇѼÂÀ» ÁÖ¾î¾ß ÇÏ¸ç ±× ÈÄ ¿øÇÒ ¶§ ±ÇÇÑÀ» ´õ¿í È®´ë º¯°æÇØ¾ß ÇÑ´Ù. ÀϹÝÀûÀ¸·Î ÀÌ´Â ´ÜÁö »ç¿ëÀÚ¿Í »ç¿ëÀÚ ±×·ì¿¡ ´ëÇØ Ãʱâ Á¢±ÙÀ» Á¦ÇÑÇϱâ À§ÇØ umask ¹×/¶Ç´Â open ¸Å°³º¯¼ö¸¦ »ç¿ëÇØ¾ß ÇÔÀ» ÀǹÌÇÑ´Ù. ¿¹¸¦ µé¾î Ãʱ⿡ ¸ðµÎ ´Ù ÀÐÀ» ¼ö ÀÖ´Â ÆÄÀÏÀ» »ý¼ºÇÑ ÈÄ ``world-readable" ºñÆ®¸¦ ¾ø¾Ö·Á°í Çϸé Çã°¡±Ç ºñÆ®°¡ ¹«¹æÇÏ´Ù°í ¸»ÇÑ µ¿¾È¿¡ °ø°ÝÀÚ´Â ÆÄÀÏÀ» ¿ÀÇÂÇÏ·Á°í ÇÒ ¼ö ÀÖ´Ù. ´ëºÎºÐÀÇ À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼ Çã°¡±ÇÀº ¿Àǽÿ¡¸¸ °Ë»çµÇ´Âµ¥ µû¶ó¼ °ø°ÝÀÚ°¡ ÀǵµÇÑ °Íº¸´Ù ´õ¿í ¸¹Àº ±ÇÇÑÀ» °®°Ô µÉ °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î ´Ù¼öÀÇ »ç¿ëÀÚ°¡ À¯´Ð½º °è¿ ½Ã½ºÅÛÀÇ µð·ºÅ丮¿¡ ¾²±â¸¦ ÇÒ ¼ö ÀÖÀ¸·Á¸é ±× µð·ºÅ丮¿¡ ``sticky" ºñÆ®¸¦ ¼³Á¤ÇÏ´Â °ÍÀÌ ´õ¿í ÁÁÀ» °ÍÀÌ´Ù. ÀÌ·¯ÇÑ sticky µð·ºÅ丮´Â ´õ¿í Àß ±¸ÇöµÇ¾î¿Ô´Ù. ±×·¯³ª ¹®Á¦¸¦ ¿ÏÀüÈ÷ ÇÇÇÏ´Â °ÍÀÌ ´õ¿í ÁÁÀºµ¥ ´ÜÁö ½Å·ÚµÈ Ưº° ÇÁ·Î¼¼½º¸¸ÀÌ Á¢±ÙÇÒ ¼ö ÀÖ´Â µð·ºÅ丮¸¦ ¸¸µé¾î¶ó (±× ÈÄ À̸¦ ÁÖÀDZí°Ô ±¸ÇöÇØ¶ó). ÀüÅëÀûÀÎ À¯´Ð½ºÀÇ ÀϽÃÀûÀÎ µð·ºÅ丮 (/tmp ¿Í /var/tmp) ´Â º¸Åë ``sticky" µð·ºÅ丮·Î ±¸ÇöµÇÁö¸¸ ´ÙÀ½¿¡ º¸µíÀÌ ¸ðµç À¯ÇüÀÇ ¸ðµç ¹®Á¦°¡ ¿ª½Ã Ç¥¸éÈÇÒ °ÍÀÌ´Ù. 6.8.1.2. Àӽà ÆÄÀÏ¿øÀÚÀû ¿¬»êÀ» Á¤È®È÷ ¼öÇàÇÏ´Â ¹®Á¦´Â Àӽà ÆÄÀϵéÀ» »ý¼ºÇÒ ¶§ ƯÈ÷ ³ªÅ¸³´Ù. À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼ Àӽà ÆÄÀϵéÀº ¸ðµç »ç¿ëÀÚµéÀÌ °øÀ¯ÇÏ´Â /tmp ¶Ç´Â /var/tmp µð·ºÅ丮¿¡ ÀϹÝÀûÀ¸·Î »ý¼ºµÈ´Ù. °ø°ÝÀÚµéÀÌ °øÅëÀûÀ¸·Î »ç¿ëÇÏ´Â ¼ö¹ýÀº º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ ÀÛµ¿ÇÏ´Â µ¿¾È Àӽà µð·ºÅ丮³»¿¡ ¾î¶² ´Ù¸¥ ÆÄÀÏ (¿¹, /etc/passwd) ¿¡ ´ëÇÑ ½Éº¼¸¯ ¸µÅ©¸¦ »ý¼ºÇÏ´Â °ÍÀÌ´Ù. °ø°ÝÀÚÀÇ ¸ñÀûÀº º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ ÁÖ¾îÁø ÆÄÀÏ À̸§ÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù°í °áÁ¤ÇÒ »óȲÀ» ¸¸µå´Â °ÍÀ¸·Î °ø°ÝÀÚ°¡ ´Ù¸¥ ÆÄÀÏ¿¡ ´ëÇÑ ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µç ÈÄ¿¡ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ ¾î¶² ¿¬»êÀ» ¼öÇà (±×·¯³ª ½ÇÁ¦·Î´Â ÀǵµÇÏÁö ¾ÊÀº ÆÄÀÏÀ» ¿ÀÇÂÇß´Ù) ÇÏ°Ô µÈ´Ù. ¶§¶§·Î Áß¿äÇÑ ÆÄÀϵéÀº ÀÌ·±½ÄÀ¸·Î Ÿ°ÝÀ» ¹Þ°Å³ª ¼öÁ¤µÉ ¼ö ÀÖ´Ù. ÀÏ¹Ý ÆÄÀÏ »ý¼º°ú °°ÀÌ ÀÌ °ø°ÝÀÇ ¸¹Àº º¯ÇüÀÌ Àִµ¥ À̵éÀº ¸ðµÎ °ø°ÝÀÚ°¡ Àӽà ÆÄÀϵ鿡 ´ëÇØ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ´Â µ¿ÀÏ µð·ºÅ丮¿¡ ÆÄÀϽýºÅÛ °´Ã¼¸¦ »ý¼º (¶Ç´Â Á¢±Ù) ÇÒ ¼ö ÀÖ´Ù´Â °³³ä¿¡ ±âÃÊÇÑ´Ù. ÀÌ·¯ÇÑ °øÀ¯ µð·ºÅ丮¿¡ ÆÄÀϵéÀ» »ý¼ºÇÒ ¶§ ÀϹÝÀûÀÎ ¹®Á¦´Â »ç¿ëÇÏ·Á°í ÇÏ´Â ÆÄÀÏ À̸§ÀÌ »ý¼º½Ã ÀÌ¹Ì Á¸ÀçÇÏÁö ¾ÊÀ½À» º¸ÀåÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ÆÄÀÏ »ý¼º Àü¿¡ À̸¦ °Ë»çÇÏ´Â °ÍÀº È¿°úÀûÀÌÁö ¾ÊÀºµ¥ ÀÌ´Â °Ë»ç ÈÄ¿¡ ±×·¯³ª »ý¼º Àü¿¡ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ±× ÆÄÀÏ À̸§À» °®´Â ÆÄÀÏÀ» »ý¼ºÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ``¿¹ÃøÇÒ ¼ö ¾ø´Â" ¶Ç´Â ``À¯ÀÏÇÑ" ÆÄÀÏ À̸§ »ç¿ëµµ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ¼º°øÇÒ ¶§±îÁö ¹Ýº¹ÀûÀ¸·Î À̸§À» ÃßÃøÇÒ ¼ö Àֱ⠶§¹®¿¡ ÀϹÝÀûÀ¸·Î È¿°úÀûÀÌÁö ¾Ê´Ù. ±âº»ÀûÀ¸·Î °øÀ¯ (sticky) µð·ºÅ丮¿¡ Àӽà ÆÄÀÏÀ» »ý¼ºÇϱâ À§Çؼ´Â (1) ``ÀÓÀÇÀÇ" ÆÄÀÏ À̸§ »ý¼º, (2) O_CREAT | O_EXCL ¹× ¸Å¿ì Á¦ÇÑµÈ Çã°¡±ÇÀ» »ç¿ëÇÑ ¿ÀÇ ¹× (3) ¿ÀÇ ¼º°ø½Ã ÁßÁö À̵éÀ» ¹Ýº¹ÀûÀ¸·Î ÇØ¾ßÇÑ´Ù. 1997 ³â ``Single Unix Specification" ¿¡ µû¸£¸é ÀÓÀÇÀÇ Àӽà ÆÄÀÏÀ» »ý¼ºÇÒ ¶§ ¼±È£µÇ´Â ¹æ¹ýÀº tmpfile(3) ÀÌ´Ù. tmpfile(3) ÇÔ¼ö´Â Àӽà ÆÄÀÏÀ» »ý¼ºÇÏ¿© ÇØ´ç ½ºÆ®¸²À» ¿ÀÇÂÇÏ¸ç ±× ½ºÆ®¸²À» ¹ÝȯÇÑ´Ù (¹ÝȯÇÏÁö ¾Ê´Â´Ù¸é NULL). ºÒÇàÈ÷µµ ½ºÆåÀº ÆÄÀÏÀÌ º¸¾ÈÀûÀ¸·Î »ý¼ºµÉ °ÍÀÎÁö¿¡ ´ëÇØ ¾Æ¹«·± º¸Àåµµ ÇÏÁö ¾Ê°í Àִµ¥ ÀúÀÚ Àڽŵµ ¸ðµç ±¸ÇöÀÌ À̸¦ ¾ÈÀüÇÏ°Ô ÇÏ´ÂÁö º¸ÁõÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ¿°·ÁÇϰí ÀÖ´Ù°í ÀÌ Ã¥ÀÇ Ãʱ⠹öÀü¿¡¼ ¸»Çß´Ù. ±× ÈÄ ¿¹Àü System V ½Ã½ºÅÛÀÌ tmpfile(3) (¿Í tmpnam(3) ¹×tempnam(3)) ¸¦ ºñº¸¾ÈÀûÀ¸·Î ±¸ÇöÇßÀ½À» ¹ß°ßÇß´Ù. tmpfile(3)ÀÇ ¶óÀ̺귯¸® ±¸ÇöÀº Àӽà ÆÄÀÏÀ» º¸¾ÈÀûÀ¸·Î »ý¼ºÇØ¾ß ÇÏÁö¸¸ »ç¿ëÀÚ°¡ ½Ã½ºÅÛ ¶óÀ̺귯¸®°¡ ÀÌ·¯ÇÑ º¸¾È °áÁ¡À» °®°í ÀÖ´Ù°í ´Ã ÀνÄÇÏÁö´Â ¸øÇÏ¸ç ¶§¶§·Î »ç¿ëÀÚ°¡ ÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ¹« °Íµµ ¾ø´Ù. Kris Kennaway ´Â ÀϹÝÀûÀ¸·Î Àӽà ÆÄÀϵéÀ» ¸¸µé¶§ mkstemp(3) ¸¦ »ç¿ëÇ϶ó°í ÃßõÇÑ´Ù. ±×ÀÇ ³í¸®Àû ±Ù°Å´Â ÀÌ Å½ºÅ©¸¦ ¼öÇàÇϱâ À§Çؼ´Â °¢ÀÚÀÇ ÇÔ¼ö¸¦ µ¹¸®´Â ´ë½Å Àß ¾Ë·ÁÁø ¶óÀ̺귯¸® ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß Çϸç ÀÌ ÇÔ¼ö°¡ Àß ¾Ë·ÁÁø ÀÇ¹Ì Ã¼°è¸¦ °®°í ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÌ´Â È®½ÇÈ÷ ±Ù°ÅÀÖ´Â °ßÇØÀÌ´Ù. ÀúÀÚ´Â mkstemp(3) ¸¦ »ç¿ëÇÏ·Á¸é ´ÜÁö ¼ÒÀ¯ÀÚ¿¡°Ô¸¸ Àӽà ÆÄÀÏ Çã°¡±ÇÀ» Á¦ÇÑÇϱâ À§ÇØ ¹Ýµå½Ã umask(2) ¸¦ »ç¿ëÇ϶ó°í µ¡ºÙÀδÙ. ÀÌ´Â mkstemp(3) ÀÇ ¸î¸î ±¸Çö (±âº»ÀûÀ¸·Î ¿¹Àü ±¸Çö) ÀÌ Àӽà ÆÄÀÏÀ» all readable ¹× writable ÇÏ°Ô ¸¸µé¾î °ø°ÝÀÚ°¡ µð·ºÅ丮³»¿¡ ºñ¹Ð ÀڷḦ Àаųª ¾µ ¼ö ÀÖ´Â »óŸ¦ ¸¸µé ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¾à°£ ±ÍÂúÀº °ÍÀº mkstemp(3) °¡ ȯ°æ º¯¼ö TMP ¶Ç´Â TMPDIR ¸¦ Á÷Á¢ÀûÀ¸·Î Áö¿øÇÏÁö ¾Ê´Â´Ù´Â °ÍÀε¥ µû¶ó¼ ȯ°æ º¯¼ö¸¦ Áö¿øÇÏ·Á¸é Äڵ带 Ãß°¡ÇØ¾ß ÇÑ´Ù. ´ÙÀ½Àº ÀÌ·¯ÇÑ ¸ñÀû ¹× TMP ¿Í TMPDIR ¿¡ ´ëÇÑ Áö¿øÀ» Ãß°¡ÇÒ ¶§ mkstemp(3) ¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÏ´Â C ÇÁ·Î±×·¥ÀÌ´Ù.
Kennaway ´Â mkstemp(3) ¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù¸é mkdtemp(3) ¸¦ »ç¿ëÇÏ¿© ¿ÜºÎ·ÎºÎÅÍ º¸È£µÇ´Â µð·ºÅ丮¸¦ °¢ÀÚ ¸¸µé¶ó°í ¾ð±ÞÇϰí ÀÖ´Ù. ¸¶Áö¸·À¸·Î ½ÇÁ¦ ºñº¸¾ÈÀûÀÎ mktemp(3) ¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù¸é ¸¹Àº X ¸¦ »ç¿ëÇØ¶ó - ±×´Â ÆÄÀÏ À̸§ÀÌ ½±°Ô ÃßÃøµÉ ¼ö ¾øµµ·Ï 10 (libc °¡ À̸¦ Çã¿ëÇÑ´Ù¸é) À» Á¦¾ÈÇϰí ÀÖ´Ù (´ÜÁö 6 °³ÀÇ X ¸¦ »ç¿ëÇÑ´Ù´Â °ÍÀº 5 °³¸¦ PID °¡ Â÷ÁöÇÏ¿© ´ÜÁö ÇѰ³ÀÇ ÀÓÀÇ ¹®ÀÚ¸¦ ³²±â°í °ø°ÜÀÚ·Î ÇÏ¿©±Ý ¼Õ½±°Ô °æÀï »óŸ¦ Çã¿ëÇÔÀ» ÀǹÌÇÑ´Ù). ÀúÀÚ´Â tmpname(3) »ç¿ëÀ» ÇÇÇØ¾ß ÇÑ´Ù°í ºÎ¾ðÇÑ´Ù - ÀÌµé »ç¿ëÀÇ ÀϺδ ¾²·¹µå°¡ Á¸ÀçÇÒ ¶§ ½Å·ÚÇÒ ¼ö ¾øÀ¸¸ç TMP_MAX »ç¿ë (°¡Àå ½Ç¿ëÀûÀ¸·Î »ç¿ëÇÏ´Â °ÍÀº ·çÇÁ ³»¿¡¼ÀÌ´Ù) ÈÄ¿¡ ÀûÀýÈ÷ ÀÛµ¿ÇÒ °ÍÀ̶ó°í º¸ÀåÇÏÁö ¾Ê´Â´Ù. ÀϹÝÀûÀ¸·Î mktemp(3) ¶Ç´Â tmpnam(3) °ú °°Àº ÇÔ¼öÀÇ ºñº¸¾È¼º¿¡ ´ëóÇÒ Æ¯º°ÇÑ Á¶Ä¡¸¦ ÃëÇÏÁö ¾Ê¾Ò°Å³ª º¸¾ÈÀûÀÎ ¶óÀ̺귯¸® ±¸ÇöÀ» ¼³Ä¡ ÀÛ¾÷ÀÇ ÀϺκÐÀ¸·Î Å×½ºÆ®ÇÏÁö ¾Ê¾Ò´Ù¸é À̵éÀÇ »ç¿ëÀ» ÇÇÇØ¾ß ÇÑ´Ù. ±×·³¿¡µµ /tmp ¶Ç´Â world-writable µð·ºÅ丮 (¶Ç´Â ±×·ìÀ» ½Å·ÚÇÏÁö ¾Ê´Â °æ¿ì group-writable) ³»¿¡ ÆÄÀÏÀ» ¸¸µé·Á°í ÇÏ¸é¼ mk*temp() ¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸·Á°í ÇÑ´Ù¸é (¿¹, ÆÄÀÏ À̸§ÀÌ ¿¹ÃøµÉ ¼ö ÀÖ°Ô ÇÏ·Á¸é) ´Ã open() ¿¡ O_CREAT ¿Í O_EXCL Ç÷¡±×¸¦ »ç¿ëÇÏ°í ¹Ýȯ°ªÀ» °Ë»çÇØ¶ó. open() È£ÃâÀ» ÇÒ ¼ö ¾ø´Ù¸é ¿ø·¡´ë·Î º¹±ÍÇØ¶ó (¿¹, exit). GNOME ÇÁ·Î±×·¡¹Ö ÁöħÀº °øÀ¯ (ÀÓ½Ã) µð·ºÅ丮¿¡ º¸¾È ¿ÀÇ Àӽà ÆÄÀϵ鿡 ´ëÇÑ ÆÄÀϽýºÅÛ °´Ã¼¸¦ »ý¼ºÇÒ ¶§ ´ÙÀ½ Äڵ带 ÃßõÇÑ´Ù[Quintero 2000]:
ºñº¸¾ÈÀûÀÎ tempnam(3) ÇÔ¼ö°¡ »ç¿ëµÇ°í ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í º¸¾È ¾àÁ¡¿¡ ´ëóÇϱâ À§ÇØ O_CREAT ¿Í O_EXCL À» »ç¿ëÇÏ¿© ·çÇÁ³»¿¡¼ wrapped µÊÀ» ÁÖ¸ñÇØ¶ó. ÆÄÀÏ À̸§À» free() ÇÒ Çʿ䰡 ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. ÀÛ¾÷À» ¸¶Ä£ ÈÄ ÆÄÀÏÀ» close() ¹× unlink() ÇØ¾ß ÇÑ´Ù. Ç¥ÁØ C I/O ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ±æ ¿øÇÑ´Ù¸é ÆÄÀÏ ±â¼úÀÚ¸¦ FILE * ·Î º¯È¯½Ã۱â À§ÇØ "w+b" ¸ðµå·Î fdopen() À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ Á¢±Ù ¹æ¹ýÀº ¿¹Àü NFS °¡ Á¤È®È÷ O_EXCL À» Áö¿øÇÏÁö ¾Ê±â ¶§¹®¿¡ NFS ¹öÀü 2 ¿¡¼´Â ÀÛµ¿µÇÁö ¾ÊÀ½À» ÁÖ¸ñÇØ¶ó. ÇѰ¡Áö Áß¿äÇÏÁö ¾ÊÀº ´ÜÁ¡Àº tempnam ÀÌ ºñº¸¾ÈÀûÀ¸·Î »ç¿ëµÉ ¼ö Àֱ⠶§¹®¿¡ ´Ù¾çÇÑ ÄÄÆÄÀÏ·¯¿Í º¸¾È ½ºÄ³³Ê°¡ ÀÌ »ç¿ë¿¡ ´ëÇØ °¡Â¥ °æ°í¸¦ ÁÙ ¼ö ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. ÀÌ·¯ÇÑ ¹®Á¦´Â mkstemp(3) ¿¡´Â ¾ø´Ù. ½© ½ºÅ©¸³Æ®¿¡¼ Àӽà ÆÄÀÏÀÌ ÇÊ¿äÇÏ´Ù¸é ÆÄÀÌÇÁ, Áö¿ª µð·ºÅ丮 (¿¹, »ç¿ëÀÚ È¨µð·ºÅ丮 ³»ºÎÀÇ ¾î¶² µð·ºÅ丮) ¶Ç´Â ¾î¶² °æ¿ì¿¡´Â ÇöÀç µð·ºÅ丮¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ¸¶ °¡Àå ÁÁ´Ù. ÀÌ·± ¹æ½Ä¿¡¼´Â »ç¿ëÀÚ°¡ Çã¿ëÇÏÁö ¾Ê´Â´Ù¸é ¾î¶°ÇÑ °øÀ¯ÇÏ´Â °Íµµ ¾ø´Ù. Á¤¸»·Î /tmp ¿Í °°Àº °øÀ¯ µð·ºÅ丮³»¿¡ Àӽà ÆÄÀÏÀ» ¿øÇϰųª/ÇÊ¿äÇÏ´Ù¸é ÅÛÇø´¿¡ ÇÁ·Î¼¼½º id ¸¦ »ç¿ëÇØ¼ ´ÜÁö ">" °°Àº ÀÏ¹Ý ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ÆÄÀÏÀ» »ý¼ºÇÏ´Â ÀüÅëÀûÀÎ ½© ±â¹ýÀ» »ç¿ëÇÏÁö ¸¶¶ó. ½© ½ºÅ©¸³Æ®°¡ PID ¸¦ ÁöÁ¤Çϱâ À§ÇØ "$$" ¸¦ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ PID ´Â µ¿ÀÏÇÑ À̸§À» °®´Â ÆÄÀÏ ¶Ç´Â ¸µÅ©¸¦ ¹Ì¸® »ý¼ºÇÒ ¼ö ÀÖ´Â °ø°ÝÀÚ¿¡ ÀÇÇØ ½±°Ô °áÁ¤ ¶Ç´Â ÃßÃøµÉ ¼ö ÀÖ´Ù. µû¶ó¼ ´ÙÀ½ÀÇ "ÀϹÝÀûÀÎ" ½© ½ºÅ©¸³Æ®´Â ¾ÈÀüÇÏÁö ¾Ê´Ù:
½© ½ºÅ©¸³Æ®¿¡ Àӽà ÆÄÀÏ ¶Ç´Â µð·ºÅ丮°¡ Çʿ䰡°í À̸¦ /tmp ¹Ø¿¡ ³õ±æ ¿øÇÑ´Ù¸é ½© ½ºÅ©¸³Æ®¿¡¼ »ç¿ëÇÒ ¸ñÀûÀ¸·Î ¸¸µé¾îÁø mktemp(1) °¡ ¾Æ¸¶µµ ÇØ°áÃ¥ÀÌ´Ù. mktemp(1) °ú mktemp(3) Àº ´Ù¸¥ ÇÔ¼öÀÓÀ» ÁÖ¸ñÇØ¶ó - ¾ÈÀüÇÑ ÇÔ¼ö´Â mktemp(1) ÀÌ´Ù. ¼ÖÁ÷È÷ ÀúÀÚ´Â °øÀ¯ µð·ºÅ丮¿¡ Àӽà ÆÄÀÏÀ» »ý¼ºÇÏ´Â ½© ½ºÅ©¸³Æ®¿¡ Èï¹Ì¸¦ ´À³¢Áö ¾Ê´Â´Ù; ±â¹Ð µð·ºÅ丮¿¡ ÀÌ·¯ÇÑ ÆÄÀÏÀ» »ý¼ºÇϰųª ´ë½Å ÆÄÀÌÇÁ¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÀϹÝÀûÀ¸·Î ¹Ù¶÷Á÷ÇÏ´Ù. ±×·¯³ª Á¤¸»·Î ÀÌ·¸°Ô ÇÏ°í ½Í´Ù¸é ´ÙÀ½À» »ç¿ëÇØ¶ó; mktemp(1) Àº ÅÛÇø´À» ÃëÇÑ ÈÄ O_EXCL À» »ç¿ëÇØ¼ ÆÄÀÏ ¶Ç´Â µð·ºÅ丮¸¦ »ý¼ºÇÏ°í ±× À̸§À» ¹ÝȯÇÑ´Ù; ÀÌ´Â O_EXCL À» »ç¿ëÇϱ⠶§¹®¿¡ µð·ºÅ丮°¡ NFS ¹öÀü 2 ¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é /tmp °°Àº °øÀ¯ µð·ºÅ丮¿¡ ´ëÇØ ¾ÈÀüÇÑ´Ù. ´ÙÀ½ Bourne ½© ½ºÅ©¸³Æ®¿¡¼ mktemp(1) À» Á¤È®È÷ »ç¿ëÇÑ ¿¹ÀÌ´Ù; ÀÌ ¿¹´Â mktemp(1) ¸Ç ÆäÀÌÁö¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù:
óÀ½¿¡ º¸¾ÈÀûÀÎ Àӽà ÆÄÀÏ À̸§À» ¾ò¾ú´Ù°í ÇÏ´õ¶óµµ ÀÌ À̸§À» Àç»ç¿ëÇÏÁö ¸¶¶ó (Á¦°ÅÇÑ ÈÄ ´Ù½Ã »ý¼ºÇضó). °ø°ÝÀÚ°¡ µÎ¹øÂ°·Î À̸¦ Àç»ý¼ºÇϱâ Àü¿¡ ¿ø·¡ ÆÄÀÏ À̸§À» º¸°í ÀÖ´Ù°¡ À̸¦ ³¬¾ÆÃ§ ¼ö ÀÖ´Ù. ¹°·Ð ´Ã ÀûÀýÇÑ ÆÄÀÏ Çã°¡±ÇÀ» »ç¿ëÇØ¶ó. ¿¹¸¦ µé¾î ÆÄÀÏ¿¡ world ¶Ç´Â group Á¢±ÙÀÌ ÇÊ¿äÇÏ´Ù¸é world/group Á¢±Ù¸¸ Çã¿ëÇØ¶ó ±×·¸Áö ¾Ê´Ù¸é 0600 ¸ðµå·Î À¯ÁöÇØ¶ó (Áï, ¼ÒÀ¯ÀÚ¸¸ÀÌ ÀÐ°í ¾µ ¼ö ÀÖ´Ù). µð·ºÅ丮 ¿£Æ®¸®´Â ¾ø¾îÁöÁö¸¸ À̸¦ °¡¸®Å°°í ÀÖ´Â ¸¶Áö¸· ÆÄÀÏ ±â¼úÀÚ°¡ ´ÝÈú ¶§±îÁö ÆÄÀÏ ÀÚü´Â Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï exit Çڵ鷯¸¦ »ç¿ëÇϰųª À¯´Ð½º ÆÄÀϽýºÅÛ ÀÇ¹Ì Ã¼°è »ç¿ë ¹× »ý¼º ÈÄ Áï°¢ÀûÀ¸·Î ÆÄÀÏÀ» unlink() ÇÔÀ¸·Î½á ½º½º·Î Á¤¸®Çضó. ÆÄÀÏ ±â¼úÀÚ¸¦ °Ç³×ÁÜÀ¸·Î½á ÇÁ·Î±×·¥³»¿¡¼ À̸¦ °è¼ÓÇØ¼ Á¢±ÙÇÒ ¼ö Àִµ¥ ÆÄÀÏÀ» unlinking ÇÏ´Â °ÍÀº ÄÚµå À¯Áö º¸¼ö¿¡ ¸¹Àº ÀåÁ¡ÀÌ ÀÖ´Ù: ÇÁ·Î±×·¥ÀÇ Å©·¡½Ã ¿©ºÎ¿¡ »ó°ü¾øÀÌ ÆÄÀÏÀº ÀÚµ¿ÀûÀ¸·Î Áö¿öÁø´Ù. Áï°¢ÀûÀÎ unlinking °ú °ü·ÃµÈ ÇѰ¡Áö »ç¼ÒÇÑ ¹®Á¦´Â °ü¸®ÀÚ°¡ ´Ü¼øÈ÷ À̸§¸¸À¸·Î ÆÄÀϽýºÅÛÀ» Á¶»çÇÒ ¼ö ¾ø±â ¶§¹®¿¡ °ü¸®ÀÚ°¡ ¾ó¸¶³ª ¸¹Àº µð½ºÅ© °ø°£ÀÌ »ç¿ëµÇ°í ÀÖ´ÂÁö º¸´Â °ÍÀ» ¾î·Æ°Ô ÇÑ´Ù´Â °ÍÀÌ´Ù. À¯´Ð½º °è¿ ½Ã½ºÅÛÀÇ ÄÚµå´Â TMP ¶Ç´Â TMPDIR ȯ°æº¯¼ö °ªµéÀÇ Á¦°øÀÚ°¡ ½Å·ÚµÈ´Ù¸é À̵éÀ» Ä§ÇØÇÏÁö ¾ÊÀ½À» º¸ÁõÇÏ´Â °ÍÀ» °í·ÁÇÒ ¼ö ÀÖ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á »ç¿ëÀÚ°¡ ±×µéÀÇ Àӽà ÆÄÀÏÀ» ±×µéÀÇ È¨µð·ºÅ丮³» ÇϺεð·ºÅ丮¿Í °°Àº ºñ°øÀ¯µð·ºÅ丮·Î À̵¿ÇÏ´Â °ÍÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. ÃÖ±Ù Bastille ¹öÀü¿¡¼´Â »ç¿ëÀڵ鰣ÀÇ °øÀ¯¸¦ Á¦ÇÑÇϱâ À§ÇØ ÀÌ·¯ÇÑ º¯¼öµéÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ºÒÇàÈ÷ ¸¹Àº »ç¿ëÀÚµéÀº TMP ¶Ç´Â TMPDIR À» /tmp ¿Í °°Àº °øÀ¯ µð·ºÅ丮·Î ¼³Á¤Çϴµ¥ µû¶ó¼ ÀÌ·¯ÇÑ È¯°æ º¯¼ö°¡ ¼³Á¤µÈ´Ù ÇÏ´õ¶óµµ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ Á¤È®È÷ Àӽà ÆÄÀÏÀ» »ý¼ºÇØ¾ß ÇÑ´Ù. ÀÌ´Â GNOME Á¢±Ù ¹æ¹ýÀÇ ÀåÁ¡ ÁßÀÇ Çϳª·Î Àû¾îµµ ¾î¶² ½Ã½ºÅÛ¿¡¼ tempnam(3) ÀÌ ÀÚµ¿ÀûÀ¸·Î TMPDIR À» »ç¿ëÇÏ´Â ¹Ý¸é mkstemp(3) Á¢±Ù ¹æ¹ýÀº À̸¦ Çϱâ À§ÇØ ´õ¿í ¸¹Àº Äڵ带 ÇÊ¿ä·Î Çϱ⠶§¹®ÀÌ´Ù. Àӽà µð·ºÅ丮¸¦ À§ÇØ ´õ¿í ¸¹Àº ȯ°æ º¯¼öµé (TEMP ¿Í °°Àº) À» »ý¼ºÇÏÁö ¾Ê±â¸¦ ¹Ù¶ó¸ç ƯÈ÷ °¢°¢ÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇØ ´Ù¸¥ ȯ°æ À̸§À» »ý¼ºÇÏÁö ¾Ê±â¸¦ ¹Ù¶õ´Ù (¿¹, MYAPP_TEMP ¸¦ »ç¿ëÇÏÁö ¸¶¶ó). ÀÌ·¸°Ô ÇÏ´Â °ÍÀº ½Ã½ºÅÛ °ü¸®¸¦ ±²ÀåÈ÷ º¹ÀâÇÏ°Ô Çϴµ¥ ƯÁ¤ ¾ÖÇø®ÄÉÀ̼ÇÀ» À§ÇØ Æ¯º° Àӽà µð·ºÅ丮¸¦ ¿øÇÏ´Â »ç¿ëÀÚ´Â ±× ¾ÖÇø®ÄÉÀ̼ÇÀ» ¿î¿ëÇÒ ¶§¿¡ ÇÑÇØ ȯ°æ º¯¼ö¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ÀÌ·¯ÇÑ È¯°æ º¯¼ö°¡ ½Å·ÚµÇÁö ¾ÊÀº ¼Ò½º¿¡ ÀÇÇØ ¼³Á¤µÈ´Ù¸é À̵éÀ» ¹«½ÃÇØ¾ß ÇÑ´Ù - 4.2.3절 ÀÇ Ãæ°í¸¦ µû¸¥´Ù¸é ¾î¶² ¹æ½ÄÀ¸·Îµç ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ±â¹ýÀº Àӽà µð·ºÅ丮°¡ NFS ¹öÀü 2 (NFSv2) ¸¦ »ç¿ëÇØ¼ ¿ø°ÝÀûÀ¸·Î ¸¶¿îÆ®µÈ´Ù¸é ÀÛµ¿ÇÏÁö ¾Ê´Âµ¥ NFSv2 °¡ O_EXCL À» ÀûÀýÈ÷ Áö¿øÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 6.8.2.1절 À» º¸¶ó. NFS ¹öÀü 3 ÀÌ»óÀº O_EXCL À» ÀûÀýÈ÷ Áö¿øÇÑ´Ù; °£´ÜÇÑ ÇØ°á ¹æ¹ýÀº Àӽà µð·ºÅ丮°¡ ·ÎÄÃÀ̰ųª NFS ¸¦ »ç¿ëÇØ ¸¶¿îÆ®µÈ °æ¿ì NFS ¹öÀü 3 ÀÌ»óÀ» »ç¿ëÇØ¼ ¸¶¿îÆ®µÇ´Â Áö¸¦ º¸ÁõÇÏ´Â °ÍÀÌ´Ù. NFS v2 ¿¡¼ link(2) ¿Í stat(2) ¸¦ »ç¿ëÇÔÀ¸·Î½á ¾ÈÀüÇÏ°Ô Àӽà ÆÄÀÏÀ» »ý¼ºÇÏ´Â ±â¹ýÀÌ ÀÖÁö¸¸ º¹ÀâÇÏ´Ù; ÀÌ¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 6.8.2.1절 À» º¸¶ó. ¿©´ãÀ¸·Î FreeBSD °¡ ÆÄÀÏÀ̸§ÀÇ PID ÄÄÆ÷³ÍÆ® Á¦°Å ¹× Àüü¸¦ base-62 ÀÎÄÚµå randomness ·Î ´ëüÇϱâ À§ÇØ mk*tem() °è¿ ÇÔ¼ö¸¦ ÃÖ±Ù¿¡ º¯°æÇßÀ½À» ¾ð±ÞÇÏ´Â °ÍÀº °¡Ä¡°¡ ÀÖ´Ù. ÀÌ´Â °ú°¨ÇÏ°Ô 6 X ÀÇ µðÆúÆ® »ç¿ë¹ý¿¡ ´ëÇØ °¡´ÉÇÑ Àӽà ÆÄÀÏÀÇ ¼ö¸¦ Áõ°¡½ÃŰ¸ç ¸Å¿ì ºó¹øÈ÷ »ç¿ëÇÏ´Â °æ¿ì¸¦ Á¦¿ÜÇϰí´Â 6 X ¸¦ °®´Â mktemp(3) °¡ ÃßÃø¿¡ ÇÕ¸®ÀûÀ¸·Î (Åë°èÀûÀ¸·Î) º¸¾ÈÀûÀÓÀ» ÀǹÌÇÑ´Ù. ±×·¯³ª ÀÌ ¹®¼ÀÇ ÁöħÀ» µû¸¥´Ù¸é ¹®Á¦¸¦ Á¦°ÅÇÒ ¼ö ÀÖ´Ù. Àӽà ÆÄÀÏ¿¡ ´ëÇÑ ÀÌ Á¤º¸ÀÇ ¸¹Àº ºÎºÐÀº Kris Kennaway's posting to Bugtraq about temporary files on December 15, 2000 ¿¡¼ À¯·¡ÇÑ´Ù. 6.8.2. ·ÎÅ·ÇÁ·Î±×·¥ÀÌ ÆÄÀÏ, µð¹ÙÀ̽º ¹×/¶Ç´Â Ưº°ÇÑ ¼¹ö ÇÁ·Î¼¼½º¿¡ ´ëÇØ À¯ÀÏÇÑ ±ÇÇÑÀ» °®À½À» º¸ÀåÇØ¾ßÇÏ´Â »óȲÀÌ Á¾Á¾ ÀÖ´Ù. ÀÚ¿øÀ» Àá±×´Â ¸ðµç ½Ã½ºÅÛÀº ÇÁ·Î±×·¥ÀÌ ·ÎÅ© (lock) ¸¦ Á¤¸®ÇÏÁö ¸øÇÑ´Ù¸é ·ÎÅ©, ´õ ÀÚ¼¼È÷ ¸»ÇÏ¸é ±³Âø »óÅ (deadlocks("deadly embraces")), livelocks ¿Í releasing "stuck" ·ÎÅ©µéÀÇ Ç¥ÁØÀûÀÎ ¹®Á¦¸¦ ´Ù·ï¾ß ÇÑ´Ù. ±³Âø »óÅ´ ÇÁ·Î±×·¥µéÀÌ ÀÚ¿øµéÀ» ÇØÁ¦Çϱâ À§ÇØ ¼·Î ±â´Ù¸®¸é¼ ±³ÂøµÇ¾î ÀÖ´Ù¸é ÀϾ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ±³Âø »óÅ´ ÇÁ·Î¼¼½º 1 ÀÌ ÀÚ¿ø A ¸¦ ·ÎÅ©Çϸç ÀÚ¿ø B ¸¦ ±â´Ù¸®´Â ¹Ý¸é ÇÁ·Î¼¼½º 2 ´Â ÀÚ¿ø B ¸¦ ·ÎÅ©Çϸç ÀÚ¿ø A ¸¦ ±â´Ù¸®°í ÀÖ´Ù¸é ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ¸¹Àº ±³Âø »óÅ´ ´ÙÁß ÀÚ¿øÀ» ·ÎÅ©ÇÏ´Â ¸ðµç ÇÁ·Î¼¼½ºµé¿¡°Ô ±×µéÀ» µ¿ÀÏÇÑ ¼ø¼ (¿¹, ¾ËÆÄºª À̸§¼øÀ¸·Î) ·Î ·ÎÅ©Çϵµ·Ï ¿ä±¸ÇÔÀ¸·Î½á ¿¹¹æµÉ ¼ö ÀÖ´Ù. 6.8.2.1. ·ÎÅ©·Î¼ ÆÄÀÏ »ç¿ëÀ¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼ ÀÚ¿ø ·ÎÅ· (Àá±Ý, locking) Àº ÀüÅëÀûÀ¸·Î ·ÎÅ©¸¦ ÁöÁ¤ÇÏ´Â ÆÄÀÏÀ» »ý¼ºÇÔÀ¸·Î½á ÀüÅëÀûÀ¸·Î ÀÌ·ç¾îÁ³´Âµ¥ ÀÌ·¯ÇÑ ¹æ¹ýÀÌ ¸Å¿ì À̽ļºÀÌ ³ô±â ¶§¹®ÀÌ´Ù. ÀÌ´Â °ü¸®ÀÚ°¡ ¾î¶² ·ÎÅ©°¡ ¼³Á¤µÇ¾ú´ÂÁö º¸±â À§ÇØ ´ÜÁö ÆÄÀϽýºÅÛ¸¸ °Ë»çÇÏ¸é µÇ±â ¶§¹®¿¡ ±³ÂøµÈ ·ÎÅ©¸¦ Á¤¸®ÇÏ´Â °ÍÀ» ½±°Ô ÇÑ´Ù. ±³ÂøµÈ ·ÎÅ©´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇà ÈÄ Á¤¸®Çϴµ¥ ½ÇÆÐÇϰųª (¿¹, Å©·¡½Ã ¶Ç´Â ¿À±â´É (malfunctioned)) Àüü ½Ã½ºÅÛÀÌ Á¤ÁöÇ߱⠶§¹®¿¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. À̵éÀÌ ±Ç°í (advisory) ·ÎÅ© (°Á¦ (mandatory) ·ÎÅ©°¡ ¾Æ´Ñ) ÀÓÀ» ÁÖ¸ñÇØ¶ó - ¸ðµç ÇÁ·Î¼¼½º´Â ÀÚ¿øÀÌ ÀÌ·¯ÇÑ ·ÎÅ©¸¦ »ç¿ëÇϱâ À§ÇØ Çù·ÂÇØ¾ß ÇÔÀ» ÇÊ¿ä·ÎÇÑ´Ù. ±×·¯³ª ÇÇÇÒ ¼ö ÀÖ´Â ¸î¸î ¼ÓÀÓ¼ö°¡ ÀÖ´Ù. ù¹øÂ° creat() ÇÔ¼ö È£Ãâ ¶Ç´Â ÆÄÀÏ ¸ðµå¸¦ 0 À¸·Î ¼³Á¤Çϰí (Çã°¡±Ç ¾øÀ½) O_WRONLY | O_CREAT | O_TRUNC open() ¸ðµåÀÎ open() µî°¡ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â À¯´Ð½º C ÇÁ·Î±×·¥ÀÇ ¸Å¿ì ¿À·¡µÈ ±â¹ýÀ» »ç¿ëÇÏÁö ¸¶¶ó. ÀϹÝÀûÀÎ ÆÄÀϽýºÅÛ¿¡¼ ÀÏ¹Ý »ç¿ëÀÚ¿¡°Ô ÀÌ´Â ÀÛµ¿ÇÏÁö¸¸ »ç¿ëÀÚ°¡ ·çÆ® ±ÇÇÑÀ» °¡Áú ¶§ ÆÄÀÏÀ» ·ÎÅ©ÇÒ ¼ö ¾ø´Ù. ·çÆ®´Â ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÒ ¶§¶óµµ ´Ã ÀÌ ¿¬»êÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù. »ç½Ç ¿À·¡µÈ À¯´Ð½º ¹öÀüµéÀº ¿À·¡µÈ ¿¡µðÅÍ "ed" ¿¡ ÀÌ·¯ÇÑ Æ¯º°ÇÑ ¹®Á¦¸¦ °®°í ÀÖ´Ù -- Áõ»óÀº ¶§¶§·Î ÆÐ½º¿öµå ÆÄÀÏÀÇ ÀϺκÐÀÌ »ç¿ëÀÚ ÆÄÀϳ»¿¡ ³õÀÏ ¼ö ÀÖ´Â °ÍÀÌ´Ù [Rochkind 1985, 22]. ´ë½Å Áö¿ªÀû ÆÄÀϽýºÅÛ¿¡¼ ÇÁ·Î¼¼½º¿¡ ´ëÇÑ ·ÎÅ©¸¦ »ý¼ºÇÏ·Á¸é O_WRONLY | O_CREAT | O_EXCL Ç÷¡±×¸¦ °®°í open() À» »ç¿ëÇÒ ¼ö ÀÖ´Ù (µ¿ÀÏÇÑ ¼ÒÀ¯ÀÚÀÇ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ ·ÎÅ©¸¦ ÇÒ ¼ö ¾øµµ·Ï Çã°¡±ÇÀº ¾ø´Ù). µ¶Á¡ÀûÀÎ ÆÄÀÏÀ» »ý¼ºÇÏ´Â °ø½ÄÀûÀÎ ¹æ½ÄÀÎ O_EXCL ÀÇ »ç¿ëÀ» ÁÖ¸ñÇØ¶ó; ÀÌ´Â ·ÎÄà ÆÄÀϽýºÅÛ¿¡¼ ·çÆ®¿¡ ´ëÇØ¼µµ ÀÛ¿ëÇÑ´Ù [Rochkind 1985, 27]. µÎ¹øÂ° ·ÎÅ© ÆÄÀÏÀÌ NFS ·Î ¸¶¿îÆ®µÈ ÆÄÀϽýºÅÛ¿¡ ÀÖ´Ù¸é NFS ¹öÀü 2 °¡ ÀÏ¹Ý ÆÄÀÏ ÀÇ¹Ì Ã¼°è¸¦ ¿Ïº®È÷ Áö¿øÇÏÁö ¾Ê´Â´Ù´Â ¹®Á¦¸¦ °®´Â´Ù. À̴ Ŭ¶óÀÌ¾ðÆ®¿¡ ·ÎÄÃÀ̶ó°í °£ÁֵǴ ÀÛ¾÷¿¡ ´ëÇØ¼µµ ¹®Á¦°¡ µÇ´Âµ¥ ¾î¶² Ŭ¶óÀÌ¾ðÆ®°¡ ·ÎÄà µð½ºÅ©¸¦ °®Áö ¸øÇÏ°í ¸ðµç ÆÄÀÏÀÌ NFS ¸¦ ÅëÇØ ¿ø°ÝÀûÀ¸·Î ¸¶¿îÆ®µÉ ¼öµµ Àֱ⠶§¹®ÀÌ´Ù. open(2) ¸Þ´º¾óÀº ÀÌ·± °æ¿ì ó¸® ¹æ¹ýÀ» ¼³¸íÇÑ´Ù (·çÆ® ÇÁ·Î±×·¥ÀÇ °æ¿ìµµ ¶ÇÇÑ ´Ù·é´Ù): ""·ÎÅ· ŽºÅ©¸¦ ¼öÇàÇϱâ À§ÇØ [open(2) ÀÇ O_CREAT ¿Í O_EXCL Ç÷¡±×] ¿¡ ÀÇÁ¸ÇÏ´Â ÇÁ·Î±×·¥µéÀº °æÀï »óŸ¦ Æ÷ÇÔÇÒ °ÍÀÌ´Ù. ·ÎÅ©ÆÄÀÏÀ» »ç¿ëÇØ¼ ¿øÀÚÀû ÆÄÀÏ ·ÎÅ·À» ¼öÇàÇϱâ À§ÇÑ ÇØ°á ¹æ¾ÈÀº µ¿ÀÏ ÆÄÀϽýºÅÛ¿¡¼ À¯ÀÏÇÑ ÆÄÀÏÀ» »ý¼ºÇϰí (¿¹, È£½ºÆ®³×ÀÓ°ú pid ¸¦ º´ÇÕ), ·ÎÅ©ÆÄÀÏ¿¡ ´ëÇÑ ¸µÅ©¸¦ ¸¸µé±â À§ÇØ link(2) ¸¦ »ç¿ëÇÑ ÈÄ ±× ¸µÅ© Ä«¿îÆ®°¡ 2 ·Î Áõ°¡µÇ¾ú´ÂÁö °Ë»çÇϱâ À§ÇØ À¯ÀÏÇÑ ÆÄÀÏ¿¡ stat(2) ¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. link(2) È£ÃâÀÇ ¹Ýȯ°ªÀ» »ç¿ëÇÏÁö ¸¶¶ó" " ¸í¹éÈ÷ ÀÌ ÇØ°á¹æ¾ÈÀº ·ÎÅ·À» ÇÏ´Â ¸ðµç ÇÁ·Î±×·¥ÀÌ Çùµ¿ÇÏ°í ¸ðµç Çùµ¿ÇÏÁö ¾Ê´Â ÇÁ·Î±×·¥µéÀÇ °£¼·ÀÌ Çã¿ëµÇÁö ¾Ê´Â °æ¿ì¿¡¸¸ ÀÛ¿ëÇÑ´Ù. ƯÈ÷ ÆÄÀÏ ·ÎÅ·À» À§ÇØ »ç¿ëÇϰí ÀÖ´Â µð·ºÅ丮´Â ÆÄÀÏ »ý¼º ¹× Á¦°Å¸¦ À§ÇÑ Çã¿ëµÈ ÆÄÀÏ Çã°¡±ÇÀ» °¡Á®¼´Â ¾ÈµÈ´Ù. NFS ¹öÀü 3 Àº open(2) ¿¡ O_EXCL ¸ðµå¿¡ ´ëÇÑ Áö¿øÀÌ Ãß°¡ÇÏ¿´´Ù; IEFT RFC 1813 À» º¸¶ó ƯÈ÷ "CREATE" ÀÇ "mode" Àμö¿¡ ´ëÇÑ "EXCLUSIVE" °ªÀ» º¸¶ó. ½½ÇÁ°Ôµµ ¸ðµç »ç¶÷ÀÌ ÀÌ ¹®¼¸¦ ÀÛ¼ºÇÏ´Â ½ÃÁ¡¿¡ NFS ¹öÀü 3 ÀÌ»óÀ¸·Î ÀüȯÇÏÁö ¾Ê¾ÒÀ¸¸ç µû¶ó¼ À̽ļºÀÖ´Â ÇÁ·Î±×·¥¿¡¼´Â ¾ÆÁ÷±îÁö ÀÌ¿¡ ÀÇÁ¸ÇÒ ¼ö ¾ø´Ù. °á±¹Àº ÀÌ ¹®Á¦´Â ¾ø¾îÁú °ÍÀÌ´Ù. µð¹ÙÀ̽º ¶Ç´Â ·ÎÄà ¸Ó½Å¿¡¼ ÇÁ·Î¼¼½ºÀÇ Á¸À縦 ·ÎÅ·ÇÏ·Á¸é Ç¥ÁØÀûÀÎ ÇÕÀǸ¦ »ç¿ëÇϵµ·Ï ÇØ¶ó. ÀúÀÚ´Â FHS ¸¦ »ç¿ëÇϱ⸦ ÃßõÇÑ´Ù; ÀÌ´Â ¸®´ª½º ½Ã½ºÅÛ¿¡ ÀÇÇØ ³Î¸® ÂüÁ¶µÇ°í ÀÖÀ¸¸ç ¶ÇÇÑ ´Ù¸¥ À¯´Ð½º °è¿ ½Ã½ºÅÛÀÇ °³³äÀ» º´ÇÕÇÏ·Á°í Çϰí ÀÖ´Ù. FHS ´Â ÆÄÀϵ鿡 ´ëÇÑ ÆÄÀÏ ³×À̹Ö, À§Ä¡ ¹× Ç¥ÁØ ÄÁÅÙÃ÷¸¦ Æ÷ÇÔÇØ¼ ÆÄÀÏ ·ÎÅ· µî¿¡ ´ëÇØ Ç¥ÁØÀûÀÎ ÇÕÀǸ¦ ±â¼úÇÑ´Ù [FHS 1997]. ¼¹ö°¡ ÁÖ¾îÁø ¸Ó½Å¿¡¼ Çѹø ÀÌ»ó ½ÇÇàµÇÁö ¾Ê¾ÒÀ½À» È®ÀÎÇÏ·Á ÇÑ´Ù¸é º¸Åë ÄÁÅÙÃ÷¿Í °°ÀÌ pid ¸¦ °®´Â /var/run/NAME.pid ÇÁ·Î¼¼½º ½Äº°ÀÚ¸¦ »ý¼ºÇØ¾ß ÇÑ´Ù. µ¿ÀÏ ¸Æ¶ôÀ¸·Î µð¹ÙÀ̽º ·ÎÅ© ÆÄÀÏ µîÀ» À§ÇØ ·ÎÅ© ÆÄÀÏÀ» /var/lock ¹Ø¿¡ ³õ¾Æ¾ß ÇÑ´Ù. ÀÌ Á¢±Ù ¹æ¹ýÀº ÇÁ·Î±×·¥ÀÌ °©ÀÚ±â Á¤ÁöÇÏ´Â °æ¿ì ÆÄÀϵéÀÌ ¾µµ¥¾øÀÌ ½Ã°£À» º¸³»°Ô ÇÏ´Â ´ÜÁ¡ÀÌ ÀÖÁö¸¸ À̴ ǥÁØÀûÀÎ ÇÕÀÇ·Î ´Ù¸¥ ½Ã½ºÅÛ µµ±¸¿¡ ÀÇÇØ ½±°Ô ´Ù·ïÁø´Ù. ·ÎÅ©¸¦ ³ªÅ¸³»±â À§ÇØ ÆÄÀÏ »ç¿ë¿¡ Çùµ¿Çϰí ÀÖ´Â ÇÁ·Î±×·¥µéÀº µ¿ÀÏÇÑ µð·ºÅ丮 À̸§¸¸ÀÌ ¾Æ´Ï¶ó µ¿ÀÏÇÑ µð·ºÅ丮¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. ÀÌ´Â ³×Æ®¿öÅ©ÈµÈ ½Ã½ºÅÛ¿¡ °ü·ÃµÈ ¹®Á¦ÀÌ´Ù. FHS ´Â ¸í½ÃÀûÀ¸·Î /var/run °ú /var/lock ´Â °øÀ¯ÇÒ ¼ö ¾ø´Â ¹Ý¸é /var/mail Àº °øÀ¯ÇÒ ¼ö ÀÖ´Ù°í ¾ð±ÞÇÑ´Ù. µû¶ó¼ ÇϳªÀÇ ¸Ó½Å¿¡¼ ·ÎÅ©°¡ ÀÛµ¿ÇÏ±æ ¿øÇÏÁö¸¸ ´Ù¸¥ ¸Ó½ÅÀ» °£¼·ÇÏÁö ¾Ê±æ ¿øÇÑ´Ù¸é /var/run °ú °°Àº °øÀ¯ÇÒ ¼ö ¾ø´Â µð·ºÅ丮¸¦ »ç¿ëÇØ¶ó (¿¹, °¢ ¸Ó½Å¿¡°Ô ÀÚ½ÅÀÇ ¼¹ö¸¦ ±¸µ¿Çϵµ·Ï Çã¿ëÇÏ±æ ¿øÇÏ´Â °æ¿ì). ±×·¯³ª ³×Æ®¿öÅ©¿¡¼ ÆÄÀÏÀ» °øÀ¯ÇÏ´Â ¸ðµç ¸Ó½ÅµéÀÌ ·ÎÅ©¸¦ µû¸£±æ ¿øÇÑ´Ù¸é °øÀ¯Çϰí ÀÖ´Â µð·ºÅ丮¸¦ »ç¿ëÇÒ Çʿ䰡 ÀÖ´Ù; /var/mail ÀÌ ÀÌ·¯ÇÑ À§Ä¡ÀÌ´Ù. ÀÌ ÁÖÁ¦¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾ò±â À§Çؼ´Â FHS ÀýÀ» º¸¶ó. 6.8.2.2. ·ÎÅ·¿¡ ´ëÇÑ ´Ù¸¥ Á¢±Ù ¹æ¹ý¹°·Ð ·ÎÅ©¸¦ ³ªÅ¸³»±â À§ÇØ ÆÄÀÏÀ» »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø´Ù. ³×Æ®¿öÅ© ¼¹öµéÀº ´ë°³ ½Å°æ¾µ Çʿ䰡 ¾ø´Ù: ´ÜÁö Æ÷Æ®¿¡ ¹ÙÀεùÇÑ´Ù´Â °Í¸¸ÀÌ ÀÏÁ¾ÀÇ ·ÎÅ©·Î¼ ÀÛ¿ëÇϴµ¥ ÁÖ¾îÁø Æ÷Æ®¿¡ ¹Ù¿îµåµÈ ±âÁ¸ ¼¹ö°¡ ÀÖ´Ù¸é ¾î¶°ÇÑ ´Ù¸¥ ¼¹öµµ ÀÌ Æ÷Æ®¿¡ ¹ÙÀεù ÇÒ ¼ö ¾ø±â ¶§¹®ÀδÙ. ·ÎÅ·¿¡ ´ëÇÑ ´Ù¸¥ Á¢±Ù ¹æ¹ýÀº "discretionary lock" ·Î¼ fcntl(2) ¸¦ ÅëÇØ ±¸ÇöµÈ POSIX ·¹ÄÚµå ·ÎÅ©¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â ÀÓÀÇ·Î, Áï À̸¦ »ç¿ëÇÏ´Â °ÍÀº ·ÎÅ©¸¦ ÇÊ¿ä·Î ÇÏ´Â ÇÁ·Î±×·¥µéÀÇ Çùµ¿À» ÇÊ¿ä·Î ÇÑ´Ù ( ·ÎÅ©¸¦ ³ªÅ¸³»±â À§ÇØ ÆÄÀÏÀ» »ç¿ëÇÏ´Â Á¢±Ù¹æ¹ý°ú ¸¶Âù°¡Áö·Î). POSIX ·¹ÄÚµå ·ÎÅ©¸¦ ÃßõÇÏ´Â ¸¹Àº ÀÌÀ¯°¡ ÀÖ´Ù: POSIX ·¹ÄÚµå ·ÎÅ·Àº °ÅÀÇ ¸ðµç À¯´Ð½º °è¿ Ç÷§Æû (POSIX 1 ¿¡ ÀÇÇØ °Á¦ÀûÀ¸·Î ¿ä±¸µÇ´Â) ¿¡¼ Áö¿øµÇ¸ç, Àüü ÆÄÀϸ¸ÀÌ ¾Æ´Ñ ÆÄÀÏÀÇ ÀϺκÐÀ» ·ÎÅ©ÇÒ ¼ö ÀÖÀ¸¸ç ¶ÇÇÑ Àбâ¿Í ¾²±â ·ÎÅ©°£ÀÇ Â÷À̸¦ ´Ù·ê ¼ö ÀÖ´Ù. ´õ¿í À¯¿ëÇÑ °ÍÀº ÇÁ·Î¼¼½º°¡ ¼Ò¸êÇϸé ÀÌ ÇÁ·Î¼¼½ºÀÇ ·ÎÅ©µµ ÀÚµ¿ÀûÀ¸·Î Á¦°ÅµÈ´Ù´Â °ÍÀ¸·Î ÀÌ´Â º¸Åë ¿øÇÏ´Â »çÇ×ÀÌ´Ù. System V ÀÇ mandatory ·ÎÅ· ½ºÅ´¿¡ ±âÃÊÇÑ °Á¦ ·ÎÅ©µµ ¶ÇÇÑ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ´ÜÁö ·ÎÅ©µÈ ÆÄÀÏÀÇ setgid ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖÁö¸¸ ±×·ìÀÇ ½ÇÇà ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀº ÆÄÀϸ¸¿¡ Àû¿ëµÈ´Ù. ¶ÇÇÑ °Á¦ ÆÄÀÏ ·ÎÅ©¸¦ Çã¿ëÇϱâ À§ÇØ ÆÄÀϽýºÅÛÀ» ¸¶¿îÆ®ÇØ¾ß ÇÑ´Ù. ÀÌ·± °æ¿ì ¸ðµç read(2) ¿Í write(2) ´Â ·ÎÅ·À» À§ÇØ °Ë»çµÈ´Ù; ÀÌ´Â ±Ç°í ·ÎÅ©º¸´Ù ´õ¿í öÀúÇÏÁö¸¸ ´õ¿í ´À¸®´Ù. ¶ÇÇÑ °Á¦ ·ÎÅ©´Â ´Ù¸¥ À¯´Ð½º °è¿ ½Ã½ºÅÛÀ¸·Î ³Î¸® À̽ĵÇÁö´Â ¾Ê´Â´Ù (¸®´ª½º¿Í System V ¿¡ ±âÃÊÇÑ ½Ã½ºÅÛ¿¡¼´Â »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ´Ù¸¥ ½Ã½ºÅÛ¿¡¼´Â ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù). ·çÆ® ±ÇÇÑÀ» °®´Â ÇÁ·Î¼¼½º´Â °Á¦ ·ÎÅ©¿¡ ÀÇÇØ ¶ÇÇÑ Á¤ÁöµÉ ¼ö ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. ÀÌ´Â ¼ºñ½º ºÎÀÎ °ø°ÝÀÇ ±âÃʰ¡ µÉ ¼ö ÀÖ°Ô²û ÇÑ´Ù. 6.9. ´ÜÁö ½Å·ÚÇÒ ¼ö Àִ ü³Î¸¸ ½Å·ÚÇØ¶óÀϹÝÀûÀ¸·Î ½Å·ÚÇÒ ¼ö Àִ ä³Î·ÎºÎÅÍÀÇ Á¤º¸ (ÀÔ·Â ¹× °á°ú) ¸¸À» ½Å·ÚÇØ¶ó. ¿¹¸¦ µé¾î getlogin(3) ¹× ttyname(3) Àº Áö¿ª »ç¿ëÀÚ¿¡ ÀÇÇØ Á¦¾îµÉ ¼ö ÀÖ´Â Á¤º¸¸¦ ¹ÝȯÇϴµ¥ µû¶ó¼ º¸¾È ¸ñÀû¿¡ ¸Â°Ô À̵éÀ» ½Å·ÚÇÏÁö ¸¶¶ó. ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ ³×Æ®¿öÅ© (¹× ´ë°³ ÀÎÅͳÝÀÇ °æ¿ì) ¿¡¼ ÀÎÁõ¹ÞÁö ¸øÇÑ Àü¼ÛÀº ½Å·ÚÇÒ ¼ö ¾ø´Ù. ¿¹¸¦ µé¾î ÀÎÅͳÝÀ» ÅëÇØ Àü¼ÛµÇ´Â ÆÐŶÀº Àü¼ÛÁß ¾ðÁ¦¶óµµ º¼ ¼ö ÀÖ°í ¼öÁ¤µÉ ¼ö ÀÖÀ¸¸ç ÀÓÀÇÀÇ »õ·Î¿î ÆÐŶÀÌ º¯Á¶µÉ ¼öµµ ÀÖ´Ù. ÀÌ·¯ÇÑ º¯Á¶µÈ ÆÐŶÀº ¸Ó½Å (IP) ÁÖ¼Ò ¹× Æ÷Æ®¿Í °°Àº ¼Û½ÅÀÚ ¶ÇÇÑ ¼öÁøÀÚ¿¡ ´ëÇÑ º¯Á¶µÈ Á¤º¸¸¦ Æ÷ÇÔÇÒ ¼öµµ ÀÖ´Ù. µû¶ó¼ À̵éÀ» (°¡·É ¾Ïȣȸ¦ »ç¿ëÇØ) ÀÎÁõÇÒ ¼ö ¾ø´Ù¸é ÀÌ·¯ÇÑ °ªµéÀ» º¸¾È °áÁ¤À» À§ÇÑ ±Ùº»ÀûÀÎ ±âÁØÀ¸·Î »ç¿ëÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. À̴ Ưº°ÇÑ »óȲÀ» Á¦¿ÜÇϰí´Â TCP/IP ¿¡¼ »ç¿ëÀÚ ÀÎÁõÀ» ÇÏ´Â µÎ °¡Áö ¿¹Àü ¹æ¹ýÀÌ À¯ÀÏÇÑ ÀÎÁõ ±â±¸·Î »ç¿ëµÉ ¼ö ¾øÀ½À» ÀǹÌÇÑ´Ù. ÇÑ ¹æ¹ýÀº µ¥ÀÌŸ ÆÐŶ³»ÀÇ ``from" ¸Ó½Å ÁÖ¼Ò¸¦ °Ë»çÇÔÀ¸·Î½á »ç¿ëÀÚ¸¦ ``ƯÁ¤ ¸Ó½Å"À¸·Î Á¦ÇÑÇÏ´Â °ÍÀÌ´Ù; ´Ù¸¥ ¹æ¹ýÀº ¼Û½ÅÀÚ°¡ ``½Å·ÚµÈ" Æ÷Æ® ³Ñ¹ö (1024º¸´Ù ÀÛÀº ³Ñ¹ö) ¸¦ »ç¿ëÇϵµ·Ï ÇÔÀ¸·Î½á Á¢±ÙÀ» Á¦ÇÑÇÏ´Â °ÍÀÌ´Ù. ¹®Á¦´Â ¸¹Àº ȯ°æ¿¡¼ °ø°ÝÀÚ°¡ ÀÌ·¯ÇÑ °ªµéÀ» º¯Á¶ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¾î¶² ȯ°æ¿¡¼´Â ÀÌ·¯ÇÑ °ªµéÀ» (¼Û½ÅÇÏ´Â ¸Ó½Å ÁÖ¼Ò ¹×/¶Ç´Â Æ÷Æ®) À» °Ë»çÇÏ´Â °ÍÀÌ »ó´çÈ÷ À¯¿ëÇÒ ¼ö Àִµ¥ µû¶ó¼ ÇÁ·Î±×·¥¿¡¼ ¿É¼ÇÀ¸·Î ±×·¯ÇÑ °Ë»ç¸¦ Áö¿øÇÏ´Â °ÍÀÌ ³ª»Û °³³äÀº ¾Æ´Ï´Ù. ¿¹¸¦ µé¾î ½Ã½ºÅÛÀÌ ¹æÈº®µÚ¿¡¼ ÀÛµ¿Çϰí ÀÖ°í ¹æÈº®ÀÌ ÆÄ±«µÇ°Å³ª ¿ìȸµÉ ¼ö ¾ø°í ¹æÈº®ÀÌ ³»ºÎ·ÎºÎÅÍ ¿Ô´Ù°í ÁÖÀåÇÏ´Â ¿ÜºÎ ÆÐŶÀ» ¸·À» ¼ö ÀÖ´Ù¸é ³»ºÎ·ÎºÎÅÍ ¿Ô´Ù°í ¸»ÇÏ´Â ¸ðµç ÆÐŶÀº ½ÇÁ¦·Î ³»ºÎ¿¡¼ ¿Ô´Ù°í ÁÖÀåÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÆÐŶÀÌ ¿Ô´Ù°í ÁÖÀåÇÏ´Â ¸Ó½ÅÀ¸·ÎºÎÅÍ ½ÇÁ¦·Î ¿Ô´Ù°í È®½ÅÇÒ ¼ö´Â ¾øÀ½À» ÁÖ¸ñÇØ¶ó - µû¶ó¼ ³»ºÎ À§ÇùÀÌ ¾Æ´Ñ ¿ÜºÎ À§Çù¿¡ ´ëÃ³ÇØ¾ß ÇÑ´Ù. ÆÄ±«µÈ ¹æÈº®, ¼±ÅÃÀûÀÎ °æ·Î ¹× ¸ð¹ÙÀÏ ÄÚµå´Â ÀÌ·¯ÇÑ °¡Á¤À» ´õ¿í ÀǽÉÇÏ°Ô ÇÑ´Ù. ¹®Á¦´Â ´©±º°¡¸¦ ÀÎÁõÇÏ´Â ¹æ¹ýÀ¸·Î ½Å·ÚÇÒ ¼ö ¾ø´Â Á¤º¸¸¦ Áö¿øÇϰí ÀÖ´Â °ÍÀÌ´Ù. ½Å·ÚµÇÁö ¾ÊÀº ³×Æ®¿öÅ©¸¦ ÅëÇØ ½Å·ÚÇÒ ¼ö Àִ ä³ÎÀÌ ÇÊ¿äÇÏ´Ù¸é ¾î¶² ¾ÏÈ£È ¼ºñ½º°¡ ÇÊ¿äÇÏ´Ù (ÃÖ¼ÒÇÑ ¾ÏÈ£ÇÐÀûÀ¸·Î ¾ÈÀüÇÑ ÇØ½Ã); ¾ÏÈ£È ¾Ë°í¸®µë°ú ÇÁ·ÎÅäÄÝ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 10.5절 À» º¸¶ó. ftp ¿Í rlogin °ú °°Àº Ç¥ÁØÀûÀÌÁö¸¸ º»ÁúÀûÀ¸·Î ºñº¸¾ÈÀûÀÎ ÇÁ·ÎÅäÄÝÀ» ±¸ÇöÇϰí ÀÖ´Ù¸é ¾ÈÀüÇÑ µðÆúÆ®¸¦ Á¦°øÇÏ°í °¡Á¤µéÀ» ¸íÈ®ÇÏ°Ô ¹®¼ÈÇØ¶ó. DNS (Domain Name Server) ´Â ÄÄÇ»ÅÍ À̸§°ú IP °£ÀÇ ¸ÅÇÎ (mapping) À» À§ÇØ ÀÎÅͳݿ¡¼ ³Î¸® »ç¿ëµÇ°í ÀÖ´Ù. ``¿ª (reverse) DNS" ¶ó´Â ±â¹ýÀº ¾î¶² °£´ÜÇÑ ½ºÇªÇÎ °ø°ÝÀ» Á¦°ÅÇϸç È£½ºÆ® À̸§À» °áÁ¤Çϴµ¥ ÀÖ¾î À¯¿ëÇÏ´Ù. ±×·¯³ª ÀÌ ±â¹ýÀº ÀÎÁõ °áÁ¤À» ÇÒ¸¸Å ½Å·ÚÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. ¹®Á¦´Â °á±¹ DNS ¿äûÀÌ °á°úÀûÀ¸·Î °ø°ÝÀÚ°¡ Á¦¾îÇÒ ¼öµµ ÀÖ´Â ¾î¶² ¿ø°Ý ½Ã½ºÅÛÀ¸·Î º¸³»Áú °ÍÀ̶ó´Â °ÍÀÌ´Ù. µû¶ó¼ DNS °á°ú¸¦ È®ÀÎÀÌ ÇÊ¿äÇÑ ÀÔ·ÂÀ¸·Î ó¸®ÇÏ°í ¾ö°ÝÇÑ Á¢±Ù Á¦¾î¸¦ À§ÇØ À̸¦ ½Å·ÚÇÏÁö ¸¶¶ó. ÀÓÀÇÀÇ À̸ÞÀÏ (ÁÖ¼ÒÀÇ "from" °ªµéÀ» Æ÷ÇÔÇØ) µµ ¶ÇÇÑ º¯Á¶µÉ ¼ö ÀÖ´Ù. µðÁöÅÐ ÀÎÁõ¼ »ç¿ëÀÌ ÀÌ·¯ÇÑ ¸¹Àº °ø°ÝÀ» ¹æÇØÇÏ´Â ¹æ¹ýÀε¥ ´õ¿í ¼Õ½¬¿î ¹æ¹ýÀº Ưº°È÷ ÀÓÀÇ·Î »ý¼ºµÈ °ªÀ» °®°í À̸ÞÀÏÀÌ ¼Û¼ö½ÅµÇ¾ß ÇÔÀ» ¿ä±¸ÇÏ´Â °ÍÀ¸·Î ÀÌ´Â °ø°³ ¸ÞÀϸµ ¸®½ºÆ®¿¡ ¼¸íÇÏ´Â °Í°ú °°Àº Áß¿äÇÏÁö ¾ÊÀº Æ®·£Àè¼Ç¿¡ ´ëÇØ º¸Åë Çã¿ëÇÒ ¼ö ÀÖ´Ù. CGI ¸¦ Æ÷ÇÔÇÏ¿© ¸ðµç Ŭ¶óÀ̾ðÆ®/¼¹ö ¸ðµ¨¿¡¼ ¼¹ö´Â Ŭ¶óÀÌ¾ðÆ® (¶Ç´Â Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö»çÀÌ¿¡¼ ÁßÀçÇÏ´Â ´©±º°¡) °¡ ¸ðµç °ªÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù°í °¡Á¤ÇÔÀ» ÁÖ¸ñÇØ¶ó. ¿¹¸¦ µé¾î ¼ÒÀ§ ¼û°ÜÁø Çʵå¿Í ÄíŰ °ªÀº CGI ÇÁ·Î±×·¥ÀÌ ¹Þ±â Àü¿¡ Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ º¯°æµÉ ¼ö ÀÖ´Ù. À̵éÀº Ưº°ÇÑ ¿¹¹æ Á¶Ä¡¸¦ ÃëÇÏÁö ¾Ê¾Ò´Ù¸é ½Å·ÚµÉ ¼ö ¾ø´Ù. ¿¹¸¦ µé¾î ¼¹ö°¡ ¼¸íÀ» °Ë»çÇÏ´Â ÇÑ Å¬¶óÀÌ¾ðÆ®°¡ º¯Á¶ÇÒ ¼ö ¾øµµ·Ï ¼û°ÜÁø Çʵ尡 ¼¸íµÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¼û°ÜÁø Çʵå´Â ¶ÇÇÑ ´ÜÁö ½Å·ÚµÈ ¼¹ö¸¸ÀÌ º¹È£ÈÇÒ ¼ö ÀÖµµ·Ï ۸¦ »ç¿ëÇØ¼ ¾ÏÈ£ÈµÉ ¼ö ÀÖ´Ù (ÀÌ ¹æ¹ýÀÌ Kerberos ÀÎÁõ ½Ã½ºÅÛÀÇ ±âº» °³³äÀÌ´Ù). InfoSec ·¦Àº È÷µç Çʵå¿Í ¾ÏÈ£È Àû¿ë¿¡ ´ëÇØ ´õ¿í ±íÀº ³íÀǸ¦ Çϰí ÀÖ´Ù http://www.infoseclabs.com/mschff/mschff.htm. ÀϹÝÀûÀ¸·Î Ŭ¶óÀ̾ðÆ®/¼¹ö ¸ðµ¨¿¡¼ °ü½ÉÀÖ´Â µ¥ÀÌŸ¸¦ ¼¹öÂÊ¿¡ À¯ÁöÇÏ´Â °ÍÀÌ ´õ¿í ÁÁ´Ù. °°Àº ¸Æ¶ôÀ¸·Î CGI ÇÁ·Î±×·¥¿¡¼ ÀÎÁõÀ» À§ÇÑ HTTP_REFERER ´Â »ç¿ëÀÚ ºê¶ó¿ìÀú (À¥¼¹ö°¡ ¾Æ´Ñ) ¿¡ ÀÇÇØ º¸³»Áö±â ¶§¹®¿¡ ÀÌ¿¡ ÀÇÁ¸ÇÏÁö ¸¶¶ó. ÀÌ ³íÀÇ´Â ´Ù¸¥ µ¥ÀÌŸ¸¦ ÂüÁ¶ÇÏ´Â µ¥ÀÌŸ¿¡µµ ¶ÇÇÑ Àû¿ëµÈ´Ù. ¿¹¸¦ µé¾î HTML ¶Ç´Â XML Àº ÂüÁ¶¿¡ ÀÇÇØ ¿ø°ÝÀûÀ¸·Î ÀúÀåµÉ ¼öµµ ÀÖ´Â ´Ù¸¥ ÆÄÀÏ (¿¹, DTD ¹× ½ºÅ¸ÀÏ½ÃÆ®) À» Æ÷ÇÔÇϵµ·Ï ÇÑ´Ù. ±×·¯³ª ÀÌ·¯ÇÑ ¿ÜºÎ ÂüÁ¶´Â »ç¿ëÀÚ°¡ ÀǵµÇÑ ¹Ù¿Í ¸Å¿ì ´Ù¸¥ ¹®¼¸¦ º¸µµ·Ï ¼öÁ¤µÉ ¼ö ÀÖ´Ù; ½ºÅ¸ÀÏ½ÃÆ®°¡ Áß¿äÇÑ À§Ä¡ÀÇ ´Ü¾îµéÀ» ¿©¹éÀ¸·Î ÇÏ°í ¿Ü¾çÀ» ÈäÇÏ°Ô Çϰųª »õ·Î¿î ÅØ½ºÆ®¸¦ Ãß°¡Çϱâ À§ÇØ ¼öÁ¤µÉ ¼ö ÀÖ´Ù. ¿ÜºÎ DTD ´Â ¹®¼ÀÇ »ç¿ëÀ» ¹æÇØ (À¯È¿¼ºÀ» ±ú¶ß¸®´Â ¼±¾ð Ãß°¡¸¦ ÅëÇØ) ¶Ç´Â ¹®¼¿¡ ´Ù¸¥ ÅØ½ºÆ®¸¦ Ãß°¡Çϱâ À§ÇØ ¼öÁ¤µÉ ¼ö ÀÖ´Ù [St. Laurent 2000].
6.10. ½Å·ÚµÈ °æ·Î¸¦ ¼³Á¤Çضó½Å·ÚÇÒ ¼ö Àִ ä³Î (6.9절 ¸¦ º¸¶ó) ÀÌ ÇÊ¿äÇÑ ¶Ç´Ù¸¥ ÀÌÀ¯´Â »ç¿ëÀÚ°¡ »ç¿ëÇÏ·Á°í ÀǵµÇß´ø ÇÁ·Î±×·¥ ¶Ç´Â ½Ã½ºÅÛÀ» ½ÇÁ¦·Î »ç¿ëÇϰí ÀÖÀ½À» º¸ÀåÇÏ´Â °ÍÀÌ´Ù. ÀüÅëÀûÀÎ ¿¹´Â ``°¡Â¥ ·Î±ä" ÇÁ·Î±×·¥ÀÌ´Ù. ½Ã½ºÅÛÀÇ ·Î±ä ½ºÅ©¸°Ã³·³ º¸ÀÌ´Â ÇÁ·Î±×·¥ÀÌ ÀÛ¼ºµÈ´Ù¸é ÀÌ´Â ½ÇÇàµÈ »óÅ·Π³²¾ÆÀÖÀ» ¼ö ÀÖ´Ù. µû¶ó¼ »ç¿ëÀÚ°¡ ·Î±×ÀÎÇÏ·Á°í ÇÒ ¶§ °¡Â¥ ·Î±ä ÇÁ·Î±×·¥Àº ÃßÈÄ »ç¿ëÀ» À§ÇØ »ç¿ëÀÚÀÇ ÆÐ½º¿öµå¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. ÀÌ ¹®Á¦¿¡ ´ëÇÑ ÇØ°á ¹æ¹ýÀº ``½Å·ÚµÈ °æ·Î" ÀÌ´Ù. ½Å·ÚµÈ °æ·Î´Â °ø°ÝÀÚ°¡ ¾î¶² Á¤º¸°¡ ÀüÇØÁö°í ÀÖ´ÂÁö¸¦ °¡·Îä°Å³ª ¼öÁ¤ÇÒ ¼ö ¾øÀ½À» º¸ÀåÇÏ¸é¼ »ç¿ëÀÚ°¡ Åë½ÅÇÏ·Á°í Çß´ø »ç¿ëÀÚ¿Í Åë½ÅÇϰí ÀÖ´Ù´Â È®½ÅÀ» Á¦°øÇÑ´Ù. ÆÐ½º¿öµå¸¦ ¿äûÇÏ·Á¸é ½Å·ÚµÇ´Â °æ·Î¸¦ ¼³Á¤ÇÏ·Á°í ÇØ¶ó. ºÒÇàÈ÷ ¸®´ª½º¿Í ´ëºÎºÐÀÇ ´Ù¸¥ À¯´Ð½º´Â ÀÏ¹Ý ·Î±ä °úÁ¤¿¡¼Á¶Â÷ ½Å·ÚµÇ´Â °æ·Î¸¦ °®°í ÀÖÁö ¾Ê´Ù. ÇѰ¡Áö Á¢±Ù ¹æ¹ýÀº À©µµ¿ì NT/2000 ¿¡¼ ·Î±ëÀü¿¡ "control-alt-delete" ۸¦ »ç¿ëÇÏ´Â °Í°ú °°ÀÌ º¯Á¶ÇÒ ¼ö ¾ø´Â ۸¦ ´©¸£µµ·Ï ¿äûÇÏ´Â °ÍÀÌ´Ù; À©µµ¿ì¿¡¼ ÀÏ¹Ý ÇÁ·Î±×·¥Àº ÀÌ Å°¸¦ °¡·Îç ¼ö ¾ø±â ¶§¹®¿¡ ÀÌ·¯ÇÑ Á¢±Ù ¹æ¹ýÀº ½Å·ÚµÈ °æ·Î¸¦ »ý¼ºÇÑ´Ù. ¸®´ª½º¿¡µµ Secure Attention Key (SAK) ¶ó´Â µ¿ÀÏÇÑ ¹æ¹ýÀÌ ÀÖ´Ù; ``control-alt-pause" ·Î »ç»óµÇ´Â °ÍÀÌ ÃßõµÈ´Ù. ºÒÇØÀÌ ÀÌ ¹®¼ ÀÛ¼º ½ÃÁ¡¿¡´Â SAK ´Â ¹Ì¿Ï¼ºÀÌ°í ¸®´ª½º ¹èÆ÷ÆÇ¿¡ ÀÇÇØ Àß Áö¿øµÇÁö ¾Ê°í ÀÖ´Ù. ½Å·ÚµÇ´Â °æ·Î¸¦ Áö¿ªÀûÀ¸·Î ±¸ÇöÇÏ´Â ´Ù¸¥ Á¢±Ù ¹æ¹ýÀº ´ÜÁö ·Î±×ÀÎ ÇÁ·Î±×·¥¸¸ÀÌ ¼öÇàÇÒ ¼ö ÀÖ´Â º°µµÀÇ È¸é Ç¥½Ã¸¦ Á¦¾îÇÏ´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î ´ÜÁö ½Å·ÚµÈ ÇÁ·Î±×·¥¸¸ÀÌ Å°º¸µå light (Num Lock, Caps Lock ¹× Scroll Lock ¸¦ ³ªÅ¸³»´Â LED) ¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù¸é ·Î±×ÀÎ ÇÁ·Î±×·¥Àº ½ÇÁ¦ ·Î±×ÀÎ ÇÁ·Î±×·¥À̶ó´Â °ÍÀ» ³ªÅ¸³»´Â ±¸µ¿ ÆÐÅÏÀ» Ç¥½ÃÇÒ ¼ö ÀÖ´Ù. ºÒÇàÈ÷ ÇöÀç ¸®´ª½º¿¡¼ ÀÏ¹Ý »ç¿ëÀÚ°¡ LED ¸¦ º¯°æÇÒ ¼ö Àֱ⠶§¹®¿¡ LED °¡ ½Å·ÚµÈ °æ·Î¸¦ È®ÀÎÇϱâ À§ÇØ »ç¿ëµÉ ¼ö´Â ¾ø´Ù. ³×Æ®¿öÅ©ÈµÈ ¾ÖÇø®ÄÉÀ̼Ç, ƯÈ÷ À¥ ±â¹Ý ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇØ ½Å·ÚµÈ °æ·Î¸¦ °®´Â °Í¸¸À¸·Î ÃæºÐÇÏÁö ¾Ê´Ù°í ÆÇ¸íµÇ¾ú´Ù. À¥ ºê¶ó¿ìÀú »ç¿ëÀÚ·Î ÇÏ¿©±Ý ½ÇÁ¦ ¾î¶² Àå¼Ò¿¡ ÀÖÁö¸¸ »ç½Ç À̶§ ´Ù¸¥ Àå¼Ò¿¡ ÀÖµµ·Ï »ý°¢ÇÏ°Ô ÇÏ´Â °øÀÎµÈ ¹æ¹ýµéÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î Felten [1997] Àº »ç¿ëÀÚ°¡ ¾î¶² À¥ ÆäÀÌÁö¸¦ º¸°í ÀÖÁö¸¸ »ç½Ç À̶§ ±×µéÀÌ º¸´Â ¸ðµç À¥ ÆäÀÌÁö°¡ °ø°ÝÀÚÀÇ »çÀÌÆ® ( ¸ðµç Æ®·¡ÇÈÀ» °¨½ÃÇÏ°í ¾ç¹æÇâÀ¸·Î º¸³»Áö´Â ¸ðµç µ¥ÀÌŸ¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù) ·ÎºÎÅÍ Àü¼ÛµÇ´Â °ÍÀÎ ``À¥ ½ºÇªÇÎ" À» ³íÀÇÇϰí ÀÖ´Ù. ÀÌ´Â URL À» ÀçÀÛ¼ºÇÔÀ¸·Î½á °¡´ÉÇѵ¥, ÀçÀÛ¼ºµÈ URL Àº »óÅ ¶óÀÎ, À§Ä¡ ¶óÀÎ µî¿¡¼ ¸ðµç °¡´ÉÇÑ Áõ°Å¸¦ °¨Ãß´Â ´Ù¸¥ ±â¼ú (ÀÚ¹Ù½ºÅ©¸³Æ®¿Í °°Àº) À» »ç¿ëÇØ °ÅÀÇ ¾Èº¸ÀÌ°Ô ¸¸µé ¼ö ÀÖ´Ù. ´õ¿í ¼¼ºÎÀûÀÎ »çÇ×Àº ³í¹®À» º¸¶ó. ÀÌ·¯ÇÑ URL À» °¨Ãß´Â ´Ù¸¥ ¹æ¹ýÀº °ÅÀÇ »ç¿ëµÇÁö ¾Ê´Â URL ±¸¹®À» ¾Ç¿ëÇÏ´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î ``http://www.ibm.com/stuff@mysite.com'' URL Àº ÀÌ»óÇÑ »ç¿ëÀÚ À̸§ ``www.ibm.com/stuff" ¸¦ ÀÌ¿ëÇØ ``mysite.com" (¾î¼¸é ¾ÇÀÇÀÖ´Â »çÀÌÆ®) À» º¸±â À§ÇØ ¿äûÇÏ´Â °ÍÀÌ´Ù. URL ÀÌ ÃæºÐÈ÷ ±æ´Ù¸é ½ÇÁ¦ URL Àº Ç¥½ÃµÇÁö ¾ÊÀ» °ÍÀÌ¸ç µû¶ó¼ »ç¿ëÀÚ´Â ¾Ç¿ëµÇ°í ÀÖÀ½À» ¾Ë¾ÆÂ÷¸®Áö ¸øÇÒ °Í°°´Ù. ´Ù¸¥ ¹æ¹ýÀº ``½ÇÁ¦" »çÀÌÆ®¿Í °íÀÇÀûÀ¸·Î À¯»çÇÏ°Ô º¸ÀÌ´Â À̸§À» °®´Â »çÀÌÆ®¸¦ ¸¸µå´Â °ÍÀÌ´Ù. ÀÌ·± ¸ðµç °æ¿ì¿¡ ÀÖ¾î ´Ü¼øÈ÷ ¾ÏÈ£ÈÇÏ´Â °ÍÀº ±×´ÙÁö À¯¿ëÇÏÁö ¾Ê´Ù - °ø°ÝÀÚ´Â º¸¿©Áö´Â ¸ðµç °ÍÀ» Á¦¾îÇÒ ¼ö ÀÖÀ¸¸ç µ¿½Ã¿¡ ¾ÏÈ£ÈµÈ µ¥ÀÌŸ¿¡ ¸Å¿ì ¸¸Á·ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¹®Á¦¸¦ ´ëóÇÏ´Â °ÍÀº ´õ¿í ¾î·Æ´Ù; ÇöÀç ÀúÀÚ´Â À¥ »ç¿ëÀÚ¸¦ ±â¸¸ÇÏÁö ¸øÇϵµ·Ï ÇÏ´Â ¾î¶°ÇÑ ÁÁÀº ÇØ°á ¹æ¹ýµµ ¾ø´Ù. À¥ ºê¶ó¿ìÀú °³¹ßÀÚ¿¡°Ô ÀÌ·¯ÇÑ ``±â¸¸" À» ½±°Ô ½Äº°ÇÒ ¼ö ÀÖµµ·Ï ´ëóÇ϶ó°í ±ÇÇÒ °ÍÀÌ´Ù. »ç¿ëÀÚ°¡ Á¤È®ÇÑ »çÀÌÆ®¿¡ ¿Ã¹Ù¸£°Ô ¿¬°áÇÏ´Â °ÍÀÌ Áß´ëÇÏ´Ù¸é »ç¿ëÀÚ·Î ÇÏ¿©±Ý À§Çù¿¡ ´ëóÇÒ ¼ö ÀÖ´Â °£´ÜÇÑ ÀýÂ÷¸¦ »ç¿ëÇϵµ·Ï ÇØ¶ó. ºê¶ó¿ìÀú¸¦ Á¾·á½ÃŲ ÈÄ Àç½ÃÀÛÇÏ°Ô Çϰí À¥ ÁÖ¼Ò°¡ ¸Å¿ì °£´ÜÇϸç ÀϹÝÀûÀ¸·Î öÀÚ¸¦ À߸ø ¾²Áö ¾Ê¾Ò´ÂÁö È®ÀÎÇϵµ·Ï ÇØ¶ó. ¾î¶² ``ºñ½ÁÇϰÔ" ¹ßÀ½µÇ´Â DND À̸§À» ¼ÒÀ¯ÇÏ°í ¶ÇÇÑ °ø°ÝÀÚ¸¦ ã±â À§ÇØ ±×·¯ÇÑ ´Ù¸¥ DNS À̸§À» ã°í ½ÍÀ» ¼öµµ ÀÖ´Ù. 6.11. ³»ºÎÀÇ Àϰü¼ºÀ» °Ë»çÇÏ´Â Äڵ带 »ç¿ëÇØ¶óÇÁ·Î±×·¥Àº È£Ãâ Àμö ¹× ±âº»ÀûÀÎ »óÅ¿¡ ´ëÇÑ °¡Á¤ÀÌ À¯È¿ÇÑÁö È®ÀÎÇϱâ À§ÇØ °Ë»çÇØ¾ß ÇÑ´Ù. C ¿¡¼ assert(3) ¿Í °°Àº ¸ÅÅ©·Î°¡ À¯¿ëÇÒ ¼öµµ ÀÖ´Ù. 6.12. ½º½º·Î ÀÚ¿øÀ» Á¦ÇÑÇØ¶ó³×Æ®¿öÅ© µ¥¸ó¿¡¼ °úµµÇÑ ºÎÇϸ¦ ÁÙÀ̰ųª Á¦ÇÑÇØ¶ó. »ç¿ëµÉ ÀÚ¿øµéÀ» Á¦ÇÑÇϱâ À§ÇØ setrlimit(2) ¸¦ »ç¿ëÇØ¼ ÇѰ谪À» ¼³Á¤Çضó. ÃÖ¼ÒÇÑ setrlimit(2) ¸¦ »ç¿ëÇØ¼ ``ÄÚ¾î" ÆÄÀÏÀÇ »ý¼ºÀ» ¸øÇϵµ·Ï ÇØ¶ó. ¿¹¸¦ µé¾î µðÆúÆ®·Î ¸®´ª½º´Â ÇÁ·Î±×·¥ÀÌ ºñÁ¤»óÀûÀ¸·Î Á¾·áµÈ °æ¿ì ¸ðµç ÇÁ·Î±×·¥ ¸Þ¸ð¸®¸¦ ÀúÀåÇϰí ÀÖ´Â ÄÚ¾î ÆÄÀÏÀ» »ý¼ºÇϴµ¥ ÀÌ ÆÄÀÏÀÌ ÆÐ½º¿öµå ¶Ç´Â ´Ù¸¥ ±â¹ÐÀ» ´Ù·ç´Â µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÒ ¼öµµ ÀÖ´Ù. 6.13. ±³Â÷ »çÀÌÆ®ÀÇ ¾ÇÀÇÀÖ´Â ÄÁÅÙÆ®¸¦ ¿¹¹æÇضó¾î¶² º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥Àº ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚ (°ø°ÝÀÚ) ·ÎºÎÅÍ µ¥ÀÌŸ¸¦ ¹Þ¾Æ À̸¦ ´Ù¸¥ »ç¿ëÀÚ ¾ÖÇø®ÄÉÀÌ¼Ç (victim) ¿¡ °Ç³×ÁØ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ victim À» º¸È£ÇÏÁö ¸øÇÑ´Ù¸é victim ÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç (À¥ ºê¶ó¿ìÀú) Àº victim ¿¡ ÇØ¸¦ ³¢Ä¡´Â ¹æ½ÄÀ¸·Î ±× µ¥ÀÌŸ¸¦ ó¸®ÇÒ ¼öµµ ÀÖ´Ù. À̴ ƯÈ÷ HTML ¶Ç´Â XML À» »ç¿ëÇÏ´Â À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀϹÝÀûÀÎ ¹®Á¦·Î ÀÌ´Â ``cross-site scripting", ``malicious HTML tags" ¹× ``malicious content" µî ¿©·¯ À̸§À¸·Î ºÒ¸®°í ÀÖ´Ù. ÀÌ ¹®Á¦°¡ ½ºÅ©¸³Æ® ¶Ç´Â HTML ¿¡ Á¦ÇѵǾî ÀÖÁö ¾Ê°í ±× ±âº»ÀûÀÎ º»ÁúÀÌ ±³Â÷ »çÀÌÆ®ÀûÀ̱⠶§¹®¿¡ ÀÌ Ã¥¿¡¼´Â À̸¦ ``cross-site malicious content" ·Î ºÎ¸¦ °ÍÀÌ´Ù. ÀÌ ¹®Á¦°¡ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î¸¸ ÇÑÁ¤µÇÁö ¾ÊÀ½À» ÁÖ¸ñÇØ¶ó ±×·¯³ª À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇÑ Æ¯º°ÇÑ ¹®Á¦À̱⠶§¹®¿¡ ÀÌ ³íÀÇÀÇ ³ª¸ÓÁö´Â À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» °Á¶ÇÒ °ÍÀÌ´Ù. ¶§¶§·Î °ø°ÝÀÚ´Â victim À¸·Î ÇÏ¿©±Ý victim ¿¡¼ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À¸·Î µ¥ÀÌŸ¸¦ º¸³»µµ·Ï ÇÒ ¼ö ÀÖÀ¸¸ç µû¶ó¼ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥Àº À̸¦ º¸È£ÇØ¾ß ÇÑ´Ù. 6.13.1. ¹®Á¦ ¼³¸í°£´ÜÇÑ ¿¹·Î ½ÃÀÛÇÏÀÚ. ¾î¶² À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº ³ªÁß¿¡ ´Ù¸¥ µ¶Àڵ鿡°Ô °øÇ¥µÉ µ¥ÀÌŸ ÀԷ¿¡ HTML ű׸¦ Çã¿ëÇϵµ·Ï ¼³°èµÇ¾î ÀÖ´Ù (°Ô½ºÆ®ºÏ ¶Ç´Â "reader comment"). À̸¦ ¸·±â À§ÇØ ¾Æ¹« °Íµµ ÇÏÁö ¾Ê´Â´Ù¸é ÀÌ·¯ÇÑ Å±״ ½ºÅ©¸³Æ®, ÀÚ¹Ù ÂüÁ¶ (¾ÇÀÇÀÖ´Â ¾ÖÇø´¿¡ ´ëÇÑ ÂüÁ¶¸¦ Æ÷ÇÔÇØ¼), DHTML ű×, óÀ½ÀÇ ¹®¼ ³¡Ç¥½Ã (</HTML>), ÆùÆ® Å©±â ¿äû µîÀ» ³¢¿ö³ÖÀ½À¸·Î½á ´Ù¸¥ »ç¿ëÀÚµéÀ» °ø°ÝÇϱâ À§ÇØ ¾ÇÀÇÀÖ´Â »ç¿ëÀÚ°¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ ´É·ÂÀº SSL ¾ÏÈ£ÈµÈ ¿¬°á ³ëÃâ, Ŭ¶óÀÌ¾ðÆ®¸¦ ÅëÇÑ Á¦ÇÑµÈ À¥»çÀÌÆ® Á¢±Ù, µµ¸ÞÀο¡ ±âÃÊÇÑ º¸¾È Á¤Ã¥ À§¹Ý, À¥ÆäÀÌÁö¸¦ ÀÐÀ» ¼ö ¾ø°Ô ¸¸µé±â, À¥ÆäÀÌÁö¸¦ »ç¿ëÇϱ⿡ ºÒÄèÇÏ°Ô ¸¸µé±â (ȳª°Ô ÇÏ´Â ¹è³Ê ¹× °ø°ÝÀûÀÎ material), ÇÁ¶óÀ̹ö½Ã ħÀÔ Çã¿ë (ƯÁ¤ ÆäÀÌÁö¸¦ ´©°¡ ÀдÂÁö Á¤È®È÷ ¾Ë¼ö ÀÖµµ·Ï ÇÏ´Â À¥¹ö±× »ðÀÔÀ» ÇÔÀ¸·Î½á), ¼ºñ½º ºÎÀÎ °ø°Ý »ý¼º (¹«¼öÈ÷ ¸¹Àº À©µµ¿ì »ý¼ºÀ» ÅëÇØ) ¹× ¸Å¿ì ÆÄ±«ÀûÀÎ °ø°Ý (½ºÅ©¸³ÆÃ ¾ð¾î ¶Ç´Â ºê¶ó¿ìÀú¿¡ ¹öÆÛ ¿À¹öÇ÷οì¿Í °°Àº º¸¾È Ãë¾à¼ºÀ» »ðÀÔÇÔÀ¸·Î½á) µé°ú °°Àº ´Ù¾çÇÑ È¿°ú¸¦ À§ÇØ ¾Ç¿ëµÉ ¼ö ÀÖ´Ù. ¾ÇÀÇÀÖ´Â FORM ű׸¦ Àû¼Ò¿¡ »ðÀÔÇÔÀ¸·Î½á ħÀÔÀÚ´Â »ç¿ëÀÚ¸¦ ¼Ó¿© ±â¹ÐÀ» ´Ù·ç´Â Á¤º¸¸¦ µå·¯³»µµ·Ï ÇÒ ¼öµµ ÀÖ´Ù (±âÁ¸ ÆûÀÇ µ¿ÀÛÀ» ¼öÁ¤ÇÔÀ¸·Î½á). À̰ÍÀÌ ¹®Á¦ÀÇ ¿ÏÀüÇÑ ¸ñ·ÏÀº °áÄÚ ¾Æ´ÏÁö¸¸ À̰ÍÀÌ ½É°¢ÇÑ ¹®Á¦¸¦ ÃÊ·¡ÇÒ ¼ö ÀÖÀ½À» ±ú´Ý°Ô Çϴµ¥ ÃæºÐÇÏ´Ù. ´ëºÎºÐÀÇ ``³íÀÇ º¸µå (discussion board)" ´Â ÀÌ¹Ì ÀÌ ¹®Á¦¸¦ ¾Ë°í ÀÖÀ¸¸ç ´ëºÎºÐÀº ÀÌ¹Ì ´Ù¾çÇÑ »ç¶÷µéÀÇ ³íÀÇÀÇ ÀϺκÐÀ¸·Î ÅØ½ºÆ®ÈµÇ¾î À̸¦ ¿¹¹æÇϱâ À§ÇÑ Á¶Ä¡¸¦ ÃëÇϰí ÀÖ´Ù. ºÒÇàÈ÷ ¸¹Àº À¥ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÚµéÀº À̰ÍÀÌ ´õ¿í ÀϹÝÀûÀÎ ¹®Á¦¶ó°í ±ú´ÝÁö ¸øÇϰí ÀÖ´Ù. ÇÑ »ç¿ëÀÚ¿¡¼ ´Ù¸¥ »ç¿ëÀÚ·Î º¸³»Áö´Â ¸ðµç µ¥ÀÌŸ°ªÀº ÀÓÀÇÀÇ HTML ÀÌ ¿¹»óµÇ´Â ¸í¹éÇÑ °æ¿ì°¡ ¾Æ´Ï´õ¶óµµ ÀáÀçÀûÀ¸·Î cross-site malicious Æ÷½ºÆÃÀÇ ¼Ò½º°¡ µÉ ¼ö ÀÖ´Ù. »ç¿ëÀÚ´Â ´Ù¸¥ »çÀÌÆ®¸¦ ÅëÇØ µ¥ÀÌŸ¸¦ °ø±ÞÇϵµ·Ï ¼ÓÀ» ¼ö Àֱ⠶§¹®¿¡ ¾ÇÀÇÀÖ´Â µ¥ÀÌŸ´Â »ç¿ëÀÚ Àڽſ¡ ÀÇÇØ¼µµ °ø±ÞµÉ ¼ö ÀÖ´Ù. ´ÙÀ½Àº ¾ÇÀÇÀÖ´Â µ¥ÀÌŸ¸¦ »ç¿ëÀÚ°¡ ´Ù¸¥ »çÀÌÆ®·Î Àü¼ÛÇϰԲû ÇÏ´Â HTML ¸µÅ©ÀÇ ¿¹ÀÌ´Ù (CERT ·ÎºÎÅÍ):
¿ä¾àÇϸé À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº ÀÔ·Â (¸ðµç Æû µ¥ÀÌŸ¸¦ Æ÷ÇÔÇØ¼) À» °Ë»ç, ÇÊÅ͸µ ¶Ç´Â ÀÎÄÚµùÇÑ ÈÄ ¹Þ¾Æµé¿©¾ß ÇÑ´Ù. ´Ù¸¥ »ç¿ëÀÚ°¡ ¸ô·¡ µ¥ÀÌŸ¸¦ Á¦°øÇÒ ¼öµµ Àֱ⠶§¹®¿¡ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸¹Àº °æ¿ì µ¿ÀÏ »ç¿ëÀÚ¿¡°Ô ±× µ¥ÀÌŸ¸¦ µ¹·Áº¸³» Áö ¸øÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·¯ÇÑ material À» Çã¿ëÇÏ´Â °ÍÀÌ ½Ã½ºÅÛ ¼Õ»óÀ» °¡Á®¿Ã ¼ö´Â ¾ø´Ù°í ÇÏ´õ¶óµµ ÀÌ´Â ½Ã½ºÅÛÀÌ ´Ù¸¥ »ç¿ëÀڵ鿡 ´ëÇÑ °ø°Ý ·çÆ®°¡ µÉ ¼ö ÀÖ°Ô²û ÇÒ °ÍÀÌ´Ù. ´õ¿í ³ª»Û °ÍÀº ÀÌ·¯ÇÑ °ø°ÝÀÌ ½Ã½ºÅÛ¿¡¼ ³ª¿Â °Íó·³ º¸ÀÏ °ÍÀÌ´Ù. CERT ´Â ±Ç°í¾ÈÀº ´ÙÀ½°ú °°ÀÌ ÀÌ ¹®Á¦¸¦ ±â¼úÇÑ´Ù:
6.13.2. ±³Â÷ »çÀÌÆ®ÀÇ ¾ÇÀÇÀÖ´Â ÄÁÅÙÆ®¿¡ ´ëÇÑ ÇØ°á¹æ¾È±âº»ÀûÀ¸·Î ÀÌ´Â ¾î¶² »ç¿ëÀÚ°¡ ³¢¿ö³ÖÀº ¸ðµç À¥ ¾ÖÇø®ÄÉÀÌ¼Ç Ãâ·ÂÀº ÇÊÅ͸µ (ÀÌ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â ¹®ÀÚ°¡ Á¦°ÅµÉ ¼ö ÀÖµµ·Ï), ÀÎÄÚµù (ÀÌ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â ¹®ÀÚ°¡ ¹®Á¦¸¦ ¿¹¹æÇÏ´Â ¹æ½ÄÀ¸·Î ÀÎÄÚµåµÉ ¼ö ÀÖµµ·Ï) ¶Ç´Â À¯È¿È (¾ÈÀüÇÑ µ¥ÀÌŸ¸¸ÀÌ µµÂøÇÏ´Â °ÍÀ» º¸ÁõÇϱâ À§ÇØ) µÇ¾î¾ß ÇÔÀ» ÀǹÌÇÑ´Ù. ÀÌ´Â URL ¸Å°³º¯¼ö, Æû µ¥ÀÌŸ, ÄíŰ, µ¥ÀÌŸº£À̽º ÁúÀÇ, CORBA ORB °á°ú ¹× ÆÄÀϳ»¿¡ ÀúÀåµÈ »ç¿ëÀڷκÎÅÍÀÇ µ¥ÀÌŸ¿Í °°Àº ÀÔ·ÂÀ¸·ÎºÎÅÍ ÆÄ»ýµÈ ¸ðµç Ãâ·ÂÀ» Æ÷ÇÔÇÑ´Ù. ¸¹Àº °æ¿ì ÇÊÅ͸µ°ú À¯È¿È´Â ÀԷ½à ÇàÇØÁ®¾ß ÇÏÁö¸¸ ÀÎÄÚµùÀº ÀÔ·Â À¯È¿È ¶Ç´Â Ãâ·Â »ý¼º µ¿¾È¿¡ ÇàÇØÁú ¼ö ÀÖ´Ù. ºÐ¼®¾øÀÌ µ¥ÀÌŸ¸¦ ´ÜÁö Åë°ú½ÃŰ·Á°í ÇÑ´Ù¸é ÀԷ½à µ¥ÀÌŸ¸¦ ÀÎÄÚµåÇÏ´Â °ÍÀÌ ´õ¿í ÁÁ´Ù (µû¶ó¼ ÀØÁö ¾ÊÀ» °ÍÀÌ´Ù). ±×·¯³ª ÇÁ·Î±×·¥ÀÌ µ¥ÀÌŸ¸¦ ó¸®ÇÑ´Ù¸é Ãâ·Â½Ã µ¥ÀÌŸ¸¦ ÀÎÄÚµåÇÏ´Â °ÍÀÌ ´õ¿í ½¬¿ï °ÍÀÌ´Ù. CERT ´Â ÇÊÅ͸µ°ú ÀÎÄÚµùÀ» µ¥ÀÌŸ Ãâ·Âµ¿¾È¿¡ ÇàÇ϶ó°í ÃßõÇÑ´Ù; ÀÌ´Â ³ª»Û °³³äÀº ¾Æ´ÏÁö¸¸ ´ë½Å ÀԷ½à À̸¦ ÇÏ´Â °ÍÀÌ Àǹ̰¡ ÀÖ´Â °æ¿ì°¡ ¸¹ÀÌ ÀÖ´Ù. Áß¿äÇÑ ¹®Á¦´Â ¸ðµç Ãâ·Â¿¡ ´ëÇØ ¸ðµç °æ¿ì¸¦ ´Ù·ç´ÂÁö È®ÀÎÇÏ´Â °ÍÀÌ´Ù. ±×·¯³ª ÀÌ´Â Á¢±Ù ¹æ¹ý¿¡ »ó°ü¾øÀÌ ½¬¿î ÀÛ¾÷Àº ¾Æ´Ï´Ù. °æ°í - ¸¹Àº °æ¿ì ÀÌ·¯ÇÑ ±â¹ýÀº Ãâ·ÂÀÇ ¹®ÀÚ ÀÎÄÚµù¿¡ ´ëÇØ Á¦¾î¸¦ ÇÏÁö ¸øÇÑ´Ù¸é ÆÄ±«µÉ ¼ö ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é °ø°ÝÀÚ°¡ ¿©±â¿¡ ³íÀÇµÈ ±â¹ýÀ» ÆÄ±«Çϱâ À§ÇØ ¿¹±âÄ¡ ¸øÇÑ ¹®ÀÚ ÀÎÄÚµùÀ» »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. °í¸¿°Ôµµ ÀÌ´Â ¾î·ÆÁö ¾Ê´Ù; Ãâ·Â ¹®ÀÚ ÀÎÄÚµù¿¡ ´ëÇØ Á¦¾î±ÇÀ» ¾ò´Â °ÍÀº 8.5절 ¿¡ ³íÀǵǾî ÀÖ´Ù. ù ÇϺÎÀýÀº ÇÊÅ͸µ, ÀÎÄÚµù ¹× À¯È¿ÈµÉ Çʿ䰡 Àִ Ưº° ¹®ÀÚÀÇ ½Äº° ¹æ¹ýÀ» ³íÀÇÇÑ´Ù. ´ÙÀ½ ÀýÀº ÀÌ·¯ÇÑ ¹®ÀÚ¸¦ ÇÊÅ͸µ ¶Ç´Â ÀÎÄÚµùÇÏ´Â ¹æ¹ýÀ» ±â¼úÇÑ´Ù. ±×·¯³ª ÀϹÝÀûÀ¸·Î µ¥ÀÌŸ À¯È¿È ¹æ¹ýÀº ³íÀǵÇÁö ¾ÊÀ¸¸ç ÀϹÝÀûÀ¸·Î ÀÔ·Â À¯È¿È¿¡ ´ëÇØ¼´Â 4장 À» º¸¶ó ÀÔ·ÂÀÌ HTML ÅØ½ºÆ® ¶Ç´Â URI ¶ó¸é 4.10절 À» º¸¶ó. ¶ÇÇÑ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¾ÇÀÇÀÖ´Â cross-postings ¸¦ ¹ÞÀ» ¼ö ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. µû¶ó¼ ºñÁúÀǵµ GET ÇÁ·ÎÅäÄÝÀ» ±ÝÁöÇØ¾ß ÇÑ´Ù. 6.13.2.1. Ưº° ¹®ÀÚ ½Äº°´ÙÀ½Àº ´Ù¾çÇÑ È¯°æ¿¡ ´ëÇÑ Æ¯º° ¹®ÀÚµéÀÌ´Ù (ÀÌ ¸ñ·ÏÀ» ÀÛ¼ºÇÑ CERT ¿¡ °¨»çµå¸°´Ù):
ÀϹÝÀûÀ¸·Î & ´Â HTML °ú XML ¿¡¼ Ưº°ÇÔÀ» ÁÖ¸ñÇØ¶ó. 6.13.2.2. ÇÊÅ͸µÀÌ·¯ÇÑ Æ¯º° ¹®ÀÚ¸¦ ´Ù·ç´Â ÇѰ¡Áö Á¢±Ù ¹æ¹ýÀº ´Ü¼øÈ÷ À̸¦ Á¦°ÅÇÏ´Â °ÍÀÌ´Ù (º¸Åë ÀÔ·Â ¶Ç´Â Ãâ·Â µ¿¾È¿¡) À¯È¿ÇÑ ¹®ÀÚ¿¡ ´ëÇØ ÀÔ·ÂÀ» ÀÌ¹Ì À¯È¿ÈÇÏ¿´´Ù¸é (ÀϹÝÀûÀ¸·Î ÀÌ·¸°Ô ÇØ¾ß ÇÑ´Ù) ÀÌ´Â ´Ü¼øÈ÷ À¯È¿ ¹®ÀÚ ¸ñ·Ï¿¡¼ Ưº° ¹®ÀÚ¸¦ ´Ü¼øÈ÷ »ý·«ÇÔÀ¸·Î½á ½±°Ô ÇàÇØÁø´Ù. ´ÙÀ½Àº ÇÕ¹ýÀûÀÎ ¹®ÀÚ¸¸ ¹Þ¾Æµé¿© ÇÊÅ͸µÇÏ´Â ÆÞ ÇÁ·Î±×·¥À¸·Î ÇÊÅͰ¡ °ø¹éÀÌ¿ÜÀÇ ¾î¶°ÇÑ Æ¯º° ¹®ÀÚµµ ¹Þ¾ÆµéÀÌÁö ¾Ê±â ¶§¹®¿¡ ÀοëµÈ ¼Ó¼º°ú °°Àº ºÎ¹®¿¡ ²Ï À¯¿ëÇÏ°Ô »ç¿ëµÉ ¼ö ÀÖ´Ù:
±×·¯³ª ½ÇÁ¦ °¡Àå ÀûÀº ¼öÀÇ ¹®ÀÚ¸¸À» Á¦°ÅÇÏ±æ ¿øÇÑ´Ù¸é ´ÜÁö ÀÌ·¯ÇÑ ¹®Àڵ鸸À» Á¦°ÅÇϱâ À§ÇÑ ¼ºê·çƾÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù.
6.13.2.3. ÀÎÄÚµùƯº° ¹®ÀÚ¸¦ Á¦°ÅÇϱâ À§ÇÑ ´ë¾ÈÀº ¾î¶°ÇÑ Æ¯º°ÇÑ Àǹ̵µ °®Áö ¾Êµµ·Ï À̵éÀ» ÀÎÄÚµùÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â ¹®ÀÚ¸¦ ÇÊÅ͸µÇÏ´Â °Í¿¡ ´ëÇØ ÀåÁ¡À» °®´Âµ¥ ƯÈ÷ µ¥ÀÌŸ ¼Õ½ÇÀ» ¿¹¹æÇÑ´Ù´Â °ÍÀÌ´Ù. µ¥ÀÌŸ°¡ »ç¿ëÀÚ °üÁ¡¿¡¼ º¸¾ÒÀ» ¶§ 󸮿¡ ÀÇÇØ ¾û¸ÁÀ¸·Î µÇ¸é Àû¾îµµ ÀÎÄÚµùÀ» ÀÌ¿ëÇØ ¿ø·¡ º¸³»Á³´ø µ¥ÀÌŸ¸¦ À籸ÃàÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. HTML, XML °ú SGML Àº ¸ðµÎ ·¯´× ÅØ½ºÆ®¿¡ ÀÎÄÚµùÀ» µµÀÔÇϱâ À§ÇÑ ¹æ½ÄÀ¸·Î & ¸¦ »ç¿ëÇÑ´Ù; ÀÌ·¯ÇÑ ÀÎÄÚµùÀ» HTML ÀÎÄÚµùÀ̶ó°í ºÎ¸¥´Ù. ÀÌ·¯ÇÑ ¹®ÀÚ¸¦ ÀÎÄÚµåÇϱâ À§Çؼ´Â ´Ü¼øÈ÷ »óȲ¿¡ ¸Â°Ô Ưº° ¹®ÀÚ¸¦ º¯È¯Çضó. º¸Åë ÀÌ´Â '<', '>', '&' ¿Í '"" °¡ °¢°¢ '<', '>', '&' ¿Í '"' ·Î º¯È¯µÈ´Ù. À§¿¡ ¾ð±ÞÇßµíÀÌ À̷лó '>' °¡ ÀοëµÉ Çʿ䰡 ¾øÀ½¿¡µµ ºÒ±¸ÇÏ°í ¾î¶² ºê¶ó¿ìÀú°¡ À̸¦ µû¸£±â ¶§¹®¿¡ ('<' À» ä¿ì±â ¶§¹®¿¡) ÀοëµÉ Çʿ䰡 ÀÖ´Ù. ÀÌÁß ÀÎ¿ë ºÎÈ£¿Í °ü·ÃÇØ¼´Â ¾à°£ÀÇ »ç¼ÒÇÑ º¹À⼺ÀÌ ÀÖ´Ù. '"' ´Â ¼Ó¼º³»¿¡¼¸¸ »ç¿ëµÉ Çʿ䰡 ÀÖ°í ¾î¶² ¿À·¡µÈ ºê¶ó¿ìÀú´Â À̸¦ ÀûÀýÈ÷ ÇÏÁö ¸øÇϱ⠶§¹®ÀÌ´Ù. Ãß°¡ÀûÀÎ º¹À⼺À» ´Ù·ê ¼ö ÀÖ´Ù¸é ´ÜÁö ÇÊ¿äÇÒ ¶§¸¸ '"' ¸¦ ÀÎÄÚµåÇÏ·Á°í ÇÒ ¼ö ÀÖÁö¸¸ ´Ü¼øÈ÷ À̸¦ ÀÎÄÚµåÇÏ°í »ç¿ëÀÚ¿¡°Ô ±×µéÀÇ ºê¶ó¿ìÀú¸¦ °»½ÅÇ϶ó°í ¿äûÇÏ´Â °ÍÀÌ ´õ¿í ½±´Ù. HTML ÀÎÄÚµù¿¡ ´ëÇÑ ÀÌ Á¢±Ù ¹æ¹ýÀº ¾î¶² »óȲ¿¡¼ ÃæºÐÇÑ ÀÎÄÚµùÀÌ ¾Æ´Ï´Ù. 8.5절 ¿¡¼ ³íÀǵǵíÀÌ Ãâ·Â ¹®ÀÚ ÀÎÄÚµù ("charset") À» ÁöÁ¤ÇÒ Çʿ䰡 ÀÖ´Ù. µ¥ÀÌŸ ÀϺΰ¡ Ãâ·Â ¹®ÀÚ ÀÎÄÚµù¿ÜÀÇ ´Ù¸¥ ¹®ÀÚ ÀÎÄÚµùÀ» ÀÌ¿ëÇØ ÀÎÄÚµåµÈ´Ù¸é Ãâ·ÂÀÌ Àϰü¼ºÀÖ°í Á¤È®ÇÑ ÀÎÄÚµùÀ» »ç¿ëÇϵµ·Ï ¹«¾ð°¡¸¦ ÇØ¾ßÇÒ °ÍÀÌ´Ù. ¶ÇÇÑ ISO-8859-1 ¿ÜÀÇ Ãâ·Â ÀÎÄÚµùÀ» ¼±ÅÃÇß´Ù¸é "<" ¿Í °°Àº Ưº° ¹®ÀÚ¿¡ ´ëÇÑ ¸ðµç ´ë¾È ÀÎÄÚµùÀÌ ºê¶ó¿ìÀú·Î ½½Â½ ³ÖÀ» ¼ö ¾øÀ½À» È®ÀÎÇÒ Çʿ䰡 ÀÖ´Ù. ÀÌ´Â UTF-7 °ú UTF-8 °ú °°ÀÌ ³Î¸® ¾²ÀÌ´Â ¸î¸î ¹®ÀÚ ÀÎÄÚµù°ú °ü·ÃµÈ ¹®Á¦ÀÌ´Ù; ´ë¾È ¹®ÀÚ ÀÎÄÚµù ¿¹¹æ ¹æ¹ý¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 4.8절 À» º¸¶ó. ºñȣȯ ¹®ÀÚ ÀÎÄÚµùÀ» ´Ù·ç´Â ÇѰ¡Áö ¹æ¹ýÀº ¹®ÀÚ¸¦ ³»ºÎÀûÀ¸·Î ISO 10646 (À¯´ÏÄÚµå¿Í µ¿ÀÏ ¹®ÀÚ °ªÀ» °®´Â´Ù) À¸·Î ¿ì¼± º¯È¯½ÃŲ ÈÄ À̵éÀ» ³ªÅ¸³»±â À§ÇØ ¼öÄ¡ (numeric) ¹®ÀÚ ÂüÁ¶ ¶Ç´Â ¹®ÀÚ ¿£Æ¼Æ¼ ÂüÁ¶¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.
¼ýÀÚ ¶Ç´Â ¹®ÀÚ ¿£Æ¼Æ¼´Â ÀÛµ¿ÇÑ´Ù; ÀúÀÚ´Â '<', '>', '&' ¿Í '"' ¿¡ ´ëÇØ ¹®ÀÚ ¿£Æ¼Æ¼ ÂüÁ¶¸¦ »ç¿ëÇϱ⸦ Á¦¾ÈÇϴµ¥ ÀÌ´Â Äڵ尡 »ç¶÷µéÀÌ ÀÌÇØÇϱ⠽±±â ¶§¹®ÀÌ´Ù. ±×¿Ü¿¡´Â µÑÁßÀÇ ¾î¶² ½Ã½ºÅÛÀÌ ´õ¿í ÁÁÀºÁö´Â ¸í¹éÇÏÁö ¾Ê´Ù. ÃßÈÄ »ç¶÷ÀÌ Á÷Á¢ Ãâ·ÂÀ» ÆíÁýÇÑ´Ù°í Çϸé ÇÒ ¼ö ÀÖ´Â ÇÑ ¹®ÀÚ ¿£Æ¼Æ¼ ÂüÁ¶¸¦ »ç¿ëÇØ¶ó ±×·¸Áö ¾Ê´Ù¸é ÀúÀÚ´Â ÇÁ·Î±×·¡¹ÖÇϱ⠽¬¿î ½ÊÁø¹ý ¼öÄ¡ ¹®ÀÚ ÂüÁ¶¸¦ »ç¿ëÇÑ´Ù. ÀÌ·¯ÇÑ ÀÎÄÚµù ½Ã½ºÅÛÀº ƯÈ÷ ¾Æ½Ã¾Æ±Ç ¾ð¾î¿¡ ´ëÇØ ¸Å¿ì ºñÈ¿À²ÀûÀÌ´Ù; À̰ÍÀÌ ¿ì¼± °ü½É»ç¶ó¸é ´Ù¸¥ ¹®ÀÚ ÀÎÄÚµù (charset) À» »ç¿ëÇϰųª Áß¿äÇÑ ¹®ÀÚ¸¦ ÇÊÅ͸µÇϰųª Áß¿äÇÑ ¹®ÀÚ¿¡ ´ëÇØ ¾î¶² ´ëü ÀÎÄÚµùµµ Çã¿ëµÇÁö ¾Ê´ÂÁö È®ÀÎÇÏ°í ½ÍÀ» °ÍÀÌ´Ù. URI ´Â URL ÀÎÄÚµùÀ̶ó°í ÇÏ´Â ÀڽŸ¸ÀÇ ÀÎÄÚµù ½ºÅ´À» °®°í ÀÖ´Ù. ÀÌ·¯ÇÑ ½Ã½ºÅÛ¿¡¼ URL ¿¡ Çã¿ëµÇÁö ¾ÊÀº ¹®ÀÚ´Â ÆÛ¼¾Æ®±âÈ£¿Í two-digit ½ÊÀ°Áø¼ö°ªÀ¸·Î Ç¥ÇöµÈ´Ù. ISO 10646 (Unicode) ÀÇ ¸ðµç °ÍÀ» ´Ù·ç±â À§Çؼ´Â ¿ì¼± Äڵ带 UTF-8 ·Î º¯È¯ÇÑ ÈÄ À̸¦ ÀÎÄÚµåÇϱ⸦ ÃßõÇÑ´Ù. À¯È¿ÇÑ URI ¿¡ ´ëÇØ¼´Â 4.10.4절 ¸¦ º¸¶ó. 6.14. µ¥ÀÌŸ ŸÀÔ¿¡ ÁÖÀÇÇØ¶ó»ç¿ëµÈ µ¥ÀÌŸ ŸÀÔ¿¡ ÁÖÀÇÇØ¶ó. ƯÈ÷ ÀÎÅÍÆäÀ̽º¿¡¼ »ç¿ëµÈ µ¥ÀÌŸ ŸÀÔ¿¡ ÁÖÀÇÇØ¾ß Çϴµ¥ ¿¹¸¦ µé¾î "signed" ¿Í "unsigned" °ªµéÀº C ¶Ç´Â C++ °ú °°Àº ¸¹Àº ¾ð¾îµé¿¡¼ ´Ù¸£°Ô 󸮵ȴÙ. 7장. ´Ù¸¥ ÀÚ¿øÀ» ÁÖÀDZí°Ô È£ÃâÇØ¶ó
»ç½Ç»ó Á¤È®È÷ µ¶¸³ÀûÀÎ ÇÁ·Î±×·¥Àº ¾ø´Ù; °ÅÀÇ ¸ðµç ÇÁ·Î±×·¥µéÀº ¿î¿µ üÁ¦°¡ Á¦°øÇÏ´Â ÇÁ·Î±×·¥, ¼ÒÇÁÆ®¿þ¾î ¶óÀ̺귯¸® µî°ú °°Àº ÀÚ¿ø¿¡ ´ëÇØ ´Ù¸¥ ÇÁ·Î±×·¥À» È£ÃâÇÑ´Ù. ¶§¶§ ´Ù¸¥ ÀÚ¿ø¿¡ ´ëÇÑ ÀÌ È£ÃâÀº ¸í¹éÇÏÁö ¾Ê°Å³ª ¶Ç´Â ÀÇÁ¸ÇØ¾ß ÇÏ´Â ¸¹Àº ¼û°ÜÁø ÀÎÇÁ¶ó (¿¹, µ¿Àû ¶óÀ̺귯¸®¸¦ ±¸ÇöÇϱâ À§ÇÑ ¸ÞÄ«´ÏÁò) ¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù. ºÐ¸íÈ÷ ÇÁ·Î±×·¥ÀÌ ¾î¶² ´Ù¸¥ ÀÚ¿øÀ» ½Å·ÚÇØ¾ß ÇÏ´ÂÁö¿¡ ´ëÇØ ÁÖÀÇÇØ¾ß ÇÏ¸ç ¹Ýµå½Ã ±×µé¿¡ ¿äûÀ» º¸³»¾ß ÇÑ´Ù. 7.1. ¾ÈÀüÇÑ ¶óÀ̺귯¸® ·çƾ¸¸ È£ÃâÇØ¶ó¶§¶§·Î º¸¾È°ú Ãß»óÈ (Á¤º¸ ¼û±â±â, Information Hiding) ¹× Àç»ç¿ëÀÇ °³¹ß ¿ø¸®µé°£¿¡´Â ¸ð¼øÀÌ Á¸ÀçÇÑ´Ù. ¹®Á¦´Â ¾î¶² °í¼öÁØ ¶óÀ̺귯¸® ·çƾµéÀÌ º¸¾ÈÀûÀ¸·Î ±¸ÇöµÉ ¼ö ÀÖ´Â Áö ¶Ç´Â ¾Æ´ÑÁö·Î À̵éÀÇ ½ºÆåÀ» ÅëÇØ ¾Ë ¼ö´Â ¾øÀ» °ÍÀÌ´Ù. ƯÁ¤ ±¸ÇöÀÌ º¸¾ÈÀûÀ̶ó ÇÒÁö¶óµµ ·çƾÀÇ ´Ù¸¥ ¹öÀüÀÌ º¸¾ÈÀûÀÎÁö ¶Ç´Â µ¿ÀÏÇÑ ÀÎÅÍÆäÀ̽º°¡ ´Ù¸¥ Ç÷§Æû¿¡¼ º¸¾ÈÀûÀÎ °ÍÀÎÁö¸¦ º¸ÁõÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÒ ¼öµµ ÀÖ´Ù. °á±¹ ¾ÖÇø®ÄÉÀ̼ÇÀÌ º¸¾ÈÀûÀ̾î¾ß ÇÑ´Ù¸é ¶§¶§·Î °¢ÀÚÀÇ ¶óÀ̺귯¸® ·çƾµéÀ» À籸ÇöÇØ¾ß ÇÑ´Ù. ±âº»ÀûÀ¸·Î ¶óÀ̺귯¸® ·çƾµéÀÌ º¸¾È¿¡ ¿ä±¸µÇ´Â ÇÊ¿äÇÑ µ¿ÀÛÀ» ¼öÇàÇÒ °ÍÀ̶ó°í È®½ÅÇÒ ¼ö ¾ø´Ù¸é ·çƾµéÀ» À籸ÇöÇØ¾ß ÇÑ´Ù. ´õ±¸³ª ¾î¶² °æ¿ì ¶óÀ̺귯¸®ÀÇ ±¸ÇöÀº ¼öÁ¤µÇ¾î¾ß Çϴµ¥ º¸¾È¿¡ Ãë¾àÇÑ ¶óÀ̺귯¸® ·çƾÀ» ¼±ÅÃÇÑ´Ù¸é ¼ÕÇØ¸¦ ÀÔÀ» ¼ö ÀÖ´Â »ç¶÷Àº »ç¿ëÀÚµéÀÌ´Ù. ÇÒ ¼ö ÀÖ´Ù¸é ¹«¾ùÀΰ¡¸¦ À籸ÇöÇØ¾ß ÇÒ ¶§´Â °í¼öÁØ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ·Á°í ³ë·ÂÇØ¶ó - ÀÌ·¸°Ô ÇÔÀ¸·Î½á ±× »ç¿ëÀÌ º¸¾ÈÀûÀÎ ½Ã½ºÅÛ¿¡¼ °í¼öÁØ ÀÎÅÍÆäÀ̽º·Î ÀüȯÇÒ ¼ö ÀÖ´Ù. ÇÒ ¼ö ÀÖ´Ù¸é ·çÆ¾ÀÌ º¸¾ÈÀûÀÎÁö ¶Ç´Â ±×·¸Áö ¾ÊÀº Áö¸¦ º¸±âÀ§ÇØ °Ë»çÇÏ°í º¸¾ÈÀûÀ̶ó¸é À̸¦ »ç¿ëÇØ¶ó - ¿øÄ¢ÀûÀ¸·Î´Â ÄÄÆÄÀÏ ¶Ç´Â ¼³Ä¡ÀÇ ÇÑ ºÎºÐÀ¸·Î ÀÌ °Ë»ç¸¦ ¼öÇàÇÒ ¼ö ÀÖ´Ù (¿¹, "autoconf" ½ºÅ©¸³Æ®ÀÇ ÇѺκÐÀ¸·Î). ¾î¶² Á¶°Ç¿¡¼´Â ÀÌ·¯ÇÑ Á¾·ùÀÇ ·±Å¸ÀÓ °Ë»ç°¡ ºñÇö½ÇÀûÀÌÁö¸¸ ´Ù¸¥ Á¶°Ç¿¡¼´Â ¸¹Àº ¹®Á¦µéÀ» Á¦°ÅÇÒ ¼ö ÀÖ´Ù. ¶óÀ̺귯¸®¸¦ À籸ÇöÇÏÁö ¾Ê´Â´Ù¸é ÃÖ¼ÒÇÑ ¾ÈÀüÇÑÁö È®ÀÎÇÏ°í ±×·¸Áö ¾Ê´Ù¸é ¼³Ä¡¸¦ ÁßÁöÇØ¶ó. ÀÌ·¸°Ô ÇÔÀ¸·Î½á »ç¿ëÀÚ°¡ ¶æÇÏÁö ¾Ê°Ô ºñº¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ¼³Ä¡ÇÏÁö ¾ÊÀ» °ÍÀÌ¸ç ¹®Á¦°¡ ¹«¾ùÀÎÁö¸¦ ¾Ë °ÍÀÌ´Ù. 7.2. È£ÃâÀ» ÇÕ´çÇÑ °ªÀ¸·Î Á¦ÇÑÇØ¶ó¹Ýµå½Ã ¸ðµç ´Ù¸¥ ÇÁ·Î±×·¥¿¡ ´ëÇÑ È£ÃâÀÌ ¸ðµç ¸Å°³º¯¼ö¿¡ ´ëÇØ Ÿ´çÇÏ°í ¿¹»óÇÑ °ªµé¸¸À» Çã¿ëÇÏ°Ô ÇØ¶ó. ÀÌ´Â ¸¹Àº ¶óÀ̺귯¸® È£Ãâµé ¶Ç´Â ¸í·ÉµéÀÌ ÀáÀçÀûÀ¸·Î ¿¹±âÄ¡ ¾ÊÀº ¹æ½ÄÀ¸·Î ´õ¿í Àú¼öÁØ ·çƾµéÀ» È£ÃâÇϱ⠶§¹®¿¡ »ý°¢°ú´Â ´Þ¸® ´õ¿í ¾î·Æ´Ù. ¿¹¸¦ µé¾î, popen(3) °ú system(3) °ú °°Àº ¸î¸î ½Ã½ºÅÛ È£ÃâµéÀº ¸í·É ½©À» È£ÃâÇÔÀ¸·Î½á ±¸ÇöµÇ´Âµ¥ ÀÌ´Â ½© ¸ÞŸ¹®Àڵ鿡 ÀÇÇØ ¿µÇâÀ» ¹ÞÀ» °ÍÀÓÀ» ÀǹÌÇÑ´Ù. ºñ½ÁÇÏ°Ô execlp(3) °ú execvp(3) µé¶§¹®¿¡ ½©ÀÌ È£ÃâµÉ ¼öµµ ÀÖ´Ù. ¸¹Àº ÁöħµéÀº ÇÁ·Î¼¼½º¸¦ »ý¼º½ÃŰ·Á°í ÇÒ ¶§´Â popen(3), system(3), execlp(3) °ú execvp(3) µéÀ» ÀüºÎ ÇÇÇϰí C ¿¡¼ execve(3) À» Á÷Á¢ÀûÀ¸·Î »ç¿ëÇ϶ó°í Á¦¾ÈÇϰí ÀÖ´Ù [Galvin 1998b]. Àû¾îµµ execve(3) À» »ç¿ëÇÒ ¼ö ÀÖÀ» ¶§´Â system(3) ¸¦ »ç¿ëÇÏ´Â °ÍÀ» ÇÇÇØ¶ó; system(3) Àº ¹®ÀÚµéÀ» Àü°³Çϱâ À§ÇØ ½©À» »ç¿ëÇϱ⠶§¹®¿¡ ÀÌ´Â ´õ¿í ¸¹Àº ¾Ç¿µÇâÀ» ³¢Ä¥ ±âȸ°¡ ÀÖ´Ù. ºñ½ÁÇÑ ¹æ½ÄÀ¸·Î ÆÞ°ú ½©ÀÇ backtick (`) ¶ÇÇÑ ¸í·É½©À» È£ÃâÇÑ´Ù; ÆÞ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 9.2절 À» º¸¶ó. ½© ¸ÞŸ¹®ÀÚµéÀº ÀÌ ¹®Á¦µé Áß °¡Àå ´Ù·ç±â Èûµç ¿¹µéÁßÀÇ Çϳª·Î Ç¥ÁØ À¯´Ð½º °è¿ ¸í·É½© (/bin/sh ¿¡ ÀúÀåµÈ) Àº ¸¹Àº ¹®ÀÚµéÀ» Ưº°È÷ ÇØ¼®ÇÑ´Ù. ÀÌ·¯ÇÑ ¹®ÀÚµéÀÌ ½©·Î º¸³»Áö¸é À̵éÀÇ Æ¯º°ÇÑ ÇØ¼®ÀÌ À̽ºÄÉÀÌÇÁµÇÁö ¾Ê´Â´Ù¸é »ç¿ëµÉ °ÍÀÌ´Ù; ÀÌ »ç½ÇÀÌ ÇÁ·Î±×·¥À» ÆÄ±«Çϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. WWW º¸¾È FAQ [Stein 1999, Q37] ¿¡ µû¸£¸é ÀÌ·¯ÇÑ ¹®ÀÚµéÀº ´ÙÀ½°ú °°´Ù:
¸¹Àº »óȲ¿¡ ÀÖ¾î Åǰú °ø¹é ¹®ÀÚµéÀ» À̽ºÄÉÀÌÇÁÇÏ±æ ¿øÇÒ °ÍÀ̶ó°í ÀúÀÚ´Â ¾ð±ÞÇØ¾ß Çϴµ¥ ¿Ö³ÄÇϸé À̵é (°ú °³Çà) Àº µðÆúÆ® ¸Å°³º¯¼ö ºÐ¸®ÀÚµéÀ̱⠶§¹®ÀÌ´Ù. ºÐ¸®ÀÚ °ªµéÀº IFS ȯ°æ º¯¼ö¸¦ ¼³Á¤ÇÔÀ¸·Î½á º¯°æµÉ ¼ö ÀÖÁö¸¸ ÀÌ º¯¼öÀÇ Ãâó¸¦ ¹ÏÀ» ¼ö ¾ø´Ù¸é À̸¦ ¹ö¸®°Å³ª ¾î·µç ȯ°æ º¯¼ö ó¸®ÀÇ ÀϺκÐÀ¸·Î Àç¼³Á¤ÇØ¾ß ÇÑ´Ù. ºÒÇàÈ÷µµ ½ÇÁ¦ ÀÌ´Â ¿ÏÀüÇÑ ¸ñ·ÏÀÌ ¾Æ´Ï¸ç ´ÙÀ½Àº ¹®Á¦°¡ ÀÖÀ» ¼ö ÀÖ´Â ¾à°£ÀÇ ´Ù¸¥ ¹®ÀÚµéÀÌ´Ù:
ÀÌ·¯ÇÑ ¹®ÀÚµéÁß ÇѰ³¶óµµ Àش´ٸé Àç³À» ÃÊ·¡ÇÒ ¼öµµ Àִµ¥ ¿¹¸¦ µé¾î ¸¹Àº ÇÁ·Î±×·¥µéÀº ¹é½½·¡½¬¸¦ ¸ÞŸ¹®Àڷμ »ý·«ÇÑ´Ù [rfp 1999]. 4장 ¿¡ ³íÀǵǾúµíÀÌ ´©±º°¡¿¡ ÀÇÇØ ÃßõµÇ´Â Á¢±Ù ¹æ¹ýÀº Àû¾îµµ ÀÌ·¯ÇÑ ¹®ÀÚµéÀÌ ÀÔ·ÂÀÏ ¶§ ¸ðµç ¹®ÀÚ¸¦ Áï°¢ÀûÀ¸·Î À̽ºÄÉÀÌÇÁÇÏ´Â °ÍÀÌ´Ù. ±×·¯³ª ´õ¿í ÃÖ¼±ÀÇ Á¢±Ù ¹æ¹ýÀº ¾î¶² ¹®ÀÚµéÀ» Çã¿ëÇÏ±æ ¹Ù¶ó´ÂÁö ½Äº°ÇÏ¿© ´ÜÁö ÀÌ·¯ÇÑ ¹®Àڵ鸸 Çã¿ëÇϵµ·Ï ÇÊÅ͸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ¸¹Àº ÇÁ·Î±×·¥µé ƯÈ÷ ´ëȽÄÀ¸·Î ¼³°èµÈ ÇÁ·Î±×·¥µéÀº ``Ưº°ÇÑ" ±â´ÉÀ» ¼öÇàÇÏ´Â "escape" Äڵ带 °®°í ÀÖ´Ù. °¡Àå º¸ÆíÀûÀÎ (¶ÇÇÑ À§ÇèÇÑ) À̽ºÄÉÀÌÇÁ ÄÚµåÁßÀÇ Çϳª´Â ¸í·É ÇàÀ» ÃÊ·¡ÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ "escape" ¸í·ÉµéÀÌ Æ÷Ç﵃ ¼ö ¾øµµ·Ï È®ÀÎÇØ¶ó (ƯÁ¤ ¸í·ÉÀÌ ¾ÈÀüÇÏ´Ù°í È®½ÅÇÏÁö ¸øÇÑ´Ù¸é). ¿¹¸¦ µé¾î, ¸¹Àº ¶óÀÎ ÁöÇâ ¸ÞÀÏ ÇÁ·Î±×·¥ (mail °ú mailx °°Àº) µéÀº Æ¿µå (~) ¸¦ À̽ºÄÉÀÌÇÁ ¹®Àڷμ »ç¿ëÇϴµ¥ ÀÌ ¹®ÀÚ´Â ¸¹Àº ¸í·ÉÀ» º¸³»±â À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Ù. ±× °á°ú·Î "mail admin < file-from-user" ¿Í °°ÀÌ ¸í¹éÈ÷ ÇØ·ÓÁö ¾ÊÀº ¸í·ÉµéÀÌ ÀÓÀÇÀÇ ÇÁ·Î±×·¥µéÀ» ½ÇÇà½Ã۱â À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Ù. vi, emacs ¿Í ed ¿Í °°Àº ´ëÈ½Ä ÇÁ·Î±×·¥µéÀº »ç¿ëÀÚµéÀÌ ±×µé ¼¼¼ÇÀ¸·ÎºÎÅÍ ÀÓÀÇÀÇ ½© ¸í·ÉµéÀ» ½ÇÇà½Ã۵µ·Ï Çã¿ëÇÏ´Â "escape" ¸ÞÄ«´ÏÁòÀ» °®°í ÀÖ´Ù. À̽ºÄÉÀÌÇÁ ¸ÞÄ«´ÏÁòÀ» °Ë»öÇϱâ À§Çؼ´Â È£ÃâÇÏ´Â ÇÁ·Î±×·¥µéÀÇ ¹®¼µéÀ» ´Ã Á¶»çÇØ¶ó. ´Ù¸¥ ÇÁ·Î±×·¥¿¡ ÀÇÇØ »ç¿ëµÉ ÇÁ·Î±×·¥¸¸À» È£ÃâÇÏ´Â °ÍÀÌ ÃÖ¼±ÀÌ´Ù; 7.3절 ¸¦ º¸¶ó. À̽ºÄÉÀÌÇÁ ÄÚµåµéÀ» ÇÇÇÏ´Â ¹®Á¦´Â ´õ¿í Àú¼öÁØ Çϵå¿þ¾î ÄÄÆ÷³ÍÆ®µé°ú À̵éÀÇ ¿¡¹Ä·¹ÀÌÅ͵é·Î ³»·Á°£´Ù. ´ëºÎºÐÀÇ ¸ðµ©µéÀº ¼ÒÀ§ "Hayes" Ä¿¸Çµå¼ÂÀ» ±¸ÇöÇϴµ¥ ÀÌ Ä¿¸Çµå¼ÂÀÌ ±ÝÁöµÇÁö ¾Ê´Â´Ù¸é ¹®±¸ ``+++" ÀÎ Áö¿¬ ¹× ´Ù¸¥ Áö¿¬À» ¾ß±âÇØ ¸ðµ©¿¡°Ô ¸ðµç ´ÙÀ½ÀÇ ÅØ½ºÆ®¸¦ ¸ðµ©¿¡ ´ëÇÑ ¸í·Éµé·Î ÇØ¼®ÇϰԲû ÇÑ´Ù. ÀÌ´Â ¼ºñ½º ºÎÀÎ °ø°Ý (´ÜÀý ¸í·É¾î ``ATH0" ¸¦ ¼³Á¤ÇÔÀ¸·Î½á) ¶Ç´Â »ç¿ëÀÚ¿¡°Ô ´Ù¸¥ ´©±º°¡¿¡ ¿¬°áÇϵµ·Ï ÇÏ´Â °ÍÀ» ±¸ÇöÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù (»ó±Þ °ø°ÝÀÚ´Â ÀÚ½ÅÀÇ Á¦¾îÇÏ¿¡ ÀÖ´Â ¸Ó½ÅÀ» ÅëÇØ »ç¿ëÀÚ°¡ ¿¬°áÇϵµ·Ï ¶ó¿ìÆÃ ¼³Á¤À» ´Ù½Ã ÇÒ ¼ö ÀÖ´Ù). ƯÁ¤ ¸ðµ©ÀÇ °æ¿ì ÀÌ¿¡ ´ëóÇÏ´Â °ÍÀº ½±Áö¸¸ (¿¹, ¸ðµ© ÃʱâÈ ¹®ÀÚ¿¿¡ ``ATS2-255" ¸¦ Ãß°¡ÇÑ´Ù) ¾ÆÁ÷µµ ÀϹÝÀûÀÎ ¹®Á¦´Â ³²¾ÆÀÖ´Ù: ÇÏÀ§ ¼öÁØ ÄÄÆ÷ÅÏÆ® ¶Ç´Â ÀÌÀÇ ¿¡¹Ä·¹À̼ÇÀ» Á¦¾îÇϰí ÀÖ´Ù¸é ¹Ýµå½Ã Ä¿¸Çµå¼ÂÀ» ±ÝÁöÇϰųª ±×·¸Áö ¾ÊÀº °æ¿ì ³»ÀåµÇ¾î ÀÖ´Â ¸ðµç À̽ºÄÉÀÌÇÁ Äڵ带 ´Ù·ç¾î¾ß ÇÑ´Ù. ¸¹Àº "Å͹̳Î" ÀÎÅÍÆäÀ̽ºµéÀº VT-100 °°Àº ¿¹ÀüÀÇ ¿À·¡Àü¿¡ »ç¶óÁø ¹°¸®Àû Å͹̳ÎÀÇ À̽ºÄÉÀÌÇÁ ÄÚµåµéÀ» ±¸ÇöÇÑ´Ù. ÀÌ·¯ÇÑ ÄÚµåµéÀº À¯¿ëÇÒ ¼ö Àִµ¥ ¿¹¸¦ µé¾î ¹®ÀÚ¸¦ ±½°Ô Çϱâ, ÆùÆ®»ö º¯°æÇϱ⠶Ǵ Å͹̳ΠÀÎÅÍÆäÀ̽º³»¿¡¼ Ưº°ÇÑ À§Ä¡·Î À̵¿Çϴµ¥ À¯¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÓÀÇÀÇ ½Å·ÚµÇÁö ¾ÊÀº µ¥ÀÌŸ°¡ Å͹̳Π½ºÅ©¸°À¸·Î Á÷Á¢ º¸³»Áöµµ·Ï Çã¿ëÇÏÁö ¸¶¶ó ¿Ö³ÄÇϸé ÀÌ·¯ÇÑ ÄÚµåµéÀÇ ÀϺΰ¡ ½É°¢ÇÑ ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¾î¶² ½Ã½ºÅÛ¿¡¼ ۵éÀ» ´Ù½Ã ¹èÄ¡ÇÒ ¼ö ÀÖ´Ù (¿¹, µû¶ó¼ »ç¿ëÀÚ°¡ "¿£ÅÍ" ¶Ç´Â function ۸¦ ´©¸¦¶§ ÀÌ´Â ½ÇÇà½ÃŰ±æ ¿øÇÏ´Â ¸í·ÉÀ» º¸³½´Ù). ¾î¶² ½Ã½ºÅÛ¿¡¼´Â ½ºÅ©¸°À» Áö¿ì°í victim ÀÌ ½ÇÇà½ÃÄ×À¸¸é ÇÏ´Â ÀÏ·ÃÀÇ ¸í·ÉµéÀ» Ç¥½ÃÇÑ ÈÄ ÀÌµé ¸í·É¼ÂÀ» ´Ù½Ã µ¹·Áº¸³» victim ¿¡°Ô Ű½ºÆ®·ÎÅ©¸¦ ±â´Ù¸®Áö ¾Ê°í °ø°ÝÀÚ°¡ ¼±ÅÃÇÑ ¸í·ÉµéÀ» ½ÇÇà½ÃŰ°Ô ÇÏ´Â Äڵ带 º¸³¾ ¼öµµ ÀÖ´Ù. ÀÌ´Â "ÆäÀÌÁö ¸ðµå ¹öÆÛ¸µ" À» »ç¿ëÇØ¼ ÀϹÝÀûÀ¸·Î ±¸ÇöµÇ´Âµ¥ ÀÌ·¯ÇÑ º¸¾È ¹®Á¦°¡ ¿Ö ¿¡¹Ä·¹ÀÌÆ®µÈ tty (º¸Åë /dev/ ³»ÀÇ µð¹ÙÀ̽º ÆÄÀϵé·Î Ç¥ÇöµÇ´Â) µéÀÌ À̵éÀÇ ¼ÒÀ¯Àڵ鿡°Ô¸¸ ¾²±â°¡´ÉÇÏ¸ç ´Ù¸¥ ´©±¸¿¡°Ôµµ Çã¿ëµÇÁö ¾Ê´Â ÀÌÀ¯ÀÌ´Ù - À̵éÀº Àý´ë·Î "other write", Çã°¡±ÇÀÌ ¼³Á¤µÇ¾î¼´Â ¾ÈµÇ¸ç ´ÜÁö »ç¿ëÀÚ¸¸ÀÌ ±×·ìÀÇ ¸â¹ö°¡ ¾Æ´Ï¶ó¸é (Áï, "user-private group" ½ºÅ´ÀÌ ¾Æ´Ï¶ó¸é) "group write" Çã°¡±ÇÀÌ Å͹̳ο¡ ´ëÇØ ¼³Á¤µÇÁö ¾Ê¾Æ¾ß ÇÑ´Ù [Filipski 1986]. ¸ð»çµÈ Å͹̳ο¡¼ »ç¿ëÀÚ¿¡°Ô µ¥ÀÌŸ¸¦ Ç¥½ÃÇÏ·Á¸é »ç¿ëÀÚ¿¡°Ô µÇº¸³»Áö´Â µ¥ÀÌŸÀÇ ¸ðµç Á¦¾î ¹®ÀÚ (32 ¹Ì¸¸ÀÇ °ªÀ» °®´Â ¹®ÀÚ) µéÀº ¾ÈÀüÇÏ´Ù°í È®ÀεÇÁö ¾Ê´Â´Ù¸é ¾Æ¸¶µµ ÇÊÅ͸µµÇ¾î Á¦°ÅµÉ Çʿ䰡 ÀÖ´Ù. ³ª»Û °ÍÀº ´õ¿í ¾ÇȵǴµ¥ Åǰú °³Çà (°ú ¾Æ¸¶µµ carriage return) ÀÌ ¾ÈÀüÇÏ´Ù°í ½Äº°ÇÒ ¼ö ÀÖÀ¸¸ç ³ª¸ÓÁö´Â ¸ðµÎ Á¦°ÅÇÑ´Ù. high ºñÆ®°¡ ¼³Á¤µÈ ¹®ÀÚ (127 º¸´Ù Å« °ª) µéÀº ¾î¶² ¹æ½Ä¿¡¼´Â ´Ù·ç±â°¡ ´õ¿í ¾î·Æ´Ù; ¾î¶² ¿¹Àü ½Ã½ºÅÛµéÀº À̵éÀÌ ¼³Á¤µÇÁö ¾ÊÀº °Íó·³ À̵éÀ» ´Ù·çÁö¸¸ ´Ü¼øÈ÷ À̵éÀ» ÇÊÅ͸µÇÏ´Â °ÍÀº ¸¹Àº ±¹Á¦Àû »ç¿ëÀ» ±ÝÁöÇÑ´Ù. ÀÌ·± °æ¿ì ¸íÈ®ÇÑ »óȲÀ» »ìÆìº¼ Çʿ䰡 ÀÖ´Ù. °ü·Ã ¹®Á¦´Â NIL ¹®ÀÚ (¹®ÀÚ 0) °¡ ¿¹±âÄ¡ ¾ÊÀº È¿°ú¸¦ °¡Áú ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ´ëºÎºÐÀÇ C ¿Í C++ ÇÔ¼öµéÀº ÀÌ ¹®ÀÚ°¡ ¹®ÀÚ¿ÀÇ ³¡À» Ç¥½ÃÇÑ´Ù°í °¡Á¤ÇÏÁö¸¸ ´Ù¸¥ ¾ð¾î (ÆÞ°ú Ada95¿Í °°Àº) µé¿¡¼´Â ¹®ÀÚ¿À» ´Ù·ç´Â ·çƾµéÀÌ NIL À» Æ÷ÇÔÇÑ ¹®ÀÚ¿µéÀ» ´Ù·ê ¼ö ÀÖ´Ù. ¸¹Àº ¶óÀ̺귯¸®µé°ú Ä¿³Î È£ÃâµéÀÌ C °ü·Ê¸¦ »ç¿ëÇϱ⠶§¹®¿¡ °á°úÀûÀ¸·Î °Ë»çµÈ °ÍÀÌ ½ÇÁ¦ »ç¿ëµÈ °ÍÀº ¾Æ´Ï´Ù [rfp 1999]. ´Ù¸¥ ÇÁ·Î±×·¥À» È£ÃâÇϰųª ÆÄÀÏÀ» ÂüÁ¶ÇÒ¶§´Â ´Ã Àý´ë °æ·Î (¿¹, /usr/bin/sort) ¸¦ ÁöÁ¤Çضó. ÇÁ·Î±×·¥ È£ÃâÀÇ °æ¿ì ÀÌ´Â PATH °ªÀÌ À߸ø ¼³Á¤µÇ¾î ÀÖ´õ¶óµµ À߸øµÈ ¸í·ÉÀ» È£ÃâÇÒ ¶§ÀÇ °¡´ÉÇÑ ¿¡·¯µéÀ» Á¦°ÅÇÒ °ÍÀÌ´Ù. ´Ù¸¥ ÆÄÀÏ ÂüÁ¶ÀÇ °æ¿ì ÀÌ´Â ¿Ã¹Ù¸£Áö ¾ÊÀº ½ÃÀÛ µð·ºÅ丮·ÎºÎÅÍ ¹ß»ýÇÏ´Â ¹®Á¦µéÀ» ÁÙÀδÙ. 7.3. ÇÁ·Î±×·¡¸Ó°¡ »ç¿ëÇϵµ·Ï ÀǵµµÈ ÀÎÅÍÆäÀ̽º¸¸ È£ÃâÇØ¶óÇÁ·Î±×·¥ÀÌ »ç¿ëÇϵµ·Ï ÀǵµµÈ API (application programming interface) ¸¸ È£ÃâÇØ¶ó. º¸Åë ÇÁ·Î±×·¥Àº ´ëÈ½Ä ÇÁ·Î±×·¥µéÀ» Æ÷ÇÔÇÏ¿© ¸ðµç ´Ù¸¥ ÇÁ·Î±×·¥µéÀ» È£ÃâÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Àΰ£ÀÌ È£ÃâÇÏ´Â ¹æ½Ä°ú µ¿ÀÏÇÏ°Ô ´ëÈ½Ä ÇÁ·Î±×·¥À» È£ÃâÇÏ´Â °ÍÀº º¸Åë Çö¸íÇÏÁö ¾Ê´Ù. ¹®Á¦´Â ÇÁ·Î±×·¥ÀÇ human ÀÎÅÍÆäÀ̽ºµéÀÌ ÀǵµÀûÀ¸·Î ±â´É¼ºÀÌ Ç³ºÎÇϸç Á¾Á¾ ¿ÏÀüÈ÷ Á¦¾îÇÏ±â ¾î·Æ´Ù´Â °ÍÀÌ´Ù. 7.2절 ¿¡ ³íÀǵǾúµíÀÌ ´ëÈ½Ä ÇÁ·Î±×·¥µéÀº ´ë°³ "escape" ÄÚµåµéÀ» °®À¸¸ç ÀÌ´Â °ø°ÝÀÚ°¡ ÇØ·Î¿î ±â´ÉµéÀ» ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ¶ÇÇÑ ´ëÈ½Ä ÇÁ·Î±×·¥µéÀº ´ë°³ "°¡Àå ±×·²µíÇÑ (most likely)" µðÆúÆ®µéÀ» Á÷°¨À¸·Î ¾Ë·Á°í ÇÑ´Ù; ÀÌ´Â ¿¹»óÇß´ø µðÆúÆ®°¡ ¾Æ´Ò ¼öµµ ÀÖÀ¸¸ç °ø°ÝÀÚ±â À̸¦ ¾Ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¹ß°ßÇÒ ¼öµµ ÀÖ´Ù. º¸Åë Á÷Á¢ÀûÀ¸·Î È£ÃâÇÏÁö ¾Ê¾Æ¾ß ÇÏ´Â ÇÁ·Î±×·¥µéÀº mail, mailx, ed, vi ¿Í emacs µîÀÌ ÀÖ´Ù. ÃÖ¼ÒÇÑ À̵éÀÇ ÀÔ·ÂÀ» óÀ½¿¡ °Ë»çÇÑ ÈÄ À̵éÀ» È£ÃâÇØ¶ó. º¸Åë ÇÁ·Î±×·¥ÀÇ ±â´É¼º¿¡ º¸´Ù ¾ÈÀüÇÑ Á¢±ÙÀ» Á¦°øÇÏ´Â ¸Å°³º¯¼öµé ¶Ç´Â ÇÁ·Î±×·¥ÀÌ »ç¿ëÇϵµ·Ï ÀǵµµÈ ¿©·¯ API ¶Ç´Â ¾ÖÇø®ÄÉÀ̼ÇÀÌ ÀÖ´Ù; ´ë½Å À̵éÀ» »ç¿ëÇØ¶ó. ¿¹¸¦ µé¾î ¾î¶² ÅØ½ºÆ®¸¦ ÆíÁýÇϱâ À§ÇØ ÅØ½ºÆ® ¿¡µðÅÍ (ed, vi ¶Ç´Â emacs) ¸¦ È£ÃâÇÏ´Â ´ë½Å °¡´ÉÇÑ sed ¸¦ »ç¿ëÇØ¶ó. 7.4. ¸ð½¼ ½Ã½ºÅÛ È£Ãâ ¹ÝȯÀ» °Ë»çÇØ¶ó¿¡·¯ »óŸ¦ ¹ÝȯÇÒ ¼ö ÀÖ´Â ¸ðµç ½Ã½ºÅÛ È£ÃâÀº ±× ¿¡·¯ »óŸ¦ °Ë»çÇØ¾ß ÇÑ´Ù. ÇѰ¡Áö ÀÌÀ¯´Â °ÅÀÇ ¸ðµç ½Ã½ºÅÛ È£ÃâµéÀÌ Á¦ÇÑµÈ ½Ã½ºÅÛ ÀÚ¿øµéÀ» ÇÊ¿ä·Î ÇÏ¸ç »ç¿ëÀÚµéÀº ´ë°³ ´Ù¾çÇÑ ¹æ½ÄÀ¸·Î ÀÚ¿øµé¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. Setuid/setgid ÇÁ·Î±×·¥µéÀº setrlimit(3) °ú nice(2) ¿Í °°Àº È£ÃâµéÀ» ÅëÇØ ±×µé¿¡ ´ëÇÑ Çѵµ¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¼¹ö ÇÁ·Î±×·¥µé°ú CGI ½ºÅ©¸³Æ®µéÀÇ ¿ÜºÎ »ç¿ëÀÚµéÀÌ ´Ü¼øÈ÷ ¸¹Àº ¼öÀÇ µ¿½Ã ¿äûÀ» ÇÔÀ¸·Î½á ÀÚ¿ø °í°¥À» ÀÏÀ¸Å³ ¼ö ÀÖÀ»Áöµµ ¸ð¸¥´Ù. ¿¡·¯°¡ ÈǸ¢È÷ ´Ù·ïÁú ¼ö ¾ø´Ù¸é ¾Õ¿¡¼ ³íÀÇÇÑ ¹Ù¿Í °°ÀÌ ¿¡·¯¸¦ ÇÑ ºÎºÐ¿¡ ±¹ÇѽÃÄÑ Àüü ½Ã½ºÅÛÀÌ ¿ÏÀüÈ÷ ¸¶ºñµÇ´Â °ÍÀ» ¹æÁöÇÏ°í ¼öÇàÀ» °è¼ÓÇÒ ¼ö ÀÖµµ·Ï ÇØ¶ó. 7.5. vfork(2) »ç¿ëÀ» ÇÇÇØ¶óÀ¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÏ´Â À̽ļº ÀÖ´Â ¹æ¹ýÀº fork(2) È£ÃâÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. BSD ´Â ÃÖÀûÈ ±â¹ýÀ¸·Î vfork(2) ¶ó´Â º¯ÇüÀ» µµÀÔÇÏ¿´´Âµ¥ vfork(2) ¿¡¼´Â fork(2) ¿Í´Â ´Þ¸® ÀÚ½ÄÀº execve(2V) ¶Ç´Â exit È£ÃâÀÌ ÀϾ ¶§±îÁö ºÎ¸ðÀÇ Á¦¾î ¸Þ¸ð¸®¿Í ¾²·¹µå¸¦ ºô¸°´Ù; ºÎ¸ð ÇÁ·Î¼¼½º´Â ÀϽà Á¤ÁöµÈ ¹Ý¸é ÀÚ½ÄÀº ±× ÀÚ¿øµéÀ» »ç¿ëÇϰí ÀÖ´Ù. ¿¹Àü BSD ½Ã½ºÅÛ¿¡¼ fork(2) °¡ ½ÇÁ¦·Î ¸Þ¸ð¸®°¡ º¹»çµÇµµ·Ï ÇÒ ¼ö ÀÖ´Â ¹Ý¸é vfork(2) ´Â ±×·¸Áö ¾ÊÀ» °ÍÀÌ´Ù¶ó´Â °ÍÀÌ ±Ùº»Àû ÀÌÀ¯¿´´Ù. ¸®´ª½º´Â ÀüÇô ÀÌ·¯ÇÑ ¹®Á¦°¡ ¾ø¾ú´Ù; ¸®´ª½º´Â copy-on-write (write ÇÏ´Â µ¿¾È º¹»ç) ÀÇ¹Ì Ã¼°è¸¦ ³»ºÎÀûÀ¸·Î »ç¿ëÇ߱⠶§¹®¿¡ ÆäÀÌÁöµéÀÌ º¯°æµÇ¾úÀ» ¶§¸¸ ´ÜÁö À̵éÀ» º¹»çÇÑ´Ù (½ÇÁ¦·Î º¹»çµÇ¾î¾ß ÇÏ´Â ¾î¶² Å×À̺íÀÌ Àִµ¥ ´ëºÎºÐ »óȲ¿¡¼ À̵éÀÇ ¿À¹öÇìµå°¡ Å«ÆíÀº ¾Æ´Ï´Ù). ±×·³¿¡µµ ºÒ±¸ÇÏ°í ¾î¶² ÇÁ·Î±×·¥µéÀº vfork(2) ¿¡ ÀÇÁ¸Çϱ⠶§¹®¿¡ ÃÖ±Ù ¸®´ª½º´Â BSD vfork(2) ÀÇ¹Ì Ã¼°è¸¦ ±¸ÇöÇÏ¿´´Ù (ÀÌÀü vfork(2) ´Â fork(2) ÀÇ alias ¿´´Ù). vfork(2) ¿Í °ü·ÃÇØ¼´Â ¸¹Àº ¹®Á¦°¡ ÀÖ´Ù. À̽ļº °üÁ¡¿¡¼ º¸¾ÒÀ» ´ë vfork(2) ¿Í °ü·ÃµÈ ¹®Á¦´Â ÇÁ·Î¼¼½º°¡ ±× ºÎ¸ð¸¦ °£¼·ÇÏÁö ¾Ê´Â °ÍÀÌ Æ¯È÷ °í¼öÁØ ¾ð¾î¿¡¼ ½ÇÁ¦·Î ¸Å¿ì ¾î·Æ´Ù´Â °ÍÀÌ´Ù. °£¼·ÇÏÁö ¾Ê´Â´Ù´Â ¿ä°ÇÀº ½ÇÁ¦ »ý¼ºµÈ ¸Ó½Å Äڵ忡 Àû¿ëµÇ¸ç ¸¹Àº ÄÄÆÄÀÏ·¯µéÀº ÀǵµµÇÁö ¾ÊÀº °£¼·À» ÀÏÀ¸Å°´Â ¼û°ÜÁø temporaries ¿Í ´Ù¸¥ ÄÚµå ±¸Á¶µéÀ» »ý¼ºÇÑ´Ù. °á°ú: vfork(2) ¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥µéÀº Äڵ尡 º¯°æµÉ ¶§ ¶Ç´Â ÄÄÆÄÀÏ·¯ ¹öÀüÀÌ º¯°æµÉ ¶§ ´õ¿í ½ÇÆÐÇϱ⠽¬¿ï °ÍÀÌ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÇ °æ¿ì ¸®´ª½º (Àû¾îµµ 2.2.17 ±îÁöÀÇ 2.2 ¹öÀüµé) ´Â vfork() ±¸Çö¿¡ ÀÖ¾î °æÀï »óÅ¿¡ Ãë¾àÇϱ⠶§¹®¿¡ ¸®´ª½º ½Ã½ºÅÛ¿¡¼´Â ´õ¿í ³ª»Ú´Ù. ±ÇÇÑÀ» °®´Â ÇÁ·Î¼¼½º°¡ »ç¿ëÀÚ ¸í·ÉµéÀ» ½ÇÇà½Ã۱â À§ÇØ ¸®´ª½º¿¡¼ vfork(2)/execve(2) ½ÖÀ» »ç¿ëÇÑ´Ù¸é ÀÚ½Ä ÇÁ·Î¼¼½º°¡ »ç¿ëÀÚÀÇ UID ·Î ÀÌ¹Ì ÀÛµ¿Çϰí ÀÖÁö¸¸ ¾ÆÁ÷ execve(2) ·Î µé¾î°¡Áö ¾Ê´Â µ¿¾È °æÀï »óŰ¡ Á¸ÀçÇÑ´Ù. »ç¿ëÀÚ´Â ÀÌ ÇÁ·Î¼¼½º¿¡ SIGSTOP ¸¦ Æ÷ÇÔÇÑ ½Ã±×³ÎµéÀ» º¸³¾ ¼ö ÀÖÀ»Áöµµ ¸ð¸¥´Ù. vfork(2) ÀÇ ÀÇ¹Ì Ã¼°è¶§¹®¿¡ ±ÇÇÑÀ» °®´Â ºÎ¸ð ÇÁ·Î¼¼½ºµµ ¶ÇÇÑ ºí·Ï´çÇÒ ¼ö ÀÖ´Ù. ±× °á°ú ±ÇÇÑÀÌ ¾ø´Â ÇÁ·Î¼¼½º°¡ ±ÇÇÑÀ» °®´Â ÇÁ·Î¼¼½º¿¡°Ô Á¤ÁöÇϵµ·Ï ½Ãų ¼ö ÀÖÀ¸¸ç ±ÇÇÑÀ» °®´Â ÇÁ·Î¼¼½ºÀÇ ¼ºñ½º¿¡ ´ëÇØ ¼ºñ½º ºÎÀÎ °ø°ÝÀ» ÃÊ·¡ÇÒ °ÍÀÌ´Ù. FreeBSD ¿Í OpenBSD ´Â Àû¾îµµ ÀÌ·± °æ¿ì¸¦ ¸íÈ®ÇÏ°Ô ´Ù·ç´Â Äڵ带 °®°í ÀÖÀ¸¸ç µû¶ó¼ ÀúÀÚ°¡ ¾Ë±â¿¡ ÀÌ·¯ÇÑ ¹®Á¦¿¡ Ãë¾àÇÏÁö ¾Ê´Ù. ¸®´ª½º¿¡¼ ÀÌ ¹®Á¦¸¦ ¾ð±ÞÇϰí "security-audit" ¸ÞÀϸµ ¸®½ºÆ®¿¡ 2000³â 9¿ù¿¡ ¹®¼ÈÇÑ ÇÑ Solar Designer ¿¡ °¨»çÇÑ´Ù. vfork(2) ¿¡ ´ëÇÑ ÃÖÁ¾ °á°ú´Â °£´ÜÇÏ´Ù: ÇÁ·Î±×·¥¿¡¼ vfork(2) ¸¦ »ç¿ëÇÏÁö ¸¶¶ó. ÀÌ´Â ¾î·ÆÁö ¾Ê¾Æ¾ß ÇÑ´Ù; vfork(2) ÀÇ ±âº»ÀûÀÎ »ç¿ëÀº vfork ÀÇ ÀÇ¹Ì Ã¼°è¸¦ ÇÊ¿ä·Î ÇÏ´Â ¿¹Àü ÇÁ·Î±×·¥À» Áö¿øÇÏ´Â °ÍÀÌ´Ù. 7.6. ³»ÀåµÈ ÄÁÅÙÆ®¸¦ °Ë»öÇÒ ¶§ À¥¹ö±×¿¡ ´ëÃ³ÇØ¶ó¸î¸î µ¥ÀÌŸ Æ÷¸ËµéÀº µ¥ÀÌŸ°¡ º¸ÀÏ ¶§ ÀÚµ¿ÀûÀ¸·Î °Ë»öµÇ´Â ÄÁÅÙÆ®¿¡ ÂüÁ¶¸¦ ³»ÀåÇÒ ¼ö ÀÖ´Ù (»ç¿ëÀÚ°¡ À̸¦ ¼±ÅÃÇÏ´Â °ÍÀ» ±â´Ù¸®Áö ¾Ê´Â´Ù). ÀÌ µ¥ÀÌŸ°¡ ÀÎÅͳÝÀ» ÅëÇØ °Ë»öµÇµµ·Ï ÇÒ ¼ö ÀÖ´Ù¸é (¿¹, WWW ¸¦ ÅëÇØ) ÀÌ ´É·ÂÀ» ÀÌ¿ëÇØ¼ readers °¡ ¸ð¸£°Ô readers ¿¡ ´ëÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖÀ¸¸ç ¾î¶² °æ¿ì reader ¿¡°Ô µ¿ÀǾøÀÌ ±â´ÉÀ» ¼öÇàÇϵµ·Ï ½Ãų ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ »ç»ýȰ°ú °ü·ÃµÈ ¹®Á¦¸¦ ¶§¶§·Î "À¥ ¹ö±× (web bug)" ¶ó°í ºÎ¸¥´Ù. À¥ ¹ö±×¿¡¼ ÂüÁ¶´Â ÀǵµÀûÀ¸·Î ¹®¼¿¡ »ðÀÔµÇ¸ç ¹®¼°¡ ¾îµð¿¡¼ ÀÐÇôÁö¸ç ¾ó¸¶³ª ÀÚÁÖ ÀÐÇôÁö´Â Áö¸¦ ÃßÀûÇϱâ À§ÇØ ÄÁÅÙÆ® ÀúÀÚ¿¡ ÀÇÇØ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÀúÀÚ´Â ¶ÇÇÑ ¹ö±×°¡ ÀÖ´Â ¹®¼°¡ ÇÑ »ç¶÷¿¡¼ ´Ù¸¥ »ç¶÷ ¶Ç´Â ÇÑ Á¶Á÷¿¡¼ ´Ù¸¥ Á¶Á÷À¸·Î ¾î¶»°Ô °Ç³×Áö´Â Áö¸¦ °¨½ÃÇÒ ¼ö ÀÖ´Ù. HTML Æ÷¸ËÀº ¾ó¸¶µ¿¾È ÀÌ ¹®Á¦¸¦ °®°í ÀÖ¾ú´Ù. Privacy Foundation ¿¡ µû¸£¸é:
´õ¿í Áß¿äÇÑ °ÍÀº ´Ù¸¥ ¹®¼ Æ÷¸Ëµéµµ ¶ÇÇÑ ±×·¯ÇÑ ´É·ÂÀ» °¡Áö°í ÀÖ´Â µíÇÏ´Ù´Â °ÍÀÌ´Ù. À¥ ºê¶ó¿ìÀú·Î À¥»çÀÌÆ®ÀÇ HTML À» º¼ ¶§ µ¥ÀÌŸ¸¦ ´©°¡ º¸°í ÀÖ´ÂÁö¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò´Â ´Ù¸¥ ¹æ¹ýÀÌ ÀÖÁö¸¸ À̸ÞÀϰú °°ÀÌ ´Ù¸¥ Æ÷¸ËÀÇ ¹®¼¸¦ º¸°í ÀÖÀ» ¶§´Â ¹®¼¸¦ Àд´ٴ »ç½Ç ÀÚü°¡ ¸ð´ÏÅ͸µ µÉ ¼ö ÀÖ´Ù°í ¿¹»óÇÏ´Â »ç¿ëÀÚµéÀº ¾Æ¹«µµ ¾ø´Ù. ±×·¯³ª ¸¹Àº Æ÷¸ËµéÀÇ °æ¿ì ¹®¼¸¦ ÀдÂÁö ¸ð´ÏÅ͸µ µÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® ¿öµå°¡ À¥ ¹ö±×¸¦ Áö¿øÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ ÃÖ±Ù¿¡ °áÁ¤µÇ¾ú´Ù; ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â Privacy Foundation advisory ¸¦ º¸¶ó. ±Ç°í¾È¿¡ ¾ð±ÞµÇ¾úµíÀÌ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® ¿¢¼¿°ú ÆÄ¿öÆ÷ÀÎÆ®ÀÇ ÃÖ±Ù ¹öÀüµéµµ ¶ÇÇÑ ÀÌ·¯ÇÑ À¥ ¹ö±×°¡ ÀÖÀ» ¼ö ÀÖ´Ù. ¾î¶² °æ¿ì ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾ò±â À§ÇØ Äí۰¡ »ç¿ëµÉ ¼ö ÀÖ´Ù. À¥ ¹ö±×´Â º»ÁúÀûÀ¸·Î ÆÄÀÏ Æ÷¸Ë ¼³°è¿Í °ü·ÃµÈ ¹®Á¦ÀÌ´Ù.»ç¿ëÀÚ°¡ ÇÁ¶óÀ̹ö½Ã¸¦ Áß¿äÇÏ°Ô ¿©±ä´Ù¸é ¾Æ¸¶µµ Æ÷ÇÔµÈ ÆÄÀÏÀÇ ÀÚµ¿ÀûÀÎ ´Ù¿î·ÎµùÀ» Á¦ÇÑÇÏ±æ ¿øÇÒ °ÍÀÌ´Ù. ÇѰ¡Áö ¿¹¿Ü´Â ÆÄÀÏ ÀÚü°¡ ´Ù¿îµµµå (À¥ ºê¶ó¿ìÀú¸¦ ÅëÇØ) µÉ ¶§ ÀÏ ¼öµµ ÀÖ´Ù; µ¿ÀÏ À§Ä¡¿¡¼ µ¿½Ã¿¡ ´Ù¸¥ ÆÄÀϵéÀ» ´Ù¿î·ÎµåÇÏ´Â °ÍÀº »ç¿ëÀÚµéÀ» ºÒ¾ÈÇÏ°Ô ÇÒ °Í °°Áö´Â ¾Ê´Ù. 7.7. ±â¹ÐÀ» ´Ù·ç´Â Á¤º¸¸¦ ¼û°Ü¶ó±â¹ÐÀ» ´Ù·ç´Â Á¤º¸´Â ÀԷ°ú Ãâ·ÂÁßÀÎ µ¿¾È°ú ½Ã½ºÅÛ¿¡ ÀúÀåµÉ ¶§ ¸ðµÎ ¿³º¸´Â »ç¶÷µé·ÎºÎÅÍ ¼û°ÜÁ®¾ß ÇÑ´Ù. ±â¹ÐÀ» ´Ù·ç´Â Á¤º¸´Â È®½ÇÈ÷ ½Å¿ëÄ«µå ³Ñ¹ö, °èÁ Àܾװú ÁýÁÖ¼Ò¸¦ Æ÷ÇÔÇÏ¸ç ¸¹Àº ¾ÖÇø®ÄÉÀ̼ǿ¡¼´Â À̸§, À̸ÞÀÏ ÁÖ¼Ò¿Í ´Ù¸¥ °³ÀÎ Á¤º¸µµ ¶ÇÇÑ Æ÷ÇÔÇÑ´Ù. À¥±â¹Ý ¾ÖÇø®ÄÉÀ̼ǵéÀº ±â¹ÐÀ» ´Ù·ç´Â Á¤º¸¸¦ Æ÷ÇÔÇØ¼ »ç¿ëÀÚ¿ÍÀÇ ¸ðµç Åë½ÅÀ» ¾ÏÈ£ÈÇØ¾ß ÇÑ´Ù; ÈçÇÑ ¹æ¹ýÀº (SSL ¶Ç´Â TLS À§¿¡¼ HTTP °¡ ÀÛµ¿ÇÏ´Â) https: ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. HTTP 1.1 ½ºÆå (IEFT RFC 2616 15.1.3 Àý) ¿¡ µû¸£¸é HTTP ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ´Â ¼ºñ½º »ç¿ëÀÚµéÀº ±â¹ÐÀ» ´Ù·ç´Â µ¥ÀÌŸ¸¦ Àü¼ÛÇϱâ À§ÇØ GET ±â¹Ý ÆûµéÀ» »ç¿ëÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ¿Ö³ÄÇϸé À̰ÍÀÌ µ¥ÀÌŸ°¡ ¿äû-URI ·Î ÀÎÄÚµåµÇ°Ô ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¸¹Àº ±âÁ¸ ¼¹öµé, ÇÁ¶ô½Ã¿Í »ç¿ëÀÚ ¿¡ÀÌÀüÆ®µéÀº ¿äû URI ¸¦ Á¦»ïÀÚ¿¡°Ô º¸ÀÏ ¼ö ÀÖÀ» Áöµµ ¸ð¸£´Â ¾î¶² °÷¿¡ ±â·ÏÇÒ °ÍÀÌ´Ù. ´ë½Å ÀÌ ¸ñÀûÀ» À§ÇØ ÀǵµµÈ POST ±â¹Ý Àü¼ÛÀ» »ç¿ëÇØ¶ó. ÀÌ·¯ÇÑ ±â¹ÐÀ» ´Ù·ç´Â µ¥ÀÌŸÀÇ µ¥ÀÌŸº£À̽ºµéµµ ¶ÇÇÑ µð½ºÅ©»óÀÇ ÆÄÀϵé°ú °°Àº ¸ðµç ÀúÀå µð¹ÙÀ̽º¿¡¼ ¾ÏȣȵǾî¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ ¾ÏȣȰ¡ ¹°·Ð º¸¾ÈÀûÀÎ ¾ÖÇø®ÄÉÀ̼ÇÀ» ±ú¶ß¸®´Â °ø°ÝÀÚ¿¡ ´ëÇØ¼´Â º¸È£¸¦ ÇÏÁö ¸øÇϸç ÀÌ´Â ¾ÖÇø®ÄÉÀÌ¼Ç ¶ÇÇÑ ¾ÏÈ£ÈµÈ µ¥ÀÌŸ¿¡ Á¢±ÙÇÏ´Â ¹æ¹ýÀ» °¡Á®¾ß Çϱ⠶§¹®ÀÌ´Ù. ±×·¯³ª ¾Ïȣȴ µ¥ÀÌŸÀÇ ¹é¾÷ µð½ºÅ©¸¦ ¾î¶»°Ôµç ¾ò¾úÁö¸¸ À̵éÀ» º¹È£ÈÇϴµ¥ ÇÊ¿äÇÑ Å°¸¦ ¾òÁö¸øÇÑ °ø°ÝÀڵ鿡 ´ëÇØ »ó´çÇÑ º¸È£¸¦ Á¦°øÇÑ´Ù. °ø°ÝÀÚ°¡ ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î ¾î¶»°Ôµç ħÀÔÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÀúÀåµÈ µ¥ÀÌŸ¸¦ º¸±â¿¡ ±×Àú ÃæºÐÇÒ¸¸Å ºÎºÐÀûÀ¸·Î °ü·Ã ½Ã½ºÅÛ³»·Î ħÀÔÇÑ´Ù¸é ¾Ïȣȴ ¶ÇÇÑ »ó´çÇÑ º¸È£ ¹æ¹ýÀ» Á¦°øÇÑ´Ù - °ø°ÝÀÚ´Â µ¥ÀÌŸ¸¦ ¾ò±â À§ÇØ ¾ÏÈ£È ¾Ë°í¸®µëÀ» ±ú¶ß·Á¾ß ÇÑ´Ù. µ¥ÀÌŸ°¡ º»ÀÇ¾Æ´Ï°Ô (¿¹, ÄÚ¾î ÆÄÀÏ) Àü´ÞµÉ ¼ö ÀÖ´Â ¸¹Àº »óȲÀÌ Àִµ¥ ¾Ïȣȴ ¶ÇÇÑ À̸¦ ¿¹¹æÇÑ´Ù. Á¾Á¾ ¼¹ö ÀÚü°¡ ÆÄ±«µÇ°Å³ª ±ú¶ß·ÁÁú ¼ö Àֱ⠶§¹®¿¡ ¾ÏȣȰ¡ »ý°¢ÇÏ´Â ¸¸Å °·ÂÇÑ º¸È£ ¹æ¹ýÀº ¾Æ´Ï¶ó´Â °ÍÀº ¾ð±ÞÇÒ¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Ù. 8장. Á¤º¸¸¦ ½ÅÁßÇÏ°Ô µÇµ¹·ÁÁà¶ó
8.1. Çǵå¹éÀ» ÃÖ¼ÒÈÇØ¶ó½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚ¿¡°Ô ¸¹Àº Á¤º¸¸¦ Á¦°øÇÏÁö ¸¶¶ó; °£´ÜÈ÷ ¼º°ø ¶Ç´Â ½ÇÆÐ·Î Ç¥ÇöÇÏ°í ½ÇÆÐÇÑ °æ¿ì ´ÜÁö ½ÇÆÐÇß´Ù°í ¸»ÇÏ°í ½ÇÆÐ ¿øÀο¡ ´ëÇÑ Á¤º¸¸¦ ÃÖ¼ÒÈÇØ¶ó. °¨»ç½Ã ´Ü¼°¡ µÉ ¼ö ÀÖ´Â ±â·ÏµéÀ» À§ÇØ ¼¼ºÎÀûÀÎ Á¤º¸¸¦ ÀúÀåÇØ¶ó. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°´Ù:
8.2. ÁÖ¼®À» Æ÷ÇÔÇÏÁö ¸¶¶óÁ¤º¸¸¦ ¹ÝȯÇÒ ¶§ ¹Ýµå½Ã À̸¦ ¹Þ´Â »ç¿ëÀÚ°¡ ÁÖ¼®À» º¸±â¸¦ ¿øÇÏÁö ¾Ê´Â´Ù¸é ¾î¶°ÇÑ ÁÖ¼®µµ Æ÷ÇÔÇÏÁö ¸¶¶ó. ÀÌ´Â HTML °°Àº ÆÄÀϵéÀ» »ý¼ºÇÏ´Â À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇØ Ưº°ÇÑ ¹®Á¦ÀÌ´Ù. ´ë°³ À¥ ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¡¸ÓµéÀº ±×µéÀÇ ÇÁ·Î±×·¥¿¡ ÁÖ¼®À» ÷°¡ÇÏ±æ ¹Ù¶óÁö¸¸ (ÀÌ´Â ÈǸ¢ÇÑ ÀÛ¾÷ÀÌ´Ù) ´ÜÁö ÁÖ¼®À» Äڵ峻¿¡ µÎ´Â ´ë½Å »ç¿ëÀÚ¿¡°Ô ¹ÝȯµÇ´Â »ý¼º ÆÄÀÏ (º¸Åë HTML ¶Ç´Â XML) ÀÇ ÇÑ ºÎºÐÀ¸·Î ÁÖ¼®ÀÌ Æ÷ÇÔµÇ°Ô Ç϶ó. ¹®Á¦´Â ÀÌ·¯ÇÑ ÁÖ¼®µéÀÌ ¶§¶§·Î ½Ã½ºÅÛÀÌ °ø°ÝÀ» µ½´Â ¹æ½ÄÀ¸·Î ÀÛµ¿ÇÒ ¼ö ÀÖ´Â ¹æ¹ý¿¡ ´ëÇÑ ÅëÂû·ÂÀ» Á¦°øÇÑ´Ù´Â °ÍÀÌ´Ù. 8.3. ¿ÏÀüÇÑ/¹«¹ÝÀÀÀÇ Ãâ·ÂÀ» ´Ù·ï¶ó»ç¿ëÀÚ°¡ Àڽſ¡°Ô µÇµ¹¾Æ¿À´Â º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÇ Ãâ·Â ä³ÎÀ» ¹æÇØÇϰųª ÀÀ´äÇÏÁö ¾Ê°Ô ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, À¥ ºê¶ó¿ìÀú°¡ ÀǵµÀûÀ¸·Î Á¤ÁöµÇ°Å³ª ÀÚ½ÅÀÇ TCP/IP ä³Î ÀÀ´äÀ» Áö¿¬½Ãų ¼ö Àִµ¥ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥Àº ÀÌ·± °æ¿ì¸¦ ´Ù·ï¾ß ÇÏ¸ç Æ¯È÷ ¼ºñ½º ºÎÀÎ °ø°ÝÀÇ ±âȸ¸¦ ¸¸µéÁö ¾Êµµ·Ï ·ÎÅ©¸¦ »¡¸® ÇØÁ¦ (µÇµµ·Ï ÀÀ´äÀü¿¡) ÇØ¾ßÇÑ´Ù. ´Ã ¿ÜºÎ·Î ³ª°¡´Â ³×Æ®¿öÅ© ÁöÇâ ¾²±â ¿äû¿¡ ´ëÇØ ŸÀӾƿôÀ» ¼³Á¤Çضó. 8.4. µ¥ÀÌŸ Æ÷¸ËÆÃÀ» Á¦¾îÇØ¶ó (¹®ÀÚ¿ Æ÷¸Ë)ÄÄÇ»ÅÍ ¾ð¾î¿¡¼ ¸¹Àº Ãâ·Â ·çƾµéÀº »ý¼ºµÇ´Â Æ÷¸ËÀ» Á¦¾îÇÏ´Â ¸Å°³º¯¼ö¸¦ °®°í ÀÖ´Ù. C ¿¡¼ °¡Àå ¸í¹éÇÑ ¿¹´Â printf(), sprintf(), fprintf() µîÀ» Æ÷ÇÔÇÑ printf() ·çƾ °è¿µé·Î ´Ù¸¥ ¿¹´Â ½Ã½ºÅÛ ·Î±× Á¤º¸ ÀÛ¼º syslog() ¿Í ÇÁ·Î¼¼½º ½Äº°ÀÚ Á¤º¸¸¦ Ç¥½ÃÇϴµ¥ »ç¿ëµÇ´Â ¹®ÀÚ¿ ¼³Á¤ setproctitle() ÀÌ´Ù. ``err" ¶Ç´Â ``warn" À¸·Î ½ÃÀÛÇϰųª ``log" ¸¦ Æ÷ÇÔÇϰųª ¶Ç´Â "printf" ·Î ³¡³ª´Â À̸§À» °®´Â ¸¹Àº ÇÔ¼öµéÀº °í·ÁÇÒ¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Ù. ÆÄÀ̽㿡´Â ¹®ÀÚ¿¿¡ ´ëÇØ ºñ½ÁÇÑ ¹æ½ÄÀ¸·Î Æ÷¸ËÆÃÀ» Á¦¾îÇÏ´Â "%" ¿¬»êÀÌ ÀÖ´Ù. ¸¹Àº ÇÁ·Î±×·¥µé°ú ¶óÀ̺귯¸®µéÀº ´ë°³ ³»Àå ·çÆ¾ È£Ãâ ¹× Ãß°¡ÀûÀÎ ÇÁ·Î¼¼½Ì (¿¹, glib ÀÇ g_snprintf() ·çƾ) À» ÇÔÀ¸·Î½á Æ÷¸ËÆÃ ÇÔ¼öµéÀ» Á¤ÀÇÇÑ´Ù. ¶æ¹Û¿¡µµ ¸¹Àº »ç¶÷µéÀº ÀÌ·¯ÇÑ Æ÷¸ËÆÃ ´É·ÂÀÇ Á߿伺À» Àذí ÀÖÀ¸¸ç ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚµé·ÎºÎÅÍÀÇ µ¥ÀÌŸ¸¦ Æ÷¸ËÆÃ ¸Å°³º¯¼ö·Î »ç¿ëÇϰí ÀÖ´Â °Í °°´Ù. ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀڷκÎÅÍÀÇ ÇÊÅ͸µµÇÁö ¾ÊÀº µ¥ÀÌŸ¸¦ Æ÷¸Ë ¸Å°³º¯¼ö·Î Àý´ë·Î »ç¿ëÇÏÁö ¸¶¶ó. ¾Æ¸¶µµ ÀÌ´Â ´ÙÀ½ ¿¹¿¡¼ °¡Àå Àß º¼ ¼ö ÀÖ´Ù:
±×·¸Áö ¾ÊÀ¸¸é °ø°ÝÀÚ´Â Æ÷¸ËÆÃ ¹®ÀÚ¿À» ÁÖÀDZí°Ô ¼±ÅÃÇÔÀ¸·Î½á ¸ðµç Á¾·ùÀÇ ¾Ç¿µÇâÀ» ÀÏÀ¸Å³ ¼ö Àִµ¥ C ¿¡¼ printf() ÀÇ °æ¿ì°¡ ÁÁÀº ¿¹ÀÌ´Ù. printf() ¿¡¼ »ç¿ëÀÚ Á¦¾î Æ÷¸Ë ¹®ÀÚ¿À» ¾î¶»°Ôµç ¾Ç¿ëÇÏ´Â ¸¹Àº ¹æ¹ýµéÀÌ Àִµ¥ À̵é·Î´Â ±ä Æ÷¸ËÆÃ ¹®ÀÚ¿ »ý¼º¿¡ ÀÇÇÑ ¹öÆÛ ¿À¹ö·± (ÀÌ´Â °ø°ÝÀÚ·Î ÇÏ¿©±Ý ÇÁ·Î±×·¥À» ¿ÏÀüÈ÷ Á¦¾îÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù), Àü´ÞµÇÁö ¾ÊÀº ¸Å°³º¯¼ö¸¦ »ç¿ëÇÏ´Â º¯È¯ ¼±¾ð (¿¹±âÄ¡ ¾ÊÀº µ¥ÀÌŸ¸¦ »ðÀÔ½ÃŲ´Ù) °ú ÀüÇô ¿¹»óÄ¡ ¸øÇÑ °á°ú°ªµéÀ» »êÃâÇÏ´Â Æ÷¸Ë »ý¼ºÇϱâ (°¡·É À§ÇèÇÑ µ¥ÀÌŸ¸¦ ¾Õ ¶Ç´Â µÚ¿¡ µ¡ºÙÀÓÀ¸·Î½á °¡´ÉÇѵ¥ ÃßÈÄ »ç¿ë½Ã ¹®Á¦¸¦ ÀÏÀ¸Å²´Ù) µéÀÌ ÀÖ´Ù. ƯÈ÷ ³Ã³ÇÑ °æ¿ì´Â printf ÀÇ "%n" º¯È¯ ¼±¾ðÀ¸·Î ÀÌ´Â Áö±Ý±îÁö ÀÛ¼ºµÈ ¹®ÀÚµéÀÇ ¼ö¸¦ Æ÷ÀÎÅÍ Àμö³»·Î ¾²´Âµ¥ °ø°ÝÀÚ´Â À̸¦ ¾Ç¿ëÇÏ¿© ÀμâÇÒ °ªÀ» °ãÃľµ ¼ö ÀÖ´Ù. °ø°ÝÀÚ´Â ½ÇÁ¦·Î Àü´ÞµÇÁö ¾Ê´Â ¸Å°³º¯¼ö¸¦ ÁöÁ¤ÇÒ ¼ö Àֱ⠶§¹®¿¡ °ÅÀÇ ÀÓÀÇÀÇ À§Ä¡¿¡ ¾ðÁ¦³ª °ãÃľµ ¼ö ÀÖ´Ù. ¸¹Àº ³í¹®µéÀº ÀÌ·¯ÇÑ °ø°ÝµéÀ» ´õ¿í ÀÚ¼¼ÇÏ°Ô ³íÀÇÇϴµ¥ ¿¹¸¦ µé¾î Avoiding security holes when developing an application - Part 4: format strings¸¦ º¸¶ó. ¸¹Àº °æ¿ì °á°úµéÀº »ç¿ëÀÚ¿¡°Ô µÇµ¹·ÁÁö±â ¶§¹®¿¡ ÀÌ °ø°ÝÀº ½ºÅÿ¡ ´ëÇÑ ³»ºÎ Á¤º¸¸¦ µå·¯³»´Âµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ Á¤º¸´Â ÃßÈÄ StackGuard ¿Í °°Àº ½ºÅà º¸È£ ½Ã½ºÅÛÀ» ¶Õ´Âµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù; StackGuard ´Â °ø°ÝÀ» ŽÁöÇϱâ À§ÇØ »ó¼ö ``canary" °ªµéÀ» »ç¿ëÇϴµ¥ ½ºÅÃÀÇ ³»¿ëµéÀÌ Ç¥½ÃµÈ´Ù¸é canary ÀÇ ÇöÀç °ªÀÌ ³ëÃâµÇ¾î °ø°Ý¿¡ Ãë¾àÇÒ °ÍÀÌ´Ù. Æ÷¸ËÆÃ ¹®ÀÚ¿Àº ±¹Á¦È¿¡ ´ëÇÑ °Ë»ö (look) À» ±¸ÇöÇϱâ À§ÇÑ ÇÔ¼ö È£Ãâ (gettext's _() ¸¦ ÅëÇØ) À» µÉ ¼ö ÀÖ´Â ÇÑ Æ÷ÇÔÇÏ¿© °ÅÀÇ ¾ðÁ¦³ª »ó¼ö ¹®ÀÚ¿ÀÌ¿©¾ß ÇÑ´Ù. ÀÌ °Ë»öÀº ÇÁ·Î±×·¥ÀÌ Á¦¾îÇÏ´Â °ªµé·Î ÇÑÁ¤µÇ¾î¾ß ÇÔÀ» ÁÖ¸ñÇØ¶ó, Áï »ç¿ëÀÚ´Â ÇÁ·Î±×·¥ÀÌ Á¦¾îÇÏ´Â ¸Þ½ÃÁö ÆÄÀϵé·ÎºÎÅ͸¸ ¼±ÅÃÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. »ç¿ëÀÚ µ¥ÀÌŸ¸¦ »ç¿ëÇϱâ Àü¿¡ À̸¦ ÇÊÅ͸µÇÏ´Â °Í ([A-Za-z0-9] ¿Í °°Àº Æ÷¸Ë ¹®ÀÚ¿¿¡ ´ëÇØ ÇÕ¹ýÀûÀÎ ¹®ÀÚµéÀ» ¿°ÅÇÏ´Â ÇÊÅ͸¦ ¼³°èÇÔÀ¸·Î½á) Àº °¡´ÉÇÏÁö¸¸ º¸Åë »ó¼ö Æ÷¸Ë ¹®ÀÚ¿ ¶Ç´Â fput() À» ´ë½Å »ç¿ëÇÔÀ¸·Î½á ¹®Á¦¸¦ ´Ü¼øÈ÷ ¿¹¹æÇÏ´Â °ÍÀÌ ÀϹÝÀûÀ¸·Î ´õ¿í ÁÁ´Ù. ÀúÀÚ´Â À̸¦ "Ãâ·Â" ¹®Á¦·Î ¿°ÅÇßÁö¸¸ Ãâ·Â ·çƾµéÀÌ ÆÄÀÏ¿¡ ÀúÀåÇϰųª ¶Ç´Â snprintf() ¸¦ ÅëÇØ ±×¿Í °°Àº ³»ºÎ »óŸ¦ »ý¼ºÇÒ ¼öµµ Àֱ⠶§¹®¿¡ ÀÌ´Â Ãâ·ÂÀü¿¡ ÇÁ·Î±×·¥¿¡ ³»ºÎÀûÀ¸·Î ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼ö ÀÖ´Ù. º¸¾È ¹®Á¦¸¦ ¾ß±âÇÏ´Â ÀÔ·Â Æ÷¸ËÆÃ ¹®Á¦´Â »ç¿ëµÇ°í ÀÖÁö ¾ÊÀº °¡´É¼ºÀº ¾Æ´Ñµ¥ ÀÌ ¾àÁ¡À» ÀÌ¿ëÇØ ¾Ç¿ëÇÑ ¿¹¸¦ CERT Advisory CA 2000-13 ¿¡¼ º¸¶ó. ÀÌ·¯ÇÑ ¹®Á¦°¡ ¾î¶»°Ô ¾Ç¿ëµÉ ¼ö ÀÖ´Â Áö¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â Bugtraq ÀÇ 2000³â 6¿ù 18ÀÏ ÆÇ¿¡ ÃâÆÇµÈ Pascal Bouchareine ÀÇ "[Paper] Format bugs" ¶ó´Â À̸ÞÀÏ ±â»ç¸¦ º¸¶ó. 2000³â 12¿ù ÇöÀç gcc ÄÄÆÄÀÏ·¯ °³¹ß ¹öÀüÀº °³¹ßÀÚ°¡ ÀÌ·¯ÇÑ ¹®Á¦µéÀ» ÇÇÇÒ ¼ö ÀÖµµ·Ï ºñº¸¾ÈÀûÀÎ Æ÷¸Ë ¹®ÀÚ¿ »ç¿ë¿¡ ´ëÇØ °æ°í ¸Þ½ÃÁö¸¦ Áö¿øÇϰí ÀÖ´Ù. ¹°·Ð ÀÌ ¸ðµÎ´Â ±¹Á¦È °Ë»öÀÌ ½ÇÁ¦ º¸¾ÈÀûÀÎÁö ¾Æ´ÑÁö¿¡ ´ëÇÑ ³íÁ¡À» ±³¹¦È÷ ÇÇÇÏ´Â °ÍÀε¥ °¢ÀÚÀÇ ±¹Á¦È °Ë»ö ·çƾµéÀ» ÀÛ¼ºÇÏ·Á¸é ¹Ýµå½Ã ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚ´Â ´ÜÁö ÇÕ¹ýÀûÀÎ ·ÎÄÉÀϸ¸ ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç ÀÓÀÇÀÇ °æ·Î¿Í °°Àº °ÍµéÀ» ÁöÁ¤ÇÒ ¼ö ¾øµµ·Ï ÇØ¶ó. ºÐ¸íÈ÷ °¢ÀÚ´Â ±¹Á¦È¸¦ ÅëÇØ »ý¼ºµÈ ¹®ÀÚ¿À» ¹ÏÀ» ¼ö ÀÖ´Â ¹®ÀÚ¿·Î Á¦ÇÑÇÏ±æ ¿øÇϴµ¥ ±×·¸Áö ¾Ê´Ù¸é °ø°ÝÀÚ´Â ÀÌ ´É·ÂÀ» »ç¿ëÇØ Æ÷¸Ë ¹®ÀÚ¿¿¡¼ÀÇ ¾àÁ¡, ƯÈ÷ C/C++ ÇÁ·Î±×·¥¿¡¼ÀÇ ¾àÁ¡À» ¾Ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â Bugtraq ³»ÀÇ ÀïÁ¡À̾ú´Âµ¥ (2000³â 6¿ù 26 ÀÏ ¿Ã·ÁÁø John Levon ÀÇ Bugtraq °Ô½Ã¹°À» º¸¶ó) ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ À§Çؼ´Â 4.7.3절 ¿¡¼ ÇÕ¹ýÀûÀÎ ¾ð¾î °ªµé¸¸À» »ç¿ëÀÚ°¡ ¼±ÅÃÇϵµ·Ï Çã¿ëÇÏ´Â °Í¿¡ ´ëÇÑ ³íÀǸ¦ º¸¶ó. ½ÇÁ¦·Î ÇÁ·Î±×·¡¹Ö ¹ö±×ÀÏÁö¶óµµ ´Ù¸¥ ±¹°¡µéÀº ´Ù¸¥ ¹æ½ÄÀ¸·Î ¼ýÀÚµéÀ» Ç¥½ÃÇÑ´Ù°í ¾ð±ÞÇÏ´Â °ÍÀº °¡Ä¡°¡ Àִµ¥ ƯÈ÷ ¸¶Ä§Ç¥ (.) ¿Í ½°Ç¥ (,) ¸ðµÎ ¼Ò¼öºÎ·ÎºÎÅÍ Á¤¼ö¸¦ ºÐ¸®Çϱâ À§ÇØ »ç¿ëµÇ°í ÀÖ´Ù. µ¥ÀÌŸ¸¦ ÀúÀå ¶Ç´Â ÀûÀçÇÏ·Á¸é ¹Ýµå½Ã »ç¿ë ·ÎÄÉÀÏÀÌ µ¥ÀÌŸ 󸮸¦ °£¼·ÇÏÁö ¾Êµµ·Ï ÇÒ Çʿ䰡 ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é ÀúÀåµÈ µ¥ÀÌŸ¿Í °Ë»öµÈ µ¥ÀÌŸ°¡ ´Ù¸¥ ºÐ¸®ÀÚ¸¦ »ç¿ëÇÒ °ÍÀ̱⠶§¹®¿¡ ÇÁ¶û½º¾î »ç¿ëÀÚ¿Í ¿µ¾î »ç¿ëÀÚ°¡ µ¥ÀÌŸ¸¦ ±³È¯ÇÒ ¼ö ¾øÀ» ¼öµµ ÀÖ´Ù. À̰ÍÀÌ º¸¾È ¹®Á¦·Î »ç¿ëµÇ°í ÀÖ´Â Áö´Â ¸ð¸£Áö¸¸ »ó»óÇÒ ¼ö ÀÖ´Â ÀÏÀÌ´Ù. 8.5. Ãâ·Â¿¡¼ ¹®ÀÚ ÀÎÄÚµùÀ» Á¦¾îÇØ¶óÀϹÝÀûÀ¸·Î º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥µéÀº ±×µéÀÇ ¸ðµç °¡Á¤µé¿¡ Ŭ¶óÀÌ¾ðÆ®µéÀ» µ¿±âȽÃÅ´À» º¸ÁõÇØ¾ß ÇÑ´Ù. ´ë°³ À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡ ¿µÇâÀ» ¹ÌÄ¡´Â ÇѰ¡Áö ¹®Á¦´Â Ãâ·ÂÀÇ ¹®ÀÚ ÀÎÄÚµù ÁöÁ¤À» Àش´ٴ °ÍÀÌ´Ù. ÀÌ´Â ¸ðµç µ¥ÀÌŸ°¡ ½Å·ÚµÈ Ãâó·ÎºÎÅÍ ¿Â´Ù¸é ¹®Á¦°¡ µÇÁö ¾ÊÁö¸¸ µ¥ÀÌŸ Áß ÀϺΰ¡ ½Å·ÚµÇÁö ¾ÊÀº Ãâó·ÎºÎÅÍ ¿Â´Ù¸é º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ ¿¹»óÇÑ °Í°ú ´Ù¸¥ ÀÎÄÚµùÀ» »ç¿ëÇÏ´Â ½Å·ÚµÇÁö ¾ÊÀº Ãâó·ÎºÎÅÍÀÇ µ¥ÀÌŸ°¡ ½ÇÁ¦ µ¥ÀÌŸ³»¿¡ ¸ô·¡ »ðÀ﵃ ¼öµµ ÀÖ´Ù. ÀÌ´Â cross-site malicious content °ø°Ý¿¡ ´ëÇØ º¸¾È ±¸¸ÛÀ» ¸¸µå´Â °ÍÀ¸·Î ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 4.9절 ¸¦ º¸¶ó. CERT's tech tip on malicious code mitigation Àº ÁöÁ¤µÇÁö ¾ÊÀº ¹®ÀÚ ÀÎÄÚµù ¹®Á¦¸¦ ¸Å¿ì Àß ¼³¸íÇϴµ¥ ÀÌ´Â ´ÙÀ½°ú °°´Ù:
°í¸¿°Ô ÀÌ ¹®Á¦¸¦ ¼³¸íÇÏ´Â °ÍÀÌ ¾î·Á¿ò¿¡µµ ºÒ±¸Çϰí HTML ¿¡¼ À̸¦ ÇØ°áÇÏ´Â °ÍÀº °£´ÜÇѵ¥ HTML Çì´õ¿¡ CERT ·ÎºÎÅÍÀÇ ´ÙÀ½ ¿¹¿Í °°ÀÌ charset À» ´Ü¼øÈ÷ ÁöÁ¤ÇÏ´Â °ÍÀÌ´Ù:
±â¼úÀû °üÁ¡¿¡¼ º¸¾ÒÀ» ¶§ ´õ¿í ÁÁÀº Á¢±Ù ¹æ¹ýÀº HTTP ÇÁ·ÎÅäÄÝ Ãâ·ÂÀÇ ÀϺκÐÀ¸·Î ¹®ÀÚ ÀÎÄÚµùÀ» ¼³Á¤ÇÏ´Â °ÍÀÌ´Ù. ¹°·Ð ¾î¶² ¶óÀ̺귯¸®µéÀº À̸¦ ´õ¿í ¾î·Æ°Ô ¸¸µé±âµµ ÇÑ´Ù. À̴ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô Çì´õÀÇ ¸ÞŸÁ¤º¸¸¦ ÀÐÀ» ¼ö ÀÖ°Ô ÇÏ´Â ¹®ÀÚ ÀÎÄÚµùÀ» °áÁ¤Çϱâ À§ÇØ Çì´õ¸¦ Á¶»çÇϵµ·Ï ÇÏÁö ¸øÇϱ⠶§¹®¿¡ ±â¼úÀûÀ¸·Î ´õ¿í ÁÁ´Ù. ¹°·Ð ½ÇÁ¦·Î ¸ÞŸ Á¤º¸¸¦ ÀÐÀ» ¼ö ¾ø°í À̸¦ Á¤È®È÷ »ç¿ëÇÒ ¼ö ¾ø´Â ºê¶ó¿ìÀú°¡ ÆÇ¸Å ½ÃÀå¿¡¼ ¼º°øÇÒ ¼ö ¾øÁö¸¸ ÀÌ´Â ´Ù¸¥ ¹®Á¦ÀÌ´Ù. ¾î¶² °æ¿ìµç ÀÌ´Â ¼¹ö°¡ HTTP ÇÁ·ÎÅäÄÝÀÇ ÇÑ ºÎºÐÀ¸·Î ¿øÇÏ´Â °ªÀ» °®´Â "charset" À» º¸³¾ Çʿ䰡 ÀÖÀ½À» ÀǹÌÇÑ´Ù. ºÒÇàÈ÷ ¾î¶² ¿¹Àü HTTP/1.0 Ŭ¶óÀÌ¾ðÆ®µéÀº ¸í½ÃÀûÀÎ charset ¸Å°³º¯¼ö¸¦ ÀûÀýÈ÷ ´Ù·çÁö ¸øÇϱ⠶§¹®¿¡ ÀÌ·¯ÇÑ ±â¼úÀûÀ¸·Î ´õ¿í ÁÁÀº Á¢±Ù ¹æ¹ýÀ» ÁøÁöÇÏ°Ô ÃßõÇÏ´Â °ÍÀº ¾î·Æ´Ù. HTTP/1.1 ½ºÆåÀÌ Å¬¶óÀÌ¾ðÆ®¿¡°Ô ¸Å°³º¯¼ö¸¦ µû¸£¶ó°í ¿ä±¸ÇÔ¿¡µµ ºÒ±¸Çϰí À̸¦ À¯ÀÏÇÑ ¸ÞÄ«´ÏÁòÀÌ ¾Æ´Ñ Á¤È®ÇÑ ¹®ÀÚ ÀÎÄÚµù »ç¿ëÀ» °¿äÇÏ´Â ºÎ¼Ó¹°·Î ¾î¶»°Ôµç À̸¦ »ç¿ëÇØ¾ß ÇÒ¸¸Å ÃæºÐÇÑÁö´Â Àǽɽº·´´Ù. 8.6. Æ÷ÇÔ/¼³Á¤ ÆÄÀÏ Á¢±ÙÀ» ¿¹¹æÇضóÀ¥±â¹Ý ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÒ ¶§ »ç¿ëÀڵ鿡°Ô Æ÷ÇÔ (include) ÇÁ·Î±×·¥°ú ¼³Á¤ ÆÄÀϰú °°Àº ÆÄÀϵéÀ» Á¢±Ù ¶Ç´Â Àб⸦ Çã¿ëÇÏÁö ¸¶¶ó. ÀÌ µ¥ÀÌŸ´Â ½Ã½ºÅÛ¿¡ ħÀÔÇϴµ¥ ÃæºÐÇÑ Á¤º¸ (¿¹, ÆÐ½º¿öµå) ¸¦ Á¦°øÇÒ ¼öµµ ÀÖ´Ù. ÀÌ ÁöħÀº ¶§¶§·Î ´Ù¸¥ À¯ÇüÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡µµ ¶ÇÇÑ Àû¿ëµÊÀ» ÁÖ¸ñÇØ¶ó. À̸¦ À§ÇØ ÃëÇÒ ¼ö ÀÖ´Â ¸î¸î ÇൿµéÀÌ ÀÖ´Ù:
ÀÌ·¯ÇÑ Á¢±Ù ¹æ¹ýµéÀº ÆÄÀϵéÀÌ world-readable À̶ó¸é À̵éÀÌ ÀÖ´Â µð·ºÅ丮¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚµé·ÎºÎÅÍ´Â º¸È£ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ´ÜÁö À¥ ¼¹öÀÇ uid/gid ¸¸ ÀÌ·¯ÇÑ ÆÄÀϵéÀ» ÀÐÀ» ¼ö ÀÖµµ·Ï Çã°¡±ÇÀ» º¯°æÇÒ ¼ö´Â ÀÖ´Ù. ±×·¯³ª ÀÌ Á¢±Ù ¹æ¹ýÀº »ç¿ëÀÚ°¡ À¥ ¼¹ö¿¡°Ô ÀÚ½ÅÀÇ ½ºÅ©¸³Æ®¸¦ ½ÇÇà½Ã۵µ·Ï ÇÒ ¼ö ÀÖ´Ù¸é È¿°ú°¡ ¾øÀ» °ÍÀÌ´Ù (»ç¿ëÀÚ°¡ ´ÜÁö ÆÄÀÏ¿¡ Á¢±ÙÇÏ´Â ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù). ±âº»ÀûÀ¸·Î »çÀÌÆ®°¡ ½Å·ÚµÇÁö ¾ÊÀº »ç¶÷µé°ú °øÀ¯µÇ´Â ¼¹ö¿¡¼ È£½ºÆÃµÇ°í ÀÖ´Ù¸é ½Ã½ºÅÛÀ» ¾ÈÀüÇÏ°Ô ÇÏ´Â °ÍÀº ¾î·Æ´Ù. ÇѰ¡Áö Á¢±Ù ¹æ¹ýÀº °¢ÀÚ°¡ ´Ù¸¥ Çã°¡±ÇÀ» °®´Â ´ÙÁß À¥ ¼¹ö ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ´Â °ÍÀε¥ ÀÌ´Â ´õ¿í Çâ»óµÈ º¸¾ÈÀ» Á¦°øÇÏÁö¸¸ ½ÇÁ¦·Î ¸Å¿ì Èûµé´Ù. ´Ù¸¥ Á¢±Ù ¹æ¹ýÀº ÀÌ·¯ÇÑ ÆÄÀϵéÀ» °¢ÀÚÀÇ uid/gid ¿¡ ÀÇÇØ¼¸¸ ÀÐÀ» ¼ö ÀÖµµ·Ï ¼³Á¤ÇÏ¿© ¼¹ö°¡ ``°¢ÀÚ"ÀÇ Çã°¡±ÇÀ¸·Î ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃŰ°Ô ÇÏ´Â °ÍÀÌ´Ù. ÀÌ µÎ¹øÂ° ¹æ¹ýÀº ÀÚüÀûÀ¸·Î ¹®Á¦¸¦ °®°í Àִµ¥ ¼¹öÀÇ ¾î¶² ºÎºÐµéÀÌ ·çÆ® ±ÇÇÑÀ» °¡Á®¾ß ÇÏ¸ç ½ºÅ©¸³Æ®°¡ ÇÊ¿ä ÀÌ»óÀÇ ±ÇÇÑÀ» °¡Áú ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. 9장. ¾ð¾î¿¡ ƯÁ¤ÀûÀÎ ÀïÁ¡
¾ð¾îµé¿¡ ƯÁ¤ÀûÀÎ ¸¹Àº º¸¾È ¹®Á¦µéÀÌ Àִµ¥ À̵éÀº ´ÙÀ½°ú °°ÀÌ ¿ä¾àµÉ ¼ö ÀÖ´Ù:
9.1. C/C++C ¹× C++ ÇÁ·Î±×·¥°ú °ü·ÃµÈ °¡Àå Ä¿´Ù¶õ º¸¾È ¹®Á¦ÁßÀÇ Çϳª´Â ¹öÆÛ ¿À¹öÇ÷οì·Î ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 5장 À» º¸¶ó. C ´Â ¿¹¿Ü 󸮸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù´Â Ãß°¡ÀûÀÎ ¾àÁ¡À» °®°í Àִµ¥ ÀÌ´Â Áß´ëÇÑ ¿¡·¯ »óȲÀ» ¹«½ÃÇÏ´Â ÇÁ·Î±×·¥ ÀÛ¼ºÀ» ¿ëÀÌÇÏ°Ô ÇÑ´Ù. C ¿Í C++ ¿¡¼ ¹®ÀÚ Å¸ÀÔ ``char" Àº ÄÄÆÄÀÏ·¯¿Í ¸Ó½Å¿¡ µû¶ó signed ¶Ç´Â unsigned µÉ ¼ö ÀÖ´Ù ´Â°ÍÀº ÇѰ¡Áö È¥¶õ½º·± ¹®Á¦ÀÌ´Ù. »óÀ§ ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖ´Â signed char ÀÌ Á¤¼ö·Î ÀúÀåµÉ ¶§ °á°ú´Â À½¼öÀÏ °ÍÀε¥ ¾î¶² °æ¿ì ÀÌ´Â ¾Ç¿ëµÉ ¼ö ÀÖ´Ù. ÀϹÝÀûÀ¸·Î 127 (0x71) º¸´Ù Å« °ªÀ» °¡Áú ¼öµµ ÀÖ´Â ¹®ÀÚ µ¥ÀÌŸ¸¦ ´Ù·ê¶§ ¹öÆÛ, Æ÷ÀÎÅÍ¿Í Ä³½ºÆ®¿¡ ´ëÇØ¼´Â char ¶Ç´Â signed char ´ë½Å ``unsigned char" ¸¦ »ç¿ëÇØ¶ó. C ¿Í C++ Àº ŸÀÔ °Ë»ç Áö¿ø¿¡ ÀÖ¾î Á¤ÀÇ»ó »ó´çÈ÷ ¸ðÈ£ÇÏÁö¸¸ Äڵ忡¼ ¸ðÈ£ÇÒ ÇÊ¿ä´Â ¾ø´Ù. °¡´ÉÇÑ ÇÑ ¸¹Àº ÄÄÆÄÀÏ·¯ °æ°í¸¦ ÄѰí Äڵ带 º¯°æÇؼ ÀÌ¿ÍÇÔ²² »õ·Ó°Ô ÄÄÆÄÀÏÇÏ¸ç ¸ðµç ÇÔ¼ö È£ÃâÀÌ Á¤È®ÇÑ Å¸ÀÔÀ» »ç¿ëÇÏ´Â Áö¸¦ º¸ÀåÇϱâ À§ÇØ º°µµÀÇ Çì´õ (.h) ÆÄÀÏ¿¡ ANSI ¿øÇüÀ» ¾ö°ÝÈ÷ »ç¿ëÇØ¶ó. gcc ¸¦ »ç¿ëÇÑ C ¶Ç´Â C++ ÄÄÆÄÀÏÀÇ °æ¿ì Àû¾îµµ ¸¹Àº °æ°í ¸Þ½ÃÁö¸¦ ÄÑ´Â ´ÙÀ½À» ÄÄÆÄÀÏ Ç÷¡±×·Î »ç¿ëÇØ ¸ðµç °æ°í¸¦ Á¦°ÅÇÏ·Á°í ÇØ¶ó (¾î¶² °æ°í´Â ´õ¿í ³ôÀº ÃÖÀûÈ ¼öÁØ¿¡¼ ¼öÇàµÇ´Â µ¥ÀÌŸ ÇÃ·Î¿ì ºÐ¼®¿¡ ÀÇÇØ¼¸¸ ŽÁöµÉ ¼ö Àֱ⠶§¹®¿¡ -O2 °¡ »ç¿ëµÊÀ» ÁÖ¸ñÇØ¶ó):
¸¹Àº C/C++ ÄÄÆÄÀÏ·¯´Â ºÎÁ¤È®ÇÑ Æ÷¸Ë ¹®ÀÚ¿µéÀ» ŽÁöÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î gcc ´Â ÇÔ¼ö¸¦ Ç¥½ÃÇϱâ À§ÇØ __attribute__() ±â´É (C È®Àå) À» »ç¿ëÇÑ´Ù¸é ÀÌ ÇÔ¼ö¿¡ ´ëÇÑ ºÎÁ¤È®ÇÑ Æ÷¸Ë ¹®ÀÚ¿¿¡ ´ëÇØ °æ°í¸¦ ÇÒ ¼ö ÀÖÀ¸¸ç Äڵ带 À̽ĺҰ¡´ÉÇÏ°Ô ¸¸µéÁö ¾Ê°í¼µµ ÀÌ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº Çì´õ (.h) ÆÄÀÏ¿¡ ÀÖ´Â ¿¹ÀÌ´Ù:
°¡´ÉÇÑ ¿°ÅµÇ´Â °ªµéÀ» Á¤ÀÇÇϱâ À§ÇØ Æ¯º°ÇÑ °ªÀ» °®´Â ``char" ¶Ç´Â ``int" °¡ ¾Æ´Ñ ``enum" À» »ç¿ëÇØ¶ó. ÀÌ´Â ÄÄÆÄÀÏ·¯°¡ ¸ðµç ÇÕ¹ýÀûÀÎ °ªµéÀÌ ´Ù·ç¾îÁ³´ÂÁö °áÁ¤Çϱâ À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Â switch ¹®ÀÇ °ªµé¿¡ ´ëÇØ ƯÈ÷ À¯¿ëÇÏ´Ù. 9.2. ÆÞÆÞ ÇÁ·Î±×·¡¸ÓµéÀº º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ ÀÛ¼º°ú °ü·ÃµÈ ¸¹Àº ¹®Á¦Á¡µéÀ» ¼³¸íÇÏ´Â perlsec(1) ¸Ç ÆäÀÌÁö¸¦ ¿ì¼± Àоî¾ß ÇÑ´Ù. ƯÈ÷ perlsec(1) Àº ´ëºÎºÐÀÇ º¸¾ÈÀûÀÎ ÆÞ ÇÁ·Î±×·¥µéÀÌ »ç¿ëÇØ¾ß ÇÏ´Â "taint" ¸ðµå¸¦ ¼³¸íÇϰí ÀÖ´Ù. Taint ¸ðµå´Â real °ú effective »ç¿ëÀÚ ¶Ç´Â ±×·ì ID °¡ ´Ù¸£¸é ÀÚµ¿ÀûÀ¸·Î Çã°¡µÇ¸ç ¶ÇÇÑ -T Ä¿¸Çµå ¶óÀÎ Ç÷¡±×¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù (CGI ½ºÅ©¸³Æ®¿Í °°ÀÌ ¾î¶² ´©±¸°¡¸¦ ´ë½ÅÇØ ÀÛµ¿½ÃŲ´Ù¸é À̸¦ ÃßÈÄ¿¡ »ç¿ëÇØ¶ó). Taint ¸ðµå´Â °æ·Î µð·ºÅ丮µéÀÌ others °¡ write Çã°¡±ÇÀÌ ¾øÀ½À» È®ÀÎÇϱâ À§ÇØ À̵éÀÇ °Ë»ç¿Í °°Àº ´Ù¾çÇÑ °Ë»çµéÀ» ÄÒ´Ù. Taint ¸ðµåÀÇ °¡Àå ¸í¹éÇÑ ¿µÇâÀº ÇÁ·Î±×·¥ ¿ÜºÎÀÇ ¾î¶² ¹«¾ð°¡¿¡ ¿ì¿¬È÷ ¿µÇâÀ» ³¢Ä¥ ¼öÀÖ´Â ÇÁ·Î±×·¥ ¿ÜºÎ·ÎºÎÅÍ ÆÄ»ýµÈ µ¥ÀÌŸ¸¦ »ç¿ëÇÏÁö ¸øÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. Taint ¸ðµå¿¡¼ ¸ðµç ¿ÜºÎ·ÎºÎÅÍ ¾òÀº ÀÔ·ÂÀº "tainted" ·Î Ç¥½ÃµÇ¸ç ÀÌ¿¡´Â Ä¿¸Çµå ¶óÀÎ Àμö, ȯ°æ º¯¼ö, ·ÎÄÉÀÏ Á¤º¸ (perllocale(1) À» º¸¶ó), ¾î¶² ½Ã½ºÅÛ È£ÃâÀÇ °á°ú (readdir, readlink, getpw* È£ÃâÀÇ gecos Çʵå) ¿Í ¸ðµç ÆÄÀÏ ÀԷµéÀÌ ÀÖ´Ù. Tainted µ¥ÀÌŸ´Â ¼ºê ½©À» È£ÃâÇÏ´Â ¸ðµç ¸í·É ¶Ç´Â ÆÄÀÏ, µð·ºÅ丮 ¶Ç´Â ÇÁ·Î¼¼½º¸¦ º¯°æÇÏ´Â ¸ðµç ¸í·É¿¡¼ Á÷Á¢Àû ¶Ç´Â °£Á¢ÀûÀ¸·Î »ç¿ëµÇÁö ¸øÇÒ ¼ö ÀÖ´Ù. ÇѰ¡Áö Áß¿äÇÑ ¿¹¿Üµµ Àִµ¥ Àμö ¸ñ·ÏÀ» system ¶Ç´Â exec ¿¡ °Ç³×ÁØ °æ¿ì ±× ¸ñ·ÏÀÇ ¿ä¼ÒµéÀº tainedness ¿¡ NOT À¸·Î üũµÈ´Ù. µû¶ó¼ taint ¸ðµå¿¡¼ system ¶Ç´Â exec ¿¡ ƯÈ÷ ÁÖÀÇÇØ¶ó. Tainted µ¥ÀÌŸ·ÎºÎÅÍ ÆÄ»ýµÈ ¸ðµç µ¥ÀÌŸ °ªµµ ¶ÇÇÑ tainted µÈ´Ù. ÇѰ¡Áö ¿¹¿Ü°¡ Àִµ¥ µ¥ÀÌŸ¸¦ untainting ÇÏ´Â ¹æ¹ýÀº tainted µ¥ÀÌŸ·ÎºÎÅÍ ¼ºê ¹®ÀÚ¿À» ÃßÃâÇÏ´Â °ÍÀÌ´Ù. ±×·¸Áö¸¸ ¸¶±¸ÀâÀÌ·Î ±×Àú ".*" ¸¦ ¼ºê ¹®ÀÚ¿·Î »ç¿ëÇÏÁö ¸¶¶ó ÀÌ´Â tainting ¸ÞÄ«´ÏÁòÀÇ º¸È£¸¦ ¹«³Ê¶ß¸± ¼öµµ ÀÖ´Ù. ´ë½Å ÇÁ·Î±×·¥ÀÌ Çã¿ëÇÏ´Â ``¾ÈÀüÇÑ" ÆÐÅÏÀ¸·Î È®ÀÎµÈ ÆÐÅϵ鸸À» ½Äº°Çϰí À̵éÀ» »ç¿ëÇØ "È®½ÇÇÑ" °ªµéÀ» ÃßÃâÇØ¶ó. °ªÀ» ÃßÃâÇÑ ÈÄ¶óµµ À̸¦ °Ë»çÇÒ Çʿ䰡 ÀÖ´Ù (ƯÈ÷ ±æÀÌ¿¡ ´ëÇØ °Ë»çÇÒ Çʿ䰡 ÀÖ´Ù). open, glob ¿Í backtick ÇÔ¼öµéÀº ÆÄÀÏ À̸§ÀÇ ¿ÍÀϵåÄ«µå ¹®ÀÚµéÀ» È®ÀåÇϱâ À§ÇØ ½©À» »ç¿ëÇϴµ¥ ÀÌ´Â º¸¾È ±¸¸ÛÀ» ¿±â À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ÇÔ¼öµéÀ» ÀüÀûÀ¸·Î ÇÇÇϰųª perlsec(1) ¿¡ ±â¼úµÈ °Í°ú °°ÀÌ ±ÇÇÑÀÌ ÀûÀº sandbox ¿¡¼ À̵éÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ƯÈ÷ backtick Àº system() È£ÃâÀ» »ç¿ëÇØ ÀçÀÛ¼ºµÇ¾î¾ß ÇÑ´Ù (¶Ç´Â ´õ¿í ÁÁÀº ¹æ¹ýÀ¸·Î´Â ¿ÏÀüÈ÷ ´õ¿í ¾ÈÀüÇÑ °ÍÀ¸·Î º¯°æµÇ¾î¾ß ÇÑ´Ù). ÆÞÀÇ open() ÇÔ¼ö´Â ¼ÖÁ÷È÷ ´ëºÎºÐÀÇ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥¿¡ ´ëÇØ ``³Ê¹«³ª ÀÌ»óÇÑ ¹æ½Ä" À¸·Î ÀÛµ¿Çϴµ¥ ÀÌ´Â ÅØ½ºÆ®°¡ ÁÖÀDZí°Ô ÇÊÅ͸µµÇÁö ¾Ê´Â´Ù¸é ¸¹Àº º¸¾È ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â ÅØ½ºÆ®¸¦ ÇØ¼®ÇÑ´Ù. ÆÄÀÏ ¿ÀÇ ¶Ç´Â ·ÎÅ©ÇÏ´Â Äڵ带 ÀÛ¼ºÇϱâ Àü¿¡ perlopentut(1) ¸Ç ÆäÀÌÁö¸¦ ÂüÁ¶Çضó. ´ëºÎºÐÀÇ °æ¿ì sysopen() Àº ÆÄÀÏ ¿ÀÇ¿¡ ´õ¿í º¹ÀâÇÔ¿¡µµ ºÒ±¸ÇÏ°í ´õ¿í ¾ÈÀüÇÑ ¹æ¹ýÀ» Á¦°øÇϴµ¥ »õ·Î¿î ÆÞ 5.6 ¿¡´Â ¸Å¿ì º¹ÀâÇÑ sysopen() ±â´ÉÀ» ÇÊ¿ä·Î ÇÔÀÌ ¾øÀÌ ÀÌ»óÇÑ °Åµ¿À» ²ô±â À§ÇØ 3°³ÀÇ ¸Å°³º¯¼ö¸¦ °®´Â open() È£ÃâÀÌ Ãß°¡µÇ¾î ÀÖ´Ù.. ÆÞ ÇÁ·Î±×·¥Àº ÀáÀçÀûÀ¸·Î À§ÇèÇϰųª ¾µ¸ð¾ø´Â ¹®ÀåµéÀ» °æ°íÇÏ´Â °æ°í Ç÷¡±× (-w) ¸¦ ÄÑ¾ß ÇÑ´Ù. Á¦ÇÑµÈ È¯°æ¿¡¼ ÆÞ ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¼öµµ Àִµ¥ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â Ç¥ÁØ ÆÞ ¹èÆ÷ÆÇ¿¡¼ "Safe" ¸ðµâÀ» º¸¶ó. ÀúÀÚ´Â ÀÌ ¸ðµâÀÌ ¼öÇàÇÏ´Â °¨»çÀÇ ¾çÀ» ºÐ¸íÈ÷ ¸ð¸£´Âµ¥ µû¶ó¼ º¸¾ÈÀ» À§ÇØ ÀÌ ¸ðµâÀ» ÁÖÀÇÇØ¼ »ç¿ëÇØ¶ó. ¶ÇÇÑ "Penguin Model for Secure Distributed Internet Scripting" ¸¦ °íÂûÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀÌ ¹®¼ ÀÛ¼º½ÃÁ¡¿¡¼ ÄÚµå¿Í ¹®¼°¡ µµ¿òÀÌ µÇÁö ¾Ê´Â °Í°°´Ù. 9.3. ÆÄÀ̽ã¸ðµç ¾ð¾î¿¡¼¿Í °°ÀÌ ¹Ýµå½Ã ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚ°¡ ÀԷ¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö ¾øµµ·Ï µ¥ÀÌŸ°¡ ÇÁ·Î±×·¥ÀÇ ÇÑ ºÎºÐÀ¸·Î ½ÇÇàµÇµµ·Ï ÇÏ´Â ¸ðµç ÇÔ¼öµé¿¡ ÁÖÀÇÇØ¶ó. ÀÌ ÇÔ¼ö·Î´Â exec(), eval() °ú exefile() ÀÌ ÀÖ´Ù (¼ÖÁ÷È÷ compile() ¿¡ ´ëÇÑ ¸ðµç È£ÃâÀ» °Ë»çÇØ¾ß ÇÑ´Ù). ¶ÇÇÑ input() ¹®µµ ¿¹±âÄ¡ ¾Ê°Ô À§ÇèÇÏ´Ù [Watters 1996, 150]. ±ÇÇÑÀÌ ¾ø´Â »ç¿ëÀÚ¿¡ ÀÇÇØ È£ÃâµÉ ¼ö ÀÖ´Â ±ÇÇÑÀ» °®´Â ÆÄÀ̽ã ÇÁ·Î±×·¥µéÀº (¿¹, setuid/setgid ÇÁ·Î±×·¥) "user (»ç¿ëÀÚ)" ¸ðµâÀ» import ÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. user ¸ðµâÀº pthonrc.py ÆÄÀÏÀÌ ÀÐÇôÁ® ½ÇÇàµÇ°Ô ÇÑ´Ù. ÀÌ ÆÄÀÏÀ» ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚ°¡ Á¦¾îÇÒ ¼ö Àֱ⠶§¹®¿¡ user ¸ðµâÀ» import ÇÏ´Â °ÍÀº °ø°ÝÀÚ¿¡°Ô ½Å·ÚµÈ ÇÁ·Î±×·¥ÀÌ ÀÓÀÇÀÇ Äڵ带 ½ÇÇà½Ã۵µ·Ï ÇÒ ¼ö ÀÖ´Ù. ÆÄÀ̽ãÀº ÄÄÆÄÀϽà °Ë»ç¸¦ °ÅÀÇ ÇÏÁö ¾Ê´Â´Ù -- º»ÁúÀûÀ¸·Î ÄÄÆÄÀϽà ¾î¶°ÇÑ Å¸ÀÔ Á¤º¸µµ °®Áö ¾ÊÀ¸¸ç °Ç³×Áö´Â ¸Å°³º¯¼öÀÇ ¼ö°¡ ÁÖ¾îÁø ÇÔ¼ö ¶Ç´Â ¸Þ½îµå¿¡ ´ëÇØ ÇÕ¹ýÀûÀÎÁö¸¦ ÀüÇô °Ë»çÇÏÁö ¾Ê´Â´Ù. ÀÌ´Â ÀáÀçÀûÀÎ ¸¹Àº ¹ö±×¸¦ ¾ß±âÇϴµ¥ John Viega ¿Í ÀúÀÚ´Â ÀÌ ¹®Á¦¸¦ °æÇèÇØ¿Ô´Ù. ÀßµÈ´Ù¸é ¾ðÁ¨°¡ ÆÄÀ̽ãÀº ¿À·§µ¿¾È ³íÀǵǾî¿Â °³³äÀÎ ¼±ÅÃÀûÀÎ Á¤Àû ŸÀÌÇÎ ¹× ŸÀÔ °Ë»ç¸¦ ±¸ÇöÇÒ °ÍÀÌ´Ù. ÇöÀç ºÎºÐÀûÀÎ ÇØ°á ¹æ¹ýÀº ÆÄÀ̽㠼ҽº Äڵ峻ÀÇ ÀϹÝÀûÀÎ ¹ö±×¸¦ °Ë»çÇÏ´Â lint °°Àº ÇÁ·Î±×·¥ÀÎ PyChecker ·Î http://pychecker.sourceforge.net ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. ÆÄÀ̽ãÀº RExec Ŭ·¡½º¸¦ ÅëÇØ ``Á¦ÇÑµÈ ½ÇÇà (Restricted Execution)" À» Áö¿øÇÑ´Ù. ÀÌ´Â º»·¡ ¾ÖÇø´°ú ¸ð¹ÙÀÏ Äڵ带 ½ÇÇà½Ã۱â À§ÇÑ °ÍÀÌÁö¸¸ Äڵ尡 ¿ÜºÎ¿¡¼ Á¦°øµÇÁö ¾ÊÀ» ¶§¿¡µµ ÇÁ·Î±×·¥³»ÀÇ ±ÇÇÑÀ» Á¦ÇÑÇϱâ À§ÇØ ¶ÇÇÑ »ç¿ëµÉ ¼ö ÀÖ´Ù. µðÆúÆ®·Î Á¦ÇÑµÈ ½ÇÇà ȯ°æÀº ÆÄÀÏ Àбâ (¾²±â°¡ ¾Æ´Ñ) ¸¦ Çã¿ëÇÏÁö¸¸ ³×Æ®¿öÅ© Á¢±Ù ¶Ç´Â GUI »óÈ£ÀÛ¿ëÀ» À§ÇÑ ¿¬»êÀ» Æ÷ÇÔÇÏÁö´Â ¾Ê´Â´Ù. ÀÌ·¯ÇÑ µðÆúÆ®´Â º¯°æµÉ ¼ö Àִµ¥ Á¦ÇÑµÈ È¯°æ¿¡¼ ÇãÁ¡ (loophole) »ý¼º¿¡ ÁÖÀÇÇØ¶ó. ƯÈ÷ »ç¿ëÀÚ¿¡°Ô Ŭ·¡½º¿¡ ¼Ó¼ºÀ» Á¦ÇѾøÀÌ Ãß°¡Çϵµ·Ï Çã¿ëÇÏ´Â °ÍÀº ÆÄÀ̽㠱¸ÇöÀÌ ¸¹Àº ¼û°ÜÁø ¸Þ½îµå¸¦ È£ÃâÇϱ⠶§¹®¿¡ ȯ°æÀ» ±ú¶ß¸± ¼ö ÀÖ´Â ¸ðµç Á¾·ùÀÇ ¹æ¹ýÀ» Çã¿ëÇÑ´Ù. µðÆúÆ®·Î ´ëºÎºÐÀÇ ÆÄÀ̽㠰´Ã¼´Â ÂüÁ¶¿¡ ÀÇÇØ Àü´ÞµÊÀ» ÁÖ¸ñÇØ¶ó; °¡º¯°ª¿¡ ´ëÇÑ ÂüÁ¶¸¦ Á¦ÇÑµÈ ÇÁ·Î±×·¥ÀÇ È¯°æ³»¿¡ »ðÀÔÇÑ´Ù¸é Á¦ÇÑµÈ ÇÁ·Î±×·¥Àº Á¦ÇÑµÈ È¯°æ ¿ÜºÎ¿¡¼ º¸ÀÏ ¼ö ÀÖ°Ô °´Ã¼¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù. µû¶ó¼ °¡º¯°ª¿¡ ´ëÇÑ Á¢±ÙÀ» Çã¿ëÇÏ·Á¸é ¸¹Àº °æ¿ì °¡º¯°ªÀ» º¹»çÇϰųª ´Ù¸¥ °´Ã¼¿¡ ´ëÇÑ Á¦ÇÑµÈ Á¢±ÙÀ» Áö¿øÇÏ´Â Bation ¸ðµâÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â Kuchling [2000] À» º¸¶ó. ÀúÀÚ´Â Á¦ÇÑµÈ ½ÇÇà ´É·ÂÀÌ ¼öÇàÇÏ´Â °¨»çÀÇ ¾ç¿¡ ´ëÇØ Àß ¸ð¸£¸ç µû¶ó¼ ÇÁ·Î±×·¡¸ÓµéÀº ÁÖÀÇÇØ¶ó. 9.4. ½© ½ºÅ©¸³ÆÃ ¾ð¾î (sh °ú csh Deritivatives)ÀúÀÚ´Â setuid/setgid º¸¾ÈÀûÀÎ Äڵ忡 ´ëÇØ csh, sh ¿Í bash ¿Í °°Àº Ç¥ÁØ Ä¿¸Çµå ½© ½ºÅ©¸³ÆÃ ¾ð¾î¸¦ »ç¿ëÇÏÁö ¸»¶ó°í ÃßõÇÑ´Ù. ¸®´ª½º¿Í °°Àº ¸î¸î ½Ã½ºÅÛµéÀº À̵éÀ» ¿ÏÀüÈ÷ ±ÝÁöÇϱ⠶§¹®¿¡ ºÒÇÊ¿äÇÑ À̽ļº ¹®Á¦¸¦ ¸¸µé ¼ö ÀÖ´Ù. ¾î¶² ¿À·¡µÈ ½Ã½ºÅÛ¿¡¼ À̵éÀº 3.1.3절 ¿¡¼ ³íÀÇµÈ ¹Ù¿Í °°ÀÌ °æÀï »óŶ§¹®¿¡ ±âº»ÀûÀ¸·Î ºñº¸¾ÈÀûÀÌ¸ç ´Ù¸¥ ½Ã½ºÅÛ¿¡ ´ëÇØ¼µµ À̵éÀº ½ÇÁ¦·Î ÁÁÀº °³³äÀÌ ¾Æ´Ï´Ù. Ç¥ÁØ Ä¿¸Çµå ½©Àº ¾ÆÁ÷µµ ¸í¹éÇÏÁö ¾ÊÀº ÀԷ¿¡ ÀÇÇØ ¿µÇâÀ» ¹Þ´Â °ÍÀ¸·Î À¯¸íÇѵ¥ ÀÌ´Â ÀϹÝÀûÀ¸·Î Ä¿¸Çµå ½©ÀÌ °ú°¨ÇÑ °ø°ÝÀÚ¿¡ ´ëÇØ º¸È£ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ´ëÈ½Ä »ç¿ëÀÚµéÀ» À§ÇØ ÀÚµ¿ÀûÀ¸·Î ÀÛ¾÷À» ÇÏ·Á°í ¼³°èµÇ¾ú±â ¶§¹®ÀÌ´Ù. ¿¹¸¦ µé¾î ¼û°ÜÁø ȯ°æ º¯¼ö (¿¹, ENV ¶Ç´Â BASH_ENV º¯¼ö) ´Â ½ºÅ©¸³Æ®°¡ ½ÇÇàµÉ ¼ö ÀÖ±â ÀüÀÌ¶óµµ ÀÓÀÇÀÇ »ç¿ëÀÚ Á¤ÀÇ Äڵ带 ¾î¶»°Ô ¿¬»ê ¶Ç´Â ´õ ³ª¾Æ°¡¼´Â ½ÇÇà½ÃŰ´ÂÁö¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖ´Ù. ½ÇÇà°¡´É ÆÄÀÏÀÇ À̸§ ¶Ç´Â µð·ºÅ丮 ³»¿ë°°Àº °Íµéµµ ¿µÇâÀ» ³¢Ä¥ ¼ö Àִµ¥ ¿¹¸¦ µé¾î ¸¹Àº Bourne ½© ±¸Çö¿¡¼ ´ÙÀ½Àº ·çÆ® ±ÇÇÑÀ» ÁÙ ¼ö ÀÖ´Ù (ÀÌ ¾Ç¿ë ¼³¸í¿¡ ´ëÇØ NCSA ¿¡ °¨»çÇÑ´Ù).
¾ÆÁ÷µµ ½© ½ºÅ©¸³ÆÃ ¾ð¾îÀÇ »ç¿ëÀ» ÁÖÀåÇÑ´Ù¸é Àû¾îµµ ½ºÅ©¸³Æ®¸¦ À̵¿ ¶Ç´Â º¯°æµÉ ¼ö ¾ø´Â µð·ºÅ丮³»¿¡ µÎ¾î¶ó. ½ºÅ©¸³Æ®ÀÇ ¸Ç ¾Õ¿¡ PATH ¿Í IFS ¸¦ ¾Ë·ÁÁø °ªµé·Î ¼³Á¤Çضó. ºñ½ÁÇÑ ¸Æ¶ôÀ¸·Î ÀúÀÚ´Â º¸¾ÈÀûÀÎ Á¤Ã¥À» ±¸ÇöÇÏ´Â ``Á¦ÇÑÀûÀÎ ½©" À» ½Å·ÚÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù°í Ãæ°íÇÑ´Ù. Á¦ÇÑÀûÀÎ ½©Àº ÀǵµÀûÀ¸·Î »ç¿ëÀÚ·Î ÇÏ¿©±Ý ¸¹Àº ÀÛ¾÷À» ¼öÇàÇÏÁö ¸øÇÏ°Ô ÇÏ´Â ½©·Î ±× ¸ñÀûÀº »ç¿ëÀÚ¿¡°Ô ´ÜÁö ¾ÆÁÖ ¼Ò¼öÀÇ ÇÁ·Î±×·¥µé¸¸À» ½ÇÇà½Ãų ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ´Ù. Á¦ÇÑÀûÀÎ ½©Àº öóÇÑ ¹æ¾î (defense-in-depth) Á¶Ä¡·Î À¯¿ëÇÒ ¼ö ÀÖÁö¸¸ Á¤È®ÇÏ°Ô ¼³Á¤ÇÏ´Â °ÍÀÌ ¾î·Æ´Ù°í ¾Ë·ÁÁ® ÀÖÀ¸¸ç ¼³Á¤µÇ´õ¶óµµ ´ë°³ ÆÄ±«µÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ¸î¸î Á¦ÇÑÀûÀÎ ½©Àº Á¦ÇѵÇÁö ¾ÊÀº ¸ðµå¿¡¼ ¾î¶² ÆÄÀÏ (¿¹, ``.profile) À» ½ÇÇà½ÃÅ´À¸·Î½á ½ÃÀÛµÉ ¼ö ÀÖ´Ù. - »ç¿ëÀÚ°¡ ÀÌ ÆÄÀÏÀ» º¯°æ½Ãų ¼ö ÀÖ´Ù¸é ½©Àº º¯°æµÈ Äڵ带 ½ÇÇà½ÃŰ´Â °ÍÀÌ´Ù. Á¦ÇÑÀûÀÎ ½©Àº ´ÜÁö ¾à°£ÀÇ ÇÁ·Î±×·©¸¸À» ½ÇÇà½Ãų ¼ö ÀÖµµ·Ï ¼³Á¤µÇ¾î¾ß ÇÏÁö¸¸ ±×·¯ÇÑ ÇÁ·Î±×·¥Áß ¾î¶² ÇÁ·Î±×·¥ÀÌ »ç¿ëÀÚµé·Î ÇÏ¿©±Ý ´õ¿í ¸¹Àº ÇÁ·Î±×·¥À» ½ÇÇà½Ã۵µ·Ï ÇÏ´Â ``½© À̽ºÄÉÀÌÇÁ" ¸¦ °®°í ÀÖ´Ù¸é °ø°ÝÀÚ°¡ ÀÌ·¯ÇÑ ½© À̽ºÄÉÀÌÇÁ¸¦ »ç¿ëÇØ Á¦ÇÑÀûÀÎ ½©À» À̽ºÄÉÀÌÇÁÇÒ ¼ö ÀÖ´Ù. ¹°·Ð Á¦ÇÑÀûÀÎ ½©ÀÇ PATH ¸¦ ¼³Á¤ÇÏÁö ¾Ê¾Æ ¾î¶² ÇÁ·Î±×·¥µµ ½ÇÇàµÉ ¼ö ¾øµµ·Ï ¼³Á¤ÇÑ´Ù ÇÏ´õ¶óµµ °ø°ÝÀÚ´Â ÅØ½ºÆ® ÆíÁý±â, ¸ÞÀÏ·¯ µî ¸¹Àº ÇÁ·Î±×·¥ÀÇ ½© À̽ºÄÉÀÌÇÁ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹®Á¦´Â ½©ÀÇ ¸ñÀûÀÌ ´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ´Â °ÍÀÌÁö¸¸ ±×·¯ÇÑ ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ ÀǵµµÇÁö ¾ÊÀº ¿¬»êÀ» Çã¿ëÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. -- ½©Àº ÀÌ·¯ÇÑ ¿¬»êÀ» ¸øÇϵµ·Ï °³ÀÔÇÏÁö ¾Ê´Â´Ù. 9.5. AdaAda95 ¿¡¼ Unbounded_String ŸÀÔÀº ÇÊ¿ä·ÎÇÏ´Â ¸¸Å Å©±â°¡ ÀÚµ¿ÀûÀ¸·Î Á¶ÀýµÉ ¼ö Àֱ⠶§¹®¿¡ String ŸÀÔº¸´Ù ´ë°³ ´õ¿í À¯¿¬ÇÏ´Ù. ±×·¯³ª ÆÐ½º¿öµå ¶Ç´Â ºñ¹ÐŰ¿Í °°ÀÌ Æ¯È÷ ±â¹ÐÀ» ´Ù·ç´Â °ªµéÀ» Unbounded_String ŸÀÔÀ¸·Î ÀúÀåÇÏÁö ¸¶¶ó. ÄÚ¾î ´ýÇÁ¿Í ÆäÀÌÁö ¿µ¿ªÀÌ ÃßÈÄ¶óµµ À̵éÀ» º¸À¯ÇÒ ¼ö ÀÖ´Ù. ´ë½Å ÀÌ µ¥ÀÌŸ¿¡´Â String ŸÀÔÀ» »ç¿ëÇÏ°í °¡´ÉÇÑ »¡¸® µ¥ÀÌŸ¸¦ ´Ù¸¥ ' ' ¿Í °°Àº ¾î¶² »ó¼ö°ªÀ¸·Î °ãÃÄ ½á¶ó. 9.6. ÀÚ¹ÙÀÚ¹Ù¸¦ »ç¿ëÇØ¼ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» °³¹ßÇÏ·Á¸é ¼ÖÁ÷È÷ ÀÚ¹Ù¸¦ ¹è¿î ÈÄ Ã¹ ´Ü°è´Â ÀÚ¹Ù º¸¾È¿¡ ´ëÇÑ µÎ °³ÀÇ ±âº» ÅØ½ºÆ®ÀÎ Gong [1999] ¿Í McGraw [1999] ¸¦ Àд °ÍÀÌ´Ù (µÎ¹øÂ°ÀÇ °æ¿ì ƯÈ÷ 7.1 ÀýÀ» º¸¶ó). ¶ÇÇÑ http://java.sun.com/security/seccodeguide.html ¿¡¼ ½ãÀÌ °Ô½ÃÇÑ º¸¾È ÄÚµå ÁöħµéÀ» º¸¾Æ¾ß ÇÑ´Ù. ÀÚ¹ÙÀÇ º¸¾È ¸ðµ¨À» ¼³¸íÇÏ´Â ÀÏ·ÃÀÇ ½½¶óÀ̵åµéÀº http://www.dwheeler.com/javasec ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. ¶ÇÇÑ McGraw [1998] À» º¼ ¼öµµ ÀÖ´Ù. ¸í¹éÈ÷ ¸¹Àº °ÍµéÀº °³¹ßÇϰí ÀÖ´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ À¯Çü¿¡ ÀÇÁ¸Çϴµ¥ Ŭ¶óÀ̾ðÆ®Ãø¿¡¼ »ç¿ëÇϱâ À§ÇÑ ÀÚ¹Ù ÄÚµå´Â ¼¹öÃø ÄÚµå¿Í´Â ÀüÇô ´Ù¸¥ ȯ°æ (°ú ½Å·Ú ¸ðµ¨) À» °®°í ÀÖ´Ù. ¹°·Ð ÀϹÝÀûÀÎ ¿ø¸®´Â Àû¿ëµÈ´Ù. ¿¹¸¦ µé¾î ½Å·ÚµÇÁö ¾ÊÀº Ãâó·ÎºÎÅÍ ¿Â ¸ðµç ÀÔ·ÂÀ» °Ë»ç ¹× ÇÊÅ͸µÇØ¾ß ÇÑ´Ù. ±×·¯³ª ÀÚ¹Ù¿¡´Â ¹ØºÎºÐ¿¡¼ ³íÀÇµÉ Á¶½ÉÇØ¾ß ÇÒ ¾î¶² ¼û°ÜÁø ÀÔ·Â ¶Ç´Â ÀáÀçÀû ÀԷµéÀÌ ÀÖ´Ù. Johnathan Nightingale [2000] Àº ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö¿¡¼ ¸¹Àº ¹®Á¦µéÀ» ¿ä¾àÇϰí ÀÖ´Â Àç¹ÌÀÖ´Â ¹®¼¸¦ ÀÛ¼ºÇß´Ù:
´ÙÀ½Àº Gong [1999], McGraw [1999], ½ãÀÇ ±æÀâÀÌ¿Í ÀúÀÚÀÇ °æÇè¿¡ ±âÃÊÇÑ Áß¿äÇÑ ¾à°£ÀÇ ÁöħµéÀÌ´Ù.
9.7. TCLTCL Àº "tool command language (Åø Ä¿¸Çµå ¾ð¾î)" ÀÇ ¾à¾î·Î tickle ·Î ¹ßÀ½ÇÑ´Ù. TCL Àº ¾ð¾î¿Í ¶óÀ̺귯¸® µÎ ºÎºÐÀ¸·Î ³ª´©¾îÁ® ÀÖ´Ù. ¾ð¾î´Â °£´ÜÇÑ ÅØ½ºÆ® ¾ð¾î·Î ´ëÈ½Ä ÇÁ·Î±×·¥¿¡ ¸í·ÉÀ» ³»ÁÖµµ·Ï ÀǵµµÇ¾úÀ¸¸ç ±âº»ÀûÀÎ ÇÁ·Î±×·¡¹Ö ´É·ÂÀ» Æ÷ÇÔÇϰí ÀÖÀ¸¸ç ¶óÀ̺ê¹ö¸®´Â ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥¿¡ ³»ÀåµÉ ¼ö ÀÖ´Ù. TCL WWW Info À¥ ÆäÀÌÁö¿Í °°Àº »çÀÌÆ®¿¡¼ TCL ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ¾Æ¸¶ ´ëºÎºÐÀÇ °ü½É»ç´Â WebWiseTclTk »Ó¸¸ ¾Æ´Ï¶ó Safe-TCL (TCL ¿¡¼ sandbox ¸¦ »ý¼ºÇÑ´Ù) °ú Safe-TK (Safe-TCL ¿¡ ´ëÇØ sandboxed µÈ À̽İ¡´ÉÇÑ GUI ¸¦ ±¸ÇöÇÑ´Ù) ŸŶÀÌ TCL ÆÐŰÁö°¡ World Wide Web ¾î´À°÷¿¡¼³ª ÀÚµ¿ÀûÀ¸·Î À§Ä¡ÇØ ÀûÀçµÉ ¼ö ÀÖµµ·Ï ÇÑ´Ù´Â °ÍÀÌ´Ù. http://www.cbl.ncsu.edu/software/WebWiseTclTk ¿¡¼ WebWiseTclTk ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ ãÀ» ¼ö ÀÖ´Ù. ±×·¯³ª À̰ÍÀÌ ¾ó¸¶³ª ¸¹Àº ÄÚµå °ËÅ並 ¹Þ¾Ò´ÂÁö ÀúÀÚ¿¡°Ô´Â ¸íÈ®ÇÏÁö ¾ÊÀºµ¥ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â http://www.tclfaq.wservice.com/tcl-faq ¿¡ ÀÖ´Â comp.lang.tcl FAQ ½ÃÀÛ ÆäÀÌÁö¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. ±×·¯³ª TCL À» ÀÛ°í "´Ü¼øÇÑ" ¾ð¾î·Î ¸¸µé·Á°í ÇÑ ¹Ù·¥ÀÌ ¿ÀÈ÷·Á Á¦ÇÑµÈ ¾ð¾î¸¦ ÃÊ·¡ÇßÀ½À» ¾ð±ÞÇÏ´Â °ÍÀº °¡Ä¡°¡ Àִµ¥ Richard Stallman's ``Why You Should Not Use TCL'' ¸¦ º¸¶ó. ¿¹¸¦ µé¾î ¹Ýµå½Ã ´Ü ÇѰ¡Áö µ¥ÀÌŸ ŸÀÔ (¹®ÀÚ¿) ¸¸ÀÌ ÀÖ´Ù´Â TCL °³³äÀº ÇÁ·Î±×·¥À» ´À¸®°Ô ¸¸µé»Ó ¾Æ´Ï¶ó ¸¹Àº ÇÁ·Î±×·¥ÀÇ ÀÛ¼ºÀ» ¾î·Æ°Ô ¸¸µé ¼ö ÀÖ´Ù. ¶ÇÇÑ ÀúÀÚ°¡ TCL ÇÁ·Î±×·¥À» ÀÛ¼ºÇßÀ» ¶§ ¾ÇÀÇÀÖ´Â ÀÔ·Â ¹®ÀÚ¿ÀÌ ´Ù·ç±â ¾î·Æ°í ¿¹±âÄ¡ ¾ÊÀº µ¿ÀÛÀ» ÀÏÀ¸Å³ ¼öÀÖ´Â TCL ÇÁ·Î±×·¥À» ¿ì¿¬È÷ ÀÛ¼ºÇÏ´Â °ÍÀÌ ½¬¿òÀ» ¹ß°ßÇß´Ù. ¿¹¸¦ µé¾î °ø°ÝÀÚ´Â ³»Àå ½ºÆäÀ̽º, ÀÌÁß ÀÎ¿ë ºÎÈ£, curly braces, dollar signs ¶Ç´Â brackets °ú °°ÀÌ TCL ¿¡ Ưº°ÇÑ Àǹ̸¦ °®´Â ¹®ÀÚ¸¦ TCL ¿¡ º¸³¿À¸·Î½á ¿¹±âÁö ¾ÊÀº ÀÏÀ» ÇϰԲû (¶Ç´Â ÀÌ·¯ÇÑ ¹®ÀÚµéÀÌ Ã³¸®Áß¿¡ »ý¼ºµÇ°Ô²û ÇÏ´Â ÀÔ·ÂÀ» »ý¼ºÇϰԲû) ÇÒ ¼öµµ ÀÖ´Ù. µû¶ó¼ ÀúÀÚ´Â º¸¾È ¸ñÀûÀ» À§ÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ TCL À» ÃßõÇÏÁö ¾Ê´Â´Ù. ±×·¸°Ô ÇÏ·Á¸é ƯÈ÷ »ç¿ëÀÚ ÀÔ·ÂÀÌ ÇÁ·Î±×·¥À» ¼ÓÀÏ ¼ö ¾øÀ½À» º¸ÁõÇϴµ¥ ÁÖÀÇÇØ¶ó. ´Ù¸¥ ÇÑÆíÀ¸·Î ÀúÀÚ´Â TCL ÇÁ·Î±×·¥ÀÌ ¸ð¹ÙÀÏ Äڵ带 ±¸ÇöÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ¾ø´Â ¾î¶°ÇÑ ÀÌÀ¯µµ ¸ð¸¥´Ù. ÀúÀÚº¸´Ù ´õ¿í ¸¹Àº »ç¿ëÀ» ¿ËÈ£ÇÏ´Â TCL ÁöÁöÀÚµµ ºÐ¸íÈ÷ ÀÖÀ¸¸ç TCL Àº ÀÌ¹Ì ¸¸µé¾îÁø sandbox ±¸ÇöÀ» °®°í ÀÖ´Â ¾ó¸¶ ¾ÈµÇ´Â ¾ð¾îÁßÀÇ ÇϳªÀÌ´Ù. 9.8. PHPSecureReality ´Â "A Study in Scarlet - Exploiting Common Vulnerabilities in PHP" ¶ó´Â ¸Å¿ì Èï¹Ì·Î¿î ³í¹®À» ¹ßÇ¥ÇÏ¿´´Ù [Clowes 2001]. ÀÌ ³í¹®Àº PHP, ƯÈ÷ PHP 4.1.0 ÀÌÀü ¹öÀü¿¡¼ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϴµ¥ ÀÖ¾î¼ ´Ù¼ÒÀÇ ¹®Á¦µéÀ» ³íÀÇÇϰí ÀÖ´Ù. Clowes ´Â ``µðÆúÆ® PHP ¼³Á¤¿¡¼ º¸¾ÈÀûÀÎ PHP ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÏ´Â °ÍÀº °¢ÀÚ ³ë·ÂÇÑ´Ù°í ÇÏ´õ¶óµµ ¸Å¿ì ¾î·Æ´Ù" °í °á·ÐÁö¾ú´Ù. ¸ðµç ¾ð¾î¿¡ º¸¾È ¹®Á¦°¡ ÀÖ´Ù°í ÇÏ´õ¶óµµ PHP ¿¡´Â PHP ¸¦ ´ëºÎºÐÀÇ ¾ð¾îµéº¸´Ù ºñº¸¾ÈÀûÀÌ°Ô ÇÏ´Â ÇѰ¡Áö Ưº°ÇÑ ¹®Á¦°¡ ÀÖ´Ù; ÀÌ´Â µ¥ÀÌŸ¸¦ À̸§°ø°£¿¡ ÀûÀçÇÏ´Â ¹æ½ÄÀÌ´Ù. µðÆúÆ®·Î PHP (¹öÀü 4.1.0 ÀÌÇÏ) ¿¡¼´Â À¥À» ÅëÇØ PHP ·Î º¸³»Áö´Â ¸ðµç ȯ°æ º¯¼ö ¹× °ªÀÌ ÀϹÝÀûÀÎ º¯¼öµéÀÌ ÀûÀçµÇ´Â µ¿ÀÏÇÑ À̸§°ø°£ (Àü¿ªº¯¼ö) ³»·Î ÀÚµ¿ÀûÀ¸·Î ÀûÀçµÈ´Ù - µû¶ó¼ °ø°ÝÀÚ´Â ÀÓÀÇÀÇ º¯¼ö¿¡ ÀÓÀÇÀÇ °ªÀ» ¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç PHP ÇÁ·Î±×·¥ÀÌ ¸í½ÃÀûÀ¸·Î Àç¼³Á¤ÇÏÁö ¾Ê´Â´Ù¸é ÀÌ °ªÀÌ À¯ÁöµÈ´Ù. °Ô´Ù°¡ PHP ´Â óÀ½ ¿äûµÉ ¶§ µðÆúÆ® °ªÀ» °®´Â º¯¼ö¸¦ ÀÚµ¿ÀûÀ¸·Î »ý¼ºÇϴµ¥ µû¶ó¼ PHP ÇÁ·Î±×·¥ÀÌ º¯¼ö¸¦ ÃʱâÈÇÏÁö ¾Ê´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. º¯¼ö ¼³Á¤À» ÇÏÁö ¾Ê´Â °æ¿ì PHP °¡ À̸¦ º¸°íÇÒ ¼ö´Â ÀÖÁö¸¸ µðÆúÆ®·Î ±×·¸°Ô ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù - ÀÌ´Â ´Ü¼øÈ÷ ¿¡·¯ º¸°í·Î ÀÌ·¯ÇÑ ¿¡·¯¸¦ ¾ß±âÇÏ´Â ¿¹¿ÜÀûÀÎ ¹æ½ÄÀ» ¹ß°ßÇÑ °ø°ÝÀÚ¸¦ ¸·Áö ¸øÇÒ °ÍÀ½À» ÁÖ¸ñÇØ¶ó. µû¶ó¼ µðÆúÆ®·Î PHP ´Â ÇÁ·Î±×·¥ÀÌ °ø°ÝÀÚ¸¦ ¹«½ÃÇϱâ À§ÇØ Æ¯º°È÷ ÁÖÀǸ¦ ÇÏÁö ¾Ê´Â´Ù¸é °ø°ÝÀÚ°¡ ÇÁ·Î±×·¥³»ÀÇ ¸ðµç º¯¼ö °ªÀ» ¿ÏÀüÈ÷ Á¦¾îÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ÀÏ´Ü °ø°ÝÀÚ°¡ ÇÁ·Î±×·¥À» Á¦¾îÇÏ°Ô µÈ´Ù¸é ÀÌ·¯ÇÑ º¯¼ö¸¦ Àç¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç µû¶ó¼ °¢ÀÚ ¾î¶² º¯¼ö(¸íÈ®ÇÏÁø ¾ÊÁö¸¸ Àû¾îµµ ÇѰ³ÀÇ º¯¼ö) ¸¦ Àç¼³Á¤ÇÏÁö ¸øÇÑ´Ù¸é PHP ÇÁ·Î±×·¥À» Ãë¾àÇÏ°Ô ¸¸µé ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½ PHP ÇÁ·Î±×·¥ (Clowes ·ÎºÎÅÍÀÇ ¿¹Á¦) Àº ÆÐ½º¿öµå¸¦ ¾Ë°í ÀÖ´Â »ç¶÷µé¿¡°Ô ´ÜÁö ¾î¶² Áß¿äÇÑ Á¤º¸¸¦ ¾òµµ·Ï ÇÏÁö¸¸ °ø°ÝÀÚ´Â ±× »ç¶÷µéÀÇ À¥ ºê¶ó¿ìÀú¿¡ ``auth" ¸¦ ¼³Á¤ÇØ Àΰ¡ °Ë»ç¸¦ ÆÄ±«ÇÒ ¼ö ÀÖ´Ù:
ÀúÀÚ¿Í ¸¹Àº »ç¶÷µéÀº ÀÌ·¯ÇÑ Æ¯º°È÷ À§ÇèÇÑ ¹®Á¦¿¡ ´ëÇØ Ǫ³äÇØ¿ÔÁö¸¸ ÀÌ´Â PHP °¡ ³Î¸® »ç¿ëµÇ°í Àֱ⠶§¹®¿¡ Ưº°ÇÑ ¹®Á¦ÀÌ´Ù. °á±¹ »ç¿ëÇϱ⠽±´Ù°í ¾Ë·ÁÁø ¾ð¾î´Â º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ ÀÛ¼ºÀ» ´õ¿í ½±°ÔÇÑ´Ù. PHP ¿¡¼ ``register_globals" ¸¦ ``off" ·Î ¼³Á¤ÇÔÀ¸·Î½á ÀÌ·¯ÇÑ À߸øµÈ Ư¡À» ±ÝÁöÇÏ´Â °ÍÀº °¡´ÉÇÏÁö¸¸ µðÆúÆ®·Î 4.1.0 ÀÌ»óÀÇ PHP ¹öÀüÀº À̸¦ ``on" À¸·Î ¼³Á¤Çϸç 4.1.0 ÀÌÀü PHP ¹öÀüÀº register_globals ¸¦ off ¼³Á¤ÇÏ´Â °æ¿ì ´õ¿í »ç¿ëÇÏ±â ¾î·Æ´Ù. PHP °³¹ßÀÚµéÀº 4.1.0 ¹öÀü ¹ßÇ¥¿¡¼ ``´ÙÀ½ semi-major ¹öÀü¿¡¼´Â PHP ÀÇ ½Å±Ô ¼³Ä¡½Ã µðÆúÆ®·Î register_globals ¸¦ off ·Î ¼³Á¤ÇÒ °ÍÀÌ´Ù" ¶ó°í °øÇ¥Çß´Ù. ``register_globals" °¡ ``on" À¸·Î ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì Áß¿äÇÑ ÇÁ·Î±×·¥¿¡ ´ëÇØ PHP ´Â À§ÇèÇÏ´Ù - ºñº¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ ³Ê¹«³ªµµ ½±´Ù. ±×·¯³ª ``register_globals" °¡ ÀÏ´Ü ``off" ·Î ¼³Á¤µÈ´Ù¸é PHP ´Â ÇÕ´çÇÑ °³¹ß ¾ð¾îÀÌ´Ù. º¸¾ÈÀûÀÎ µðÆúÆ®´Â ``register_globals" ¸¦ ``off" ·Î ¼³Á¤ÇØ¾ß ÇÏ¸ç ¶ÇÇÑ »ç¿ëÀÚµéÀÌ ¿ÜºÎ Ãâó·ÎºÎÅÍ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Â ÀÔ·ÂÀ» ÁöÁ¤Çϰí Á¦ÇÑÇÏ´Â °ÍÀ» ´õ¿í ½±°Ô ÇÏ´Â ¸î¸î ÇÔ¼ö¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù. ¾ÆÆÄÄ¡¿Í °°Àº À¥ ¼¹öµéÀº ÀÌ·¯ÇÑ º¸¾ÈÀûÀÎ PHP ¼³Ä¡¸¦ °³º°ÀûÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚµéÀÌ ¹Þ¾ÆµéÀÌ±æ ¿øÇÏ´Â ÀÔ·Â º¯¼ö¸¦ ¿°ÅÇϱ⠽±°Ô ÇÏ´Â ·çƾµéÀÌ PHP ¶óÀ̺귯¸®¿¡ ³õÀÏ ¼öµµ ÀÖ´Ù; ¸î¸î ÇÔ¼öµéÀº ÀÌ·¯ÇÑ º¯¼öµéÀÌ °¡Á®¾ßÇÏ´Â ÆÐÅÏ ¹×/¶Ç´Â ¿ä±¸µÇ´Â º¯¼ö ŸÀÔÀ» °Ë»çÇØ¾ß ÇÑ´Ù. ÀúÀÚ ÀǰßÀ¸·Î´Â PHP (register_globals °¡ on À¸·Î ¼³Á¤) ´Â ÇöÀç ÈǸ¢ÇÑ º¸¾ÈÀûÀÎ À¥ °³¹ß ¾ð¾î´Â ¾Æ´Ï´Ù. ±×·¯³ª ÇÕ´çÇÑ °³¹ß ¾ð¾î·Î »ç¿ëµÇµµ·Ï ½±°Ô ¼öÁ¤µÉ ¼ö ÀÖ´Ù. PHP ¸¦ »ç¿ëÇϱâ·Î ÇÑ °æ¿ì ´ÙÀ½Àº ¾ó¸¶°£ÀÇ ÀúÀÚÀÇ Ãæ°íÀÌ´Ù (ÀÌ·¯ÇÑ Ãæ°í Áß ¸¹Àº ºÎºÐÀº Clowes °¡ Á¦±âÇÑ ¹®Á¦¿¡ ´ëóÇϱâ À§ÇÑ ¹æ¹ý¿¡ ±âÃÊÇÑ´Ù):
10장. Ưº° ÁÖÁ¦
10.1. ÆÐ½º¿öµå°¡´ÉÇÑ ÆÐ½º¿öµå¸¦ ´Ù·ç´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏÁö ¸¶¶ó. ƯÈ÷ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ·ÎÄÃÀ̶ó¸é Åë»óÀûÀÎ ·Î±×ÀÎ ÀÎÁõ¿¡ ÀÇÁ¸ÇÏ·Á°í ÇØ¶ó. ¾ÖÇø®ÄÉÀ̼ÇÀÌ CGI ½ºÅ©¸³Æ®¶ó¸é °¡´ÉÇÑ ¸¹Àº º¸È£¸¦ Á¦°øÇÏ´Â À¥¼¹ö¿¡ ÀÇÁ¸ÇÏ·Á°í ÇØ¶ó - ±×·¯³ª À¥ ¼¹ö¿¡ ÀÎÁõÀ» ´Ù·ç´Â °Í¿¡ ´ëÇØ ¹ØºÎºÐÀ» º¸¶ó. ¾ÖÇø®ÄÉÀ̼ÇÀÌ ³×Æ®¿öÅ©¸¦ ÅëÇÑ °ÍÀ̶ó¸é ÆÐ½º¿öµå¸¦ °¡´ÉÇÑ Æò¹®À¸·Î º¸³»´Â °ÍÀ» ÇÇÇØ¶ó ÀÌ´Â ³×Æ®¿öÅ© ½º´ÏÆÛ¿¡ ½±°Ô Æ÷ÂøµÇ¾î ÃßÈÄ Àç»ç¿ëµÉ ¼ö ÀÖ´Ù. ¾Ë°í¸®µë³»¿¡ ÁöÁ¤µÈ ¾î¶² ۸¦ »ç¿ëÇϰųª ¾î¶² Á¾·ùÀÇ shrouding ¾Ë°í¸®µëÀ» »ç¿ëÇÏ¿© ÆÐ½º¿öµå¸¦ ¾ÏÈ£ÈÇÏ´Â °ÍÀº º»ÁúÀûÀ¸·Î ÆÐ½º¿öµå¸¦ Æò¹®À¸·Î º¸³»´Â °Í°ú µ¿ÀÏÇÏ´Ù. ³×Æ®¿öÅ©ÀÇ °æ¿ì´Â ÃÖ¼ÒÇÑ ´ÙÀÌÁ¦½ºÆ® (digest) ÆÐ½º¿öµå »ç¿ëÀ» °í·ÁÇØ¶ó. ´ÙÀÌÁ¦½ºÆ® ÆÐ½º¿öµå´Â ÇØ½Ã·ÎºÎÅÍ °³¹ßµÈ ÆÐ½º¿öµåÀÌ´Ù; ÀϹÝÀûÀ¸·Î ¼¹ö´Â Ŭ¶óÀÌ¾ðÆ®¿¡ ¾î¶² µ¥ÀÌŸ (¿¹, ³¯Â¥, ½Ã°£, ¼¹ö À̸§) ¸¦ º¸³»°í Ŭ¶óÀÌ¾ðÆ®´Â ÀÌ µ¥ÀÌŸ¿Í »ç¿ëÀÚ ÆÐ½º¿öµå¸¦ °áÇÕÇÏ¿© ÀÌ °ª (´ÙÀÌÁ¦½ºÆ® ÆÐ½º¿öµå·Î ÁöεÈ) À» ÇØ½ÃÇÑ´Ù. ±× ÈÄ ´ÜÁö ÇØ½ÃµÈ °á°ú¸¸ ¼¹ö¿¡ º¸³»¸ç ¼¹ö´Â ÀÌ ÇØ½Ã °ªÀ» ´ëÁ¶ÇÑ´Ù. ÀÌ´Â ÆÐ½º¿öµå°¡ ¾î¶² ÇüÅÂ·Îµç ½ÇÁ¦·Î º¸³»Áö´Â °ÍÀÌ Àý´ë·Î ¾Æ´Ï±â ¶§¹®¿¡ Àß ÀÛµ¿ÇÑ´Ù; ÆÐ½º¿öµå´Â ´ÜÁö ÇØ½Ã °ªÀ» ÃßÃâÇϱâ À§Çؼ¸¸ »ç¿ëµÈ´Ù. ´ÙÀÌÁ¦½ºÆ® ÆÐ½º¿öµå´Â º¸ÆíÀûÀÎ Àǹ̿¡¼ ¾ÏȣȷΠ°í·ÁµÇ°í ÀÖÁö ¾ÊÁö¸¸ ±â¹Ð¼ºÀ» À§ÇØ ¾Ïȣȸ¦ °¿äÇÏ´Â ¹ýÀ» °®´Â ³ª¶ó¿¡¼µµ ´ë°³ ¹Þ¾Æµé¿©Áö°í ÀÖ´Ù. ´ÙÀÌÁ¦½ºÆ® ÆÐ½º¿öµå´Â Àû±ØÀûÀÎ °ø°Ý À§Çù¿¡´Â Ãë¾àÇÏÁö¸¸ ¼öµ¿ÀûÀÎ ³×Æ®¿öÅ© ½º´ÏÆÛ¿¡ ´ëÇØ¼´Â º¸È£ÇÑ´Ù. ÇѰ¡Áö ¾àÁ¡Àº ´ÙÀÌÁ¦½ºÆ® ÆÐ½º¿öµå°¡ ÀÛµ¿Çϱâ À§Çؼ ¼¹ö°¡ ¸ðµç ÇØ½ÃµÇÁö ¾ÊÀº ÆÐ½º¿öµå¸¦ °¡Á®¾ß ÇÑ´Ù´Â °ÍÀ¸·Î ÀÌ´Â ¼¹ö¸¦ ¸Å·ÂÀûÀÎ °ø°Ý ¸ñÇ¥·Î ¸¸µç´Ù. ¾ÖÇø®ÄÉÀ̼ǿ¡¼ »ç¿ëÀÚ°¡ ÆÐ½º¿öµå¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù¸é ÆÐ½º¿öµå¸¦ °Ë»çÇØ ´ÜÁö "¾ÈÀüÇÑ" ÆÐ½º¿öµå¸¸À» Çã¿ëÇØ¶ó (¿¹, »çÀü¿¡ ÀÖÁö ¾Ê°í ¾î¶² ÃÖ¼Ò ±æÀ̸¦ °®´Â µî). ¾ÈÀüÇÑ ÆÐ½º¿öµå¸¦ ¼±ÅÃÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼´Â http://consult.cern.ch/writeup/security/security_3.html ¿Í °°Àº Á¤º¸¸¦ º¸°í ½ÍÀ» °ÍÀÌ´Ù. °¡´ÉÇÏ´Ù¸é PAM À» »ç¿ëÇØ¾ß Çϴµ¥ ÀÌ´Â ÀåÂø½Ä ÆÐ½º¿öµå üĿ (checker) Áö¿øÇϱ⠶§¹®ÀÌ´Ù. 10.2. À¥¿¡¼ ÀÎÁõÀ¥¿¡¼ À¥ ¼¹ö´Â º¸Åë SSL ¹× TLS ¶Ç´Â ¼¹ö ÀÎÁõ¼¸¦ »ç¿ëÇØ »ç¿ëÀÚ¿¡°Ô ÀÎÁõ¹Þ´Â´Ù - ±×·¯³ª »ç¿ëÀÚ°¡ ´©±¸ÀÎÁö¸¦ ÀÎÁõÇÏ´Â °ÍÀº ±×¸¸Å ½±Áö ¾Ê´Ù. SSL °ú TLS ´Â Ŭ¶óÀÌ¾ðÆ®Æ¯ ÀÎÁõ¼¸¦ Áö¿øÇÏÁö¸¸ À̵éÀ» ½ÇÁ¦ »ç¿ëÇÒ ¶§ ¸¹Àº Çö½ÇÀûÀÎ ¹®Á¦µéÀÌ ÀÖ´Ù (¿¹, À¥ ºê¶ó¿ìÀú´Â À¯ÀÏÇÑ »ç¿ëÀÚ ÀÎÁõ¼ Æ÷¸ËÀ» Áö¿øÇÏÁö ¾ÊÀ¸¸ç »ç¿ëÀÚ°¡ À̸¦ ¼³Ä¡Çϱâ´Â ¾î·Æ´Ù). ÀÚ¹Ù ¹× ÀÚ¹Ù ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏ´Â °ÍÀº ¸¹Àº »ç¿ëÀÚ°¡ À̵éÀ» ±ÝÁöÇϰí, ¸î¸î ¹æÈº®ÀÌ À̵éÀ» °É·¯³»°í ¶ÇÇÑ ¼Óµµ°¡ ´À·ÁÁö±â ½±±â ¶§¹®¿¡ ±× ƯÀ¯ÀÇ ¹®Á¦¸¦ °®°í ÀÖ´Ù. ´ëºÎºÐÀÇ °æ¿ì ¸ðµç »ç¿ëÀÚ¿¡°Ô Ç÷¯±×ÀÎÀ» ¼³Ä¡Çϵµ·Ï ¿ä±¸ÇÏ´Â °Í ¶ÇÇÑ ºñÇö½ÇÀûÀε¥ ½Ã½ºÅÛÀÌ ºñ±³Àû ¼Ò¼öÀÇ »ç¿ëÀÚµéÀ» À§ÇÑ ÀÎÆ®¶ó³Ý¿ëÀ̶ó¸é ÀûÇÕÇÒ ¼öµµ ÀÖ´Ù. ÀÎÆ®¶ó³Ý ¾ÖÇø®ÄÉÀ̼ÇÀ» ±¸ÃàÇϰí ÀÖ´Ù¸é ÀϹÝÀûÀ¸·Î »ç¿ëÀÚ°¡ »ç¿ëÇÏ´Â ÀÎÁõ ½Ã½ºÅÛ¸¸ÅÀº »ç¿ëÇØ¾ß ÇÑ´Ù. µû¶ó¼ Kerberos ¿¡ ÀÇÁ¸ÇÑ´Ù¸é Kerberos ¸¦ »ç¿ëÇϵµ·Ï ½Ã½ºÅÛÀ» ¼³°èÇØ¶ó. °ü¸® ±â°üÀÌ ÃßÈÄ ÀÎÁõ ½Ã½ºÅÛÀ» º¯°æ½Ãų ¼öµµ ÀÖ±â (º¯°æ½Ãų °ÍÀ̱â) ¶§¹®¿¡ À̸¦ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ³ª¸ÓÁö ºÎºÐ°ú ºÐ¸®ÇÏ·Á°í ÇØ¶ó. ¸¹Àº ¹æ¹ýµéÀº È¿°úÀûÀÌÁö ¾ÊÀ¸¸ç ¶ÇÇÑ ÃæºÐÈ÷ È¿°úÀûÀÌÁö ¾Ê´Ù. ÇѰ¡Áö Á¢±Ù ¹æ¹ýÀº º»ÁúÀûÀ¸·Î ¸ðµç ºê¶ó¿ìÀú¿Í ¼¹ö¿¡ ³»ÀåµÇ¾î ÀÖ´Â ``±âº»ÀûÀÎ ÀÎÁõ"À» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ºÒÇàÈ÷ ±âº»ÀûÀÎ ÀÎÁõÀº ÆÐ½º¿öµå¸¦ Æò¹®À¸·Î º¸³»±â ¶§¹®¿¡ ÆÐ½º¿öµå¸¦ ÈÉÄ¡±â ½±°Ô ÇÑ´Ù; ±âº»ÀûÀÎ ÀÎÁõ ÀÚü´Â ½ÇÁ¦·Î ¾µ¸ð¾ø´Â Á¤º¸¿¡ ´ëÇØ¼¸¸ À¯¿ëÇÏ´Ù. ¸ðµç ±âº»ÀûÀÎ ÀÎÁõ ÆÐ½º¿öµå¸¦ SSL/TLS ¿¬°á (¾ÏÈ£ÈÇÒ ¼ö ÀÖ´Ù) ³»¿¡ °¨½Î¼ º¸È£ÇÒ ¼ö ÀÖÁö¸¸ ÀÌ´Â ¼º´ÉÀÇ ÀúÇϸ¦ ¾ß±âÇÑ´Ù. ¶ÇÇÑ ``´ÙÀÌÁ¦½ºÆ® ÀÎÁõ"À» »ç¿ëÇÒ ¼ö Àִµ¥ ÁÁÀº ¹æ¹ýÀÌÁö¸¸ ºê¶ó¿ìÀú°¡ À̸¦ º¸ÆíÀûÀ¸·Î Áö¿øÇÏÁö ¾Ê°í ÀÖ´Ù. ÀÎÁõ Á¤º¸¸¦ »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ URL ³»¿¡ ÀúÀåÇÒ ¼öµµ ÀÖÁö¸¸ ´ëºÎºÐÀÇ °æ¿ì ÀÌ·¸°Ô ÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù - ÀÌ Á¤º¸°¡ ´Ù¸¥ »ç¶÷¿¡°Ô ´©¼³µÉ ¼ö ÀÖ´Â ³Ê¹«³ª ¸¹Àº ¹æ¹ýÀÌ ÀÖ´Ù (¿¹, ¸¹Àº ºê¶ó¿ìÀú¿¡ ÀúÀåµÇ¾î ÀÖ´Â ºê¶ó¿ìÀú È÷½ºÅ丮 ·Î±×, ÇÁ·Ï½ÃÀÇ ·Î±×¸¦ ÅëÇØ ´©¼³µÇ°Å³ª, ±×¸®°í Referef: Çʵ带 ÅëÇØ ´Ù¸¥ À¥ »çÀÌÆ®·Î ´©¼³µÉ ¼öµµ ÀÖ´Ù). µû¶ó¼ ¿À´Ã³¯ À¥¿¡¼ °¡Àå ÀϹÝÀûÀÎ ÀÎÁõ ¹æ¹ýÀº Äí۸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÄíŰ´Â ½ÇÁ¦ ÀÌ ¸ñÀûÀ» À§ÇØ ¼³°èµÇÁö ¾Ê¾ÒÁö¸¸ ÀÎÁõ¿¡ »ç¿ëµÉ ¼ö ÀÖ´Ù - ±×·¯³ª º¸¾È Ãë¾à¼ºÀ» ¸¸µé±â À§ÇØ À̵éÀ» »ç¿ëÇÏ´Â ¸¹Àº À߸øµÈ ¹æ¹ýÀÌ Àֱ⠶§¹®¿¡ ÁÖÀÇÇØ¶ó. ÄíŰ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÏ Á¤º¸´Â ÀÌ¿¡ ´ëÇÑ ¿¹Àü ½ºÆå°ú ÇÔ²² IETF RFC 2965 ¸¦ º¸¶ó. Äí۸¦ »ç¿ëÇϱ⠾ ºê¶ó¿ìÀú (¿¹, ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® ÀÎÅÍ³Ý ÀͽºÇ÷η¯ 6) °¡ ÇÁ¶óÀ̹ö½Ã ÇÁ·ÎÆÄÀÏ (¼¹öÀÇ ·çÆ® µð·ºÅ丮¿¡ p3p.xml) À» °¡Á®¾ß ÇÑ´Ù°í ¿ä±¸ÇÒ ¼ö ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. ¾î¶² »ç¿ëÀÚ´Â Äí۸¦ ¹Þ¾ÆµéÀÌÁö ¾ÊÀ½À» ÁÖ¸ñÇØ¶ó µû¶ó¼ ÀÌ ¹æ¹ýÀº ¾ÆÁ÷±îÁö ´Ù¼ÒÀÇ ¹®Á¦¸¦ °®°í ÀÖ´Ù. ¿øÄ¢ÀûÀ¸·Î´Â ÀÌ ÀÎÁõ Á¤º¸¸¦ HTML ÆûÀÇ hidden Çʵ带 ÅëÇØ ÁÖ°í¹Þ¾Æ¾ß ÇÑ´Ù (ÀÌ´Â °ÅÀÇ ¸ðµç ºê¶ó¿ìÀú°¡ Áß¿äÄ¡ ¾Ê°Ô À̸¦ Áö¿øÇϱ⠶§¹®ÀÌ´Ù). Äí۸¦ °®´Â °Í°ú °°Àº µ¿ÀÏÇÑ ¹æ¹ýÀ» »ç¿ëÇÒ °ÍÀÌ´Ù - ´ÜÁö µ¥ÀÌŸ¸¦ »ç¿ëÀڷκÎÅÍ ¼¹ö·Î º¸³»±â À§ÇØ ´Ù¸¥ ±â¼úÀ» »ç¿ëÇÒ °ÍÀÌ´Ù. ¹°·Ð ÀÌ ¹æ¹ýÀ» ±¸ÇöÇÑ´Ù¸é ÀÌ ÆäÀÌÁöµéÀÌ ´Ù¸¥ »ç¶÷µéÀÌ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ij½ÃµÇÁö ¾ÊÀ½À» º¸ÀåÇÏ´Â ¼³Á¤À» Æ÷ÇÔÇÒ Çʿ䰡 ÀÖ´Ù. ±×·¯³ª Äí۸¦ ÇÇÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù°í ÀúÀÚ´Â »ý°¢ÇÏÁö¸¸ ½ÇÁ¦·Î ÀÌ·¯ÇÑ ´Ù¸¥ ¹æ¹ýµéÀº ´ë°³ ´õ¿í ´õ ¸¹Àº °³¹ß ³ë·ÂÀ» ÇÊ¿ä·Î ÇÑ´Ù. ¸¹Àº ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÚµéÀ» À§ÇØ À̸¦ ´ë±Ô¸ð·Î ±¸ÇöÇÏ´Â °ÍÀº ¾î·Æ±â ¶§¹®¿¡ ÀúÀÚ´Â ÇöÀç ÀÌ·¯ÇÑ ¹æ¹ýµéÀ» °Á¶ÇÏÁö ¾Ê°í ÀÖ´Ù. °³¹ßÀÚ ¶Ç´Â »ç¿ëÀÚ¿¡ ÀÇÇØ Á¤È®ÇÏ°Ô ±¸ÇöµÉ ¼ö ¾øÀ» ¸¸Å ¾î·Á¿î ¹æ¹ýÀ» °Á¶ÇÏ´Â ´ë½Å ²Ï º¸¾ÈÀûÀÌ¸ç ±¸ÇöÇϱ⠽¬¿î ¹æ¹ýÀ» ±â¼úÇÒ °ÍÀÌ´Ù. ±×·¯³ª º°´Ù¸¥ ¼ö°í¾øÀÌ À̸¦ ±¸ÇöÇÒ ¼ö ÀÖ´Ù¸é ¹Ýµå½Ã ÆûÀÇ hidden Çʵå¿Ü ¾ÏÈ£ÈµÈ ¸µÅ© (¿¹, SSL/TLS) ¸¦ »ç¿ëÇØ ÀÎÁõ Á¤º¸¸¦ Àü¼ÛÇÏ´Â °ÍÀ» Áö¿øÇضó. Fu [2001] ´Â Á¦¾ÈµÈ Á¢±Ù ¹æ¹ý°ú ÇÔ²² À¥¿¡¼ÀÇ Å¬¶óÀÌ¾ðÆ® ÀÎÁõÀ» ³íÀÇÇϰí ÀÖ´Ù. ÀÌ´Â ´ëºÎºÐÀÇ À¥ »çÀÌÆ®¿¡ ´ëÇØ ÀúÀÚ°¡ ÃßõÇÏ´Â ¹æ¹ýÀÌ´Ù. ±âº»ÀûÀÎ °³³äÀº Ŭ¶óÀÌ¾ðÆ® ÀÎÁõÀ» µÎ ºÎºÐ ``·Î±ä ÀýÂ÷ (login procedure)" ¿Í ``ÀÏ·ÃÀÇ ¿äû ( subsequent requests) À¸·Î ³ª´©´Â °ÍÀÌ´Ù. ·Î±ä ÀýÂ÷¿¡¼ ¼¹ö´Â »ç¿ëÀÚ À̸§°ú ÆÐ½º¿öµå¸¦ ¿äûÇÏ°í »ç¿ëÀÚ°¡ À̵éÀ» Á¦°øÇÑ ÈÄ ¼¹ö°¡ ``ÀÎÁõ ÅäÅ«"À» °®°í ÀÀ´äÇÑ´Ù. ÀÏ·ÃÀÇ ¿äû¿¡¼ Ŭ¶óÀÌ¾ðÆ® (À¥ ºê¶ó¿ìÀú) ´Â ¼¹ö¿¡ ¿äû°ú ÇÔ²² ÀÎÁõ ÅäÅ«À» º¸³½´Ù; ¼¹ö´Â ÅäÅ«ÀÌ À¯È¿ÇÑÁö È®ÀÎÇϰí À¯È¿ÇÏ´Ù¸é ¿äûµÈ ¼ºñ½º¸¦ Á¦°øÇÑ´Ù. À¥ ÀÎÁõ¿¡ ´ëÇÑ ´Ù¸¥ ÁÁÀº Á¤º¸ Ãâó´Â Seifried [2001] ÀÌ´Ù. 10.2.1. À¥¿¡¼ ÀÎÁõ: ·Î±×Àηαä ÀýÂ÷´Â ÀϹÝÀûÀ¸·Î HTML ÆûÀ¸·Î ±¸ÇöµÈ´Ù; À¥ ºê¶ó¿ìÀú°¡ ´Ù¼ÒÀÇ À¯¿ëÇÑ ¾×¼ÇÀ» ÀÚµ¿ÀûÀ¸·Î ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÀúÀÚ´Â Çʵå¸íÀ¸·Î ``username" °ú ``password" ¸¦ »ç¿ëÇÒ °ÍÀ» Á¦¾ÈÇÑ´Ù. ¹Ýµå½Ã ÆÐ½º¿öµå°¡ ¾ÏÈ£ÈµÈ ¿¬°á (https: ¿¬°áÀ» ÅëÇØ SSL ¶Ç´Â TLS ¸¦ »ç¿ë) À» ÅëÇØ Àü¼ÛµÇµµ·Ï ÇØ¶ó - ±×·¸Áö ¾Ê´Ù¸é µµÃ»À» ÅëÇØ ÆÐ½º¿öµå¸¦ ¼öÁýÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚÀÇ ½ºÅ©¸°À» º¼ ¼ö ÀÖ´Â ´©±º°¡°¡ ÆÐ½º¿öµå ÅØ½ºÆ®¸¦ º¼ ¼ö ¾øµµ·Ï ¹Ýµå½Ã ¸ðµç ÆÐ½º¿öµå ÅØ½ºÆ® Çʵå´Â ÆÐ½º¿öµå·Î Ç¥½ÃÇØ¶ó. »ç¿ëÀÚ À̸§°ú ÆÐ½º¿öµå°¡ º¸³»Áú ¶§ ÀÌ´Â »ç¿ëÀÚ °èÁ¤ÀÇ Å×ÀÌŸº£À̽º¿¡ ´ëÇØ °Ë»çµÇ¾î¾ß ÇÑ´Ù. ÀÌ µ¥ÀÌŸº£À̽º´Â ÆÐ½º¿öµå¸¦ ``Æò¹®"À¸·Î ÀúÀåÇÏÁö ¾Ê¾Æ¾ß Çϴµ¥ ´©±º°¡ ÀÌ µ¥ÀÌŸº£À̽ºÀÇ º¹»çº»À» ¾ò´Â´Ù¸é ¸ðµç »ç¶÷ÀÇ ÆÐ½º¿öµå¸¦ °©Àڱ⠾òÀ» ¼ö ÀÖ´Ù (»ç¿ëÀÚ´Â ´ë°³ ÆÐ½º¿öµå¸¦ Àç»ç¿ëÇÑ´Ù). ¾î¶² »ç¶÷Àº À̸¦ ´Ù·ç±â À§ÇØ crypt() ¸¦ »ç¿ëÇÏÁö¸¸ crypt ´Â ´ÜÁö ¼Ò·®ÀÇ ÀԷ¸¸À» ´Ù·ê ¼ö ÀÖ´Ù. µû¶ó¼ ÀúÀÚ´Â ´Ù¸¥ Á¢±Ù ¹æ¹ýÀ» »ç¿ëÇÒ °ÍÀ» ÃßõÇÑ´Ù (ÀÌ´Â ÀúÀÚÀÇ ¹æ¹ýÀ¸·Î Fu [2001] Àº À̸¦ ³íÀÇÇϰí ÀÖÁö ¾Ê´Ù). ´ë½Å »ç¿ëÀÚ µ¥ÀÌŸº£À̽º´Â »ç¿ëÀÚ¿¡ ´ëÇÑ »ç¿ëÀÚ À̸§, salt ¿Í ÆÐ½º¿öµå ÇØ½Ã¸¦ ÀúÀåÇØ¾ß ÇÑ´Ù. ''salt" ´Â ´ÜÁö ¹®ÀÚµéÀÇ ÀÓÀÇÀÇ ½ÃÄö½º·Î °ø°ÝÀÚ°¡ ÆÐ½º¿öµå µ¥ÀÌŸº£À̽º¸¦ ¾ò´Â´Ù ÇÏ´õ¶óµµ ÆÐ½º¿öµå °áÁ¤À» ´õ¿í ¾î·Æ°Ô Çϱâ À§ÇØ »ç¿ëµÈ´Ù - ÀúÀÚ´Â 8 ¹®ÀÚÀÇ ÀÓÀÇÀÇ ½ÃÄö½º¸¦ ÃßõÇÑ´Ù. ¾ÏÈ£ÇÐÀûÀ¸·Î ÀÓÀÇÀûÀÏ ÇÊ¿ä´Â ¾øÀ¸¸ç ´ÜÁö ´Ù¸¥ »ç¿ëÀڵ鿡 ´ëÇÑ °ª°ú ´Ù¸£¸é µÈ´Ù. ÆÐ½º¿öµå ÇØ½Ã´Â ``¼¹ö key1", »ç¿ëÀÚ ÆÐ½º¿öµå¿Í salt ¸¦ ¿¬°áÇÑ ÈÄ ¾ÏÈ£ÇÐÀûÀ¸·Î º¸¾ÈÀûÀÎ ÇØ½Ã ¾Ë°í¸®µëÀ» »ç¿ëÇØ¼ °è»êµÇ¾î¾ß ÇÑ´Ù. ¼¹ö key1 Àº ÀÌ ¼¹ö¿¡ °íÀ¯ÇÑ ºñ¹Ð ŰÀÌ´Ù - À̸¦ ÆÐ½º¿öµå µ¥ÀÌŸº£À̽º¿Í º°µµ·Î º¸°üÇØ¶ó. ¼¹ö key1 À» °¡Áø »ç¶÷ÀÌ ÆÐ½º¿öµå µ¥ÀÌŸº£À̽º¸¦ °¡Á³´Ù¸é »ç¿ëÀÚ ÆÐ½º¿öµå¸¦ ¾Ë¾Æ³»±â À§ÇØ ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¼ö ÀÖ´Ù; ¼¹ö key1 Àº ±â¾ïµÉ Çʿ䰡 ¾ø±â ¶§¹®¿¡ ±æ°í º¹ÀâÇÑ ÆÐ½º¿öµåÀÏ ¼ö ÀÖ´Ù. HMAC-SHA-1 ¶Ç´Â HMAC-MD5 °¡ °¡Àå º¸¾ÈÀûÀÏ °ÍÀÌ´Ù; SHA-1 (´ëºÎºÐÀÇ À¥ »çÀÌÆ®´Â ½ÇÁ¦ ÀÌ ¾Ë°í¸®µëÀÌ Çã¿ëÇÏ´Â °ø°Ý¿¡ ´ëÇØ °ÆÁ¤ÇÏÁö ¾Ê°í ÀÖ´Ù) ¶Ç´Â MD5 (MD5 ¿¡ ´ëÇÑ ³íÀǸ¦ º¸¶ó) ¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. µû¶ó¼ »ç¿ëÀÚ°¡ °èÁ¤À» ¸¸µé¶§ ÆÐ½º¿öµå´Â ÆÐ½º¿öµå µ¥ÀÌŸº£À̽º³»¿¡ ÇØ½ÃµÇ¾î ³õ¿©Áø´Ù. »ç¿ëÀÚ°¡ ·Î±×ÀÎÇÏ·Á°í ÇÒ¶§ ÁÖÀåµÈ ÆÐ½º¿öµå´Â ÇØ½ÃµÇ¾î µ¥ÀÌŸº£À̽º³»ÀÇ ÇØ½Ã¿Í ºñ±³µÈ´Ù (À̵éÀº µ¿ÀÏÇØ¾ß ÇÑ´Ù). »ç¿ëÀÚ°¡ ÆÐ½º¿öµå¸¦ º¯°æÇÒ ¶§ ¿¹Àü ¹× »õ·Î¿î ÆÐ½º¿öµå¸¦ ¸ðµÎ ŸÀÌÇÎÇØ¾ß ÇÏ¸ç »õ·Î¿î ÆÐ½º¿öµå´Â À߸ø ŸÀÌÇεÇÁö ¾Ê¾ÒÀ½À» È®ÀÎÇϱâ À§ÇØ µÎ¹ø ŸÀÌÇÎÇØ¾ß ÇÑ´Ù; ¶ÇÇÑ ÆÐ½º¿öµå ¹®ÀÚµéÁß ¾î´À ¹®ÀÚµµ ½ºÅ©¸°»ó¿¡¼ º¼ ¼ö ¾øµµ·Ï ÇØ¶ó. µðÆúÆ®·Î Äí۸¦ »ç¿ëÇϴ Ŭ¶óÀ̾ðÆ®ÀÇ À¥ ºê¶ó¿ìÀú¿¡ ÆÐ½º¿öµå ÀÚü¸¦ ÀúÀåÇÏÁö ¸¶¶ó - »ç¿ëÀÚµéÀº ¶§¶§·Î °øÀ¯µÇ´Â Ŭ¶óÀÌ¾ðÆ®¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù (°¡·É Ä¿ÇǼó). ¿øÇÑ´Ù¸é »ç¿ëÀÚ¿¡°Ô ºê¶ó¿ìÀú¿¡¼ ``ÆÐ½º¿öµå ÀúÀåÇϱâ" ¿É¼ÇÀ» ÁÙ ¼ö ÀÖÁö¸¸ ÀÌ °æ¿ì ¹Ýµå½Ã ÆÐ½º¿öµå°¡ ``º¸¾ÈÀûÀÎ" ¿¬°áÀ» ÅëÇØ¼¸¸ Àü¼ÛµÇµµ·Ï ¼³Á¤ÇÏ°í »ç¿ëÀÚ°¡ ¸íÈ®ÇÏ°Ô À̸¦ ¿äûÇϵµ·Ï ÇØ¶ó (µðÆúÆ®·Î À̸¦ ÇÏÁö´Â ¸¶¶ó). ¹Ýµå½Ã ij½ÃµÇÁö ¾Ê´Â ÆäÀÌÁö¸¦ Ç¥½ÃÇØ¶ó ±×·¸Áö ¾Ê´Ù¸é ¼¹ö°¡ ±× ÆäÀÌÁö¸¦ »ç¿ëÀÚ¿¡°Ô ´Ù½Ã Á¦°øÇÒ °ÍÀÌ´Ù. ÀÏ´Ü »ç¿ëÀÚ°¡ ¼º°øÀûÀ¸·Î ·Î±×ÀÎÇÏ¸é ¼¹ö´Â ÄíŰ³»ÀÇ ``ÀÎÁõ ÅäÅ«"À» Ŭ¶óÀÌ¾ðÆ®¿¡ Àü¼ÛÇÒ Çʿ䰡 ÀÖ´Ù. ÀÌ´Â ´ÙÀ½¿¡ ±â¼úµÈ´Ù. 10.2.2. À¥¿¡¼ ÀÎÁõ: ÀÏ·ÃÀÇ ÇൿÀÏ´Ü »ç¿ëÀÚ°¡ ·Î±×ÀÎÇÏ¸é ¼¹ö´Â Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÎÁõ ÅäÅ«À» °®°í ÀÖ´Â Äí۸¦ µÇµ¹·ÁÁØ´Ù. Á¦¾ÈµÈ ÅäÅ«Àº ´ÙÀ½°ú °°À» °ÍÀÌ´Ù:
t ´Â ÅäÅ«ÀÇ ¸¸·á ½Ã°£ (°¡·É ¸î ½Ã°£) À̰í, data ´Â »ç¿ëÀÚ À̸§ ¶Ç´Â ¼¼¼Ç id µéÀ̰í digest ´Â keyed digest ÀÌ´Ù. ``data" ÀÇ Çʵå¸íÀ» ´õ¿í ¼³¸íÀûÀÎ »ç¿ëÀÚ À̸§ ¶Ç´Â ¼¼¼Ç id ·Î ÀÚÀ¯·Ó°Ô º¯°æÇÒ ¼ö ÀÖ´Ù. Keyed digest ´Â ¸¸·á ½Ã°£°ú data ¸¦ ¿¬°áÇÑ °ÍÀÇ ¾ÏÈ£ÇÐÀûÀÎ ÇØ½ÃÀÌ´Ù. µ¥ÀÌŸ¿¡ ÇÑ Çʵå ÀÌ»ó (¿¹, »ç¿ëÀÚ À̸§°ú ¼¼¼Ç id µÑ) À» °®´Â´Ù¸é ¹Ýµå½Ã digest °¡ ÀÎÁõÇÏ·Á´Â Çʵå¸í°ú ¸ðµç ÇʵåÀÇ data ¸ðµÎ¸¦ »ç¿ëÇϵµ·Ï ÇØ¶ó; À̵éÀ» Çʵå data °ª ¾îµð¿¡µµ ÀÖÀ» ¼ö ¾ø´Â ÆÐÅÏ (¿¹, ``%%", ``+" ¶Ç´Â ``&") À» ÀÌ¿ëÇØ ¿¬°áÇØ¶ó. Keyed digest ´Â º°°³ÀÇ ¼¹ö Ű (key2) ¸¦ »ç¿ëÇÏ´Â HMAC-MD5 ¶Ç´Â HMAC-SHA1 À» »ç¿ëÇØ¾ß ÇÑ´Ù. ÀÌ key2 °¡ ¼Õ»óµÈ´Ù¸é ´©±¸¶óµµ ¼¹ö¿¡ ÀÎÁõ¹ÞÀ» ¼ö ÀÖÀ¸¸ç key2 ¸¦ º¯°æÇÏ´Â °ÍÀÌ ½±´Ù - º¯°æÇÑ´Ù¸é ÀÌ´Â ´Ü¼øÈ÷ ÇöÀç ``·Î±×ÀÎ ÇØ ÀÖ´Â" »ç¿ëÀÚ¿¡°Ô ÀçÀÎÁõ¹Þµµ·Ï ¿ä±¸ÇÒ °ÍÀÌ´Ù. ´õ¿í ÀÚ¼¼ÇÑ »çÇ×Àº Fu [2001] À» º¸¶ó. ±×¶§ºÎÅÍ ¼¹ö´Â ÀÌ ÀÎÁõ ÅäÅ«ÀÇ ¸¸·á ½Ã°£°ú digest ¸¦ °Ë»çÇØ ÀÏÄ¡ÇÏ´Â °æ¿ì¿¡¸¸ µ¥ÀÌŸ¸¦ Á¦°øÇØ¾ß ÇÑ´Ù. ÅäÅ«ÀÌ ¾ø´Ù¸é »ç¿ëÀÚ ·Î±ä ÆäÀÌÁö (¼º°øÀûÀÎ ·Î±ä½Ã ¾îµð·Î °¡´Â Áö¸¦ º¸ÀÌ´Â ¼û°ÜÁø Æû Çʵ带 °®°í ÀÖ´Ù) ·Î ´Ù½Ã ÀÀ´äÇÒ °ÍÀÌ´Ù . ÀÎÁõ ÅäÅ«¿¡ ¼¼¼Ç id ¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù¸é Á¢±ÙÀ» ´õ¿í Á¦ÇÑÇÒ ¼ö ÀÖ´Ù. ¼¹ö´Â »ç¿ëÀÚ°¡ ÁÖ¾îÁø ¼¼¼Ç¿¡¼ ¾î¶² ÆÐÀÌÁö¸¦ º¸¾Ò´ÂÁö ÃßÀûÇÒ ¼ö ÀÖÀ¸¸ç ´ÜÁö ÀûÀýÇÑ ÆäÀÌÁö¿¡ ´ëÇÑ Á¢±Ù¸¸ Çã¿ëÇÒ ¼ö ÀÖ´Ù (¿¹, ÀÌ·¯ÇÑ ÆäÀÌÁöµé¿¡¼ Á÷Á¢ÀûÀ¸·Î ¸µÅ©µÇ¾î ÀÖ´Â ÆäÀÌÁöµé). ¿¹¸¦ µé¾î »ç¿ëÀÚ°¡ foo.html ¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°í foo.html ÆäÀÌÁö°¡ ÀÚ¿ø bar1.jpg ¿Í bar2.png ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ °®°í ÀÖ´Ù¸é bar4.cgi ¿¡ ´ëÇÑ Á¢±ÙÀº °ÅÀýµÉ ¼ö ÀÖ´Ù. ¼¼¼ÇÀ» Á¾·áÇÒ ¼öµµ Àִµ¥ ÀÌ´Â ÀÎÁõ Á¤º¸°¡ À¯È¿ÇÑ °æ¿ì¿¡¸¸ ÇØ¶ó (±×·¸Áö ¾Ê´Ù¸é °ø°ÝÀÚ°¡ ´Ù¸¥ »ç¿ëÀÚ¿¡ ´ëÇØ ¼ºñ½º ºÎÀÎ °ø°ÝÀ» ¾ß±âÇÒ ¼öµµ ÀÖ°Ô ÇÑ´Ù). ÀÌ´Â °ø°ÝÀÚ°¡ ¼¼¼ÇÀ» ¼º°øÀûÀ¸·Î °¡·Îæ´Ù ÇÏ´õ¶óµµ ¾î´À Á¤µµ °ø°ÝÀÚ°¡ °®´Â Á¢±ÙÀ» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ½Ã°£°ú ÀÎÁõ ÅäÅ«À» °®°í ÀÖ´Â °ø°ÝÀÚ´Â Á¤»óÀûÀÎ »ç¿ëÀÚ¿Í °°ÀÌ ¸µÅ©¸¦ µû¶ó ÆäÀÌÁöµéÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇѰ¡Áö °áÁ¤ÇØ¾ß ÇÏ´Â °ÍÀº ÀÎÁõ ÅäÅ« ¹×/¶Ç´Â data °¡ º¸¾ÈÀûÀÎ ¿¬°á(¿¹, SSL) À» ÅëÇØ º¸³»Á®¾ß ÇÏ´Â Áö ¶Ç´Â ¾Æ´ÑÁöÀÌ´Ù. ÀÎÁõ ÅäÅ«À» Æò¹®À¸·Î (ºñº¸¾ÈÀûÀ¸·Î) Àü¼ÛÇÑ´Ù¸é ÅäÅ«À» °¡·Îæ ´©±º°¡´Â ¸¸·á ½Ã°£±îÁö »ç¿ëÀÚ°¡ ÇÒ ¼ö ÀÖ´Â ¸ðµç °ÍÀ» ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ µ¥ÀÌŸ¸¦ ¾ÏȣȵÇÁö ¾ÊÀº ¸µÅ©¸¦ ÅëÇØ Àü¼ÛÇÒ ¶§ °ø°ÝÀÚ°¡ ´«¿¡ ¶çÁö ¾Ê°Ô º¯°æÇÒ ¼ö ÀÖ´Â À§Çèµµ ÀÖ´Ù; ´©±º°¡°¡ Àü¼ÛÁß¿¡ µ¥ÀÌŸ¸¦ º¯°æÇÒ ¼öµµ ÀÖ´Ù°í °ÆÁ¤ÇÑ´Ù¸é Àü¼ÛµÇ¾î Áö´Â µ¥ÀÌŸ¸¦ ÀÎÁõÇÒ Çʿ䰡 ÀÖ´Ù. ¾ÏÈ£È ÀÚü´Â ÀÎÁõÀ» º¸ÀåÇÏÁö ¾ÊÁö¸¸ º¯Á¶¸¦ ´õ¿í ½±°Ô ŽÁöÇÒ ¼ö ÀÖ°Ô Çϸç ÀϹÝÀûÀÎ ¶óÀ̺귯¸®´Â TLS/SSL ¿¬°á¿¡¼ ¾ÏÈ£È¿Í ÀÎÁõ ¸ðµÎ¸¦ Áö¿øÇÒ ¼ö ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ¸Þ½ÃÁö¸¦ ¾ÏÈ£ÈÇÑ´Ù¸é ¶ÇÇÑ À̸¦ ÀÎÁõÇØ¾ß ÇÑ´Ù. ÇÊ¿äÇÑ °ÍÀÌ ´Ù¸£´Ù¸é ÇѰ¡Áö ´ë¾ÈÀº µÎ°³ÀÇ ÀÎÁõ ÅäÅ«À» »ý¼ºÇÏ´Â °ÍÀÌ´Ù - ÇѰ³´Â Áß¿äÇÑ ÀÛ¾÷À» À§ÇØ ``º¸¾ÈÀûÀÎ" ¿¬°á¿¡¸¸ »ç¿ëµÇ°í ¹Ý¸é ´Ù¸¥ ÇѰ³´Â ´ú Áß¿äÇÑ ÀÛ¾÷¿¡ »ç¿ëµÈ´Ù. ´ÜÁö º¸¾ÈÀûÀÎ ¿¬°á (ÀϹÝÀûÀ¸·Î ¾ÏÈ£ÈµÈ SSL/TLS ¿¬°á) µé¸¸ÀÌ »ç¿ëµÇµµ·Ï ``º¸¾ÈÀûÀÎ" ¿¬°á¿¡ »ç¿ëµÇ´Â ÅäÅ«Àº ¹Ýµå½Ã Ç¥½Ã¸¦ ÇØ¶ó. »ç¿ëÀÚµéÀÌ ½ÇÁ¦·Î ´Ù¸£Áö ¾Ê´Ù¸é ÀÎÁõ ÅäÅ«Àº ``data" ¸¦ ÀüÀûÀ¸·Î »ý·«ÇÒ ¼ö ÀÖ´Ù. ÀÌ ÀÎÁõ ÅäÅ«À» °®´Â ÆäÀÌÁöµéÀÌ ¹Ýµå½Ã ij½ÃµÇÁö ¾Êµµ·Ï ÇØ¶ó. ¶ÇÇÑ ´Ù¸¥ Àû´çÇÑ ½ºÅ´µµ ¶ÇÇÑ ÀÖ´Ù; ¿©±â¼ÀÇ ¸ñÀûÀº Àû¾îµµ ÇѰ¡Áö º¸¾ÈÀûÀÎ ÇØ°á ¹æ¹ýÀ» Á¦°øÇÏ´Â µ¥ ÀÖÀ¸¸ç ¸¹Àº º¯ÇüµÈ ¹æ¹ýµéµµ °¡´ÉÇÏ´Ù. 10.2.3. À¥¿¡¼ ÀÎÁõ: ·Î±×¾Æ¿ô»ç¿ëÀÚ¿¡°Ô ``·Î±× ¾Æ¿ô" ÇÒ ¼ö ÀÖ´Â ¸ÞÄ«´ÏÁòÀ» ´Ã Á¦°øÇØ¾ß ÇÑ´Ù - ÀÌ´Â µµ¼°ü¿¡¼¿Í °°ÀÌ ¸¹Àº »ç¶÷µéÀÌ ºê¶ó¿ìÀú¸¦ °øÀ¯Çؼ »ç¿ëÇÏ´Â °æ¿ì ƯÈ÷ À¯¿ëÇÏ´Ù. ``logout" ·çƾÀÌ ÇÏ´Â ÀÏÀº °£´ÜÇÏ´Ù - Ŭ¶óÀ̾ðÆ®ÀÇ ÀÎÁõ ÅäÅ«À» ´ÜÁö ¼³Á¤ÇØÁ¦ÇÏ´Â °ÍÀÌ´Ù. 10.3. ³¼ö¸¹Àº °æ¿ì º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥µéÀº ÀûÀÌ ÃßÃøÇÒ ¼ö ¾ø´Â ÀÓÀÇÀÇ ¼ýÀÚ (³¼ö) ¸¦ »ý¼ºÇØ¾ß Çϴµ¥ ¿¹·Î´Â ¸¹Àº ÇÁ·ÎÅäÄÝ, salt µî¿¡ »ç¿ëµÇ´Â ¼¼¼ÇŰ, °ø°³ ¶Ç´Â ºñ¹ÐŰ, ´ëĪŰ, nonces ¿Í IV µéÀÌ ÀÖ´Ù. ÀÌ·Ð»ó ³¼ö·Î´Â ¹æ»ç¼± ¼Ò¸ê (°¡À̰Šī¿îÅÍ Å¬¸¯ÀÇ Á¤È®ÇÑ °è½Ã¸¦ ÅëÇØ), ´ë±â ¼ÒÀ½ ¶Ç´Â Àü¼±¿¡¼ÀÇ ¿ ¼ÒÀ½¿¡ ±âÃÊÇÑ °ªµé°ú °°Àº ½ÇÁ¦ ¹«ÀÛÀ§·Î ¾ò¾îÁø µ¥ÀÌŸ¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ¾î¶² ÄÄÇ»ÅÍ´Â ½ÇÁ¦ ÀÓÀÇÀÇ (random) °ªÀ» »ý¼ºÇÏ´Â ¿ªÇÒÀ» ÇÏ´Â Çϵå¿þ¾î ÄÄÆ÷³ÍÆ®¸¦ °®°í Àִµ¥ °¡´ÉÇÏ´Ù¸é À̸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ±×·¯³ª ´ëºÎºÐÀÇ ÄÄÇ»Å͵éÀº ½ÇÁ¦ ÀÓÀÇÀÇ °ªµéÀ» »ý¼ºÇÏ´Â Çϵå¿þ¾î¸¦ °®°í ÀÖÁö ¾ÊÀ¸¸ç µû¶ó¼ ´ëºÎºÐÀÇ °æ¿ì ÀûÀÌ ¿¹ÃøÇÒ ¼ö ¾øÀ» ¸¸Å ÃæºÐÈ÷ ÀÓÀÇÀûÀÎ ³¼ö¸¦ »ý¼ºÇÒ ¹æ¹ýÀÌ ÇÊ¿äÇÏ´Ù. ÀϹÝÀûÀ¸·Î ÀÌ´Â ´ÙÀ½ ¼¼°¡Áö¸¦ ÇÊ¿ä·Î ÇÔÀ» ÀǹÌÇÑ´Ù:
ÀϹÝÀûÀ¸·Î PRNG ´Â »óŸ¦ »ç¿ëÇØ ¾î¶² °ªµéÀ» »ý¼ºÇÑ ÈÄ ÀÌ °ªµéÁßÀÇ ÀÏºÎ¿Í ´Ù¸¥ ÃßÃøÇÒ ¼ö ¾ø´Â ÀÔ·ÂÀ» ÀÌ¿ëÇØ »óŸ¦ °»½ÅÇÑ´Ù. ÀÌ·¯ÇÑ ½Ã½ºÅÛµéÀ» °ø°ÝÇÏ´Â ¸¹Àº ¹æ¹ýµéÀÌ Àִµ¥ ¿¹¸¦ µé¾î °ø°ÝÀÚ°¡ »óÅ¿¡ ´ëÇÑ ÀԷµé (¶Ç´Â À̵é ÁßÀÇ ÀϺÎ) À» Á¦¾îÇϰųª º¼ ¼ö ÀÖ´Ù¸é °ø°ÝÀÚ´Â ¾Æ¸¶ ³¼ö¸¦ °áÁ¤ÇÒ ¼ö ÀÖÀ» ¼öµµ ÀÖ´Ù. PRNGs ¸¦ »ç¿ëÇϴµ¥ ÀÖ¾î ÁøÂ¥ À§ÇèÇÑ °ÍÀº ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ ¾ð¾î ¶óÀ̺귯¸®µéÀÌ º¸¾È ¸ñÀû¿¡ ºÎÀûÀýÇÑ ¸¹Àº PRNG ¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù´Â °ÍÀÌ´Ù. ´Ù½Ã Çѹø ¸»ÇÏÀÚ: º¸¾ÈÀ» ¸ñÀûÀ¸·Î ÇÒ ¶§ ÀϹÝÀûÀÎ ³¼ö ¹ß»ý±â¸¦ »ç¿ëÇÏÁö ¸¶¶ó. ÀϹÝÀûÀ¸·Î ¶óÀ̺귯¸® PRNG ´Â ¸ð»ç, °ÔÀÓ µî¿¡ »ç¿ëÇϱâ À§ÇÑ °ÍÀε¥ À̵éÀº Ű »ý¼º°ú °°Àº º¸¾È ÇÔ¼öµé¿¡ »ç¿ëÇÒ ¼ö ÀÖÀ» Á¤µµ·Î ÃæºÐÈ÷ ÀÓÀÇÀûÀÌÁö ¾Ê´Ù. ´ëºÎºÐÀÇ ºñ¾ÏÈ£È ¶óÀ̺귯¸® PRNG ´Â ¼±Çü ÇÕµ¿ ¹ß»ý±â (linear congruential generator) À» ¾à°£ º¯Çü½ÃŲ °ÍÀ¸·Î ``´ÙÀ½" ÀÓÀÇÀÇ °ªÀÌ (aX+b))mod)m À¸·Î °è»êµÈ´Ù (X ´Â ÀÌÀü °ªÀÌ´Ù). ÈǸ¢ÇÑ ¼±Çü ÇÕµ¿ ¹ß»ý±â´Â ºü¸£¸ç À¯¿ëÇÑ Åë°èÀûÀÎ ¼ºÁúÀ» °®°í ÀÖ¾î ÀǵµÇÑ »ç¿ë ¸ñÀû¿¡ ÀûÀýÇÏ´Ù. ÀÌ·¯ÇÑ PRNG ¿Í °ü°èµÈ ¹®Á¦´Â Â÷ÈÄÀÇ °ªÀÌ ÀÓÀÇÀÇ °ªÀ¸·Î º¸ÀÓ¿¡µµ ºÒ±¸ÇÏ°í °ø°ÝÀÚ¿¡ ÀÇÇØ ½±°Ô ÃßÁ¤µÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀÌÂ÷ (quadratic) ¹× »ïÂ÷ (cubic) ¹ß»ý±â¿Í °°ÀÌ ºü¸£°Ô ³¼ö¸¦ »ý¼ºÇÏ´Â ´Ù¸¥ ¾Ë°í¸®µëµéµµ ÇØµ¶µÇ¾ú´Ù [Schneier 1996]. ¿ä¾àÇÏ¸é º¸¾ÈÀûÀÎ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ³¼ö¸¦ »ý¼ºÇϱâ À§Çؼ´Â ¾ÏÈ£ÇÐÀûÀ¸·Î °·ÂÇÑ PRNG ¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù - º¸ÅëÀÇ ³¼ö ¶óÀ̺귯¸®µéÀº ÃæºÐÇÏÁö ¾Ê´Ù. Ű¿¡ ´ëÇØ ½ÇÁ¦·Î ÀÓÀÇÀÇ °ªµéÀ» Á¤È®È÷ »ý¼ºÇÏÁö ¸øÇÔÀ¸·Î½á Kerberos, X À©µµ¿ì ½Ã½ºÅÛ°ú NFS ½Ã½ºÅÛ¿¡¼ÀÇ º¸¾È ±¸¸ÛÀ» Æ÷ÇÔÇÏ¿© ¸¹Àº ¹®Á¦¸¦ ¾ß±âÇÏ¿´´Ù [Venema 1996]. °¡´ÉÇÏ´Ù¸é ¾ÏÈ£ÇÐÀûÀ¸·Î º¸¾ÈÀûÀÎ ÀÓÀÇÀÇ °ªµéÀ» »ý¼ºÇϵµ·Ï Ưº°È÷ ¼³°èµÈ ÀϹÝÀûÀ¸·Î ¿î¿µÃ¼Á¦¿¡¼ Á¦°øÇÏ´Â ½Ã½ºÅÛ ¼ºñ½º¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ¸®´ª½º Ä¿³Î (1.3.30 ÀÌÈÄ) Àº ³¼ö ¹ß»ý±â¸¦ Æ÷ÇÔÇϰí Àִµ¥ ÀÌ´Â º¸¾ÈÀ» ¸ñÀûÀ¸·Î ÇÑ ¸¹Àº °÷¿¡ ÃæºÐÇÏ´Ù. ÀÌ ³¼ö ¹ß»ý±â´Â µð¹ÙÀ̽º µå¶óÀ̹ö¿Í ´Ù¸¥ Ãâó·ÎºÎÅÍÀÇ È¯°æ ³ëÀÌÁ ¿£Æ®·ÎÇÇ Ç®·Î ¸ðÀ¸´Âµ¥ /dev/random À¸·Î Á¢±ÙµÉ ¶§ ÀÓÀÇÀÇ ¹ÙÀÌÆ®µé¸¸ÀÌ ¿£Æ®·ÎÇÇ Ç®¿¡¼ Æò°¡µÈ ³ëÀÌÁî ºñÆ®¼ö ³»¿¡¼ ¹ÝȯµÈ´Ù (¿£Æ®·ÎÇÇ Ç®ÀÌ ºñ¾îÀÖÀ» ¶§ È£ÃâÀº Ãß°¡ÀûÀΠȯ°æ ³ëÀÌÁî°¡ ¸ð¿©Áú ¶§±îÁö ºí·ÏµÈ´Ù). /dev/urandom À¸·Î Á¢±ÙµÉ ¶§´Â ¿£Æ®·ÎÇÇ Ç®ÀÌ ´Ù °í°¥µÇ¾ú´Ù ÇÏ´õ¶óµµ ¿äûµÈ ¸¸ÅÀÇ ¹ÙÀÌÆ®µéÀÌ ¹ÝȯµÈ´Ù. ¸®´ª½º¿¡¼ Ű »ý¼º°ú °°Àº ¾ÏÈ£È ¸ñÀûÀ¸·Î ÀÓÀÇÀÇ °ªµéÀ» »ç¿ëÇÏ·Á¸é /dev/random À» »ç¿ëÇØ¶ó. Çϵå¿þ¾î ³¼ö ¹ß»ý±â¸¦ »ç¿ëÇÒ ¼ö ÀÖ°í ±× µå¶óÀ̹ö°¡ ¼³Ä¡µÇ¾î ÀÖ´Ù¸é À̰ÍÀÌ ´ë½Å »ç¿ëµÉ °ÍÀÓÀ» ÁÖ¸ñÇØ¶ó. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â ½Ã½ºÅÛ ¹®¼ random(4) ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. ´Ù¸¥ ½Ã½ºÅÛ¿¡¼´Â Á¤¸»·Î ÀÓÀÇÀûÀÎ °á°ú¸¦ ¾ò´Â ´Ù¸¥ ¹æ¹ýÀ¸ ã¾Æ¾ß ÇÒ °ÍÀÌ´Ù. ´Ù¸¥ À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡ ´ëÇØ¼´Â Entropy Gathering Daemon (EGD) °¡ ÇѰ¡Áö ¹æ¹ýÀ¸·Î ÀÌ´Â ½Ã½ºÅÛ È°µ¿À» °¨½ÃÇØ À̸¦ ÀÓÀÇÀûÀ¸·Î °ªÀ¸·Î ÇØ½ÃÇÑ´Ù; ÀÌ´Â http://www.lothar.com/tech/crypto ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. PRNG Ãâ·Â¿¡ ¾ÏÈ£È ÇØ½Ã ÇÔ¼ö (¿¹, SHA-1) ÀÇ »ç¿ëÀ» °í·ÁÇÒ ¼öµµ Àִµ¥ ÇØ½Ã ¾Ë°í¸®µëÀ» »ç¿ëÇÔÀ¸·Î½á PRNG °¡ ¿¹Ãø°¡´ÉÇÏ´Ù°í ÆÇ¸íµÇ¾úÀ½¿¡µµ ºÒ±¸Çϰí ÀÌ´Â °ø°ÝÀÚ°¡ ¶ÇÇÑ ÇØ½Ã ÇÔ¼öµµ ÇØµ¶ÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. °·ÂÇÑ PRNG ¸¦ ½º½º·Î ±¸ÇöÇØ¾ß ÇÑ´Ù¸é ¾ÏÈ£ÇÐÀûÀ¸·Î °·ÂÇÏ¸ç Æ¯Çã¿¡ ¾ô¸ÅÀÌÁö ¾ÊÀº PRNG ÀÇ ÁÁÀº ¼±ÅÃÀº Yarrow ¾Ë°í¸®µëÀ¸·Î http://www.counterpane.com/yarrow.html. ¿¡¼ Yarrow ¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼È÷ ¾Ë ¼ö ÀÖ´Ù. ¾à°£ÀÇ ´Ù¸¥ PRNG µµ À¯¿ëÇÒ ¼ö ÀÖÁö¸¸ ³Î¸® »ç¿ëµÇ°í ÀÖ´Â ¸¹Àº PRNG Àº ¾ÖÇø®ÄÉÀ̼ǿ¡ µû¶ó Áß¿äÇϰųª ±×·¸Áö ¾ÊÀ» ¼öµµ ÀÖ´Â ¾Ë·ÁÁø ¾àÁ¡À» °®°í ÀÖ´Ù. PRNG ¸¦ ½º½º·Î ±¸ÇöÇϱâ Àü¿¡ [Kersey 1998] °ú McGraw [2000a] ¿Í °°Àº ¹®ÇåÀ» ÂüÁ¶Çضó. ¶ÇÇÑIETF RFC 1750 µµ Á¶»çÇØ¾ß ÇÑ´Ù. 10.4. »ç¿ëÀÚ°¡ ±â¾ïÇÏ´Â ºñ¹Ð (ÆÐ½º¿öµå ¹× Ű) À» ƯÈ÷ º¸È£Çضó¾ÖÇø®ÄÉÀ̼ÇÀÌ ÆÐ½º¿öµå ¶Ç´Â ºñ°ø°³ Ű (¼¼¼ÇŰ, °³ÀÎŰ, ºñ¹ÐŰ µî) ¸¦ ´Ù·ï¾ß ÇÑ´Ù¸é À̵éÀÌ ÃÖ¼ÒÇÑÀ¸·Î ³ëÃâµÇµµ·Ï »ç¿ëÇÑ ÈÄ Áï°¢ÀûÀ¸·Î °ãÃĽá¶ó. ¿¹¸¦ µé¾î ÀÚ¹Ù¿¡¼ ÆÐ½º¿öµå¸¦ ÀúÀåÇϱâ À§ÇØ ¹®ÀÚ¿ (Sting) ŸÀÔÀ» »ç¿ëÇÏÁö ¸¶¶ó À̵éÀº ºÒº¯ (immutable) À̱⠶§¹®¿¡ °¡ºñÁö ¼öÁý (garbage collection) ¹× Àç»ç¿ëµÇ±â±îÁö ¾Æ¸¶µµ Â÷ÈÄ ¾î´À Á¤µµ ½Ã°£±îÁö´Â °ãÃĽáÁöÁö ¾ÊÀ» °ÍÀÌ´Ù. ´ë½Å ÀÚ¹Ù¿¡¼´Â ÆÐ½º¿öµå°¡ Áï½Ã °ãÃĽáÁú ¼ö ÀÖµµ·Ï À̸¦ ÀúÀåÇϱâ À§ÇØ char[] À» »ç¿ëÇØ¶ó. ¶ÇÇÑ ÇÁ·Î±×·¥ÀÌ ±×·¯ÇÑ ºñ¹Ð °ªµéÀ» ´Ù·é´Ù¸é ulimit ¸¦ ÅëÇØ ¹Ýµå½Ã ÄÚ¾î ´ýÇÁ »ý¼ºÀ» ±ÝÁöÇØ¶ó. ±×·¸Áö ¾ÊÀ¸¸é °ø°ÝÀÚ°¡ ÇÁ·Î±×·¥À» Á¤Áö½ÃÄÑ µ¥ÀÌŸ ´ýÇÁ¿¡¼ ºñ¹Ð °ªÀ» ¹ß°ßÇÒ ¼ö ÀÖÀ»Áö ¸ð¸¥´Ù. ¶ÇÇÑ ÁÖÀÇÇØ¶ó - ÀϹÝÀûÀ¸·Î ÇÁ·Î¼¼½ºµéÀº µð¹ö°Å (¿¹, ptrace(2) ¹× /proc ÁØ-ÆÄÀϽýºÅÛÀ» ÅëÇØ) È£ÃâÀ» ÅëÇØ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀ» ¸ð´ÏÅ͸µ ÇÒ ¼ö ÀÖ´Ù [Venema 1996]. Ä¿³ÎÀº ÇÁ·Î¼¼½º°¡ setuid ¶Ç´Â setgid ¶ó¸é ÀÌ·¯ÇÑ ¸ð´ÏÅ͸µ¿¡ ´ëÇØ º¸Åë º¸È£¸¦ ÇÑ´Ù (ÀÌ·¯ÇÑ º¸È£¸¦ ÇÏÁö ¾Ê´Â ¾à°£ÀÇ ¿À·¡µÈ ½Ã½ºÅÛ¿¡¼´Â ½ÇÁ¦·Î °»½ÅÀ̿ܿ¡´Â º¸È£ÇÒ ¹æ¹ýÀÌ ¾ø´Ù). µû¶ó¼ ÇÁ·Î¼¼½º°¡ ºñ¹Ð °ªµéÀ» °ü¸®ÇÑ´Ù¸é ÀÌ·¯ÇÑ Á¾·ùÀÇ ¸ð´ÏÅ͸µÀ» °Á¦ÀûÀ¸·Î ±ÝÁöÇϱâ À§ÇØ À̸¦ ´Ù¸¥ ±ÇÇÑÀÌ ¾ø´Â ±×·ì ¶Ç´Â »ç¿ëÀÚ¿¡ ´ëÇØ setuid ¶Ç´Â setgid ·Î ¸¸µé¾î¾ß ÇÑ´Ù. 10.5. ¾ÏÈ£È ¾Ë°í¸®µë ¹× ÇÁ·ÎÅäÄÝ´ë°³ ¾ÏÈ£È ¾Ë°í¸®µë°ú ÇÁ·ÎÅäÄÝÀº ½Ã½ºÅÛÀ» ¾ÈÀüÇÏ°Ô Çϱâ À§ÇØ Æ¯È÷ ÀÎÅͳݰú °°Àº ½Å·ÚµÇÁö ¾ÊÀº ³×Æ®¿öÅ©¸¦ ÅëÇØ Åë½ÅÇÒ ¶§ ÇÊ¿äÇÏ´Ù. °¡´ÉÇÑ Á¤º¸¸¦ ÀÎÁõÇϰí Á¤º¸¸¦ ºñ¹Ð·Î À¯ÁöÇϱâ À§ÇØ ¾ÏÈ£ÇÐÀûÀÎ ±â¹ýÀ» »ç¿ëÇØ¶ó (´Ü¼øÇÑ ¾ÏȣȰ¡ ¶ÇÇÑ ÀÚµ¿ÀûÀ¸·Î ÀÎÁõÇÒ ¼ö ÀÖ´Ù°í °¡Á¤ÇÏÁö ¸¶¶ó). ÀϹÝÀûÀ¸·Î ¾ÖÇø®ÄÉÀ̼ÇÀ» ¾ÈÀüÇÏ°Ô Çϱâ À§ÇØ »ç¿ë°¡´ÉÇÑ µµ±¸¸¦ »ç¿ëÇÒ Çʿ䰡 ÀÖ´Ù. ¹è°æ Á¤º¸¿Í Äڵ忡 ´ëÇØ¼´Â ¾Æ¸¶µµ °íÀüÀûÀÎ ÅØ½ºÆ® ``Applied Cryptography" [Schneier 1996] ¸¦ ºÁ¾ß ÇÑ´Ù. ´º½º±×·ì ``sci.crypt" ¿¡´Â ÀÏ·ÃÀÇ FAQ ÀÌ Àִµ¥ http://www.landfiel d.com/faqs/cryptography-faq À» Æ÷ÇÔÇÑ ¸¹Àº À§Ä¡¿¡¼ À̵éÀ» ãÀ» ¼ö ÀÖ´Ù. ¸®´ª½º¿¡ ƯÁ¤ÀûÀÎ ÀÚ¿øµéÀº http://marc.mutz.com/Encryption-HOWTO/¿¡ ÀÖ´Â Linux Encryption HOWTO ¸¦ Æ÷ÇÔÇÑ´Ù. ÇÁ·ÎÅäÄÝÀÌ ±âº»ÀûÀÎ ¾Ë°í¸®µëÀ» »ç¿ëÇÏ´Â ¹æ¹ý¿¡ °üÇÑ ³íÀÇ´Â [Opplinger 1998] ¿¡¼ ãÀ» ¼ö ÀÖ´Ù. ÇÁ·ÎÅäÄÝ¿¡¼ ¾ÏÈ£ÇÐÀ» Àû¿ëÇÏ´Â ¹æ¹ý¿¡ °üÇÑ À¯¿ëÇÑ ³í¹® ¸ðÀ½Àº [Stallings 1996] ¿¡¼ ãÀ» ¼ö ÀÖ´Ù. ´ÙÀ½Àº ´ÜÁö ¾à°£ÀÇ ¼³¸í¹®À¸·Î ÀÌ ºÐ¾ß´Â »ó´çÈ÷ Àü¹®ÈµÇ¾î ÀÖÀ¸¸ç ´Ù¸¥ °÷¿¡¼ ´õ¿í öÀúÈ÷ ´Ù·ïÁö°í ÀÖ´Ù. ¾ÏÈ£È ÇÁ·ÎÅäÄݰú ¾Ë°í¸®µëÀ» ¿Ã¹Ù¸£°Ô ÀÌÇØÇϱâ´Â ¾î·Æ´Ù. µû¶ó¼ °¢ÀÚ ½º½º·Î À̵éÀ» ¸¸µéÁö ¸¶¶ó. ´ë½Å µÉ ¼ö ÀÖ´ÂÇÑ ³Î¸® »ç¿ëµÇ°í ÀÖ°í ±íÈ÷ ºÐ¼®µÇ¾úÀ¸¸ç º¸¾ÈÀûÀ̶ó°í ¹Þ¾Æµé¿©Áø ÇÁ·ÎÅäÄݰú ¾Ë°í¸®µëÀ» »ç¿ëÇØ¶ó. À̵éÀ» ¸¸µé¾î¾ß ÇÑ´Ù¸é Æø³ÐÀº °ø°³ °ËÅ並 ÇÏ°í ¹Ýµå½Ã Àü¹®ÀûÀÎ º¸¾È ºÐ¼®°¡µéÀÌ ¹®Á¦°¡ ÀÖ´ÂÁö À̵éÀ» °Ë»çÇϵµ·Ï ÇØ¶ó. ƯÈ÷ ¾ÏÈ£ÇÐ Àü¹®°¡°¡ ¾Æ´Ï°í ¹«¾ùÀ» Çϰí ÀÖ´ÂÁö ¸ð¸£¸ç ¾Ë°í¸®µëÀ» Àü¹®ÀûÀ¸·Î °ËÅäÇϴµ¥ ½Ã°£À» ÅõÀÚÇÒ °èȹÀÌ ¾ø´Ù¸é ÀÚ½ÅÀÇ ¾ÏÈ£È ¾Ë°í¸®µëÀ» ¸¸µéÁö ¸¶¶ó. ¾ÏÈ£È ¾Ë°í¸®µë ÀÛ¼ºÀº Àü¹®°¡µé¸¸ÀÇ ÀÛ¾÷ÀÌ´Ù. ¸¹Àº ¾Ë°í¸®µëÀº ƯÇãȵǾî ÀÖ¾î ¼ÒÀ¯ÀÚ°¡ ÇöÀç ``ÀÚÀ¯·Î¿î »ç¿ë"À» Çã¿ëÇÑ´Ù ÇÏ´õ¶óµµ ¼¸íµÈ °è¾àÀÌ ¾ø´Ù¸é ÃßÈÄ¿¡ ÀÌ Á¤Ã¥À» ´Ã º¯°æÇÒ ¼ö ÀÖÀ¸¸ç µû¶ó¼ ÃßÈÄ ¿©·¯ºÐÀ» ±ØÈ÷ À§ÇèÇÑ »óȲ¿¡ ³õÀÌ°Ô ÇÑ´Ù. ÀϹÝÀûÀ¸·Î ¸ðµç ƯÇãÈµÈ ¾Ë°í¸®µëÀ» ÇÇÇØ¶ó - °ÅÀÇ ¸ðµç °æ¿ì¿¡ ÀÖ¾î ÃÖ¼ÒÇÑ Æ¯ÇãÈµÈ ¾Ë°í¸®µë¸¸Å ¿ì¼öÇϰųª ±â¼úÀûÀ¸·Î ´õ¿í ¿ì¼öÇÑ Æ¯ÇãȵǾî ÀÖÁö ¾ÊÀº Á¢±Ù ¹æ¹ýÀÌ ÀÖÀ¸¸ç À̸¦ »ç¿ëÇÔÀ¸·Î½á ¸¹Àº ¹ýÀûÀÎ ¹®Á¦¸¦ ÇÇÇÒ ¼ö ÀÖ´Ù. 10.5.1. ¾ÏÈ£ÇÐÀû ÇÁ·ÎÅäÄÝÇÁ·ÎÅäÄÝÀÇ °æ¿ì SSL (°ð TLS °¡ µÈ´Ù), SSH, IPSec, GnuPG/PGP ¹× Kerberos ¿Í °°Àº Ç¥ÁØÀ» µû¸£´Â ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ·Á°í ÇØ¶ó. ÀÌµé ´Ù¼ö´Â ±â´É¼º¿¡¼ ¾î¶µç Áߺ¹µÇÁö¸¸ °¢ÀÚ Æ¯¼öÇÑ ¿ëµµ (specialty niche) ¸¦ °®°í ÀÖ´Ù. SSL Àº http (À¥) Æ®·£Àè¼ÇÀ» º¸È£ÇÏ´Â ±âº»ÀûÀÎ ¹æ¹ýÀ̸ç PGP ¿Í GnuPG ¿¡ ±¸ÇöµÈ PGP ȣȯ ÇÁ·ÎÅäÄÝÀº À̸ÞÀÏ ¹ß¼ÛÀÎ/¼öÃëÀÎ (end to end) À» º¸È£ÇÏ´Â ±âº»ÀûÀÎ ¹æ¹ýÀÌ´Ù. Kerberos ´Â ·£»ó¿¡¼ ÀÎÁõÀ» Áö¿øÇÏ°í ¾ÈÀüÇÏ°Ô ÇÏ¸ç °øÀ¯µÈ ºñ¹ÐÀ» ÀÔÁõÇÏ´Â ±âº»ÀûÀÎ ¹æ¹ýÀÌ´Ù (µû¶ó¼ Åë½ÅÀ» ½ÇÁ¦ º¸È£Çϱâ À§ÇÑ ´Ù¸¥ ¾Ë°í¸®µë°ú ÇÔ²² »ç¿ëµÉ Çʿ䰡 ÀÖ´Ù). SSH ´Â CVS Á¢±Ù°ú °°Àº ´Ù¸¥ µ¥ÀÌŸ ½ºÆ®¸²À» ¾ÈÀüÇÏ°Ô Çϴµ¥µµ »ç¿ëµÇÁö¸¸ ÀÎÅͳÝÀ» ÅëÇÑ ``¿ø°Ý Å͹̳Î"À» ¾ÈÀüÇÏ°Ô ÇÏ´Â ±âº»ÀûÀÎ ¹æ¹ýÀÌ´Ù (¿¹, telnet °è¿°ú X À©µµ¿ì ¿¬°á). SSH ÇÁ·ÎÅäÄÝ¿¡´Â µÎ°³ÀÇ ÁÖ¿ä ¹öÀüÀÌ ÀÖÀ¸¸ç ¸î°¡Áö Ű ŸÀÔÀ» ¼±ÅÃÇÒ ¼ö ÀÖÀ½À» ÁÖ¸ñÇØ¶ó; ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ À§Çؼ´Â °ü·Ã ¹®¼¸¦ º¸¶ó. OpenSSH ´Â SSH ÀÇ ¿ÀÇ ¼Ò½º ±¸ÇöÀÌ´Ù. IPSec ´Â Àú¼öÁØ ÆÐŶ°ú ``¸ðµç" ÆÐŶÀ» ¾ÈÀüÇÏ°Ô Çϱâ À§ÇÑ ±âº»ÀûÀÎ ¹æ¹ýÀ¸·Î °¡»ó »ç¼³¸Á°ú ¿ø°Ý ¸Ó½ÅÀ» ¾ÈÀüÇÏ°Ô Çϴµ¥ ƯÈ÷ À¯¿ëÇÏ´Ù. ÀÎÅÍ³Ý ÇÁ·ÎÅäÄÝÀÇ »õ·Î¿î ¹öÀüÀÎ IPv6 ´Â IPSec °¡ ``³»Àå"µÇ¾î ÀÖÁö¸¸ IPSec ´Â ÀϹÝÀûÀÎ IPv4 ÇÁ·ÎÅäÄݰúµµ ÇÔ²² ÀÛµ¿ÇÑ´Ù. ´Ù¼öÀÇ ÇÁ·ÎÅäÄݵéÀÌ ¸¹Àº ´Ù¸¥ ¾Ë°í¸®µëÀ» ¼±ÅÃÇÒ ¼ö ÀÖ°Ô Çϴµ¥ µû¶ó¼ ¾Ë°í¸®µë¿¡ ´ëÇØ ÇÕ¸®ÀûÀÎ µðÆúÆ®¸¦ ¼±ÅÃÇÒ Çʿ䰡 ÀÖÀ» °ÍÀÌ´Ù (¿¹, ¾ÏÈ£È). 10.5.2. ´ëĪŰ ¾ÏÈ£È ¾Ë°í¸®µë¾ÏÈ£È ¾Ë°í¸®µë ±¸ÇöÀÇ »ç¿ë, ¼öÃâ ¹×/¶Ç´Â ¼öÀÔÀº ¸¹Àº ³ª¶ó¿¡¼ Á¦Çѵǰí ÀÖÁö¸¸ ¹ýÀº ¸Å¿ì ºü¸£°Ô º¯ÇÒ ¼ö ÀÖ´Ù. ¾ÏÈ£ÇÐÀ» »ç¿ëÇØ ¾ÖÇø®ÄÉÀ̼ÇÀ» ±¸ÃàÇÏ·Á°í Çϱâ Àü¿¡ ±Ô¹üÀÌ ¹«¾ùÀÎÁö ¾Ë¾Æ³»¶ó. ºñ¹ÐŰ (¹úÅ© µ¥ÀÌŸ) ¾ÏÈ£È ¾Ë°í¸®µëÀÇ °æ¿ì´Â °ø°³ÀûÀ¸·Î ¾Ë·ÁÁ® ¼ö³â°£ °ø°ÝÀ» °ßµ®¿Â ¾ÏÈ£È ¾Ë°í¸®µë¸¸À» »ç¿ëÇϰí À̵éÀÇ Æ¯Çã »óŸ¦ °Ë»çÇØ¶ó. ÀúÀÚ´Â Rijndahl ·Î ¾Ë·ÁÁø »õ·Î¿î Advanced Encryption Standard (AES) ¸¦ »ç¿ëÇϱ⸦ ÃßõÇÒ °ÍÀÌ´Ù -- ¸¹Àº ¾ÏÈ£ÇÐÀÚµéÀÌ À̸¦ ºÐ¼®ÇßÀ¸¸ç ¾î¶°ÇÑ ½É°¢ÇÑ ¾àÁ¡µµ ¹ß°ßÇÏÁö ¸øÇߴµ¥ ÀúÀÚ´Â ÇöÀç AES °¡ ½Å·ÚÇÒ ¼ö ÀÖÀ»¸¸Å ÃæºÐÇÑ ºÐ¼®À» Çß´Ù°í »ý°¢ÇÑ´Ù. AES ¿¡ ´ëÇÑ ÁÁÀº ´ë¾ÈÀº Serpent ¾Ë°í¸®µëÀ¸·Î ¾à°£ ´À¸®Áö¸¸ °ø°Ý¿¡ ´ëÇÑ ÀúÇ×¼ºÀÌ ¿ì¼öÇÏ´Ù. ¸¹Àº ¾ÖÇø®ÄÉÀ̼ÇÀÇ °æ¿ì »ïÁß-DES ´Â ¸Å¿ì ¿ì¼öÇÑ ¾ÏÈ£È ¾Ë°í¸®µëÀε¥ ÀÌ´Â ²Ï ±æÀ̱⠱ä 112 ºñÆ® ۸¦ °®À¸¸ç ƯÇã ¹®Á¦µµ ¾ø°í ¿À·§µ¿¾È °ø°Ý¿¡ °ßµ®¿Ô´Ù (°ø°³ ¹®Çå¿¡ ÀÖ´Â Àû´çÇÑ Å° ±æÀ̸¦ °®°í ÀÖ´Â ´Ù¸¥ ¾ÏÈ£È ¾Ë°í¸®µëº¸´Ù ´õ¿í ¿À·§µ¿¾È °ø°Ý¿¡ °ßµ®¿Ô´Ù). ±×·¯³ª »ïÁß-DES ´Â ¼ÒÇÁÆ®¿þ¾î¿¡¼ ±¸ÇöµÉ ¶§ ¸Å¿ì ´À¸®¸ç µû¶ó¼ »ïÁß-DES ´Â ``°¡Àå ¾ÈÀüÇÏÁö¸¸ °¡Àå ´À¸®´Ù" °í °í·ÁµÉ ¼ö ÀÖ´Ù. Twofish ´Â ¿ì¼öÇÑ ¾ÏÈ£È ¾Ë°í¸®µëÀÌÁö¸¸ ´Ù¼ÒÀÇ ¿À·¡µÈ ¹®Á¦°¡ ÀÖ´Ù - Sean Murphy ¿Í Fauzan Mirza ´Â Twofish °¡ ¸¹Àº ÇÐÀÚµéÀ» ¿ì·ÁÇϰԲû ÇÏ´Â ¼ºÁúµéÀ» °®°í ÀÖÀ½À» º¸¿´´Ù (¾î´À ´©±¸µµ ¾î¶»°Ôµç ÀÌ·¯ÇÑ ¼ºÁúµéÀ» ¾Ç¿ëÇϴµ¥ »ç¿ëÇÒ ¼ö´Â ¾ø¾ú´Ù). MARS ´Â ``»õ·Ó°í Âü½ÅÇÑ" °ø°Ý¿¡ ´ëÇÑ ÀúÇ×¼ºÀÌ ¿ì¼öÇÏÁö¸¸ ´õ¿í º¹ÀâÇÏ°í ¼ÒÇü ±â´ÉÀÇ ½º¸¶Æ®Ä«µå¿¡ ´ëÇØ¼´Â ºñ½Ç¿ëÀûÀÌ´Ù. ¿ì¼± ÀúÀÚ´Â Twofish ¸¦ ÇÇÇÒ °ÍÀÌ´Ù - ÀÌ´Â ÀüÇô ¾Ç¿ëµÉ ¼ö ¾øÀ» °Í °°Áö¸¸ À̸¦ È®½ÅÇϱâ´Â ¾î·Á¿ì¸ç ÀÌ·¯ÇÑ ¹®Á¦¿¡ ´ëÇØ °ÆÁ¤ÇÏÁö ¾Ê¾Æµµ µÇ´Â ´ë¾È ¾Ë°í¸®µëµéÀÌ ÀÖ´Ù. IDEA ´Â »ç¿ëÇÏÁö ¸¶¶ó - ¹Ì±¹°ú À¯·´¿¡¼ ƯÇãȵǾî ÀÖ´Ù. »ó¼ö ¶Ç´Â »ó¼ö ¹®ÀÚ¿À» °®´Â XOR, ROT (rotation) ½ºÅ´, Vinegere ¾ÏÈ£ µî°ú °°Àº ¾î¸®¼®Àº ¾Ë°í¸®µëÀ» »ç¿ëÇÏÁö ¸¶¶ó - ¿À´Ã³¯ÀÇ ÄÔÇ»ÅÍ¿¡¼ À̵éÀ» ÇØµ¶ÇÏ´Â °ÍÀº »ç¼ÒÇÒ ¼ö ÀÖ´Ù. ``ÀÌÁß DES" (DES ¸¦ µÎ¹ø »ç¿ë) ¸¦ »ç¿ëÇÏÁö ¸¶¶ó - »ïÁß-DES °¡ ¿¹¹æÇÒ ¼ö ÀÖ´Â ``man in the middle" °ø°ÝÀ» ´çÇϱ⠽±´Ù. ¾î·µç ÇÁ·ÎÅäÄÝÀº ´Ù¼öÀÇ ¾ÏÈ£È ¾Ë°í¸®µëÀ» Áö¿øÇØ¾ß ÇÑ´Ù; ÀÌ·¸°Ô ÇÔÀ¸·Î½á ÇÑ ¾Ë°í¸®µëÀÌ ÇØµ¶µÉ ¶§ »ç¿ëÀÚ´Â ´Ù¸¥ ¾Ë°í¸®µëÀ¸·Î º¯°æÇÒ ¼ö ÀÖ´Ù. ´ëĪŰ ¾ÏÈ£È (¿¹, ¹úÅ© ¾ÏÈ£È) ÀÇ °æ¿ì 2016 µ¿¾È Á¤º¸°¡ ºñ¹Ð·Î À¯ÁöµÇ±æ ¿øÇÑ´Ù¸é 90 ºñÆ®º¸´Ù ÀÛÀº Ű ±æÀ̸¦ »ç¿ëÇÏÁö ¸¶¶ó (¸Å 18°³¿ùÀÇ Ãß°¡ÀûÀÎ º¸¾ÈÀ» À§ÇØ ´Ù¸¥ ºñÆ®¸¦ Ãß°¡Çضó) [Blaze 1996]. ¾µ¸ð¾ø´Â µ¥ÀÌŸ¸¦ ¾ÏÈ£ÈÇÏ´Â °æ¿ì´Â ¿¹Àü DES ¾Ë°í¸®µëµµ »ó´çÈ÷ À¯¿ëÇÏÁö¸¸ ÇöÀç Çϵå¿þ¾î »óȲ¿¡¼ brute force °ø°ÝÀ» »ç¿ëÇØ DES ÀÇ 56 ºñÆ® ۸¦ ÇØµ¶ÇÏ´Â °ÍÀº ³Ê¹« ½±´Ù. DES ¸¦ »ç¿ëÇϰí ÀÖ´Ù¸é ¾Æ½ºÅ° ÅØ½ºÆ® ۸¦ Ű·Î »ç¿ëÇÏÁö ¸¶¶ó - ÆÐ¸®Æ¼ (parity) ´Â °¡Àå ´ú Áß¿äÇÑ ºñÆ®¿¡ ÀÖ´Ù. µû¶ó¼ ´ëºÎºÐÀÇ DES ¾Ë°í¸®µëÀº Àûµé¿¡°Ô Àß ¾Ë·ÁÁø ۰ªÀ» »ç¿ëÇØ ¾ÏÈ£ÈÇÒ °ÍÀÌ´Ù. ´ë½Å ŰÀÇ ÇØ½Ã¸¦ ¸¸µé°í ÆÐ¸®Æ¼ ºñÆ®¸¦ Á¤È®È÷ ¼³Á¤Çضó (±×¸®°í ¾ÏÈ£È ·çƾÀ¸·ÎºÎÅÍÀÇ ¿¡·¯ º¸°í¿¡ ÁÖÀÇÇØ¶ó). ¼ÒÀ§ ``¼öÃâ°¡´ÉÇÑ" ¾ÏÈ£È ¾Ë°í¸®µëÀº ´ÜÁö 40 ºñÆ®ÀÇ À¯È¿ Ű ±æÀ̸¦ °®À¸¸ç º»ÁúÀûÀ¸·Î ¾µ¸ð¾ø´Ù; 1996³â¿¡ °ø°ÝÀÚ´Â ±×·¯ÇÑ Å°¸¦ 12ºÐ³»¿¡ ÇØµ¶Çϴµ¥ 10,000 ºÒÀ» ¾²°Å³ª ¶Ç´Â À̵éÀ» ¸îÀϳ»¿¡ ÇØµ¶Çϴµ¥ À¯ÈÞ ½Ã°£À» »ç¿ëÇßÀ» °ÍÀÌ´Ù. µÎ °æ¿ì ¸ðµÎ ¸Å 18°³¿ù¸¶´Ù ÇØµ¶ ½Ã°£ÀÌ Àý¹ÝÀ¸·Î ÁÙ¾îµé¾ú´Ù. ºí·Ï ¾ÏÈ£È ¾Ë°í¸®µëÀº ``electronic code book" (ECB) ¹× ``cipher block chaining" (CBC) ¿Í °°Àº ¸¹Àº ¿©·¯°¡Áö ¸ðµå¿¡¼ »ç¿ëµÉ ¼ö ÀÖ´Ù. °ÅÀÇ ¸ðµç °æ¿ì CBC ¸¦ »ç¿ëÇϰí ECB ´Â »ç¿ëÇÏÁö ¸¶¶ó - ECB ¸ðµå¿¡¼´Â µ¿ÀÏÇÑ µ¥ÀÌŸ ºí·ÏÀº ½ºÆ®¸²³»¿¡¼ µ¿ÀÏÇÑ °á°ú¸¦ ¹ÝȯÇϸç ÀÌ´Â ¹«¾ùÀÌ ¾ÏȣȵǾú´ÂÁö¸¦ µå·¯³»±â¿¡ ´ë°³ ÃæºÐÇÏ´Ù. CBC ¸¦ Æ÷ÇÔÇÏ¿© ¸¹Àº ¸ðµåµéÀº ``ÃʱâÈ º¤ÅÍ" (initialization vector, IV) ¸¦ ÇÊ¿ä·Î ÇÑ´Ù. IV ´Â º¸¾ÈÀûÀÏ ÇÊ¿ä´Â ¾øÁö¸¸ °ø°ÝÀÚ°¡ ¿¹ÃøÇÒ ¼ö ¾ø¾î¾ß ÇÑ´Ù. ¼¼¼ÇÀ» ÅëÇØ IV ¸¦ Àç»ç¿ëÇÏÁö ¸¶¶ó - ¼¼¼ÇÀ» ½ÃÀÛÇÒ ¶§¸¶´Ù »õ·Î¿î IV ¸¦ »ç¿ëÇØ¶ó. ¸¹Àº ¿©·¯°¡Áö ½ºÆ®¸®¹Ö ¾ÏÈ£È ¾Ë°í¸®µëÀÌ ÀÖÁö¸¸ ¸¹Àº ¾Ë°í¸®µëÀº ƯÇã Á¦ÇÑÀ» °®°í ÀÖ´Ù. ÀúÀÚ´Â WAKE ¿Í °ü·ÃµÈ ƯÇã ¶Ç´Â ±â¼úÀû ÀïÁ¡¿¡ ´ëÇØ¼´Â ¸ð¸¥´Ù. RC4 ´Â RSA Data Security Inc. ÀÇ Åë»ó ºñ¹ÐÀÌ´Ù; ±×ÈÄ·Î ´©¼³µÇ¾úÁö¸¸ ÀúÀÚ´Â ÀÌÀÇ »ç¿ë¿¡ ´ëÇÑ ½ÇÁ¦ ¹ýÀûÀÎ Àå¾Ö¹°Àº ¸ð¸¥´Ù. ±×·¯³ª RSA ´Â ÀÌÀÇ »ç¿ëÀڵ鿡 ´ëÇØ ¹ýÁ¤ ¼Ò¼ÛÀ» ÃëÇϰڴٰí À§ÇùÇϰí ÀÖ´Ù (RSA °¡ ÃëÇÒ ¼ö ÀÖ´Â °ÍÀÌ ¹«¾ùÀÎÁö´Â ¸íÈ®ÇÏÁö ¾ÊÁö¸¸ »ç¿ëÀÚµéÀ» ¾µµ¥¾ø´Â ¹ýÁ¤ ¼Ò¼Û¿¡¼ ²Ä¦¸øÇÏ°Ô ÇÒ ¼ö ÀÖÀ½Àº ÀǽÉÇÒ ¿©Áö°¡ ¾ø´Ù). RC4 ¸¦ »ç¿ëÇÑ´Ù¸é À̸¦ ÀǵµµÈ ¹Ù¿Í °°ÀÌ »ç¿ëÇØ¶ó - ƯÈ÷ ¾ðÁ¦³ª »ý¼ºµÈ óÀ½ 256 ¹ÙÀÌÆ®¸¦ ¹ö·Á¶ó. ±×·¸Áö ¾Ê´Ù¸é °ø°Ý´çÇϱ⠽¬¿ï °ÍÀÌ´Ù. SEAL Àº IBM ÀÌ Æ¯Ç㸦 ³½ °ÍÀ¸·Î À̸¦ »ç¿ëÇÏÁö ¸¶¶ó. SOBER Àº ƯÇãȵǾî ÀÖ´Ù; ƯÇã ¼ÒÀ¯ÀÚ´Â »ç¿ë Çã°¡¸¦ ¿äûÇÑ´Ù¸é À̸¦ ÀÚÀ¯·ÎÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù°í ÁÖÀåÇϰí ÀÖÁö¸¸ ÀÌ´Â ÃßÈÄ »ç¿ë¿¡ ´ëÇØ Àå¾Ö¹°ÀÌ µÉ ¼ö ÀÖ´Ù. ´õ¿í´õ Èï¹Ì·Î¿î °ÍÀº ºí·Ï ¾ÏÈ£È ¾Ë°í¸®µëÀÌ À̵éÀ» ½ºÆ®¸² ¾ÏÈ£·Î º¯È¯½ÃŰ´Â ¸ðµå¿¡¼ »ç¿ëµÉ ¼ö ÀÖ´Ù´Â °ÍÀε¥ ½ºÆ®¸² ¾ÏÈ£¸¦ ¿øÇÏ´Â »ç¿ëÀÚ´Â ÀÌ ¹æ¹ýÀ» °í·ÁÇØ¾ß ÇÑ´Ù (´õ¿í °ø°³ÀûÀ¸·Î ¾òÀ» ¼ö ÀÖ´Â ¾Ë°í¸®µëÁß¿¡¼ ¼±ÅÃÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù). 10.5.3. °ø°³Å° ¾Ë°í¸®µë°ø°³Å° ¾ÏÈ£ÈÀÇ °æ¿ì (¼¸í°ú ºñ¹ÐŰ Àü¼Û¿¡ ³Î¸® »ç¿ëµÇ°í ÀÖ´Ù) ´ÜÁö ¾à°£ÀÇ ¾Ë°í¸®µë¸¸ÀÌ ³Î¸® »ç¿ëµÇ°í Àִµ¥ °¡Àå ³Î¸® »ç¿ëµÇ°í ÀÖ´Â ¾Ë°í¸®µë ÁßÀÇ Çϳª´Â RSA ÀÌ´Ù; RSA ÀÇ ¾Ë°í¸®µëÀº ´ÜÁö ¹Ì±¹¿¡¼¸¸ ƯÇãȵǾî ÀÖÀ¸¸ç 2000³â 9¿ù¿¡ ¸¸·áµÇ¾î ÀÚÀ¯·Ó°Ô »ç¿ëµÉ ¼ö ÀÖ´Ù. °ø°ÝÀÚ°¡ Á÷Á¢ÀûÀ¸·Î Á¦°øÇÑ ¿ø°ª (raw value) À» RSA ¸¦ »ç¿ëÇØ Àý´ë·Î º¹È£ÈÇϰųª ¼¸íÇÏÁö ¸¶¶ó. RSA ´Â ºñ¹Ð۸¦ µå·¯³¾ ¼ö Àֱ⠶§¹®¿¡ °á°ú¸¦ µå·¯³½´Ù (´ëºÎºÐÀÇ ÇÁ·ÎÅäÄÝÀº ¿ø°ªÀÌ ¾Æ´Ñ »ç¿ëÀÚ°¡ °è»êÇÑ ÇØ½Ã¿¡ ¼¸íÇÏ´Â °ÍÀ» Æ÷ÇÔÇϰųª °á°ú¸¦ µå·¯³»Áö ¾Ê±â ¶§¹®¿¡ ÀÌ´Â ½ÇÁ¦ ¹®Á¦°¡ µÇÁö´Â ¾Ê´Â´Ù). Àý´ë·Î Á¤È®È÷ µ¿ÀÏÇÑ ¿ø°ªÀ» ¿©·¯¹ø º¹È£ÈÇϰųª ¼¸íÇÏÁö ¸¶¶ó (¿ø·¡ °ªÀÌ ³ëÃâµÉ ¼ö ÀÖ´Ù). ÀÌ·¯ÇÑ µÎ ¹®Á¦ ¸ðµÎ ÀÓÀÇÀÇ ÆÐµù (padding, ¾Æ¹«·± Àǹ̰¡ ¾ø´Â, °íÁ¤ ±æÀ̸¦ °®´Â ·¹ÄÚµå ¶Ç´Â ºí·Ï¿¡ ¹«ÀǹÌÇÑ ¹®ÀڷΠä¿ì´Â ±â¹ý) À» ´Ã Ãß°¡ÇÔÀ¸·Î½á ÇØ°áµÉ ¼ö ÀÖ´Ù (PGP °æ¿ì¿Í °°ÀÌ) - º¸ÅëÀÇ Á¢±Ù ¹æ¹ýÀº Optimal Asymmetric Encryption Padding (OAEP) ¶ó°í ºÒ¸°´Ù. Diffie-Hellman Ű ±³È¯ ¾Ë°í¸®µëÀº µÎ ´ç»çÀÚ°£¿¡ ¼¼¼ÇŰ ÀÏÄ¡¸¦ Çã¿ëÇϴµ¥ ³Î¸® »ç¿ëµÇ°í ÀÖ´Ù. ÀÌ ÀÚü·Î´Â ´ç»çÀÚµéÀÌ ÀڽŵéÀº ´©±¸ÀÌ´Ù ¶ó°í ¸»ÇÏ´Â ´ç»çÀÚµéÀÓÀ» º¸ÁõÇÏÁö ¸øÇÏ¸ç ¶ÇÇÑ Áß°³ÀÚµµ ¾ø´Ù. ±×·¯³ª ¼öµ¿ÀûÀÎ ½º´ÏÆÛ¿¡ ´ëÇØ¼´Â °·ÂÇÑ º¸È£¸¦ Á¦°øÇÑ´Ù; ÀÌ Æ¯Çã´Â 1997³â¿¡ ¸¸·áµÇ¾ú´Ù. °øÀ¯µÇ´Â ºñ¹ÐÀ» »ý¼ºÇϱâ À§ÇØ Diffie-Hellman À» »ç¿ëÇÑ´Ù¸é ¹Ýµå½Ã À̸¦ ¿ì¼±ÀûÀ¸·Î ÇØ½ÃÇØ¶ó (°øÀ¯µÇ´Â °ªÀ» Á÷Á¢ÀûÀ¸·Î »ç¿ëÇÏ´Â °æ¿ì °ø°ÝÀÌ ÀÖÀ» ¼ö ÀÖ´Ù). NIST ´Â µðÁöÅÐ ¼¸í »ý¼º°ú ÀÔÁõÀ» À§ÇØ DSS (Digital Signature Standard, µðÁöÅÐ ¼¸í Ç¥ÁØ) À» °³¹ßÇß´Ù (ÀÌ´Â ElGamel ¾ÏÈ£È ½Ã½ºÅÛÀ» ¼öÁ¤ÇÑ °ÍÀÌ´Ù); À̰ÍÀÌ °³¹ßµÈ Á¶°ÇÁßÀÇ Çϳª´Â ƯÇã¿¡ ÀÚÀ¯·Ó´Ù´Â °ÍÀÌ¿´´Ù. RSA, Diffie-Hellman ¹× El Gamel ±â¹ýÀº ÀϹÝÀûÀÎ ´ëĪŰ¿Í ºñ±³Çؼ µ¿ÀÏÇÑ º¸¾ÈÀ» Á¦°øÇϱâ À§ÇØ Å°¿¡ ´ëÇØ ´õ¿í ¸¹Àº ºñÆ®¸¦ ÇÊ¿ä·Î ÇÑ´Ù; ÀÌ·¯ÇÑ ½Ã½ºÅÛ¿¡¼ 1024 ºñÆ® Ű´Â ´ë·« 80 ºñÆ® ´ëĪŰ¿Í µ¿µîÇѵ¥ ÀúÀÚ ÀǰßÀ¸·Î´Â À̰ÍÀÌ ¿À´Ã³¯ »ç¿ëÇØ¾ß ÇÏ´Â ÃÖ¼Ò ±æÀÌÀÌ´Ù. °ø°³Å°¿¡ ´ëÇØ ¸Å¿ì ÀÛÀº ºñÆ®¸¦ ÇÊ¿ä·Î ÇÑ´Ù¸é Ÿ¿ø °î¼± (elliptic curve) ¾Ïȣȸ¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù (IEEE P1363 ¿¡ ´Ù¼ÒÀÇ Á¦¾ÈµÈ °î¼±ÀÌ Àִµ¥ ÀÌ·¯ÇÑ °î¼±À» ã¾Æ³»´Â °ÍÀº ¾î·Æ´Ù). ±×·¯³ª ÁÖÀÇÇØ¶ó - Ÿ¿ø °î¼± ¾Ïȣȴ ƯÇãȵǾî ÀÖÁö ¾ÊÁö¸¸ ¾î¶² °í¼ÓÈ ±â¹ýÀº ƯÇãȵǾî ÀÖ´Ù (Ÿ¿ø °î¼±Àº ÈçÈ÷ »ç¿ëµÇ´Â ¼¼¼Ç ¾ÏÈ£È/¹úÅ© ¾ÏÈ£È Å° µî¿¡´Â ÀÌ·¯ÇÑ ¼ÓµµÈ°¡ ½ÇÁ¦ ÇÊ¿äÄ¡ ¾ÊÀ» ¸¸Å ÃæºÐÈ÷ ºü¸£´Ù). 10.5.4. ¾ÏÈ£ÇÐÀû ÇØ½Ã ¾Ë°í¸®µë¾î¶² ÇÁ·Î±×·¥µéÀº ÀϹæÇâ ÇØ½Ã ¾Ë°í¸®µë, Áï ÀÓÀÇÀÇ µ¥ÀÌŸµé ÃëÇØ °ø°ÝÀÚ°¡ µÇµ¹¸®±â ¾î·Á¿î °íÁ¤µÈ ±æÀÌÀÇ ¼ýÀÚ¸¦ »ý¼ºÇÏ´Â ÇÔ¼ö¸¦ ÇÊ¿ä·Î ÇÑ´Ù (¿¹, °ø°ÝÀÚ°¡ µ¿ÀÏÇÑ °ªÀ» »ý¼ºÇÏ´Â ¿©·¯ µ¥ÀÌŸ¼ÂÀ» »ý¼ºÇÏ´Â °ÍÀº ¾î·Æ´Ù). ¿©·¯ÇØ µ¿¾È MD5 °¡ ¼±È£µÇ¾úÁö¸¸ ÃÖ±ÙÀÇ ¿¬±¸´Â MD5 ÀÇ 128 ºñÆ® ±æÀ̰¡ ÃæºÐÇÏÁö ¾ÊÀ» ¼öµµ ÀÖÀ¸¸ç [van Oorschot 1994] ¾î¶² °ø°ÝÀÌ MD5 ÀÇ º¸È£¸¦ ¹«·ÂÈ ½ÃÅ´À» º¸¿´´Ù [Dobbertin 1996]. Á¤¸»·Î ÃÖ°í »ê¾÷°è ¾ÏÈ£ÇÐÀÚ°¡ MD5 ¸¦ ÇØµ¶ÇßÁö¸¸ Á¾¾÷¿ø Çù¾à¿¡ ÀÇÇØ ¾î¿ ¼ö ¾øÀÌ ±â¹Ð·Î À¯ÁöµÇ°í ÀÖ´Ù´Â ¼Ò¹®ÀÌ ÀÖ´Ù (John Viega °¡ °Ô½ÃÇÑ 2000³â 8¿ù 22ÀÏ Bugtraq ¸¦ º¸¶ó). ´©±º°¡ ¼Ò¹®À» ¸¸µé ¼öµµ ÀÖÁö¸¸ ÇØµ¶µÉ ¼ö ÀÖ´Ù´Â »ý°¢À» ±×·²µíÇÏ°Ô ¸¸µç ÃæºÐÇÑ ¾àÁ¡ÀÌ ¹ß°ßµÇ¾ú´Ù. »õ·Î¿î Äڵ带 ÀÛ¼ºÇÑ´Ù¸é MD5 ´ë½Å SHA-1 À» ´ë½Å »ç¿ëÇØ¶ó. ¿ø·¡ÀÇ SHA (ÇöÀç ``SHA-0" ·Î ºÎ¸¥´Ù) ¸¦ »ç¿ëÇÏÁö ¸¶¶ó; SHA-0 ´Â MD5 °¡ °®°í ÀÖ´Â ¸î¸î ¾àÁ¡À» °®°í ÀÖ´Ù. ÇØ½Ã ¾Ë°í¸®µë¿¡ ´õ¿í ¸¹Àº ºñÆ®¸¦ ÇÊ¿ä·Î ÇÑ´Ù¸é SHA-256, SHA-384 ¶Ç´Â SHA-512 ¸¦ »ç¿ëÇØ¶ó; NIST FIPS PUB 180-2 ¿¡¼ ½ºÆåÀ» ¾òÀ» ¼ö ÀÖ´Ù. 10.5.5. ¹«°á¼º °Ë»çÅë½ÅÇÒ ¶§ ¾î¶² Á¾·ùÀÇ ¹«°á¼º °Ë»ç°¡ ÇÊ¿äÇÏ´Ù (¾Ïȣȿ¡¸¸ ÀÇÁ¸ÇÏÁö ¸¶¶ó. °ø°ÝÀÚ°¡ Á¤º¸¸¦ ``ÀÓÀÇÀÇ" °ªÀ¸·Î º¯°æÇÒ ¼öµµ ÀÖ´Ù). ÇØ½Ã ¾Ë°í¸®µëÀ» »ç¿ëÇØ ¹«°á¼º °Ë»ç¸¦ ÇÒ ¼ö ÀÖÁö¸¸ ´ÜÁö ÇØ½Ã ÇÔ¼ö¸¦ Á÷Á¢ÀûÀ¸·Î »ç¿ëÇÏÁö´Â ¸¶¶ó (ÀÌ´Â »ç¿ëÀÚ¸¦ ``È®Àå" (extension) °ø°Ý¿¡ ³ëÃâ½ÃŲ´Ù - °ø°ÝÀÚ°¡ ÇØ½Ã°ªÀ» »ç¿ëÇØ ÀڽŵéÀÇ µ¥ÀÌŸ¸¦ Ãß°¡ÇÑ ÈÄ »õ·Î¿î ÇØ½Ã¸¦ °è»êÇÒ ¼ö ÀÖ´Ù). º¸ÅëÀÇ ¹æ¹ýÀº ``HMAC" ·Î ´ÙÀ½°ú °°ÀÌ ¹«°á¼º °Ë»ç¸¦ ¼öÇàÇÑ´Ù.
H ´Â ÇØ½Ã ÇÔ¼ö (ÀϹÝÀûÀ¸·Î MD5 ¶Ç´Â SHA-1) À̰í k ´Â ŰÀÌ´Ù. µû¶ó¼ ¹«°á¼º °Ë»ç´Â ´ë°³ HMAC-MD5 ¶Ç´Â HMAC-SHA-1 ÀÌ´Ù. MD5 °¡ ¾à°£ÀÇ ¾àÁ¡À» °®°í ÀÖÁö¸¸ ÀúÀÚ°¡ ¾Æ´ÂÇÑ MD5 ´Â À§¿Í °°ÀÌ »ç¿ëµÉ ¶§ Ãë¾àÇÏÁö ¾ÊÀ¸¸ç µû¶ó¼ (ÀúÀÚ°¡ ¾Ë±â¿¡) HMAC-MD5 µµ Ãë¾àÇÏÁö ¾ÊÀ½À» ÁÖ¸ñÇØ¶ó. ÀÌ´Â IETF RFC 2104 ¿¡ ¼¼ºÎÀûÀ¸·Î Á¤ÀǵǾî ÀÖ´Ù. HMAC ¹æ¹ý¿¡¼ ¼Û½ÅÀÚ¿Í °°ÀÌ ¼ö½ÅÀÚµµ µ¿ÀÏ µ¥ÀÌŸ¸¦ º¯Á¶ÇÒ ¼ö ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. ÀÌ´Â ´ë°³ ¹®Á¦°¡ µÇÁö ¾ÊÁö¸¸ ÇÇÇØÁ®¾ß ÇÑ´Ù¸é °ø°³Å° ¹æ¹ýÀ» »ç¿ëÇÏ°í ¼Û½ÅÀÚ¿¡°Ô ÀÚ½ÅÀÇ ºñ¹ÐŰ·Î µ¥ÀÌŸ¿¡ ¼¸íÇÏ°Ô ÇØ¶ó - ÀÌ´Â ÀÌ·¯ÇÑ º¯Á¶ °ø°ÝÀ» ¿¹¹æÇÏÁö¸¸ ´õ¿í ¸¹Àº ºñ¿ëÀÌ µé¸ç ´ëºÎºÐÀÇ È¯°æ¿¡¼ ÇÊ¿äÇÏÁö´Â ¾Ê´Ù. 10.5.6. ´Ù¸¥ ¾ÏÈ£ÇÐÀû ÀïÁ¡Áß¿äÇÑ µ¥ÀÌŸ´Â ¾ÏÈ£È¿Í ¹«°á¼º °Ë»ç ¸ðµÎ¸¦ ÇØ¾ßÇÑ´Ù. ¹«°á¼ºÀ» Á¦°øÇÏ´Â ¾Ïȣȿ¡ ÀÇÁ¸ÇÏÁö ¸¶¶ó - °ø°ÝÀÚ°¡ ºñÆ®¸¦ ´Ù¸¥ °ªÀ¸·Î º¯°æÇÒ ¼öµµ ÀÖÀ¸¸ç °ø°ÝÀÚ À̸¦ ƯÁ¤ °ªÀ¸·Î º¯°æÇÒ ¼ö ¾ø´õ¶óµµ ´ÜÁö °ªÀ» º¯°æ½ÃŰ´Â °Í¸¸À¸·Î ÃæºÐÇÒ ¼öµµ ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ¾î¶² ¹Ì¹¦ÇÑ °ø°ÝÀ» ¿¹¹æÇϱâ À§ÇØ ¹«°á¼º°ú ºñ¹Ð¿¡ ´Ù¸¥ ۸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ´ë°³ ÃæºÐÈ÷ ³íÀǵÇÁö ¾Ê´Â ÇѰ¡Áö ¹®Á¦´Â ``Æ®·¡ÇÈ ºÐ¼®" ¹®Á¦ÀÌ´Ù. Áï, ¸Þ½ÃÁö°¡ ¾ÏȣȵǾî ÇØµ¶µÇÁö ¾Ê´õ¶óµµ ÀûÀº ¾ÏÈ£ÈµÈ ¸Þ½ÃÁö·ÎºÎÅÍ ¸Å¿ì ¸¹Àº °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î µÎ ȸ»çÀÇ »çÀåÀÌ ¸¹Àº ¾ÏÈ£ÈµÈ À̸ÞÀÏ ¸Þ½ÃÁö¸¦ ±³È¯Çϱ⠽ÃÀÛÇÑ´Ù¸é µÎ È¸»ç°¡ ÇÕº´À» °í·ÁÇϰí ÀÖ´Ù°í »ý°¢ÇÒ ¼öµµ ÀÖ´Ù. ´Ù¸¥ ¿¹·Î´Â ¸¹Àº SSH ±¸ÇöÀº ÆÐ½º¿öµå¸¦ ±³È¯Çϴµ¥ ÀÖ¾î ¾àÁ¡À» °®°í ÀÖ´Ù°í ¾Ë·ÁÁ® ÀÖ´Ù; °üÃøÀÚ´Â ÆÐŶÀ» º¸°í ÆÐ½º¿öµå ÀÚü´Â ¾Ë¾Æ³¾ ¼ö ¾ø´õ¶óµµ ÆÐ½º¿öµåÀÇ ±æÀÌ (¶Ç´Â ±æÀÌ ¹üÀ§) ´Â °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ÆÐ½º¿öµå¸¦ ÇØµ¶Çϴµ¥ »ó´çÈ÷ µµ¿òÀÌ µÇ´Â ÆÐ½º¿öµå °ü·Ã ´Ù¸¥ Á¤º¸¸¦ Á¤ÇÒ ¼öµµ ÀÖ´Ù. ¹Ýµå½Ã ¾î´À Á¤µµ ÇØµ¶ÇÏ´Â °ÍÀ» °¡´ÉÇÏ°Ô ÇÏÁö ¸»°í (½Å·ÚµÇ¾îÁö´Â) ½Å·Ú ȯ°æÀÌ º¯ÇÒ ¶§ ´Ù¸¥ ۸¦ »ç¿ëÇØ¶ó. ³Ê¹« ¿À·§µ¿¾È µ¿ÀÏÇÑ Å°¸¦ »ç¿ëÇÏÁö ¸¶¶ó - ¾ó¸¶ ÈÄ¿¡ ¼¼¼Ç Ű ¶Ç´Â ÆÐ½º¿öµå¸¦ º¯°æÇضó. µû¶ó¼ ÀûÀº À̵éÀÇ ÇØµ¶À» ´Ù½Ã ½ÃÀÛÇØ¾ß ÇÒ °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î ¾ÏÈ£ÈÇÒ °ÍÀ» ¾ÐÃàÇØ¾ß ÇÑ´Ù - ÀÌ´Â °íÁ¤µÈ Çì´õ¸¦ Ãß°¡ÇØ º°·Î ÁÁÁø ¾ÊÁö¸¸ ¾ÏÈ£ÈµÈ °á°ú¸¦ ´õ¿í ÀÛ°Ô ¸¸µé»Ó¾Æ´Ï¶ó ¸Þ½ÃÁö¿¡ Á¸ÀçÇÏ´Â ¸¹Àº ÆÐÅÏÀ» Á¦°ÅÇÑ´Ù. µû¶ó¼ ¾ÐÃàÀ» ÅëÇØ °á°ú°¡ ´õ¿í ÀÛ¾ÆÁø´Ù¸é º¸Åë ``ÀÌÀÍ" À¸·Î °£ÁֵǾú´Ù. °ü·ÃÇØ¼ ÁÖ¸ñÇÒ °ÍÀº ÀÚ½ÅÀÇ °íÀ¯ Åë½Å ÇÁ·ÎÅäÄÝÀ» ¸¸µé¾î¾ß ÇÑ´Ù¸é ÀÌÀü¿¡ ¹«¾ùÀÌ ÁøÇàµÇ¾î ¿Ô´ÂÁöÀÇ ¹®Á¦¸¦ Á¶»çÇØ¶ó. Bruce Schneier [1998], Mudge ÀÇ breaking of Microsoft's PPTP implementation ¹× ÈÄ¼Ó ÀÛ¾÷ »Ó¸¸ ¾Æ´Ï¶ó TCP/IP ÇÁ·ÎÅäÄÝ ½ºÀ§Æ®¿¡¼ º¸¾È ¹®Á¦¿¡ ´ëÇÑ Bellvin [1989] ÀÇ °ËÅä¿Í °°Àº °íÀüÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ¹°·Ð ¹Ýµå½Ã ¸ðµç »õ·Î¿î ÇÁ·ÎÅäÄÝÀ» ±¤¹üÀ§ÇÏ°Ô °ø°³ÀûÀ¸·Î °ËÅäÇØ¾ß °¡´ÉÇÑ Àç»ç¿ëÇØ¶ó. 10.6. PAM »ç¿ëPAM (Pluggable Authentication Module, ÀåÂø½Ä ÀÎÁõ ¸ðµâ) Àº »ç¿ëÀÚ¸¦ ÀÎÁõÇϱâ À§ÇÑ À¯¿¬ÇÑ ¸ÞÄ«´ÏÁòÀ¸·Î ¼Ö¶ó¸®½º, °ÅÀÇ ¸ðµç ¸®´ª½º ¹èÆ÷ÆÇ (·¹µåÇÞ, Ä®µ¥¶ó¿Í µ¥ºñ¾È ¹öÀü 2.2) °ú FreeBSD ¹öÀü 3.1 µîÀÇ ¸¹Àº À¯´Ð½º °è¿ ½Ã½ºÅÛÀÌ PAM À» Áö¿øÇÑ´Ù. PAM À» »ç¿ëÇÔÀ¸·Î½á ÇÁ·Î±×·¥Àº ÆÐ½º¿öµå, ½º¸¶Æ®Ä«µå µîÀÇ ÀÎÁõ ½ºÅ´¿¡ µ¶¸³ÀûÀÏ ¼ö ÀÖ´Ù. ±âº»ÀûÀ¸·Î ÇÁ·Î±×·¥Àº PAM À» È£ÃâÇϴµ¥ ·ÎÄà ½Ã½ºÅÛ °ü¸®ÀÚÀÇ ¼³Á¤À» °Ë»çÇÔÀ¸·Î½á ¾î¶² ``ÀÎÁõ ¸ðµâ"ÀÌ ÇÊ¿äÇÑÁö¸¦ ·±Å¸Àӽà °áÁ¤ÇÑ´Ù. ÆÐ½º¿öµå ÀԷ°ú °°Àº ÀÎÁõÀ» ¿äÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇϰí ÀÖ´Ù¸é PAM ¿¡ ´ëÇÑ Áö¿øÀ» Æ÷ÇÔÇØ¾ß ÇÑ´Ù. http://www.kernel.org/pub/linux/libs/pam/index.html¿¡¼ ¸®´ª½º-PAM ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ ãÀ» ¼ö ÀÖ´Ù. 10.7. µµ±¸¸î¸î µµ±¸µéÀº º¸¾È ¹®Á¦¸¦ ó¸®Çϱâ Àü¿¡ À̸¦ ŽÁöÇϴµ¥ µµ¿òÀÌ µÉ ¼ö ÀÖ´Ù. ¹°·Ð ¸ðµç ±×·¯ÇÑ ¹®Á¦¸¦ ¹ß°ßÇÒ ¼ö´Â ¾øÁö¸¸ Áö³ªÄ¥ ¼ö ÀÖ´Â ¹®Á¦¸¦ Àâ´Âµ¥ µµ¿òÀÌ µÉ ¼ö ÀÖ´Ù. ´ÙÀ½Àº ¿ÀÇ ¼Ò½º/ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î µµ±¸¿¡ ÁßÁ¡À» µÐ ¾à°£ÀÇ µµ±¸µéÀÌ´Ù. ÇѰ¡Áö ¸í¹éÇÑ Å¸ÀÔÀÇ µµ±¸´Â ÀáÀçÀûÀÎ º¸¾È ¹®Á¦¸¦ °®°í ÀÖ´Ù°í ¾Ë·ÁÁø ÆÐÅÏÀ» ã¾Æ³»´Â ¼Ò½º Äڵ带 °Ë»çÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù (¿¹, ¶óÀ̺귯¸® ÇÔ¼ö È£ÃâÀº ´ë°³ º¸¾È Ãë¾à¼ºÀÇ ÃâóÀÌ´Ù). ÀÌ·¯ÇÑ Á¾·ùÀÇ ÇÁ·Î±×·¥Àº ``¼Ò½º ÄÚµå ½ºÄ³³Ê" (source code scanner) ¶ó°í ºÒ¸®´Âµ¥ ´ÙÀ½ ¸î¸î ±×·¯ÇÑ µµ±¸µéÀÌ´Ù:
´Ù¸¥ ¹æ¹ýÀº ÇÁ·Î±×·¥³»ÀÇ ¾àÁ¡À» ã±â À§ÇØ Å×½ºÆ® ÆÐÅÏÀ» ¸¸µé¾î ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ´Â °ÍÀÌ´Ù. ´ÙÀ½Àº ¾à°£ÀÇ µµ±¸µéÀÌ´Ù.
¸¹Àº º¸ÅëÀÇ ÀáÀçÀûÀÎ ´ÜÁ¡À» °®°í ÀÖ´Â ftp ¼¹ö ¶Ç´Â ¹æÈº®°ú °°Àº Á¦Ç°À» ±¸ÃàÇÏ·Á¸é Ç¥ÁØ º¸¾È ½ºÄ³´× µµ±¸°¡ À¯¿ëÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. Nessus ´Â ÇѰ¡Áö ÈǸ¢ÇÑ µµ±¸·Î À̿ܿ¡µµ ¸¹Àº µµ±¸µéÀÌ ÀÖ´Ù. ÀÌ·¯ÇÑ Á¾·ùÀÇ µµ±¸µéÀº ȸ±Í °Ë»ç (regression testing) À» Çϴµ¥ ¸Å¿ì À¯¿ëÇÏÁö¸¸ À̵éÀº º»ÁúÀûÀ¸·Î °ú°ÅÀÇ Æ¯Á¤ Ãë¾à¼º°ú °øÅëÀûÀÎ ¼³Á¤ ¿¡·¯ ¸ñ·ÏÀ» »ç¿ëÇϱ⠶§¹®¿¡ »õ·Î¿î ÇÁ·Î±×·¥¿¡¼ ¹®Á¦Á¡À» ã¾Æ³»´Âµ¥ À¯¿ëÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. º¸¾ÈÀûÀÎ ÀÎÇÁ¶ó¸¦ ±¸ÇöÇϱâ À§ÇØ ´Ù¸¥ µµ±¸¸¦ È£ÃâÇÒ Çʿ䰡 ÀÖÀ» °ÍÀÌ´Ù. Open-Source PKI Book Àº °ø°³Å° ±â¹Ý±¸Á¶ (public key infrastructure, PKI) ¸¦ ±¸ÇöÇϱâ À§ÇÑ ¸¹Àº ¿ÀÇ ¼Ò½º ÇÁ·Î±×·¥À» ±â¼úÇϰí ÀÖ´Ù. ¹°·Ð ºñº¸¾ÈÀûÀ¸·Î ¼³Á¤µÈ Ç÷§Æû¿¡¼ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ´Â °ÍÀº Àǹ̰¡ ¾ø´Ù. °ø°Ý¿¡ º¸´Ù ÀúÇ×ÀûÀÎ ½Ã½ºÅÛ ¼³Á¤À» Çϰųª ¼öÁ¤Çϱâ À§ÇØ °È ½Ã½ºÅÛÀ» °Ë»çÇÒ ¼öµµ ÀÖ´Ù. ¸®´ª½º¿¡¼ ÇѰ¡Áö °È ½Ã½ºÅÛÀº Bastille ¸®´ª½º·Î ÀÌ´Â http://www.bastille-linux.org ¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. 10.8. Windows CEÀ©µµ¿ì CE µð¹ÙÀ̽º¸¦ ¾ÈÀüÇÏ°Ô ÇÏ·Á¸é http://msdn.microsoft.com/library/techart/winsecurity.htm¿¡¼ Maricia Alforque ÀÇ "Creating a Secure Windows CE Device" ¸¦ Àоî¾ß ÇÑ´Ù. 10.9. °¨»ç ·¹ÄÚµå ÀÛ¼ºÇÁ·Î±×·¥ ½Ãµ¿, ¼¼¼Ç ½Ãµ¿ ¹× ¼ö»óÇÑ Çൿ¿¡ ´ëÇÑ °¨»ç ±â·ÏÀ» ÀÛ¼ºÇضó. °¡Ä¡ÀÖ´Â °¡´ÉÇÑ Á¤º¸·Î´Â ³¯Â¥, ½Ã°£, uid, euid, gid, egid, ´Ü¸»±â Á¤º¸, ÇÁ·Î¼¼½º id ¿Í Ä¿¸Çµå ¶óÀÎ °ªµéÀÌ Àִµ¥ syslog(3) ÇÔ¼ö°¡ °¨»ç ·Î±×¸¦ ±¸ÇöÇϴµ¥ ÀÖ¾î µµ¿òÀÌ µÉ ¼ö ÀÖ´Ù. ÇѰ¡Áö Á¶½ÉÇØ¾ßÇÒ ¹®Á¦´Â ¸ðµç ·Î±ë ½Ã½ºÅÛÀÌ ¸¹Àº Á¤º¸ (ÀÌ Á¤º¸°¡ ¸Å¿ì µµ¿òÀÌ µÉ °ÍÀ̱⠶§¹®¿¡) ¸¦ ±â·ÏÇÒ ¼ö ÀÖ¾î¾ß ÇÏÁö¸¸ ÀÌ Á¤º¸°¡ ÁÖÀDZí°Ô ´Ù·ïÁöÁö ¾Ê´Â´Ù¸é Á¤º¸ ÀÚü°¡ °ø°ÝÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. °á±¹ °ø°ÝÀÚ´Â ÇÁ·Î±×·¥¿¡ º¸³»Áö´Â ÀÔ·ÂÀÇ ÀϺθ¦ Á¦¾îÇϴµ¥ ÀÖÀ» ¼ö ÀÖ´Â °ø°ÝÀÚ¿¡ ÀÇÇØ º¸³»Áø µ¥ÀÌŸ¸¦ ±â·ÏÇÒ ¶§´Â ·Î±×°¡ ¼Õ»óµÇÁö ¾Êµµ·Ï ``¿¹»óµÈ" ¹®ÀÚµéÀÇ ¸ñ·ÏÀ» È®ÀÎÇÏ°í ¸ðµç ``¿¹±âÄ¡ ¾ÊÀº" ¹®ÀÚµéÀ» À̽ºÄÉÀÌÇÁÇØ¶ó. ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é ½ÇÁ¦ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù; »ç¿ëÀÚ°¡ ½ÇÁ¦ ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼ö ÀÖ´Â Á¦¾î ¹®ÀÚµé (ƯÈ÷ NIL ¶Ç´Â ¶óÀÎ ³¡) °ú °°Àº ¹®ÀÚ¸¦ Æ÷ÇÔÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î °ø°ÝÀÚ°¡ °³Çà ¹®ÀÚ¸¦ ³¢¿ö³Ö´Â´Ù¸é °³Çà ¹®ÀÚµÚ¿¡ ¿øÇÏ´Â ·Î±× ¿£Æ®¸®¸¦ ³õÀ½À¸·Î½á ±× ¿£Æ®¸®¸¦ º¯Á¶ÇÒ ¼ö ÀÖ´Ù. ºÒÇàÈ÷ ÀÌ·¯ÇÑ ¹®ÀÚµéÀ» À̽ºÄÉÀÌÇÎÇÏ´Â °Í¿¡ ´ëÇÑ Ç¥ÁØ °ü·Ê°¡ ÀÖÀ» °Í °°Áö´Â ¾Ê´Ù. ÀúÀÚ´Â URL À̽ºÄÉÀÌÇÎ ¸ÞÄ«´ÏÁò (%hh, hh ´Â À̽ºÄÉÀÌÇÁµÇ´Â ¹ÙÀÌÆ®ÀÇ 16Áø¼ö) À» ƯÈ÷ ÁÁ¾ÆÇÏÁö¸¸ C °ü·Ê (8Áø¼ö¿¡ ´ëÇØ \ooo, \X, X ´Â Ưº° ½Éº¼·Î ¿¹, °³Çà ¹®ÀÚ¿¡ ´ëÇØ \n) ¸¦ Æ÷ÇÔÇØ ´Ù¸¥ °Íµéµµ ÀÖ´Ù. ¶ÇÇÑ Ä³·µ (caret) ½Ã½ºÅÛ (^I ´Â control-I) µµ ÀÖÁö¸¸ ÀÌ ½Ã½ºÅÛÀº 127 À§ÀÇ ¹ÙÀÌÆ® °ªÀ» ´Ù·çÁö´Â ¸øÇÑ´Ù. ½Ã½ºÅÛÀÌ °¨»ç ·¹Äڵ带 ÀúÀåÇϱâ À§ÇÑ ÀÚ¿øÀ» ´Ù½á¹ö¸± ¶§±îÁö °¨»ç ·¹Äڵ带 ±â·ÏµÇ°Ô ÇÏ´Â ¸Å¿ì ¸¹Àº ¼öÀÇ À̺¥Æ®¸¦ ¼öÇàÇÔÀ¸·Î½á »ç¿ëÀÚ°¡ ¼ºñ½º ºÎÀÎ °ø°Ý (¶Ç´Â Àû¾îµµ °¨»ç ÁßÁö) À» ¸¸µé ¼ö ÀÖ´Â À§ÇèÀÌ ÀÖ´Ù. ÀÌ À§Çù¿¡ ´ëóÇϱâ À§ÇÑ ÇѰ¡Áö Á¢±Ù ¹æ¹ýÀº °¨»ç ±â·Ï ·¹ÄÚµùÀÇ Á¤µµ¸¦ Á¦ÇÑ (rate limit) ÇÏ´Â °ÍÀÌ´Ù; ³Ê¹« ¸¹Àº °¨»ç ·¹ÄÚµåµéÀÌ ±â·ÏµÇ°í ÀÖ´Ù¸é ÀǵµÀûÀ¸·Î ÀÀ´ä ¼Óµµ¸¦ °¨¼Ò½ÃÄѶó. ¶ÇÇÑ Àǽɽº·¯¿î °ø°ÝÀÚ¿¡°Ô¸¸ ÀÀ´ä ¼Óµµ¸¦ ÁÙÀÌ·Á°í ÇÒ ¼öµµ ÀÖÁö¸¸ ¸¹Àº °æ¿ì ´Üµ¶ °ø°ÝÀÚ°¡ ÀáÀçÀûÀ¸·Î ¸¹Àº »ç¿ëÀÚµé·Î °¡ÀåÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ¹«¾ùÀÌ ``¼ö»óÇÑ Çൿ"Àΰ¡¸¦ ¼±ÅÃÇÏ´Â °ÍÀº ÇÁ·Î±×·¥ÀÌ ÇÏ´Â Àϰú ÀÌÀÇ ¿¹»óµÈ »ç¿ë¿¡ ÀÇÁ¸Çϴµ¥ Ãʱ⿡ ³íÀÇÇÑ ÇÊÅ͸µ °Ë»ç¿¡¼ °É·¯ÁöÁö ¾Ê´Â ¸ðµç ÀÔ·ÂÀÌ ¾Æ¸¶µµ Èĺ¸ÀÌ´Ù (¿¹, NIL À» Æ÷ÇÔÇÏ¿©). Á¤»ó »ç¿ëÀ¸·ÎºÎÅÍ »ý±æ¼ö ¾ø´Â ÀÔ·ÂÀº µÉ ¼ö ÀÖ´ÂÇÑ ±â·ÏµÇ¾î¾ß Çϴµ¥ ƯÁ¤ ¿ä±¸ Çʵ尡 ¼ö»óÇÑ ¹æ½ÄÀ¸·Î »ç¶óÁö´Â CGI ½ºÅ©¸³Æ®°¡ ±× ¿¹ÀÌ´Ù. /etc/passwd ¶Ç´Â /etc/shadow ¶Ç´Â ºñ½ÁÇÑ ¹®ÀåÀ» °®°í ÀÖ´Â ¸ðµç ÀÔ·ÂÀº ¸¹Àº °æ¿ì ¸Å¿ì Àǽɽº·´´Ù. ºñ½ÁÇÏ°Ô À©µµ¿ìÀÇ "registry" ÆÄÀÏ ¶Ç´Â .pwl ÆÄÀÏ¿¡ Á¢±ÙÇÏ·Á´Â °ÍÀº ¸Å¿ì Àǽɽº·´´Ù. °¨»ç ·¹Äڵ忡 ÆÐ½º¿öµå¸¦ ±â·ÏÇÏÁö ¸¶¶ó. Á¾Á¾ »ç¶÷µéÀº ¿©·¯ ½Ã½ºÅÛ¿¡ ´ëÇØ ÆÐ½º¿öµå¸¦ ¿ì¿¬È÷ ÀÔ·ÂÇϴµ¥ µû¶ó¼ ÆÐ½º¿öµå¸¦ ±â·ÏÇÏ´Â °ÍÀº ½Ã½ºÅÛ °ü¸®ÀÚ°¡ °ü¸® ¿µ¿ª ¿ÜºÎÀÇ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡ ħÀÔÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. 10.10. ±âŸ´ÙÀ½Àº ´Ù¸¥ Àý¿¡¼ ±â¼úÇϱ⿡´Â Àû´çÇÏÁö ¾ÊÀ» °Í °°Àº ¿©·¯°¡Áö ±âŸ º¸¾È ÁöħµéÀÌ´Ù: ÇÁ·Î±×·¥ÀÇ °¡Á¤µéÀ» »ç¿ëÇϱâ Àü¿¡ Àû¾îµµ (ÇÁ·Î±×·¥ ½ÃÀۺκп¡¼) ÇÁ·Î±×·¥ÀÌ À̵éÀÇ ÀϺθ¦ °Ë»çÇÏ°Ô Ç϶ó. ¿¹¸¦ µé¾î ÁÖ¾îÁø µð·ºÅ丮¿¡ ¼³Á¤µÈ "sticky" ºñÆ®¿¡ ÀÇÁ¸ÇÑ´Ù¸é À̸¦ °Ë»çÇØ¶ó. ÀÌ·¯ÇÑ °Ë»çµéÀº °ÅÀÇ ½Ã°£ÀÌ °É¸®Áö ¾ÊÁö¸¸ ½É°¢ÇÑ ¹®Á¦¸¦ ¿¹¹æÇÒ ¼ö ÀÖ´Ù. °¢ È£Ãâ¿¡ ´ëÇØ ¾à°£ÀÇ °Ë»ç¿¡ °É¸®´Â ½Ã°£ÀÌ ¿ì·ÁµÈ´Ù¸é Àû¾îµµ ¼³Ä¡½Ã¿¡ °Ë»ç¸¦ Çϰųª ¶Ç´Â ´õ¿í ÁÁÀº °ÍÀº ¾ÖÇø®ÄÉÀÌ¼Ç ½Ãµ¿½Ã¿¡ Àû¾îµµ °Ë»ç¸¦ ¼öÇàÇØ¶ó. ³»Àå ½ºÅ©¸³ÆÃ ¾ð¾î¸¦ °®°í ÀÖ´Ù¸é ÀÌ ¾ð¾î°¡ ½ºÅ©¸³Æ®¸¦ È£ÃâÇÏ´Â ÇÁ·Î±×·¥¿¡ ³ª»Û ¿µÇâÀ» ¹ÌÄ¥ ¼ö Àִ ȯ°æ º¯¼ö¸¦ ¼³Á¤ÇÏ´Â °ÍÀÌ °¡´ÉÇÒ ¼öµµ ÀÖ´Ù. ÀÌ¿¡ ´ëÃ³ÇØ¶ó. º¹ÀâÇÑ ¼³Á¤ ¾ð¾î°¡ ÇÊ¿äÇÏ´Ù¸é ÀÌ ¾ð¾î°¡ ÁÖ¼® ¹®ÀÚ¸¦ °®°í ÀÖ°í ÁÖ¼®Ã³¸®µÈ ¸¹Àº º¸¾ÈÀûÀÎ ¿¹µéÀ» Æ÷ÇÔÇÏ´Â Áö È®ÀÎÇØ¶ó. ´ë°³ '#'ÀÌ ÁÖ¼®À» ´Ù´Âµ¥ »ç¿ëµÇ´Âµ¥ ÀÌ ¶óÀÎÀÇ ³ª¸ÓÁö°¡ ÁÖ¼®ÀÌ´Ù. °¡´ÉÇÏ´Ù¸é setuid ¶Ç´Â setgid ·çÆ® ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏÁö ¸¶¶ó; ´ë½Å ·çÆ®·Î »ç¿ëÀÚ ·Î±×ÀÎÀ» ÇØ¶ó. Äڵ忡 ¼¸íÇØ¶ó. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¾òÀ» ¼ö ÀÖ´Â °ÍÀÌ º¸³»Á³´ø °ÍÀÎÁö¸¦ »ìÆìº¸±â À§ÇØ ´Ù¸¥ »ç¶÷µéÀÌ °Ë»çÇÒ ¼ö ÀÖ´Ù. Á¤ÀûÀ¸·Î ¸µÅ©µÇ´Â º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» °í·ÁÇØ¶ó. ÀÌ´Â º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ µ¿Àû ¸µÅ© ¶óÀ̺귯¸¦ »ç¿ëÇÏÁö ¾ÊÀ½À» È®ÀÎÇÔÀ¸·Î½á ÀÌ ¸ÞÄ«´ÏÁò¿¡ ´ëÇÑ °ø°Ý¿¡ ´ëÀÀÇÑ´Ù. ±×·¯³ª ÀÌ´Â ¸î°¡Áö ´ÜÁ¡ÀÌ Àִµ¥ µ¿ÀÏÇÑ ·çƾÀÇ ´ÙÁß º¹»ç¶§¹®¿¡ µð½ºÅ©¿Í ¸Þ¸ð¸® »ç¿ëÀ» Áõ°¡½Ãų ¼ö ÀÖÀ¸¸ç ¶ÇÇÑ ´õ¿í ¹Ù¶÷Á÷ ÇÏÁö ¾ÊÀº °ÍÀº º¸¾È Ãë¾à¼º¿¡ ´ëÇÑ ¶óÀ̺귯¸® °»½ÅÀ» ´õ¿í ¾î·Æ°Ô ¸¸µç´Ù - ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼ À̵éÀº ÀÚµ¿ÀûÀ¸·Î °»½ÅµÇÁö ¾ÊÀ» °ÍÀÌ¸ç °³º°ÀûÀ¸·Î ã¾Æ³» ±¸ÇöµÇ¾î¾ß ÇÑ´Ù. Äڵ带 ÀÚ¼¼È÷ °ËÅäÇÒ ¶§ ÀÏÄ¡ÇÏÁö ¾Ê´Â ¸ðµç °æ¿ì¸¦ °í·ÁÇØ¶ó. ¿¹¸¦ µé¾î switch ¹®ÀÌ ÀÖ´Ù¸é cases Áß ¾Æ¹« °Íµµ ÀÏÄ¡ÇÏÁö ¾ÊÀ» ¶§ ¹«¾ùÀÌ ¹ß»ýÇÒ °ÍÀΰ¡? "if" ¹®ÀÌ ÀÖ´Ù¸é Á¶°ÇÀÌ ½ÇÆÐÇÒ ¶§ ¹«¾ùÀÌ ¹ß»ýÇÒ °ÍÀΰ¡? ´ÜÁö ÆÄÀÏÀ» ``removing" ÇÑ´Ù°í ÇØ¼ ÀÌ µð½ºÅ©·ÎºÎÅÍ ÆÄÀÏ µ¥ÀÌŸ¸¦ Á¦°ÅÇÏ´Â °ÍÀº ¾Æ´Ï´Ù; ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼´Â ÀÌ ³»¿ëÀ» ``deleted" ·Î Ç¥½ÃÇÏ¿© ÃßÈÄ Àç»ç¿ë¿¡ ¾Ë¸Â°Ô ¸¸µé¸ç ´ë°³ µ¥ÀÌŸ´Â Àû¾îµµ ´Ù¸¥ °÷ (¸Þ¸ð¸®, ½º¿Ò ÆÄÀÏ ¹× Àӽà ÆÄÀÏ) ¿¡ ÀϽÃÀûÀ¸·Î ÀúÀåµÈ´Ù. Á¤¸»·Î ´ÜÈ£ÇÑ °ø°Ý¿¡ ´ëÇ×Çϱâ À§Çؼ´Â µ¥ÀÌŸ¸¦ °ãÃľ²´Â °ÍÀ¸·Î´Â ÃæºÐÇÏÁö ¾Ê´Ù. ÀÚ¼ºÃ¼ ¹Ìµð¾î¸¦ Áö¿ì´Â ¹®Á¦¿¡ ´ëÇÑ °íÀüÀûÀÎ ³í¹®Àº Peter Gutman ÀÇ ³í¹® ``Secure Deletion of Data from Magnetic and Solid-State Memory''ÀÌ´Ù. °ú°¨ÇÑ ÀûÀº ÄÄÇ»ÅÍ¿¡¼ ¹æÃâµÇ´Â ÀüÀڱ⠸ð´ÏÅ͸µ (±º»ç ½Ã½ºÅÛµéÀº À̸¦ ±Øº¹Çϱâ À§ÇØ TEMPEST ±ÔÄ¢À» µû¶ó¾ß ÇÑ´Ù) ¹× Űº¸µå¿¡ ¼û°ÜÁø ¸ð´ÏÅÍ¿Í °°Àº ºñ¹Ð °ø°Ý µîÀÇ ´Ù¸¥ ¹æ¹ýÀ» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. º¸¾È Ãë¾à¼ºÀ» ¼öÁ¤ÇÒ ¶§ (ÇöÀç ¼öÁ¤µÈ) Ãë¾à¼ºÀ» ¾Ç¿ëÇÏ·Á´Â ½Ãµµ¸¦ ŽÁöÇØ ±â·ÏÇϱâ À§ÇØ ``°æ°í" ¸¦ Ãß°¡ÇÏ´Â °ÍÀ» °í·ÁÇØ¶ó. À̴ ƯÈ÷ °ø°ÝÀÚ°¡ °ø°ÝÀÌ È¿°ú°¡ ÀÖÀ» °ÍÀÎÁö ¹Ì¸® °áÁ¤ÇÒ ¹æ¹ýÀÌ ¾ø´Ù¸é ÁøÇàÁßÀÎ °ø°ÝÀ» ³ëÃâ½Ã۱⠶§¹®¿¡ °ø°Ý °¡´É¼ºÀ» °¨¼Ò½Ãų °ÍÀÌ´Ù. ¿ä¾àÇϸé Ãë¾à¼ºÀ» ħÀÔ Å½Áö ½Ã½ºÅÛÀ¸·Î º¯È¯½ÃÄѶó. ÀÌ´Â ¶ÇÇÑ ÀÎÁõÀü¿¡ ¼¹ö ÇÁ·Î±×·¥ÀÇ ¹öÀüÀ» µå·¯³»´Â °ÍÀº º¸¾È¿¡ ´ëÇØ ³ª»Û °³³äÀ̶ó°í Á¦¾ÈÇÑ´Ù. ¿Ö³ÄÇÏ¸é ¹öÀüÀ» µå·¯³¿À¸·Î½á °ø°ÝÀÚ°¡ È¿°ú°¡ ÀÖÀ» °ø°Ý¸¸À» »ç¿ëÇÏ´Â °ÍÀ» ½±°Ô Çϱ⠶§¹®ÀÌ´Ù. ¸î¸î ÇÁ·Î±×·¥Àº °ø°ÝÀÚ°¡ ``À߸øµÈ °ø°Ý"À» »ç¿ëÇØ ŽÁöµÉ ¼ö ÀÖµµ·Ï ÀǵµÀûÀ¸·Î ¹öÀüÀ» Ʋ¸®°Ô ¸»ÇÏ´Â °ÍÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. ¶ÇÇÑ Ãë¾à¼ºÀÌ ³×Æ®¿öÅ©¸¦ ÅëÇØ À¯¹ßµÈ´Ù¸é ¹Ýµå½Ã º¸¾È ½ºÄ³³Ê°¡ Ãë¾à¼ºÀ» ŽÁöÇÒ ¼ö ÀÖµµ·Ï Çϱâ¹Ù¶õ´Ù. ÀúÀÚ´Â Nessus ¸¦ »ç¿ëÇϱ⸦ ÃßõÇϴµ¥ ¹Ýµå½Ã ¿ÀÇ ¼Ò½º º¸¾È ½ºÄ³³Ê°¡ ¹®Á¦Á¡À» ŽÁöÇÒ ¼ö ÀÖµµ·Ï ÇØ¶ó. ÀÌ·¸°Ô ÇÔÀ¸·Î½á °»½Å¿¡ ´ëÇØ ¼ÒÇÁÆ®¿þ¾î¸¦ °Ë»çÇÏÁö ¾Ê´Â »ç¿ëÀÚ°¡ ÃÖ¼ÒÇÑ º¸¾È Ãë¾à¼º ½ºÄµµ¿¾È¿¡ ¹®Á¦¿¡ ¹è¿ï °ÍÀÌ´Ù. ¶§¶§·Î ÀÌ Ã¥°ú °°Àº º¸¾È ÁöħÀ» °ËÅäÇØ¶ó. ÃÖ¼ÒÇÑ 11장 ³»ÀÇ °á·ÐÀ» ´Ù½Ã ÀÐÀº ÈÄ ¼Ò°³ (1장) ·Î µÇµ¹¾Æ°¡ ´Ù½Ã Àоî¶ó. 11장. °á·Ð
Á¤¸» º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ¼³°èÇÏ°í ±¸ÇöÇÏ´Â °ÍÀº ¸®´ª½º ¹× À¯´Ð½º¿Í °°Àº À¯´Ð½º °è¿ ½Ã½ºÅÛ¿¡¼´Â ½ÇÁ¦·Î ¾î·Á¿î ÀÛ¾÷Àε¥ Á¤¸» º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ ÀáÀçÀûÀ¸·Î ¾ÇÀÇÀÖ´Â »ç¿ëÀÚ°¡ Á¦¾îÇÏ´Â ¸ðµç °¡´ÉÇÑ ÀԷ°ú ȯ°æ¿¡ ÀûÀýÇÏ°Ô ÀÀ´äÇØ¾ß ÇÑ´Ù´Â °ÍÀº ¾î·Æ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ °³¹ßÀÚµéÀº ÇÁ·Î±×·¥ÀÇ Ãë¾à¼ºÀ» ÁÙÀ̱â À§ÇØ °¢ÀÚÀÇ Ç÷§ÆûÀ» ±í°Ô ÀÌÇØÇϰí ÁöħµéÀ» ã¾Æ »ç¿ëÇÑ ÈÄ ¼¼ºÎ °ËÅä (peer review) ¿Í °°Àº º¸Áõ ÇÁ·Î¼¼½º¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. °á·ÐÀûÀ¸·Î ´ÙÀ½Àº ÀÌ Ã¥¿¡¼ ±â¼úÇÑ ÁÖ¿ä ÁöħµéÀÇ ÀϺÎÀÌ´Ù:
12장. ¹®Çå ¸ñ·Ï
À¥»ó¿¡¼ ¾òÀ» ¼ö ÀÖ´Â ±â¼úÀû ±â»çµéÀ» ¸Å¿ì °Á¶ÇÔÀ» ÁÖ¸ñÇØ¶ó. À¥Àº ÀÌ·¯ÇÑ Á¾·ùÀÇ ±â¼úÀû Á¤º¸ ´ëºÎºÐÀ» ¾òÀ» ¼ö ÀÖ´Â °÷ÀÌ´Ù. [Advosys 2000] Advosys Consulting (formerly named Webber Technical Services). Writing Secure Web Applications. http://advosys.ca/tips/web-security.html [Al-Herbish 1999] Al-Herbish, Thamer. 1999. Secure Unix Programming FAQ. http://www.whitefang.com/sup. [Aleph1 1996] Aleph1. November 8, 1996. ``Smashing The Stack For Fun And Profit''. Phrack Magazine. Issue 49, Article 14. http://www.phrack.com/search.phtml?view&article=p49-14 or alternatively http://www.2600.net/phrack/p49-14.html. [Anonymous 1999] Anonymous. October 1999. Maximum Linux Security: A Hacker's Guide to Protecting Your Linux Server and Workstation Sams. ISBN: 0672316706. [Anonymous 1998] Anonymous. September 1998. Maximum Security : A Hacker's Guide to Protecting Your Internet Site and Network. Sams. Second Edition. ISBN: 0672313413. [AUSCERT 1996] Australian Computer Emergency Response Team (AUSCERT) and O'Reilly. May 23, 1996 (rev 3C). A Lab Engineers Check List for Writing Secure Unix Code. ftp://ftp.auscert.org.au/pub/auscert/papers/secure_programming_checklist [Bach 1986] Bach, Maurice J. 1986. The Design of the Unix Operating System. Englewood Cliffs, NJ: Prentice-Hall, Inc. ISBN 0-13-201799-7 025. [Bellovin 1989] Bellovin, Steven M. April 1989. "Security Problems in the TCP/IP Protocol Suite" Computer Communications Review 2:19, pp. 32-48. http://www.research.att.com/~smb/papers/ipext.pdf [Bellovin 1994] Bellovin, Steven M. December 1994. Shifting the Odds -- Writing (More) Secure Software. Murray Hill, NJ: AT&T Research. http://www.research.att.com/~smb/talks [Bishop 1996] Bishop, Matt. May 1996. ``UNIX Security: Security in Programming''. SANS '96. Washington DC (May 1996). http://olympus.cs.ucdavis.edu/~bishop/secprog.html [Bishop 1997] Bishop, Matt. October 1997. ``Writing Safe Privileged Programs''. Network Security 1997 New Orleans, LA. http://olympus.cs.ucdavis.edu/~bishop/secprog.html [Blaze 1996] Blaze, Matt, Whitfield Diffie, Ronald L. Rivest, Bruce Schneier, Tsutomu Shimomura, Eric Thompson, and Michael Wiener. January 1996. ``Minimal Key Lengths for Symmetric Ciphers to Provide Adequate Commercial Security: A Report by an Ad Hoc Group of Cryptographers and Computer Scientists.'' ftp://ftp.research.att.com/dist/mab/keylength.txt and ftp://ftp.research.att.com/dist/mab/keylength.ps. [CC 1999] The Common Criteria for Information Technology Security Evaluation (CC). August 1999. Version 2.1. Technically identical to International Standard ISO/IEC 15408:1999. http://csrc.nist.gov/cc/ccv20/ccv2list.htm [CERT 1998] Computer Emergency Response Team (CERT) Coordination Center (CERT/CC). February 13, 1998. Sanitizing User-Supplied Data in CGI Scripts. CERT Advisory CA-97.25.CGI_metachar. http://www.cert.org/advisories/CA-97.25.CGI_metachar.html. [Clowes 2001] Clowes, Shaun. 2001. ``A Study In Scarlet - Exploiting Common Vulnerabilities in PHP'' http://www.securereality.com.au/archives.html [CMU 1998] Carnegie Mellon University (CMU). February 13, 1998 Version 1.4. ``How To Remove Meta-characters From User-Supplied Data In CGI Scripts''. ftp://ftp.cert.org/pub/tech_tips/cgi_metacharacters. [Cowan 1999] Cowan, Crispin, Perry Wagle, Calton Pu, Steve Beattie, and Jonathan Walpole. ``Buffer Overflows: Attacks and Defenses for the Vulnerability of the Decade''. Proceedings of DARPA Information Survivability Conference and Expo (DISCEX), http://schafercorp-ballston.com/discex SANS 2000. http://www.sans.org/newlook/events/sans2000.htm. For a copy, see http://immunix.org/documentation.html. [Cox 2000] Cox, Philip. March 30, 2001. Hardening Windows 2000. http://www.systemexperts.com/win2k/hardenW2K11.pdf. [Dobbertin 1996]. Dobbertin, H. 1996. The Status of MD5 After a Recent Attack. RSA Laboratories' CryptoBytes. Vol. 2, No. 2. [Felten 1997] Edward W. Felten, Dirk Balfanz, Drew Dean, and Dan S. Wallach. Web Spoofing: An Internet Con Game Technical Report 540-96 (revised Feb. 1997) Department of Computer Science, Princeton University http://www.cs.princeton.edu/sip/pub/spoofing.pdf [Fenzi 1999] Fenzi, Kevin, and Dave Wrenski. April 25, 1999. Linux Security HOWTO. Version 1.0.2. http://www.linuxdoc.org/HOWTO/Security-HOWTO.html [FHS 1997] Filesystem Hierarchy Standard (FHS 2.0). October 26, 1997. Filesystem Hierarchy Standard Group, edited by Daniel Quinlan. Version 2.0. http://www.pathname.com/fhs. [Filipski 1986] Filipski, Alan and James Hanko. April 1986. ``Making Unix Secure.'' Byte (Magazine). Peterborough, NH: McGraw-Hill Inc. Vol. 11, No. 4. ISSN 0360-5280. pp. 113-128. [Flake 2001] Flake, Havlar. Auditing Binaries for Security Vulnerabilities. http://www.blackhat.com/html/win-usa-01/win-usa-01-speakers.html. [FOLDOC] Free On-Line Dictionary of Computing. http://foldoc.doc.ic.ac.uk/foldoc/index.html. [Forristal 2001] Forristal, Jeff, and Greg Shipley. January 8, 2001. Vulnerability Assessment Scanners. Network Computing. http://www.nwc.com/1201/1201f1b1.html [FreeBSD 1999] FreeBSD, Inc. 1999. ``Secure Programming Guidelines''. FreeBSD Security Information. http://www.freebsd.org/security/security.html [FSF 1998] Free Software Foundation. December 17, 1999. Overview of the GNU Project. http://www.gnu.ai.mit.edu/gnu/gnu-history.html [FSF 1999] Free Software Foundation. January 11, 1999. The GNU C Library Reference Manual. Edition 0.08 DRAFT, for Version 2.1 Beta of the GNU C Library. Available at, for example, http://www.netppl.fi/~pp/glibc21/libc_toc.html Fu, Kevin, Emil Sit, Kendra Smith, and Nick Feamster. August 2001. ``Dos and Don'ts of Client Authentication on the Web''. Proceedings of the 10th USENIX Security Symposium, Washington, D.C., August 2001. http://cookies.lcs.mit.edu/pubs/webauth.html. [Galvin 1998a] Galvin, Peter. April 1998. ``Designing Secure Software''. Sunworld. http://www.sunworld.com/swol-04-1998/swol-04-security.html. [Galvin 1998b] Galvin, Peter. August 1998. ``The Unix Secure Programming FAQ''. Sunworld. http://www.sunworld.com/sunworldonline/swol-08-1998/swol-08-security.html [Garfinkel 1996] Garfinkel, Simson and Gene Spafford. April 1996. Practical UNIX & Internet Security, 2nd Edition. ISBN 1-56592-148-8. Sebastopol, CA: O'Reilly & Associates, Inc. http://www.oreilly.com/catalog/puis [Garfinkle 1997] Garfinkle, Simson. August 8, 1997. 21 Rules for Writing Secure CGI Programs. http://webreview.com/wr/pub/97/08/08/bookshelf [Gay 2000] Gay, Warren W. October 2000. Advanced Unix Programming. Indianapolis, Indiana: Sams Publishing. ISBN 0-67231-990-X. [Geodsoft 2001] Geodsoft. February 7, 2001. Hardening OpenBSD Internet Servers. http://www.geodsoft.com/howto/harden. [Graham 1999] Graham, Jeff. May 4, 1999. Security-Audit's Frequently Asked Questions (FAQ). http://lsap.org/faq.txt [Gong 1999] Gong, Li. June 1999. Inside Java 2 Platform Security. Reading, MA: Addison Wesley Longman, Inc. ISBN 0-201-31000-7. [Gundavaram Unknown] Gundavaram, Shishir, and Tom Christiansen. Date Unknown. Perl CGI Programming FAQ. http://language.perl.com/CPAN/doc/FAQs/cgi/perl-cgi-faq.html [Hall "Beej" 1999] Hall, Brian "Beej". Beej's Guide to Network Programming Using Internet Sockets. 13-Jan-1999. Version 1.5.5. http://www.ecst.csuchico.edu/~beej/guide/net [ISO 12207] International Organization for Standardization (ISO). 1995. Information technology -- Software life cycle processes ISO/IEC 12207:1995. [ISO 13335] International Organization for Standardization (ISO). ISO/IEC TR 13335. Guidelines for the Management of IT Security (GMITS). Note that this is a five-part technical report (not a standard); see also ISO/IEC 17799:2000. It includes:
[ISO 17799] International Organization for Standardization (ISO). December 2000. Code of Practice for Information Security Management. ISO/IEC 17799:2000. [ISO 9000] International Organization for Standardization (ISO). 2000. Quality management systems - Fundamentals and vocabulary. ISO 9000:2000. See http://www.iso.ch/iso/en/iso9000-14000/iso9000/selection_use/iso9000family.html [ISO 9000] International Organization for Standardization (ISO). 2000. Quality management systems - Requirements ISO 9001:2000 [Jones 2000] Jones, Jennifer. October 30, 2000. ``Banking on Privacy''. InfoWorld, Volume 22, Issue 44. San Mateo, CA: International Data Group (IDG). pp. 1-12. [Kelsey 1998] Kelsey, J., B. Schneier, D. Wagner, and C. Hall. March 1998. "Cryptanalytic Attacks on Pseudorandom Number Generators." Fast Software Encryption, Fifth International Workshop Proceedings (March 1998), Springer-Verlag, 1998, pp. 168-188. http://www.counterpane.com/pseudorandom_number.html. [Kernighan 1988] Kernighan, Brian W., and Dennis M. Ritchie. 1988. The C Programming Language. Second Edition. Englewood Cliffs, NJ: Prentice-Hall. ISBN 0-13-110362-8. [Kim 1996] Kim, Eugene Eric. 1996. CGI Developer's Guide. SAMS.net Publishing. ISBN: 1-57521-087-8 http://www.eekim.com/pubs/cgibook [Kuchling 2000]. Kuchling, A.M. 2000. Restricted Execution HOWTO. http://www.python.org/doc/howto/rexec/rexec.html [LSD 2001] The Last Stage of Delirium. July 4, 2001. UNIX Assembly Codes Development for Vulnerabilities Illustration Purposes. http://lsd-pl.net/papers.html#assembly. [McClure 1999] McClure, Stuart, Joel Scambray, and George Kurtz. 1999. Hacking Exposed: Network Security Secrets and Solutions. Berkeley, CA: Osbourne/McGraw-Hill. ISBN 0-07-212127-0. [McKusick 1999] McKusick, Marshall Kirk. January 1999. ``Twenty Years of Berkeley Unix: From AT&T-Owned to Freely Redistributable.'' Open Sources: Voices from the Open Source Revolution. http://www.oreilly.com/catalog/opensources/book/kirkmck.html. [McGraw 1999] McGraw, Gary, and Edward W. Felten. December 1998. Twelve Rules for developing more secure Java code. Javaworld. http://www.javaworld.com/javaworld/jw-12-1998/jw-12-securityrules.html. [McGraw 1999] McGraw, Gary, and Edward W. Felten. January 25, 1999. Securing Java: Getting Down to Business with Mobile Code, 2nd Edition John Wiley & Sons. ISBN 047131952X. http://www.securingjava.com. [McGraw 2000a] McGraw, Gary and John Viega. March 1, 2000. Make Your Software Behave: Learning the Basics of Buffer Overflows. http://www-4.ibm.com/software/developer/library/overflows/index.html. [McGraw 2000b] McGraw, Gary and John Viega. April 18, 2000. Make Your Software Behave: Software strategies In the absence of hardware, you can devise a reasonably secure random number generator through software. http://www-106.ibm.com/developerworks/library/randomsoft/index.html?dwzone=security. [Miller 1995] Miller, Barton P., David Koski, Cjin Pheow Lee, Vivekananda Maganty, Ravi Murthy, Ajitkumar Natarajan, and Jeff Steidl. 1995. Fuzz Revisited: A Re-examination of the Reliability of UNIX Utilities and Services. ftp://grilled.cs.wisc.edu/technical_papers/fuzz-revisited.pdf. [Miller 1999] Miller, Todd C. and Theo de Raadt. ``strlcpy and strlcat -- Consistent, Safe, String Copy and Concatenation'' Proceedings of Usenix '99. http://www.usenix.org/events/usenix99/millert.html and http://www.usenix.org/events/usenix99/full_papers/millert/PACKING_LIST [Mudge 1995] Mudge. October 20, 1995. How to write Buffer Overflows. l0pht advisories. http://www.l0pht.com/advisories/bufero.html. [Murhammer 1998] Murhammer, Martin W., Orcun Atakan, Stefan Bretz, Larry R. Pugh, Kazunari Suzuki, and David H. Wood. October 1998. TCP/IP Tutorial and Technical Overview IBM International Technical Support Organization. http://www.redbooks.ibm.com/pubs/pdfs/redbooks/gg243376.pdf [NCSA] NCSA Secure Programming Guidelines. http://www.ncsa.uiuc.edu/General/Grid/ACES/security/programming. Neumann, Peter. 2000. "Robust Nonproprietary Software." Proceedings of the 2000 IEEE Symposium on Security and Privacy (the ``Oakland Conference''), May 14-17, 2000, Berkeley, CA. Los Alamitos, CA: IEEE Computer Society. pp.122-123. National Security Agency (NSA). September 2000. Information Assurance Technical Framework (IATF). http://www.iatf.net. [Open Group 1997] The Open Group. 1997. Single UNIX Specification, Version 2 (UNIX 98). http://www.opengroup.org/online-pubs?DOC=007908799. [OSI 1999]. Open Source Initiative. 1999. The Open Source Definition. http://www.opensource.org/osd.html. [Opplinger 1998] Oppliger, Rolf. 1998. Internet and Intranet Security. Norwood, MA: Artech House. ISBN 0-89006-829-1. [Paulk 1993a] Mark C. Paulk, Bill Curtis, Mary Beth Chrissis, and Charles V. Weber. Capability Maturity Model for Software, Version 1.1. Software Engineering Institute, CMU/SEI-93-TR-24. DTIC Number ADA263403, February 1993. http://www.sei.cmu.edu/activities/cmm/obtain.cmm.html. [Paulk 1993b] Mark C. Paulk, Charles V. Weber, Suzanne M. Garcia, Mary Beth Chrissis, and Marilyn W. Bush. Key Practices of the Capability Maturity Model, Version 1.1. Software Engineering Institute. CMU/SEI-93-TR-25, DTIC Number ADA263432, February 1993. [Peteanu 2000] Peteanu, Razvan. July 18, 2000. Best Practices for Secure Web Development. http://members.home.net/razvan.peteanu [Pfleeger 1997] Pfleeger, Charles P. 1997. Security in Computing. Upper Saddle River, NJ: Prentice-Hall PTR. ISBN 0-13-337486-6. [Phillips 1995] Phillips, Paul. September 3, 1995. Safe CGI Programming. http://www.go2net.com/people/paulp/cgi-security/safe-cgi.txt [Quintero 1999] Quintero, Federico Mena, Miguel de Icaza, and Morten Welinder GNOME Programming Guidelines http://developer.gnome.org/doc/guides/programming-guidelines/book1.html [Raymond 1997] Raymond, Eric. 1997. The Cathedral and the Bazaar. http://www.tuxedo.org/~esr/writings/cathedral-bazaar [Raymond 1998] Raymond, Eric. April 1998. Homesteading the Noosphere. http://www.tuxedo.org/~esr/writings/homesteading/homesteading.html [Ranum 1998] Ranum, Marcus J. 1998. Security-critical coding for programmers - a C and UNIX-centric full-day tutorial. http://www.clark.net/pub/mjr/pubs/pdf/. [RFC 822] August 13, 1982 Standard for the Format of ARPA Internet Text Messages. IETF RFC 822. http://www.ietf.org/rfc/rfc0822.txt. [rfp 1999] rain.forest.puppy. 1999. ``Perl CGI problems''. Phrack Magazine. Issue 55, Article 07. http://www.phrack.com/search.phtml?view&article=p55-7 or http://www.insecure.org/news/P55-07.txt. [Rijmen 2000] Rijmen, Vincent. "LinuxSecurity.com Speaks With AES Winner". http://www.linuxsecurity.com/feature_stories/interview-aes-3.html. [Rochkind 1985]. Rochkind, Marc J. Advanced Unix Programming. Englewood Cliffs, NJ: Prentice-Hall, Inc. ISBN 0-13-011818-4. [St. Laurent 2000] St. Laurent, Simon. February 2000. XTech 2000 Conference Reports. ``When XML Gets Ugly''. http://www.xml.com/pub/2000/02/xtech/megginson.html. [Saltzer 1974] Saltzer, J. July 1974. ``Protection and the Control of Information Sharing in MULTICS''. Communications of the ACM. v17 n7. pp. 388-402. [Saltzer 1975] Saltzer, J., and M. Schroeder. September 1975. ``The Protection of Information in Computing Systems''. Proceedings of the IEEE. v63 n9. pp. 1278-1308. http://www.mediacity.com/~norm/CapTheory/ProtInf. Summarized in [Pfleeger 1997, 286]. Schneider, Fred B. 2000. "Open Source in Security: Visting the Bizarre." Proceedings of the 2000 IEEE Symposium on Security and Privacy (the ``Oakland Conference''), May 14-17, 2000, Berkeley, CA. Los Alamitos, CA: IEEE Computer Society. pp.126-127. [Schneier 1996] Schneier, Bruce. 1996. Applied Cryptography, Second Edition: Protocols, Algorithms, and Source Code in C. New York: John Wiley and Sons. ISBN 0-471-12845-7. [Schneier 1998] Schneier, Bruce and Mudge. November 1998. Cryptanalysis of Microsoft's Point-to-Point Tunneling Protocol (PPTP) Proceedings of the 5th ACM Conference on Communications and Computer Security, ACM Press. http://www.counterpane.com/pptp.html. [Schneier 1999] Schneier, Bruce. September 15, 1999. ``Open Source and Security''. Crypto-Gram. Counterpane Internet Security, Inc. http://www.counterpane.com/crypto-gram-9909.html [Seifried 1999] Seifried, Kurt. October 9, 1999. Linux Administrator's Security Guide. http://www.securityportal.com/lasg. [Seifried 2001] Seifried, Kurt. September 2, 2001. WWW Authentication http://www.seifried.org/security/www-auth/index.html. [Shankland 2000] Shankland, Stephen. ``Linux poses increasing threat to Windows 2000''. CNET. http://news.cnet.com/news/0-1003-200-1549312.html [Shostack 1999] Shostack, Adam. June 1, 1999. Security Code Review Guidelines. http://www.homeport.org/~adam/review.html. [Sibert 1996] Sibert, W. Olin. Malicious Data and Computer Security. (NIST) NISSC '96. http://www.fish.com/security/maldata.html [Sitaker 1999] Sitaker, Kragen. Feb 26, 1999. How to Find Security Holes http://www.pobox.com/~kragen/security-holes.html and http://www.dnaco.net/~kragen/security-holes.html [SSE-CMM 1999] SSE-CMM Project. April 1999. Systems Security Engineering Capability Maturity Model (SSE CMM) Model Description Document. Version 2.0. http://www.sse-cmm.org [Stallings 1996] Stallings, William. Practical Cryptography for Data Internetworks. Los Alamitos, CA: IEEE Computer Society Press. ISBN 0-8186-7140-8. [Stein 1999]. Stein, Lincoln D. September 13, 1999. The World Wide Web Security FAQ. Version 2.0.1 http://www.w3.org/Security/Faq/www-security-faq.html [Swan 2001] Swan, Daniel. January 6, 2001. comp.os.linux.security FAQ. Version 1.0. http://www.linuxsecurity.com/docs/colsfaq.html. [Swanson 1996] Swanson, Marianne, and Barbara Guttman. September 1996. Generally Accepted Principles and Practices for Securing Information Technology Systems. NIST Computer Security Special Publication (SP) 800-14. http://csrc.nist.gov/publications/nistpubs/index.html. [Thompson 1974] Thompson, K. and D.M. Richie. July 1974. ``The UNIX Time-Sharing System''. Communications of the ACM Vol. 17, No. 7. pp. 365-375. [Torvalds 1999] Torvalds, Linus. February 1999. ``The Story of the Linux Kernel''. Open Sources: Voices from the Open Source Revolution. Edited by Chris Dibona, Mark Stone, and Sam Ockman. O'Reilly and Associates. ISBN 1565925823. http://www.oreilly.com/catalog/opensources/book/linus.html [TruSecure 2001] TruSecure. August 2001. Open Source Security: A Look at the Security Benefits of Source Code Access. http://www.trusecure.com/html/tspub/whitepapers/open_source_security5.pdf [Unknown] SETUID(7) http://www.homeport.org/~adam/setuid.7.html. [Van Biesbrouck 1996] Van Biesbrouck, Michael. April 19, 1996. http://www.csclub.uwaterloo.ca/u/mlvanbie/cgisec. [van Oorschot 1994] van Oorschot, P. and M. Wiener. November 1994. ``Parallel Collision Search with Applications to Hash Functions and Discrete Logarithms.'' Proceedings of ACM Conference on Computer and Communications Security. [Venema 1996] Venema, Wietse. 1996. Murphy's law and computer security. http://www.fish.com/security/murphy.html [Watters 1996] Watters, Arron, Guido van Rossum, James C. Ahlstrom. 1996. Internet Programming with Python. NY, NY: Henry Hold and Company, Inc. [Witten 2001] September/October 2001. Witten, Brian, Carl Landwehr, and Michael Caloyannides. ``Does Open Source Improve System Security?'' IEEE Software. pp. 57-61. http://www.computer.org/software [Wood 1985] Wood, Patrick H. and Stephen G. Kochan. 1985. Unix System Security. Indianapolis, Indiana: Hayden Books. ISBN 0-8104-6267-2. [Wreski 1998] Wreski, Dave. August 22, 1998. Linux Security Administrator's Guide. Version 0.98. http://www.nic.com/~dave/SecurityAdminGuide/index.html [Yoder 1998] Yoder, Joseph and Jeffrey Barcalow. 1998. Architectural Patterns for Enabling Application Security. PLoP '97 http://st-www.cs.uiuc.edu/~hanmer/PLoP-97/Proceedings/yoder.pdf [Zalewski 2001] Zalewski, Michael. May 16-17, 2001. Delivering Signals for Fun and Profit: Understanding, exploiting and preventing signal-handling related vulnerabilities. Bindview Corporation. http://razor.bindview.com/publish/papers/signals.txt [Zoebelein 1999] Zoebelein, Hans U. April 1999. The Internet Operating System Counter. http://www.leb.net/hzo/ioscount. 부록 A. Ã¥ ¹ßÇ¥ ±â·Ï´ÙÀ½Àº ÀÌ Ã¥ °³¹ß¿¡ ÀÖ¾î ¾à°£ÀÇ ÁÖ¿ä »ç°ÇÀ» °¡Àå ÃÖ±ÙºÎÅÍ ¼³¸íÇÑ °ÍÀÌ´Ù:
º¯°æ »çÇ׿¡ ´ëÇÑ ´õ¿í ¼¼ºÎÀûÀÎ ¼³¸íÀº ``ChangeLog" ÆÄÀÏ¿¡¼ ¿Â¶óÀÎÀ¸·Î ¾òÀ» ¼ö ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. 부록 B. °¨»çÀÇ ±Û
My thanks to the following people who kept me honest by sending me emails noting errors, suggesting areas to cover, asking questions, and so on. Where email addresses are included, they've been shrouded by prepending my ``thanks.'' so bulk emailers won't easily get these addresses; inclusion of people in this list is not an authorization to send unsolicited bulk email to them.
If you want to be on this list, please send me a constructive suggestion at dwheeler@dwheeler.com. If you send me a constructive suggestion, but do not want credit, please let me know that when you send your suggestion, comment, or criticism; normally I expect that people want credit, and I want to give them that credit. My current process is to add contributor names to this list in the document, with more detailed explanation of their comment in the ChangeLog for this document (available on-line). Note that although these people have sent in ideas, the actual text is my own, so don't blame them for any errors that may remain. Instead, please send me another constructive suggestion. 부록 C. ¹®¼ÀÇ ¶óÀ̼¾½º
This document is Copyright (C) 1999-2000 David A. Wheeler. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License (FDL), Version 1.1 or any later version published by the Free Software Foundation; with the invariant sections being ``About the Author'', with no Front-Cover Texts, and no Back-Cover texts. A copy of the license is included below in 부록 D. These terms do permit mirroring by other web sites, but be sure to do the following:
The first two points primarily protect me from repeatedly hearing about obsolete bugs. I do not want to hear about bugs I fixed a year ago, just because you are not properly mirroring the document. By linking to the master site, users can check and see if your mirror is up-to-date. I'm sensitive to the problems of sites which have very strong security requirements and therefore cannot risk normal connections to the Internet; if that describes your situation, at least try to meet the other points and try to occasionally sneakernet updates into your environment. By this license, you may modify the document, but you can't claim that what you didn't write is yours (i.e., plagiarism) nor can you pretend that a modified version is identical to the original work. Modifying the work does not transfer copyright of the entire work to you; this is not a ``public domain'' work in terms of copyright law. See the license in 부록 D for details. If you have questions about what the license allows, please contact me. In most cases, it's better if you send your changes to the master integrator (currently David A. Wheeler), so that your changes will be integrated with everyone else's changes into the master copy. I am not a lawyer, nevertheless, it's my position as an author and software developer that any code fragments not explicitly marked otherwise are so small that their use fits under the ``fair use'' doctrine in copyright law. In other words, unless marked otherwise, you can use the code fragments without any restriction at all. Copyright law does not permit copyrighting absurdly small components of a work (e.g., ``I own all rights to B-flat and B-flat minor chords''), and the fragments not marked otherwise are of the same kind of minuscule size when compared to real programs. I've done my best to give credit for specific pieces of code written by others. Some of you may still be concerned about the legal status of this code, and I want make sure that it's clear that you can use this code in your software. Therefore, code fragments included directly in this document not otherwise marked have also been released by me under the terms of the ``MIT license'', to ensure you that there's no serious legal encumbrance:
부록 D. GNU Free Documentation LicenseVersion 1.1, March 2000 Copyright 2000 Free Software Foundation, Inc.
부록 E. ½ÂÀÎThis version of the document is endorsed by the original author, David A. Wheeler, as a document that should improve the security of programs. when applied correctly. Modifications (including translations) must remove this appendix per the license agreement included above. 부록 F. ÀúÀÚDavid A. Wheeler is an expert in computer security and has long specialized in development techniques for large and high-risk software systems. He has been involved in software development since the mid-1970s, and been involved with Unix and computer security since the early 1980s. His areas of knowledge include computer security, software safety, vulnerability analysis, inspections, Internet technologies, software-related standards (including POSIX), real-time software development techniques, and numerous computer languages (including Ada, C, C++, Perl, Python, and Java). Mr. Wheeler is co-author and lead editor of the IEEE book Software Inspection: An Industry Best Practice, author of the book Ada95: The Lovelace Tutorial, and co-author of the GNOME User's Guide. He is also the author of many smaller papers and articles, including the Linux Program Library HOWTO. Mr. Wheeler hopes that, by making this document available, other developers will make their software more secure. You can reach him by email at dwheeler@dwheeler.com (no spam please), and you can also see his web site at http://www.dwheeler.com. 주석
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|