Secure Programming for Linux and Unix HOWTO

David A. Wheeler

¼­Á¤·æ

s_ryong@hotmail.com

¼ÛÀç¼÷

affinity@orgio.net

v2.92, 8 January 2002

ÀÌ Ã¥Àº ¸®´ª½º¿Í À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§ÇÑ ÀÏ·ÃÀÇ ¼³°è ¹× ±¸Çö ÁöħµéÀ» Á¦°øÇÑ´Ù. º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥µéÀº ¿ø°Ý µ¥ÀÌŸ ºä¾î·Î »ç¿ëµÇ´Â ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥, CGI ½ºÅ©¸³Æ®¸¦ Æ÷ÇÔÇÑ À¥ ¾ÖÇø®ÄÉÀ̼Ç, ³×Æ®¿öÅ© ¼­¹ö¿Í setuid/setgid ÇÁ·Î±×·¥µéÀ» Æ÷ÇÔÇÑ´Ù. C, C++, ÀÚ¹Ù, ÆÞ, PHP, ÆÄÀ̽ã, TCL °ú Ada95 ¿¡ ´ëÇÑ ¸íÈ®ÇÑ Áöħµµ Æ÷ÇԵȴÙ.

°íÄ£ °úÁ¤
°íħ 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. ÀúÀÚ
Ç¥ ¸ñ·Ï
4-1. ÇÕ¹ýÀûÀÎ UTF-8 ½ÃÄö½º
±×¸² ¸ñ·Ï
1-1. Abstract View of a Program