2001. 1. ½ÃÀÛÇÏ¸é¼ ÀÌ Áöħ¼´Â ¾ÈÀüÇÑ ÇÁ·Î±×·¥À» À§ÇÑ ÇÁ·Î±×·¡¸Ó°¡ ÁöÄѾßÇÒ ¼³°è¿Í ±¸Çö ¹æ¹ý¿¡´ëÇÑ Áöħ¼·Î ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥°ú À¥ ¾îÇø®ÄÉÀ̼Ç(CGI), ³×Æ®¿öÅ© ¼¹ö, setuid/setgid ÇÁ·Î±×·¥ µîÀÇ º¸¾È ¿µ¿ª(Security Boundary)¿¡ ´ëÇÏ¿© ¼³¸íÇÑ´Ù. ¶ÇÇÑ ÀÌ Áöħ¼´Â ÇÁ·Î±×·¡¸Ó°¡ ½ÇÁ¦ ÇÁ·Î±×·¥À» °³¹ßÇÏ¸é¼ ÂüÁ¶ÇÒ ¼ö ÀÖ´Â ½Ç¿ëÀûÀÎ Áöħ¼·Î ¸®´ª½º³ª À¯´Ð½º ½Ã½ºÅÛÀ» ±âº» ÅÛÇø´À¸·Î ÇÑ´Ù. ÀÌ Áöħ¼¸¦ Àд µ¶ÀÚ´Â ±âº»ÀûÀÎ À¯´Ð½º ½Ã½ºÅÛÀÇ º¸¾È°ú C ¾ð¾î¿¡ ´ëÇÑ ÀÌÇØ°¡ ¿ä±¸µÇ¸ç ÀÌ Áöħ¼ÀÇ ¸ñÇ¥°¡ ¾ÈÀüÇÑ ÇÁ·Î±×·¡¹Ö(Secure Programming)ÀÓÀ» ±â¾ïÇØ¾ß ÇÑ´Ù. Áöħ¼´Â °è¼Ó ¾÷µ¥ÀÌÆ®µÇ¸ç ¼öÁ¤Çϰųª Ãß°¡ÇÒ »çÇ×ÀÌ ÀÖÀ¸¸é ¾ðÁ¦µçÁö cert@certcc.or.krÀ̳ª hmpark@certcc.or.kr·Î ¿¬¶ôÁֱ⠹ٶõ´Ù. ¥°. ÇÁ·Î¼¼½º º¸¾È À¯´Ð½º ½Ã½ºÅÛÀº À©µµ¿ì ½Ã½ºÅÛ°ú´Â ´Þ¸® ÆÄÀÏÀ̳ª ÇÁ·Î¼¼½ºÀÇ ±ÇÇÑÀ» ¼³Á¤Çϴ Ưº°ÇÑ ¼Ó¼ºµéÀ» °¡Áö°í ÀÖ´Ù. ÀÌ·¯ÇÑ ¼Ó¼ºµéÀº ¾ÈÀüÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϴµ¥ Á÷Á¢ÀûÀ¸·Î ¿µÇâÀ» ¹ÌÄ¡¹Ç·Î À¯´Ð½ºÀÇ ¼Ó¼º¿¡ ´ëÇÏ¿© ÀÌÇØÇÏ°í ÀÌ°ÍÀ» ¾ÈÀüÇÏ°Ô ÇÁ·Î±×·¥¿¡ ÀÛ¼ºÇÏ´Â °ÍÀÌ ÇÊ¿äÇÑ´Ù. 1. SUID/EUID º¸¾È 1.1 SUID¿Í EUID, SUID (1) Real UID, effective UID¿Í saved UID À¯´Ð½º ½Ã½ºÅÛ¿¡¼ ÆÄÀÏ°ú ÇÁ·Î¼¼½ºÀÇ ±ÇÇÑÀ» ³ªÅ¸³½ °ÍÀ¸·Î ´ÙÀ½°ú °°Àº ¼Ó¼ºÀÌ ÀÖ´Ù. ⼔ Real UID¿Í GID(RUID¿Í RGID) ÇÁ·Î¼¼½º°¡ ½ÇÇàµÉ ¶§ »ç¿ëÀÚÀÇ ½ÇÁ¦ UID¿Í GID¸¦ ³ªÅ¸³»´Â ¿ë¾î·Î ƯÈ÷ RUID°¡ 0ÀÎ °ÍÀº ÆÄÀϽýºÅÛ¿¡ ´ëÇÑ ¸ðµç ±ÇÇÑÀ» °¡Áø »ç¿ëÀÚ·Î root¶ó°í ÇÑ´Ù. root´Â ´ëºÎºÐÀÇ Áß¿äÇÑ º¸¾È »çÇ×À» üũÇÏ°í ¼öÁ¤ÇÏ°í ½Ã½ºÅÛÀ» °ü¸®ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ´Ù¸¥ RUIDº¸´Ù ´õ Å« ±ÇÇÑÀ» °¡Áö°í Àֱ⠶§¹®¿¡ º¸¾È»óÀ¸·Î Áß¿äÇÏ´Ù. ⼔ Effective UID¿Í GID(EUID¿Í EGID) ´©±¸ÀÇ ±ÇÇÑÀ¸·Î ÇÁ·Î¼¼½º°¡ ½ÇÇàÇϴ°¡¸¦ ³ªÅ¸³»´Â ¿ë¾î·Î ÀÌ°ÍÀº ÇÁ·Î¼¼½º°¡ ½ÇÇàµÉ ¶§ ´©±¸ÀÇ ±ÇÇÑÀ¸·Î ½ÇÇàµÇ´ÂÁö¸¦ ³ªÅ¸³»¹Ç·Î º¸¾È¿¡¼ ƯÈ÷ ¹®Á¦°¡ µÇ´Â ºÎºÐÀÌ´Ù. /sbin/passwd ÇÁ·Î±×·¥Ã³·³ EUID°¡ root·Î ½ÇÇàµÉ °æ¿ì¿¡ ÁÖÀÇÇØ¾ß ÇÑ´Ù. ⼔ Saved UID¿Í GID(SUID¿Í SGID) ÇÁ·Î±×·¥¿¡ ÀÇÇØ º¯Çϱâ ÀüÀÇ UID¸¦ ³ªÅ¸³»´Â °ÍÀ¸·Î ±ÇÇÑ ±³È¯À» Çã¿ëÇÏ°í Çã¿ëÇÏÁö ¾ÊÀ½À» Áö¿øÇϱâ À§ÇÏ¿© »ç¿ëÇÑ´Ù. (2) SUID¿Í SGID ÇÁ·Î±×·¥ ÇÁ·Î±×·¥µéÀÌ ÆÄÀÏ°ú ÇÁ·Î¼¼½ºµé¿¡ Á¢±ÙÇÏ´Â °ÍÀ» Çã¶ôÇÏ´Â °ÍÀ¸·Î setuid´Â »ç¿ëÀÚÀÇ ±ÇÇÑÀ» ÀÓ½ÃÀûÀ¸·Î ¹Ù²ãÁØ´Ù. Áï, ±ÇÇÑÀÌ ¾ø´Â »ç¿ëÀÚ°¡ Ưº°ÇÑ ±ÇÇÑÀ» ¿ä±¸ÇÏ´Â ÀÛ¾÷À» ÇؾßÇÒ °æ¿ì¿¡ »ç¿ëÇÑ´Ù. ÀÌ·¯ÇÑ Æ¯º°ÇÑ ±ÇÇÑÀº ÀÌ ÇÁ·Î±×·¥ÀÌ ½ÇÇàÇÏ´Â µ¿¾È¿¡¸¸ ¿µÇâÀ» ¹Þ°í ÇÁ·Î±×·¥ÀÌ ³¡³ª¸é ¿ø·¡ÀÇ »ç¿ëÀÚ ±ÇÇÑÀ¸·Î µ¹¾Æ¿À°Ô µÈ´Ù. SUID/SGID ÇÁ·Î±×·¥Àº setuid/setgid ºñÆ® s·Î Ç¥½ÃÇÑ´Ù. (¿¹Á¦ 1) SUID/SGID ÇÁ·Î±×·¥ - Æнº¿öµå ÇÁ·Î±×·¥ Æнº¿öµå ÇÁ·Î±×·¥¿¡¼ Æнº¿öµå ÆÄÀÏÀº root¸¸ÀÌ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. ±×·±µ¥ ÀÏ¹Ý »ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ Æнº¿öµå¸¦ ¼öÁ¤Çϱâ À§Çؼ´Â rootÀÇ ±ÇÇÑÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ ¶§ Æнº¿öµå ÇÁ·Î±×·¥À» SUID ÇÁ·Î±×·¥À¸·Î ÇÏ¿© ÀϹݻç¿ëÀÚµµ Àá½Ãµ¿¾È rootÀÇ ±ÇÇÑÀ» °¡Á® Æнº¿öµå ÆÄÀÏÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.
1.2 SUID/SGID ÇÁ·Î±×·¥ÀÇ À§Ç輺 SUID ÇÁ·Î±×·¥Àº ½ÇÇàµÉ ¶§ ÇÁ·Î±×·¥ ¼ÒÀ¯ÀÚÀÇ ±ÇÇÑÀ¸·Î ¼öÇàµÇ¹Ç·Î Àß ¸ø »ç¿ëµÉ °æ¿ì¿¡ À§ÇèÇÒ ¼öµµ ÀÖ´Ù. /bin/shÀº ½©À» ½ÇÇàÇÏ´Â ÇÁ·Î±×·¥À¸·Î ÀϹÝÀûÀ¸·Î »ç¿ëÀÚ°¡ ·Î±×ÀÎÇÏ¿´À» ¶§ ½ÇÇàµÇ¾î »ç¿ëÀÚ´Â ½© »ó¿¡¼ À¯´Ð½º ¸í·É¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½Àº setuid µÈ /bin/sh ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀ» º¸¿©ÁÖ´Â ¿¹ÀÌ´Ù. óÀ½ »ç¿ëÀÚÀÇ ±ÇÇÑÀº ÀϹݻç¿ëÀÚ hmparkÀ» °¡ÁöÁö¸¸ setuid µÈ /bin/shÀ» ½ÇÇàÇÏ°í ³ ÈÄ¿¡´Â /bin/shÀÇ ¼ÒÀ¯ÀÚÀÇ ±ÇÇÑÀÎ root·Î ½ÇÇàµÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
À§¿¡¼ º¸´Â ¹Ù¿Í °°ÀÌ setuid ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖ´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇàÇÏ´Â °æ¿ì ±× ÇÁ·Î¼¼½ºÀÇ UID´Â ½ÇÁ¦ ÆÄÀÏÀ» ½ÇÇàÇÏ´Â »ç¿ëÀÚÀÇ ±ÇÇÑÀ» °¡ÁöÁö¸¸ ÇÁ·Î¼¼½ºÀÇ EUID´Â setuid µÈ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ »ç¿ëÀÚÀÇ ±ÇÇÑÀ» °¡Áö´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.(uid=504(hmpark), euid=0(root)) Áï, À§ÀÇ /bin/shÀ̶ó´Â ÇÁ·Î¼¼½º´Â hmpark¶ó´Â UID¸¦ °¡ÁöÁö¸¸ EUID´Â /bin/shÀÇ ½ÇÁ¦ ¼ÒÀ¯ÀÚÀÇ ±ÇÇÑÀ» °¡Áö¹Ç·Î root°¡ µÇ´Â °ÍÀÌ´Ù. ±×·¡¼ ÀÌ ½© ÇÁ·Î¼¼½º´Â rootÀÇ ±ÇÇÑÀ¸·Î ½ÇÇàµÈ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. À§¿Í °°Àº »óȲ¿¡¼ SUID ÇÁ·Î±×·¥¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Â À§Çù¿¡ ´ëÇÏ¿© »ý°¢ÇØ º¸¾Æ¾ß ÇÑ´Ù. root ±ÇÇÑÀ» °¡Áø ½©ÀÌ ½ÇÇàµÉ ¶§ ½©ÀÌ ³¡³»±â Àü±îÁö´Â root·Î setuidµÈ »óÅ°¡ °è¼ÓµÈ´Ù. À̶§ °ø°ÝÀÚ´Â root ±ÇÇÑÀ¸·Î ÇÒ ¼ö ÀÖ´Â ¸ðµç ÀÛ¾÷À» ÇÒ ¼ö Àֱ⠶§¹®¿¡ ½Ã½ºÅÛ¿¡ Ä¡¸íÀûÀÎ ÇÇÇظ¦ ÀÔÈú ¼öµµ ÀÖ´Ù. 1.3 ¾ÈÀüÇÑ SUID/SGID ÇÁ·Î±×·¥ ¿ø¸® ⼔ UID¿Í GID¸¦ °¡´ÉÇÑ Á¦ÇÑÇÑ´Ù. setuid ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¶§ °¡´ÉÇÑ UID¿Í GID°¡ ³·Àº ±ÇÇÑÀ» °¡Áöµµ·Ï ÇØ¾ß ÇÑ´Ù. root·Î setuidµÈ ÇÁ·Î±×·¥ÀÌ Ä§¹ü ´çÇÏ¸é ¸ðµç ½Ã½ºÅÛÀ» Æı«ÇÒ °¡´É¼ºÀÌ ÀÖÁö¸¸ ÀÏ¹Ý »ç¿ëÀÚ·Î setuidµÈ ÇÁ·Î±×·¥Àº ÀÏ¹Ý »ç¿ëÀÚÀÇ ±ÇÇѸ¸À» ħ¹ü´çÇϹǷΠÇÇÇØ°¡ Àû±â ¶§¹®ÀÌ´Ù. ⼔ exec¸¦ È£ÃâÇϱâ Àü¿¡ effective UID¿Í GID¸¦ Àç ¼³Á¤ÇÑ´Ù. ÀϹÝÀûÀ¸·Î popenÀ̳ª system°ú °°Àº ¶óÀ̺귯¸® ¼ºê·çƾÀÌ ½ÇÇàµÉ ¶§ ³»ºÎÀûÀ¸·Î exec ÇÔ¼ö°¡ È£ÃâµÈ´Ù. ±×·±µ¥ ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¸Ó´Â ÀÌ·¯ÇÑ »ç½ÇÀ» ÀνÄÇÏÁö ¸øÇÑä ±×³É ¼ºê·çƾ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥ÀÌ setuid rootÀÎ ÇÁ·Î±×·¥À̶ó¸é ¿©±â¿¡¼ ½ÇÇàµÇ´Â ½©µµ ±ÇÇÑÀÌ rootÀÎ ½©ÀÌ ½ÇÇàµÉ °ÍÀÌ´Ù. ±×·¯¹Ç·Î exec ÇÔ¼ö°¡ È£ÃâµÇ±â Àü¿¡ effective UID¿Í GID¸¦ Àç ¼³Á¤ÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. ⼔ exec¸¦ È£ÃâÇϱâ Àü¿¡ ¸ðµç ÆÄÀÏ ±â¼úÀÚ¸¦ ´Ý´Â´Ù. setuid ÇÁ·Î±×·¥ÀÌ Áß¿äÇÑ ÆÄÀÏÀ» ÀÐÀ» °æ¿ì¿¡ execµÈ ÇÁ·Î±×·¥µµ ±× Áß¿äÇÑ ÆÄÀÏÀ» ÀÐÀ» ¼ö°¡ ÀÖ´Ù. ±×·¯¹Ç·Î ÀÌ°ÍÀ» ¹æÁöÇϱâ À§Çؼ´Â exec°¡ ¹ß»ýÇÒ ¶§¸¶´Ù Áß¿äÇÑ ÆÄÀÏÀ» ´Ýµµ·Ï ÇÏ´Â flag¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù. ÀÌ flag´Â ÆÄÀÏÀÌ ¿¸®ÀÚ¸¶ÀÚ Áï½Ã ¼³Á¤µÇ¾î¾ß ÇÑ´Ù. Áï sfd°¡ Áß¿äÇÑ ÆÄÀÏÀÇ ±â¼úÀÚÀÎ °æ¿ì fcntl(sfd, F_SETFD, 1) ioctl(sfd, FIOCLEX, NULL) ÀÇ ¸í·ÉµéÀº exec°¡ ½ÇÇàµÉ ¶§ ÆÄÀÏÀ» ´Ýµµ·Ï ÇÑ´Ù. ⼔ root°¡ È®½ÇÇÏ°Ô Á¦ÇѵǾîÀÖ´ÂÁö ´Ù½Ã È®ÀÎÇ϶ó. chroot()´Â »õ·Î¿î ·çÆ® µð·ºÅ丮¸¦ ¼³Á¤ÇÏ¿© chrootµÈ ÇÁ·Î¼¼½º°¡ µð·ºÅ丮ÀÇ »óÀ§ µð·ºÅ丮¿¡ Á¢±ÙÇÒ ¼ö ¾ø°Ô ÇØÁÖ´Â ¿ªÇÒÀ» ÇÏ´Â ÇÔ¼öÀÌ´Ù. chroot("/usr/riacs") ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÇÁ·Î¼¼½º°¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ¿µ¿ªÀ» ¹Ì¸® Á¦ÇÑÇÏ¿© ÆÄÀÏ ½Ã½ºÅÛÀÇ ÀÓÀÇÀÇ ÆÄÀÏÀ» Àаųª ¾µ ¼ö ÀÖ´Â ¹®Á¦Á¡¿¡ ´ëÇÑ º¸¾È ȯ°æÀ» Á¦°øÇØ ÁØ´Ù. ln -s /usr/demo /usr/riacs/demo ±×·±µ¥ /usr/demo¸¦ /usr/riacs/demo¿¡ ¸µÅ©½ÃÅ°¸é Á¦ÇѵǾî ÀÖ´Â µð·ºÅ丮±îÁö ħ¹üÇÒ ¼ö ÀÖ´Â À§ÇèÀÌ ÀÖÀ¸¹Ç·Î ÁÖÀÇÇØ¾ß ÇÑ´Ù. Áï, À§ÀÇ ¸µÅ©¿¡¼ /usr/riacs´Â "/"·Î Çؼ®µÇ±â ¶§¹®¿¡ cd /demo cd .. ¸í·É ÈÄ¿¡ /usr µð·ºÅ丮¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ±×·¯¹Ç·Î chrootÇÏ¿© »ý±ä »õ·Î¿î ·çÆ® µð·ºÅ丮ÀÇ ¼ºêµð·ºÅ丮¿¡¼´Â ¸µÅ©µÈ µð·ºÅ丮¸¦ »ç¿ëÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ⼔ ½ÇÇàµÉ ÇÁ·Î¼¼½ºÀÇ È¯°æÀ» °Ë»çÇ϶ó. ¸¹Àº ȯ°æº¯¼öÀº ºÎ¸ð ÇÁ·Î¼¼½º·ÎºÎÅÍ »ó¼ÓµÈ PATH³ª IFS, umask¿Í °°Àº º¯¼öµé¿¡ ÀÇÇØ Á¿ìµÈ´Ù. ⼔ ÃÖ¼ÒÇÑÀÇ ±ÇÇÑ ¿ø¸® ±ÇÇÑÀ» ÀϽÃÀûÀ¸·Î ³·Ã߰ųª ±ÇÇÑÀ» ¿ÏÀüÈ÷ Á¦°ÅÇÏ´Â °ÍÀº À߸øµÈ ±ÇÇÑ ¼³Á¤À¸·Î ÀÎÇÏ¿© ¹ß»ýÇÒ ¼ö ÀÖ´Â °áÁ¡À» ÃÖ¼ÒÈ ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀÌ´Ù. ⼔ ¿ÜºÎÀÇ ÀԷ°ªÀ» ¹ÏÁö ¸»¾Æ¶ó. ¿ÜºÎ¿¡¼ ÀÔ·ÂµÈ °ªÀº ÃæºÐÇÏ°Ô °Ë»çÇÏ°í ÇÊ¿ä¾ø´Â °ªµéÀ» Áö¿î ÈÄ¿¡ À¯È¿ÇÑ °ªÀ¸·Î Æò°¡µÇ¾úÀ» °æ¿ì¿¡ »ç¿ëÇϵµ·Ï ÇÑ´Ù. 2. »õ·Î¿î ÇÁ·Î¼¼½ºÀÇ »ý¼º º¸¾È 2.1 ÇÁ·Î¼¼½º ½ÇÇà½Ã À§Ç輺 »ý¼ºÇÑ ÇÁ·Î¼¼½º´Â exec °è¿ ½Ã½ºÅÛ ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© »õ·Î¿î ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°´Âµ¥ ƯÈ÷ system(), popen() ÇÔ¼ö´Â »õ·Î¿î ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¶§ setuid³ª ³×Æ®¿öÅ© ¼ºñ½ºÃ³·³ Ưº°ÇÑ ±ÇÇÑÀ» ¿ä±¸ÇÏ´Â ÇÁ·Î±×·¥ÀÎ °æ¿ì¿¡´Â Ưº°È÷ À¯ÀÇÇØ¾ß ÇÑ´Ù. 2.2 ¾ÈÀüÇÑ ÇÁ·Î±×·¥ ¿ø¸® ⼔ system(), popen() ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. SUID ÇÁ·Î±×·¥À̳ª ³×Æ®¿öÅ© ¼ºñ½º ÇÁ·Î±×·¥Àº Ưº°ÇÑ ±ÇÇÑÀ» °¡Áö°í ½ÇÇàµÈ´Ù. ±×·±µ¥ system(), popen() ÇÔ¼ö´Â ½© ÀÎÅÍÇÁ¸®ÅÍÀÎ /bin/sh¸¦ ½ÇÇàÇÏ¿© ´Ù¸¥ ÇÁ·Î±×·¥À» ½ÇÇàÇϱ⠶§¹®¿¡ À§ÇèÇÏ´Ù. ±×·¯¹Ç·Î ´ë½Å execl()À̳ª execv() ½Ã½ºÅÛ ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ⼔ ¸ðµç ÆÄÀÏ ±â¼úÀÚ¸¦ ´Ý¾Ò´ÂÁö ²À È®ÀÎÇÑ´Ù. »õ·Î »ý¼ºµÈ ÀÚ½Ä ÇÁ·Î¼¼½º´Â ºÎ¸ð ÇÁ·Î¼¼½º·ÎºÎÅÍ ÆÄÀÏ ±â¼úÀÚÀÇ º¹»çº»À» °¡Áö¹Ç·Î ºÎ¸ð ÇÁ·Î¼¼½º°¡ Áß¿äÇÑ ÆÄÀÏ(ex, /etc/passwd)À» ¿¾úÀ» °æ¿ì ÀÌ ÆÄÀÏÀÇ ÆÄÀÏ ±â¼úÀÚ »ó¼Ó¹Þ±â ¶§¹®¿¡ ÆÄÀÏÀÌ ³ëÃâµÉ ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î ÆÄÀÏ ±â¼úÀÚ¸¦ ¿¾úÀ» °æ¿ì¿¡´Â ÀÚ½Ä ÇÁ·Î¼¼½º°¡ »ý¼ºµÇ±â Àü¿¡ ¸ðµç ÆÄÀÏ ±â¼úÀÚ¸¦ ´Ý¾Æ¾ß ÇÑ´Ù. ⼔ ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¶§ Àüü °æ·Î À̸§À» »ç¿ëÇÏ´ÂÁö È®ÀÎÇÑ´Ù. »ó´ë °æ·Î¸¦ »ç¿ëÇÏ¿© ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¿´À» °æ¿ì¿¡ ÀÓÀÇÀÇ ÇÁ·Î±×·¥À̳ª Æ®·ÎÀÌÀÜ ÇÁ·Î±×·¥À» ½ÇÇàµÉ ¼ö Àֱ⠶§¹®¿¡ ²À Àý´ë °æ·Î¸¦ »ç¿ëÇϵµ·Ï ÇÑ´Ù. ⼔ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡ Àü´ÞµÈ ȯ°æº¯¼ö¸¦ È®ÀÎÇÑ´Ù. ÀÚ½Ä ÇÁ·Î¼¼½º´Â ºÎ¸ð ÇÁ·Î¼¼½º·ÎºÎÅÍ È¯°æº¯¼ö¸¦ »ó¼Ó¹Þ´Â´Ù. ±×·±µ¥ ȯ°æº¯¼ö°¡ ¼ö½Ã·Î Á¤ÀÇµÉ ¼ö ÀÖÀ¸¹Ç·Î À§ÇèÇÏ´Ù. ±×·¯¹Ç·Î ȯ°æº¯¼ö¸¦ »ó¼Ó¹ÞÀ» °æ¿ì¿¡´Â ²À ÇÊ¿äÇÑ È¯°æº¯¼ö¸¦ »ó¼Ó¹Þµµ·Ï ÇÏ°í ´Ù¸¥ ȯ°æº¯¼ö´Â ±ú²ýÇÑÁö È®ÀÎÇϵµ·Ï ÇÑ´Ù. ¥±. ÆÄÀϽýºÅÛ º¸¾È 1. µðÆúÆ® ±ÇÇÑ ¼³Á¤ º¸¾È - umask 1.1 umaskÀÇ À§Ç輺 »ý¼ºµÈ ÆÄÀÏÀ̳ª ½ÇÇàµÇ´Â ÇÁ·Î±×·¥Àº µðÆúÆ® ÆÄÀÏ ±ÇÇÑÀ» °¡Áö°í ¼³Á¤µÈ´Ù. ÀÌ·¯ÇÑ µðÆúÆ® ±ÇÇÑÀº ÇÁ·Î¼¼½º umask¿¡ ÀÇÇؼ ¼³Á¤µÇ´Âµ¥ ÀÌ ±ÇÇÑÀº ºÎ¸ð ÇÁ·Î¼¼½º³ª ·Î±×ÀÎ ½©¿¡ÀÇÇØ »ó¼Ó¹Þ´Â´Ù. ±×·±µ¥ umask°¡ ¾ÈÀüÇÏÁö ¾ÊÀº ±ÇÇÑÀ¸·Î ¼³Á¤µÈ °æ¿ì Çã°¡µÇÁö ¾ÊÀº »ç¿ëÀÚ¿¡°Ô±îÁö ÆÄÀÏÀ̳ª ÇÁ·Î¼¼½º¿¡ Á¢±ÙÀ» Çã¶ôÇÏ¿© º¸¾È ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Ù. 1.2 ¾ÈÀüÇÑ umask »ç¿ë ¿ø¸® µðÆúÆ®·Î umask´Â 022·Î ¼³Á¤µÇ¾î Àִµ¥ umask¸¦ ¼öÁ¤Çϱâ À§Çؼ´Âumask()¶ó´Â ¶óÀ̺귯¸® È£Ãâ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.
2. ÀÔ·Â ½Ã°£ Á¦ÇÑ Æ¯È÷ ³×Æ®¿öÅ©¿¡¼ µé¾î¿À´Â ÀÚ·á¿¡´Â ŸÀÓ ¾Æ¿ô°ú ·Îµå Çѵµ¸¦ Á¦ÇÑÇØ¾ß ÇÑ´Ù. ¸¸¾à ±×·¸Áö ¾ÊÀ¸¸é, ¼ºñ½º¸¦ ²÷ÀÓ¾øÀÌ ¿äûÇÏ´Â ¼ºñ½º °ÅºÎ °ø°ÝÀ» ½±°Ô ÃÊ·¡ÇÒ ¼ö ÀÖÀ»Áöµµ ¸ð¸¥´Ù. 3. ¾ÈÀüÇÑ Àӽà ÆÄÀÏ »ç¿ë º¸¾È 3.1 ÀÓ½Ã(tmp) ÆÄÀÏÀÇ À§Ç輺 Àӽà ÆÄÀÏÀº /tmp µð·ºÅ丮¿¡ ÀúÀåµÇ´Â ÆÄÀÏ·Î ÀÌ ÆÄÀÏ¿¡ Á¢±ÙÇϱâ À§ÇØ Æ¯º°ÇÑ ±ÇÇÑÀÌ ÇÊ¿äÇÏÁö ¾Ê°í ¶ÇÇÑ À̸§À» ¿¹ÃøÇϱ⠽±°í Àß ¾Ë·ÁÁ® ÀÖ´Ù. ±×·¡¼ ÇÁ·Î±×·¥µéÀº ÀÌ ÆÄÀÏ¿¡ Á¢±ÙÇÏ¿© ÆÄÀÏÀ» ¿¬ ÈÄ ÆÄÀϾȿ¡ ¾î¶² µ¥ÀÌÅ͵éÀ» »ðÀÔÇϱ⠽±´Ù. (¿¹Á¦ 2) Àӽà ÆÄÀÏÀ» ÀÌ¿ëÇÑ °ø°Ý ¨ç root·Î ½ÇÇàµÇ´Â ½Ã½ºÅÛ ÇÁ·Î±×·¥À» °ø°ÝÀÚ°¡ ½ÇÇà½ÃŲ´Ù. ÀÌ ½Ã½ºÅÛ ÇÁ·Î±×·¥Àº tmp µð·ºÅ丮 ¾ÈÀÇ Àӽà ÆÄÀÏ(/tmp/program.temp)À» ¿¬´Ù. ¨è °ø°ÝÀÚ´Â ÀÌ Àӽà ÆÄÀÏÀ» Áß¿äÇÑ ÆÄÀÏ(±ÇÇÑÀÖ´Â »ç¿ëÀÚ°¡ ¼ÒÀ¯ÇÑ ÆÄÀÏ, /etc/passwd)¿¡ ¸µÅ©¸¦ °Ç´Ù. > ln -s /etc/passwd /tmp/program.temp ÀÌ·¸°Ô ¸µÅ©¸¦ °É¸é °ø°ÝÀÚ°¡ ÀÓ½ÃÆÄÀÏ¿¡ ÀÓÀÇÀÇ µ¥ÀÌÅ͸¦ ¾µ °æ¿ì¿¡ ¸µÅ©¿¡ÀÇÇØ ½ÇÁ¦ ½áÁö´Â ÆÄÀÏÀº /etc/passwd ÆÄÀÏÀÌ µÇ¾î passwd ÆÄÀÏ¿¡ ¾ÇÀÇÀûÀÎ Á¤º¸°¡ »ðÀÔµÇ°Ô µÈ´Ù. (¿¹Á¦ 3) Àӽà ÆÄÀÏÀ» ÀÌ¿ëÇÑ °ø°Ý ¨ç Àӽà ÆÄÀÏÀ» ó¸®ÇÏ´Â ±ÇÇÑÀÌ ¾ø´Â ÇÁ·Î±×·¥À» ½ÇÇà½ÃŲ´Ù. ¨è Áß¿äÇÑ ÆÄÀÏ¿¡ ¸µÅ©¸¦ °Ç´Ù. > ln -s /etc/passwd /tmp/program.temp ¨é ½Å·ÚÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ°¡ ÀÌ ÇÁ·Î±×·¥À» ½ÇÇàÇÑ´Ù. ÀÌ·¸°Ô ÇÏ¸é °ø°Ý (¿¹Á¦ 2)¿¡¼Ã³·³ ÀÓ½ÃÆÄÀÏ¿¡ ¾²³ª ½ÇÁ¦·Î´Â Áß¿äÇÑ ÆÄÀÏ(/etc/passwd) ÆÄÀÏ¿¡ ½áÁö°Ô µÈ´Ù. °ø°Ý (¿¹Á¦ 1)°ú (¿¹Á¦ 2)ÀÇ Â÷ÀÌÁ¡Àº ÇÁ·Î±×·¥ÀÌ (¿¹Á¦ 1)¿¡¼´Â rootÀÇ ±ÇÇÑÀ¸·Î ½ÇÇàµÇ°í (¿¹Á¦ 2)¿¡¼´Â ÀÏ¹Ý »ç¿ëÀÚÀÇ ±ÇÇÑÀ¸·Î ½ÇÇàµÈ´Ù´Â °ÍÀÌ´Ù. 3.2 ¾ÈÀüÇÑ ÀÓ½ÃÆÄÀÏ »ç¿ë ÇÁ·Î±×·¥ ¿ø¸® ⼔ /tmp µð·ºÅ丮¾È¿¡ Àӽà ÆÄÀÏÀ» »ý¼ºÇÏÁö ¸»¾Æ¶ó. ⼔ ÀÓ½ÃÆÄÀÏÀ» »ý¼ºÇÏ´Â ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ´Â ½Ã½ºÅÛÀ» »ç¿ëÇÑ´Ù. ÀÓ½ÃÆÄÀÏÀ» »ý¼ºÇϱâ À§ÇÑ ¸¹Àº ÇÔ¼öµéÀÌ Á¦°øµÇ´Âµ¥ ¹ß»ýÇÒ ¼ö ÀÖ´Â º¸¾È ¹®Á¦¿¡ ´ëºñÇϱâ À§ÇÏ¿© ÁÖÀDZí°Ô »ç¿ëÇØ¾ß ÇÑ´Ù. - tmpfile()ÀÇ »ç¿ë FILE *tmpfile(void); tmpfile() ÇÔ¼ö´Â Àӽà ÆÄÀÏÀ» »ý¼ºÇÏ¿© ÆÄÀÏ ½ºÆ®¸²¿¡ ÆÄÀÏ ±â¼úÀÚ¸¦ ¸®ÅÏÇÑ´Ù. ƯÈ÷ tmpfile() ÇÔ¼ö´Â mkstemp() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© Àӽà ÆÄÀÏÀ» »ý¼ºÇÏ°í ¹Ù·Î ÆÄÀÏÀ» unlink() Çϱ⠶§¹®¿¡ ·¹À̽ºÄÁµð¼ÇÀÇ ¹ß»ýÀ» ÇÇÇÒ ¼ö ÀÖ´Ù. ⼔ Àӽà ÆÄÀÏÀÇ À̸§À» ¿¹ÃøÇÒ ¼ö ÀÖ´Â À̸§À¸·Î »ý¼ºÇÏÁö ¸»°í ·£´ýÇÏ°Ô »ý¼ºÇ϶ó. - mkstemp() ÇÔ¼öÀÇ »ç¿ë int mkstemp(char *template); mkstemp() ÇÔ¼ö´Â ¸Å°³º¯¼ö·Î Àӽà ÆÄÀÏÀÇ Çü½ÄÀ» ÀÔ·Â¹Þ¾Æ ·£´ýÇÑ °ªÀ» ÀÌ¿ëÇÏ¿© ·£´ýÇÑ Àӽà ÆÄÀÏ À̸§À» »ý¼ºÇÑ´Ù. fd = mkstemp("/tmp/tempfileXXXXXX"); ¶ÇÇÑ ÀÌ ÇÔ¼ö´Â Àӽà ÆÄÀÏÀ̸§ÀÇ »ý¼º°ú ÆÄÀÏÀÇ ¿±â »çÀÌ¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Â ·¹À̽ºÄÁµð¼Ç ¿À·ù¸¦ ¹æÁöÇÒ ¼ö ÀÖ´Ù. - mktemp() ÇÔ¼öÀÇ »ç¿ë char *mktemp(char *template); mktemp() ÇÔ¼öµµ mkstemp() ÇÔ¼ö¿Í °°ÀÌ Àӽà ÆÄÀÏÀÇ Çü½ÄÀ» ¸Å°³º¯¼ö·Î ÀÔ·Â¹Þ¾È ·£´ýÇÑ ÆÄÀÏ À̸§À» »ý¼ºÇÑ´Ù. ±×·¯³ª ´ëºÎºÐÀÇ ½Ã½ºÅÛÀÌ ·£´ý°ªÀ¸·Î PID¸¦ »ç¿ëÇϱ⠶§¹®¿¡ ÆÄÀÏÀÇ À̸§À» ½±°Ô ¿¹ÃøÇÒ ¼ö ÀÖ¾î ·¹À̽ºÄÁµð¼Ç °ø°ÝÀ» ¹Þ±â ½±´Ù. filename = mktemp("/tmp/tempfileXXXXXX"); ¶ÇÇÑ ÀÌ ÇÔ¼ö´Â Àӽà ÆÄÀÏÀ» »ý¼ºÇÑ ÈÄ ¹Ù·Î ÀÌ ÆÄÀÏÀ» ¿¾î¾ß ÇÑ´Ù. ¸¸¾à ´ÙÀ½°ú °°Àº È£Ãâ·Î ÆÄÀÏÀ» ¿¾úÀ» °æ¿ì open(filename, O_WRONLY|O_CREAT, 0644); ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÒÁö¶ó°í ÆÄÀÏÀ» »ý¼ºÇϱ⠶§¹®¿¡ À§ÇèÇÏ´Ù. ±×·¸±â ¶§¹®¿¡ open(filename, O_WRONLY|O_CREAT|O_EXCL, 0644); Àº ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÒ ¶§ È£ÃâÀÌ ½ÇÆÐÇϱ⠶§¹®¿¡ ´õ ¾ÈÀüÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ⼔ Àӽà ÆÄÀÏÀ» »ý¼ºÇϱâ À§ÇÑ /tmp µð·ºÅ丮 ¾È¿¡ Ãß°¡ µð·ºÅ丮¸¦ »ý¼ºÇÑ´Ù. mktemp() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© Àӽà ÆÄÀÏÀ» »ý¼ºÇÒ ¶§ ÆÄÀÏ À̸§À» µð·ºÅ丮 À̸§À¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. 3.3 /tmp µð·ºÅ丮 º¸¾È °¡. /tmp µð·ºÅ丮¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Â À§Ç輺 À¯´Ð½º ½Ã½ºÅÛ /tmp µð·ºÅ丮¿¡ ÀÓÀÇÀÇ Å©±â¸¦ °¡Áø ÆÄÀÏÀ» »ý¼ºÇϵµ·Ï Çϴµ¥ /tmp µð·ºÅ丮ÀÇ ÇÒ´ç·®À» °Ë»çÇÏÁö ¾Ê¾Æ ÇÑ »ç¿ëÀÚ°¡ /tmp µð·ºÅ丮ÀÇ ¸ðµç ¿ë·®À» »ç¿ëÇÏ¿© ´Ù¸¥ »ç¿ëÀÚ°¡ ÆÄÀÏÀ» »ý¼ºÇÒ ¼ö ¾øµµ·Ï ÇÏ´Â ¹®Á¦Á¡À» °¡Áö°í ÀÖ´Ù. ³ª. /tmp µð·ºÅ丮ÀÇ º¸¾È ¿ø¸® ⼔ /tmp µð·ºÅ丮ÀÇ ¿ë·®À» °Ë»çÇÏ¿© ÇÑ »ç¿ëÀÚ°¡ /tmp µð·ºÅ丮 ¿ë·®ÀÇ 40% ÀÌ»óÀ» Â÷ÁöÇÒ ¼ö ¾ø°Ô ÇÑ´Ù. ⼔ /tmp µð·ºÅ丮¸¦ ¸ð´ÏÅ͸µÇÏ´Â ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÏ¿© ½Ã½ºÅÛ °ü¸®ÀÚ¿¡°Ô Å뺸ÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ¥². ÀÚ¿ø º¸¾È 1. ½Ã½ºÅÛ ÀÚ¿øÀÇ ÇÒ´ç°ú ÀÚ¿ø Á¦ÇÑÀÇ Á߿伺 À¯´Ð½º ½Ã½ºÅÛ¿¡¼ ÀÚ¿ø¿¡ ´ëÇÑ ÆÄÀϽýºÅÛ ÇÒ´ç·®(filesystem Quota)°ú ÇÁ·Î¼¼½º ÀÚ¿ø Á¦ÇÑ(process resource Limit)À» µÎ´Â °ÍÀº °¢ »ç¿ëÀÚ°¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÚ¿ø¿¡ Á¦ÇÑÀ» µÎ´Â °ÍÀ¸·Î ÀúÀå(storage) ºí·Ï ¼ö³ª »ç¿ëÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ ÆÄÀÏ(inode) ¼ö¸¦ Á¦ÇÑÇÏ¿© »ç¿ëÀÚ³ª ±×·ì¿¡ ´ëÇÑ ÇѰ踦 ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ Á¦ÇÑÀº Àǹ̻óÀ¸·Î ¾à°£ÀÇ Â÷ÀÌ°¡ ÀÖ´Â 'hard'¿Í 'soft' Á¦ÇÑÀ¸·Î ³ª´ ¼ö Àִµ¥ 'hard'´Â Á¦ÇÑ¿¡ ´ëÇÏ¿© ÇѰ踦 ³ÑÀ» ¼ö ¾ø´Â Á¦ÇÑÀÌ°í 'soft' Á¦ÇÑÀº ÇÑ°èÀ» ÀÓ½ÃÀûÀ¸·Î ³ÑÀ» ¼ö ÀÖ´Â °ÍÀÌ´Ù. quota(), quotactl(), quotaon()°ú °°Àº ÇÔ¼ö¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ ÇÒ´ç·®À» Á¦ÇÑÇÏ´Â °ÍÀº ¼ºñ½º °ÅºÎ °ø°Ý(Denial of Service Attack)À» ¸·À» ¼ö ÀÖ°Ô ÇÏ´Â ÀÌÁ¡ÀÌ ÀÖ´Ù. ¶ÇÇÑ ÆÄÀÏÀÇ Å©±â(file size)³ª ÀÚ½Ä ÇÁ·Î¼¼½º(child process)ÀÇ ¼ö, open fileÀÇ ¼ö µîÀÇ ÇÁ·Î¼¼½º¿¡ ´ëÇÑ ÇÒ´çÀ» Áö¿øÇÏ´Â rlimit ¸ÞÄ¿´ÏÁòÀÌ Àִµ¥ getrlimit(), setrlimit(), getrusage() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù. 2. core ÆÄÀÏ º¸¾È º¸Åë core ÆÄÀÏÀº À¯´Ð½º ½Ã½ºÅÛ¿¡¼ ¿¹¿Ü »óȲÀÌ ¹ß»ýÇßÀ» ¶§ »ý¼ºµÇ´Â ÆÄÀÏ·Î core³ª program.core¶ó´Â À̸§À» °¡Áø´Ù. ¿¹¿Ü°¡ ¹ß»ýÇÏ´Â »óȲÀº ´ÙÀ½°ú °°´Ù. - ÇÁ·Î±×·¥ ¸Þ¸ð¸®¿¡ ħ¹ü´çÇÑ °æ¿ì - ÇÁ·Î±×·¥ ½ºÅÿ¡ ħ¹ü´çÇÑ °æ¿ì - À¯È¿ÇÏÁö ¾ÊÀº ¸Þ¸ð¸®¿¡ Á¢±ÙÇÏ´Â °æ¿ì - À߸ø Á¤·ÄµÈ ±¸Á¶Ã¼¿¡ Á¢±ÙÇÏ´Â °æ¿ì core ÆÄÀÏÀº ¿î¿µÃ¼Á¦¿¡ ÀÇÇØ ½ÇÇà ÇÁ·Î±×·¥ÀÇ ¸Þ¸ð¸®°¡ µð½ºÅ© ÆÄÀÏ¿¡ ¾²¿©Áø´Ù. core ÆÄÀÏÀº º¸Åë Æı«µÈ ÇÁ·Î±×·¥ÀÇ »óŸ¦ Á¡°ËÇϴµ¥ ÀÌ¿ëÇÑ´Ù. 2.1 core ÆÄÀÏÀÇ À§Ç輺 ⼔ ÇÁ·Î±×·¥ÀÇ ¸ðµç ¸Þ¸ð¸® ³»¿ëÀÌ ÀÌ ÆÄÀÏ¿¡ ¾²¿©Áö¹Ç·Î Áß¿äÇÏ°í °áÁ¤ÀûÀÎ Á¤º¸µîÀ» ÀúÀåÇÏ°í ÀÖ´Ù. ⼔ °ú°ÅÀÇ ¾î¶² ¿î¿µÃ¼Á¦¿¡¼´Â core ÆÄÀÏÀ» Á¡°ËÇÒ ¼ö ¾ø¾ú´Ù. ±×·¡¼ core ÆÄÀÏÀ» Áß¿äÇÑ ÆÄÀÏ¿¡ ¸µÅ©¸¦ °É¾î ³ôÀº ±ÇÇÑÀ» °¡Áø ÆÄÀÏÀ» SUID/SGID ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ´À¸·Î½á Áß¿äÇÑ ÆÄÀÏÀ» °¡Á®¿Ã ¼ö ÀÖ¾ú´Ù. 2.2 ¾ÈÀüÇÑ core ÆÄÀÏ ¿ø¸® ⼔ ¿¹¿Ü°¡ ¹ß»ýÇßÀ» °æ¿ì core ÆÄÀÏÀ» »ý¼ºÇÏÁö ¸øÇÏ°Ô Á¦ÇÑÇÏ´Â setrlimit() ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. int setrlimit(int recource, const struct rlimit *rlp); ÀÌ ÇÔ¼ö´Â RLIMIT_CORE¶ó´Â ÀÚ¿øÀÇ Å¸ÀÔÀ» »ç¿ëÇÏ¿© »ý¼ºµÇ´Â core ÆÄÀÏÀÇ Å©±â¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ±×·¡¼ ÆÄÀÏÀÇ Å©±â¸¦ 0À¸·Î ¼³Á¤Çϸé core ÆÄÀÏÀº »ý¼ºµÇÁö ¾Ê´Â´Ù. <ÇÁ·Î±×·¥-1> core ÆÄÀÏÀÌ »ý¼ºµÇÁö ¾Ê´Â ÇÁ·Î±×·¥
¥³. ÀԷ°ª Æò°¡ ÀÔ·ÂµÈ °ªÀ¸·Î ÀÎÇÏ¿© °ø°ÝÀڷκÎÅÍ °ø°ÝÀ» ¹ÞÀ» ¼ö ÀÖ´Ù. ±×·¡¼ ÀÔ·ÂµÈ °ªÀº ±× °ªÀÌ »ç¿ëµÇ±â Àü¿¡ Á¦°ÅµÇ¾î¾ß Çϴµ¥ ÀÌ Àå¿¡¼´Â ½Å·ÚÇÒ ¼ö ¾ø´Â °ªÀÌ ÀԷµǴ ¹æ¹ýÀ» ¾Ë¾Æº¸°í °¢ ÀÔ·ÂÀ» ó¸®ÇÏ¿© ¾ÈÀüÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ¹æ¹ýÀ» Á¦½ÃÇÏ°íÀÚ ÇÑ´Ù. ÀԷ°ªÀ» ó¸®Çϱâ À§Çؼ´Â ¸ÕÀú ¾î¶² °ªÀÌ ÀûÇÕÇÑÁö ±ÔÄ¢À» Á¤ÇØ¾ß ÇÑ´Ù. ±×·¡¼ ÀԷ°ªÀÌ Á¤ÀÇµÈ ±ÔÄ¢¿¡ ¸ÂÁö ¾ÊÀ¸¸é Á¦°ÅÇÏ°í ±ÔÄ¢¿¡ ÇÕ´çÇÑ °ª¸¸À» ÀÔ·Â¹Þ¾Æ¾ß ÇÑ´Ù. ±×·±µ¥ ¿ªÀ¸·Î ÀûÇÕÇÏÁö ¾ÊÀº °ªÀ» Á¤ÇÏ°í(what is illegal?) ±ÔÄ¢¿¡ ¸ÂÁö ¾Ê´Â, ÀûÇÕÇÑ °ªÀ» Á¦°ÅÇÏ´Â ¹æ¹ýÀº »ý°¢ÇÏÁö ¸øÇß´ø Ä¡¸íÀûÀÎ ¿À·ùµéÀ» ±×³É Áö³ªÄ¥ ¼ö ÀÖÀ¸¹Ç·Î ÀÌ·± ¹æ¹ýÀ¸·Î ±ÔÄ¢À» Á¤ÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. ¶Ç »ý°¢ÇØ¾ß ÇÒ °ÍÀº ÀԷµǴ °ªÀÇ ÃÖ´ë ±æÀÌ¿¡ Á¦ÇÑÀ» µÎ´Â °ÍÀÌ´Ù. Á¦ÇÑÀ» µÎÁö ¾ÊÀº ÀԷ°ªÀº ´ëÇ¥ÀûÀÎ °ø°Ý ¹æ¹ýÀÎ ¹öÆÛ¿À¹öÇ÷οì Ãë¾àÁ¡ÀÇ ¿øÀÎÀÌ µÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù. 1. ¸í·É¾î ¶óÀÎ º¸¾È ¸¹Àº ÇÁ·Î±×·¥Àº Àμö(argument)·Î Àü´ÞµÈ ÀԷ°ªÀ» ¹Þ¾ÆµéÀÌ´Â ¸í·É¾î ¶óÀÎ(command line)À» Á¦°øÇÑ´Ù. ±×·±µ¥ SUID/SGID ÇÁ·Î±×·¥Àº ½Å·ÚÇÒ ¼ö ¾ø´Â »ç¿ëÀÚ°¡ ¸í·É¾î ¶óÀÎ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¾ÈÀüÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î SUID/SGID ÇÁ·Î±×·¥Àº ¸í·É¾î ¶óÀÎ ÀԷ°ª¿¡ ´ëÇÏ¿© È®ÀÎÇØ¾ß ÇÏ°í ¸í·É¾î ¶óÀÎ ¸Å°³º¯¼ö¿¡ ÀÇÇØ Àü´ÞµÈ ÇÁ·Î±×·¥ÀÇ À̸§À» ¹ÏÁö ¸»¾Æ¾ß ÇÑ´Ù. 2. ¸®ÅÏ °ª º¸¾È ¿¡·¯ »óŸ¦ ¸®ÅÏÇÒ ¼ö ÀÖ´Â ¸ðµç ½Ã½ºÅÛ È£Ãâ ÇÔ¼ö´Â Á¦ÇÑµÈ ÀÚ¿øÀ» ¿ä±¸Çϰųª »ç¿ëÀÚ°¡ ÀÚ¿ø¿¡ ¿µÇâÀ» ¹ÌÄ¥ ¼ö ÀÖÀ¸¹Ç·Î Ç×»ó ¿¡·¯ »óŸ¦ °Ë»çÇØ¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ º¸¾È ±â´ÉÀ¸·Î Setuid/Setgid ÇÁ·Î±×·¥Àº ÀÚ¿øÀÇ »ç¿ëÀ» Á¦ÇÑÇÏ´Â ÇÔ¼öÀÎ setrlimit()³ª ½ºÄÉÁÙ¸µ ¿ì¼±±Ç(priority)À» Á¶ÀýÇÏ¿© ¸í·É¾î¸¦ ½ÇÇàÇÏ´Â nice() ÇÔ¼ö¸¦ ÇÁ·Î±×·¥»ó¿¡¼ »ç¿ëÇÒ ¼ö ¾øµµ·Ï Á¦ÇÑÇÑ´Ù. ¶ÇÇÑ ¼¹öÇÁ·Î±×·¥ÀÇ ¿ÜºÎ »ç¿ëÀÚ¿Í CGI ½ºÅ©¸³Æ®´Â ¸¹Àº request ¿ä±¸ÇÏ¿© ÀÚ¿øÀÌ °í°¥µÇµµ·Ï ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÀÌ¿¡ ´ëÇÑ Ã³¸®µµ ÇØÁÖ¾î¾ß ÇÑ´Ù. 3. À¯È¿°ª(Valid Value) Á¦ÇÑ popen()À̳ª system()°ú °°Àº ½Ã½ºÅÛ È£Ãâ ÇÔ¼ö´Â ¸í·É¾î ½©(command shell)À» È£ÃâÇÏ¿© ½ÇÇàµÇ´Âµ¥ ÀÌ ÇÔ¼öµéÀº ¸ÞŸ¹®Á¦(metacharacter)¿¡ ÀÇÇØ ¿µÇâÀ» ¹Þ´Â´Ù. ¶ÇÇÑ execlp()¿Í execvp() ÇÔ¼öµµ ½©ÀÌ È£ÃâµÈ´Ù. ½©ÀÌ È£ÃâµÇ¸é ¸ÞŸ¹®Àڴ Ưº°ÇÑ Àǹ̸¦ °¡Áö°í Çؼ®µÈ´Ù. ±×·¡¼ ÀÌ·± ¸ÞŸ¹®ÀÚ°¡ ÀÔ·ÂµÇ¾î ½©¿¡ º¸³»Áö¸é ÇÁ·Î±×·¥À» Æı«ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¸ÞŸ¹®Á¦¸¦ Á¦°ÅÇØ¾ß ÇÑ´Ù. ½©¿¡¼ Ưº°ÇÑ Àǹ̸¦ °®´Â ¸ÞŸ¹®ÀÚ´Â ´ÙÀ½°ú °°´Ù.
! !Àº "not"ÀÇ Àǹ̸¦ °¡Áö°í ¶Ç ¸í·É¾î history¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. bash¿¡¼´Â »óÈ£¸ðµå¿¡¼ ½ÇÇàÇÏÁö¸¸ tcsh¿¡¼´Â ½ºÅ©¸³Æ®·Î ÀνĵǹǷΠ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù. # ÁÖ¼®¹®À¸·Î ¸ðµç ÅؽºÆ®°¡ ¹«½ÃµÈ´Ù. - ¿É¼ÇÀ¸·Î À߸ø ÀÎ½ÄµÉ ¼ö ÀÖµµ ÀÖ°í ¸¸¾à ÆÄÀÏÀÇ À̸§¿¡¼ »ç¿ëµÈ´Ù¸é ½©ÀÌ °ø¹é¹®ÀÚ·Î ÀνÄÇÒ ¼ö ÀÖ¾î ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù. ' ' °ø¹é¹®ÀÚ´Â ÆÄÀÏÀ̸§À» ¿©·¯°³ÀÇ Àμö(argument)·Î ÀνÄÇÒ ¼ö ÀÖ´Ù. '.'°ú '=' ÇöÀç ½©¿¡¼ ½ÇÇàµÈ´Ù´Â ÀǹÌÀÇ '.'°ú º¯¼ö ¼³Á¤½Ã »ç¿ëµÇ´Â '='ÀÇ »ç¿ëÀÌ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù. ¥´. ȯ°æº¯¼ö º¸¾È ÇÁ·Î±×·¥¿¡¼ ȯ°æº¯¼ö¸¦ »ç¿ëÇÒ ¶§¿¡´Â ȯ°æº¯¼ö¿¡ ÀÇÁ¸Çؼ´Â ¾ÈµÈ´Ù. Áï, ȯ°æº¯¼öÀÇ °ªÀ» °¡Á¤ÇÏÁö ¸»¾Æ¾ß ÇÏ°í ¾Æ´Ï¸é ¸ðµç ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÏ´Â °ÍÀÌ ¾ÈÀüÇÏ´Ù. ¶ÇÇÑ ÇÁ·Î±×·¥¿¡ Á¤º¸(ȯ°æº¯¼ö)¸¦ Àü´ÞÇØ¾ß ÇÑ´Ù¸é ÇÊ¿äÇÑ È¯°æº¯¼ö¸¦ Å×½ºÆ®ÇÏ°í »ç¿ëÈÄ¿¡´Â ¿ÏÀüÈ÷ »èÁ¦Çϵµ·Ï ÇÑ´Ù. 1. ȯ°æº¯¼ö ¼³Á¤ÀÇ À§Ç輺 ⼔ ¹öÆÛ¿À¹öÇÃ·Î¿ì º¸¾È ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ȯ°æº¯¼ö¿¡ ÀÇÇÑ ¹öÆÛ¿À¹öÇÃ·Î¿î º¸¾È ¹®Á¦°¡ °¡Àå ÈçÇÏ°Ô ¹ß»ýÇÏ´Â º¸¾È ¹®Á¦·Î <ÇÁ·Î±×·¥-2> ȯ°æº¯¼ö »ç¿ëÀÇ ¹öÆÛ¿À¹öÇ÷οì
ÀÌ ÇÁ·Î±×·¥Àº ȯ°æº¯¼ö HOMEÀÇ Å©±â¸¦ °í·ÁÇÏÁö ¾Ê°í ±×³É 128 byte ¹öÆÛ¿¡ º¹»çÇÔÀ¸·Î ¹öÆÛ¿À¹öÇÃ·Î¿ì º¸¾È ¹®Á¦°¡ ¹ß»ýÇÒ °æ¿ì¸¦ º¸¿©ÁÖ°í ÀÖ´Ù. ⼔ »ó¼Ó¿¡ ÀÇÇÑ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ÀÚ½Ä ÇÁ·Î¼¼½º¿¡°Ô ȯ°æº¯¼ö°¡ »ó¼ÓµÇ¹Ç·Î ȯ°æº¯¼ö¸¦ ÀÚ½Ä ÇÁ·Î¼¼½º¿¡°Ô Àü´ÞÇÒ ¶§ ÁÖÀÇÇØ¾ß ÇÑ´Ù. ⼔ À߸ø »ç¿ëÇÑ °æ¿ì À§ÇèÇÒ ¼ö ÀÖ´Ù. IFS´Â command line¿¡¼ Àμö(argument)µéÀ» ºÐ¸®ÇÏ´Â ¹®ÀÚ¸¦ ³ªÅ¸³»´Â ȯ°æº¯¼ö·Î ÈçÈ÷ " "(°ø¹é¹®ÀÚ)¸¦ »ç¿ëÇϴµ¥ »ç¿ëÀڵ鿡°Ô Ä£±ÙÇÏÁö ¾ÊÀº ¹®ÀÚ·Î ¼³Á¤µÈ °æ¿ì ½©À» È£ÃâÇÏ´Â ¸í·É(C¿¡¼ÀÇ system, popenÀ̳ª Perl¿¡¼ back-tick ¸í·É¾î)À» ½ÇÇàÇÏ¿© ½©À» Æı«ÇÒ ¼ö ÀÖ´Ù. ⼔ ¹®¼È°¡ Á¦´ë·Î µÇÁö ¾Ê¾Æ¼ ½Ã½ºÅÛ¿¡ Àͼ÷ÇÏÁö ¾ÊÀº »ç¿ëÀÚ´Â ÀÌ·± ȯ°æº¯¼ö¸¦ Àß ¸ð¸£´Â °æ¿ì°¡ ÀÖ´Ù. ⼔ ¹®¼È°¡ Àß µÇ¾î ÀÖ´õ¶óµµ ȯ°æº¯¼ö°¡ ¼öÁ¤µÉ ¼ö ÀÖ¾î À§ÇèÇÏ´Ù. 2. ȯ°æº¯¼ö ÀúÀå Çü½Ä ÇÁ·Î±×·¥ÀÌ È¯°æº¯¼ö¿¡ Á¢±ÙÇϱâ À§Çؼ´Â Ç¥ÁØ Á¢±Ù ¹æ¹ýÀ» »ç¿ëÇÑ´Ù. getenv(), putenv(), setenv(), unsetenv()°ú °°Àº ÇÔ¼öµéÀ» ÀÌ¿ëÇÏ¿© ȯ°æº¯¼ö¸¦ ¼öÁ¤Çϰųª ¼³Á¤ÇÒ ¼ö Àִµ¥ execve() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ÇÁ·Î±×·¥¿¡ Àü´ÞµÇ´Â ȯ°æº¯¼öÀÇ µ¥ÀÌÅÍ ¿µ¿ªÀ» Á¦¾îÇÒ ¼ö ÀÖ¾î¼ À§ÇèÇÏ´Ù. Linux ½Ã½ºÅÛÀÇ environ º¯¼ö´Â ȯ°æº¯¼ö°¡ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö º¸¿©ÁÖ´Â º¯¼ö·Î extern char **environ; À§¿Í °°Àº Çü½ÄÀ» °¡Áö°í ÀÖ´Ù. ÀÌ environ º¯¼ö¿¡ ÀúÀåµÇ´Â °ªÀº NAME=value¶ó´Â ÇüÅÂÀÇ ½ºÆ®¸µÀε¥ ȯ°æº¯¼öÀÇ À̸§µéÀÌ = »çÀÎÀ» Æ÷ÇÔÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ°í À̸§(NAME)À̳ª °ª(value)ÀÌ NIL ¹®ÀÚ¸¦ ³»Æ÷ÇÏ°í ÀÖÁö ¾ÊÀ» ¼öµµ ÀÖ¾î À§ÇèÇÏ´Ù. ¶ÇÇÑ °°Àº À̸§À» °¡Áö°í ´Ù¸¥ °ªÀ» °®´Â º¯¼öµéÀÌ Á¸ÀçÇÏ¿© execve()¸¦ »ç¿ëÇÏ¿© À§ÇèÇÑ »óȲÀÌ ½ÇÇàµÇ°Ô ÇÒ ¼öµµ ÀÖ´Ù. 3. ȯ°æº¯¼ö ¹®Á¦ÀÇ º¸¾È ¿ø¸® ¾ÈÀüÇÑ SUID/SGID ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§Çؼ´Â ÀԷ°ªÀ¸·Î ÀԷµǴ ȯ°æº¯¼öµéÀ» Á¦°ÅÇÏ°í ¸ðµç ȯ°æº¯¼ö¸¦ »èÁ¦ÇÑ ÈÄ ÇÊ¿äÇÑ È¯°æº¯¼ö´Â ¾ÈÀüÇÏ°Ô ´Ù½Ã ¼³Á¤ÇØ¾ß ÇÑ´Ù. ¸ðµç ¾ÈÀüÇÏÁö ¾ÊÀº ȯ°æº¯¼ö¸¦ ¾Ë ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾ø±â ¶§¹®¿¡ ÇÁ·Î±×·¥ÀÇ ¼Ò½º Äڵ带 ´Ù È®ÀÎÇÑ´Ù ÇÏ´õ¶óµµ ´Ù½Ã ¼öÁ¤µÉ ¼ö ÀÖÀ¸¹Ç·Î ¾ÈÀüÇÏÁö ¾Ê´Ù. 3.1 ȯ°æº¯¼ö¸¦ Áö¿ì´Â ¹æ¹ý ⼔ environ º¯¼ö¸¦ NULL·Î ¼³Á¤ÇÑ´Ù. environ º¯¼ö´Â unistd.h¿¡ Á¤ÀǵǾî ÀÖ°í ÀÌ Çì´õÆÄÀÏÀÇ environ º¯¼ö¸¦ ¼öÁ¤ÇÏ¿© ½ÇÇàÇϵµ·Ï ÇÑ´Ù. ⼔ clearenv() ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. clearenv()´Â stdlib.h Çì´õÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ°í »ç¿ëÀü¿¡ _USE_MISCÀÌ #define µÇ¾î¾ß ÇÑ´Ù. ¥µ. ¹öÆÛ¿À¹öÇÃ·Î¿ì º¸¾È ´ëºÎºÐ ¹ß»ýÇÏ´Â º¸¾È °áÁ¡Àº ¹öÆÛ¿À¹öÇÃ·Î¿ì ¹®Á¦ÀÌ´Ù. ¹öÆÛ¿À¹öÇ÷οì´Â ±â¼úÀûÀ¸·Î ÇÁ·Î±×·¥ ³»ºÎÀÇ ½ÇÇà ¹®Á¦¿¡¼ ¹ß»ýÇϴµ¥ ÀÌ ¹®Á¦´Â °¡Àå ÀϹÝÀûÀ̸鼵µ ½É°¢ÇÑ ¹®Á¦À̱⵵ ÇÑ´Ù. CERT¿¡¼´Â 1998°ú 1999³âºÎÅÍ °è¼Ó ³íÀÇµÇ¾î ¿Ô°í Bugtraq¿¡ ¿Ã¶ó¿À´Â ÀÀ´äÀÇ 2/3°¡ ¹öÆÛ¿À¹öÇÃ·Î¿ì ¹®Á¦Àϸ¸Å ¿À·¡µÇ°í Àß ¾Ë·ÁÁ³Áö¸¸ °è¼ÓÇؼ À̽´°¡ µÇ°í ÀÖ´Â ¹®Á¦ÀÌ´Ù. ¹öÆÛ¿À¹öÇ÷οì´Â °íÁ¤µÈ ±æÀÌÀÇ ¹öÆÛ¿¡ °ªÀ» ¾µ ¶§ ¹öÆÛÀÇ °æ°è°ªÀ» ³Ñ¾î¼¸é¼ ¹ß»ýÇϴµ¥ »ç¿ëÀÚ ÀÔ·Â °ªÀ» ÀÐÀ» ¶§³ª ÇÁ·Î±×·¥³»¿¡¼ ó¸®ÇÏ´Â Áß°£¿¡ ¹ß»ýÇϱ⵵ ÇÑ´Ù. ¾ÈÀüÇÑ ÇÁ·Î±×·¥ÀÌ ÀÌ·± ¹öÆÛ¿À¹öÇ÷ο츦 Çã¿ëÇϸé C¿Í °°Àº ¾ð¾î¿¡¼´Â °ø°ÝÀÚ°¡ ÀÛ¼ºÇÑ ¾ÇÀÇÀûÀÎ Äڵ带 °Á¦·Î ½ÇÇàÇÏ°Ô Ä¡¸íÀûÀÎ ÇÇÇظ¦ ÀÔÀ» ¼ö ÀÖ´Ù. ¹öÆÛ¿À¹öÇ÷οì Ãë¾àÁ¡À» "stack smashing"À̶ó°í ºÎ¸£°í Èü¹öÆÛ¿¡¼ ¹ß»ýÇÏ´Â ¿À¹öÇ÷ο쵵 °£°£ÀÌ ¹ß»ýÇÏ°í ÀÖ´Ù. ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â ¹öÆÛ¿À¹öÇÃ·Î¿ì ¹®Á¦¿¡ ´ëÇÑ ¸é¿ª±â´ÉÀ» °¡Áö°í ÀÖ´Ù. PerlÀº ÀÚµ¿À¸·Î ¹è¿ÀÇ Å©±â¸¦ ´Ù½Ã °è»êÇÏ°í Ada95´Â ¹öÆÛ¿À¹öÇ÷ο츦 ŽÁöÇÏ¿© ¸·´Â´Ù. ±×·¯³ª C ¾ð¾î¿Í C++´Â ¹öÆÛ¿À¹öÇÃ·Î¿ì ¹®Á¦¿¡ ´ëÇÏ¿© ¾î¶°ÇÑ º¸È£±â´Éµµ Á¦°øÇÏÁö ¾Ê¾Æ¼ ¹®Á¦°¡ µÇ°í ÀÖ´Ù. 1. ¾ÈÀüÇÑ ÇÔ¼ö »ç¿ëÀ¸·ÎÀÎÇÑ ÇØ°áÃ¥ C¾ð¾î³ª C++ÀÇ ±¸Á¶»ó °æ°è°ªÀ» ³Ñ´Â °ÍÀ» Â÷´ÜÇÏÁö ¸øÇϹǷΠÇÁ·Î±×·¡¸Ó´Â °æ°è°ªÀ» üũÇÏ´Â ¾Ê´Â ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê¾Æ¾ß ÇÑ´Ù. strcpy(), strcat(), sprintf()(vsprintf()), gets()¿Í °°Àº ÇÔ¼ö´Â °æ°è°ª üũ¸¦ ÇÏÁö ¾ÊÀ¸¹Ç·Î strncpy(), strncat(), snprintf(), fget()°ú °°Àº ÇÔ¼ö·Î ´ëüÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ scanf °è¿ÀÇ ÇÔ¼öµé¿À À§ÇèÇϹǷΠÃÖ´ë ÀԷ¹ÞÀ» ¼ö ÀÖ´Â ½ºÆ®¸µÀÇ ±æÀÌ Á¦ÇÑ ¾øÀÌ »ç¿ëÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù. realpath()³ª getopt()°ú °°Àº ÇÔ¼öµµ ÃÖ¼ÒÇÑÀÇ PATH_MAX ¹ÙÀÌÆ® ±æÀ̸¦ Á¤ÇØÁÖ´Â getwd() ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¾ÈÀüÇÏ´Ù.[Ç¥ ]
2. °¢ ÇÔ¼öÀÇ ¾ÈÀüÇÑ »ç¿ë ⼔ strcpy() strcpy() ÇÔ¼ö´Â ¹öÆÛÀÇ Å©±â¸¦ Æò°¡ÇÏÁö ¾Ê¾Æ ¹®Á¦°¡ ¹ß»ýÇϹǷΠº¹»çÇÒ µ¥ÀÌÅÍÀÇ Å©±â¸¦ ¹Ì¸® °Ë»çÇÏ´Â strncpy() ÇÔ¼ö¸¦ ´ë½Å »ç¿ëÇÒ ¼ö ÀÖ´Ù. strncpy() ÇÔ¼ö´Â NULL ¹®ÀÚ·Î ³¡³»¾ß Çϴµ¥ ¼Ò½ºÀÇ ¹öÆÛ Å©±â°¡ º¹»çÇÒ ¹öÆÛº¸´Ù Å©°Å³ª °°À¸¸é NULL·Î ³¡³ªÁö ¾ÊÀ» ¼ö Àֱ⠶§¹®ÀÌ´Ù.
⼔ strcat() strcat() ÇÔ¼öµµ strcpy() ÇÔ¼ö¿Í ºñ½ÁÇÏ°Ô Ã·°¡ÇÒ ½ºÆ®¸µÀÇ ±æÀ̸¦ °Ë»çÇÏÁö ¾Ê¾Æ ¹®Á¦°¡ ¹ß»ýÇÏ°í ´ë½Å strncat() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¸í½ÃÇÑ ±æÀ̸¸Å ¿ø·¡ÀÇ ½ºÆ®¸µ¿¡ µ¡ºÙÀδÙ. ±×¸®°í NULL ¹®ÀÚ·Î ³¡³´Ù.
⼔ sprintf() sprintf() ÇÔ¼ö´Â Æ÷¸Ë ½ºÆ®¸µ º¯¼ö°¡ »ç¿ëµÉ ¶§ ¹öÆÛ¿À¹öÇÃ·Î¿ì ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ°í ¹öÆÛ¿¡ Ãâ·ÂµÇ´Â µ¥ÀÌÅÍÀÇ ±æÀ̸¦ Á¦ÇÑÇϱâ À§ÇØ snprintf() ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼ö´Â µ¥ÀÌÅÍÀÇ ±æÀÌ°¡ ¹öÆÛº¸´Ù ´õ Å©¸é ¹öÆÛ¿¡ ¾î¶² °Íµµ ±â·ÏÇÏÁö ¾Ê´Â´Ù. snprintf() ÇÔ¼öÀÇ ¸®ÅÏ°ªÀ» È®ÀÎÇÏ¿© ¹öÆÛ¿¡ ¾²¿©Áø °ªÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
⼔ gets() gets() ÇÔ¼ö´Â ±æÀ̸¦ ¸í½ÃÇÏ´Â ºÎºÐÀÌ ³ª¿Í ÀÖÁö ¾ÊÀ¸¹Ç·Î ¿À¹öÇÃ·Î¿ì ¹®Á¦°¡ Ç×»ó ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â new-lineÀ̳ª EOF¸¦ ¸¸³ª°Å³ª ¹öÆÛ°¡ ´Ù Âû ¶§±îÁö Ç¥ÁØ ÀԷ°ªÀ» Àд´Ù. fgets() ÇÔ¼ö´Â n-1 °³ÀÇ ¹®ÀÚ¸¦ Àд´Ù.
⼔ scanf(), sscanf(), fscanf() ÁöÁ¤µÈ Å©±âÀÇ ¹öÆÛ¸¦ ÀоîµéÀ̴µ¥ ÀоîµéÀÏ ¼ö ÀÖ´Â ÃÖ°íÀÇ ¹öÆÛ ±æÀ̸¦ ¸í½ÃÇØ¾ß ÇÑ´Ù.
⼔ memcpy() ¿ÜºÎÀÇ ÀÚ·á¿¡ÀÇÇؼ memcpy() ÇÔ¼ö¿¡¼ ¸í½ÃµÈ ±æÀÌ°¡ ¹Ù²ð ¶§ ¹öÆÛ¿À¹öÇÃ·Î¿ì ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù.
ÀÌ°ÍÀº ½ÇÁ¦·Î BIND¿¡¼ ³ªÅ¸³ Ãë¾àÁ¡À¸·Î hp->h_lengthÀÇ ±æÀ̸¸Å address º¯¼ö¿¡ º¹»çÇϴµ¥ hp->h_length º¯¼ö´Â ÀÎÅÍ³Ý ÁÖ¼ÒÀÇ Å©±âÀ̹ǷΠ4 byteÀÌ´Ù. ±×·±µ¥ °ø°ÝÀÚ°¡ À§Á¶µÈ DNS reply¸¦ ½ºÇªÇÎÇÒ ¼ö ÀÖ´Ù¸é h_lengthÀÇ °ªÀº ´õ Ä¿Á®¼ address º¯¼ö¿¡ ´õ ¸¹Àº µ¥ÀÌÅÍ°¡ º¹»çµÇ¾î ¹öÆÛ¿À¹öÇ÷ο찡 ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀ» À§ÀÇ Ç¥¿¡¼Ã³·³ ±æÀ̸¦ °Ë»çÇÑ ÈÄ º¹»çÇÑ´Ù¸é ÇØ°áÇÒ ¼ö ÀÖ´Ù. 3. ´õ »ý°¢ÇØ¾ß ÇÒ ¹®Á¦ À§ÀÇ [Ç¥-2]¿¡¼Ã³·³ Ãë¾àÇÑ ÇÔ¼ö¸¦ ¾ÈÀüÇÑ ´ëü ÇÔ¼ö·Î ¹Ù²å´Ù°í ¹öÆÛ¿À¹öÇ÷οìÀÇ ¸ðµç ¹®Á¦°¡ ÇØ°áµÇ´Â °ÍÀº ¾Æ´Ï¶ó´Â »ç½ÇÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. ⼔ snprintf()¿Í °°Àº ÇÔ¼ö´Â ISO 1990(ANSI 1989)ÀÇ Ç¥ÁØ C ÇÔ¼ö°¡ ¾Æ´Ï´Ù. ±×·¡¼ ´ëºÎºÐÀÇ ½Ã½ºÅÛÀÌ sprintf()ÇÔ¼ö´Â Áö¿øÇÏ´õ¶óµµ snprintf() ÇÔ¼ö´Â Áö¿øÇÏÁö ¾ÊÀ» ¼ö ÀÖ°í Áö¿øÇÑ´Ù°í ÇÏ´õ¶óµµ snprintf() ÇÔ¼ö°¡ ¹Ù·Î sprintf() ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï µÇ¾î ÀÖ¾î ¹öÆÛ¿À¹öÇÃ·Î¿ì ¹®Á¦¿¡ ´ëÇÑ º¸È£±â´ÉÀ» Á¦´ë·Î ÇØÁÖÁö ¸øÇÏ´Â °æ¿ìµµ ÀÖ´Ù. ¾î¶² ¹öÀüÀÇ snprintf() ÇÔ¼ö¿¡¼´Â NULL ¹®ÀÚ·Î ³¡³ªµµ·Ï º¸ÀåÇÏÁö ¾Ê¾Æ ±ä ½ºÆ®¸µÀÌ ÀԷµǸé NULL ¹®ÀÚ·Î ³¡³ªÁö ¾ÊÀ» ¼öµµ Àִµ¥ glib ¶óÀ̺귯¸®¿¡¼´Â Ç×»ó NULL ¹®ÀÚ·Î ³¡³ª´Â g_snprintf() ÇÔ¼ö¸¦ Áö¿øÇÑ´Ù. ⼔ strlen() ÇÔ¼ö´Â NULL ¹®ÀÚ¸¦ ¸¸³¯ ¶§±îÁö ¹®ÀÚ¿ÀÇ ¼ö¸¦ °è»êÇϴµ¥ NULL ¹®ÀÚ·Î ³¡³ªÁö ¾Ê´Â ¹®ÀÚ¿À» ÀԷ¹ÞÀ» ¶§´Â ó¸®ÇÏÁö ¸øÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÁÖÀÇÇØ¾ß ÇÑ´Ù. 4. C++ÀÇ ¹öÆÛ¿À¹öÇÃ·Î¿ì ¹®Á¦ C++ ¾ð¾îµµ ºÎ°¡ÀûÀÎ º¸¾È ¹®Á¦Á¡À» °¡Áö°í Àִµ¥ C ÄÚµåÀÇ gets() ÇÔ¼ö¿Í °°Àº ¹öÆÛ¿À¹öÇÃ·Î¿ì °ø°ÝÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. char buf[128]; cin >> buf; À§ÀÇ ÇÔ¼ö´Â ¹®ÀÚ¸¦ ÀÐÀ» ¶§ ¾î¶² ±æÀÌ °Ë»çµµ ÇÏÁö ¾Ê¾Æ¼ ¹öÆÛ¿À¹öÇÃ·Î¿ì º¸¾È ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ¹öÆÛÀÇ ÃÖ´ë ÀÔ·Â ±æÀ̸¦ ¾Ë±â À§Çؼ´Â cin.width() ¸â¹öÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¥¶. ·¹À̽ºÄÁµð¼Ç º¸¾È Á¢±Ù ±ÇÇÑÀ» Æı«Çϰųª ÆÄÀÏ »ý¼ºÀ» Æı«ÇÒ ¼ö ÀÖ´Â ¹®Á¦¸¦ °¡Áö´Â °æÀï »óÅ°¡ º¸¾È ¹®Á¦¸¦ ¹ß»ý½Ãų ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ °æÀï »óÅ´ ´ÙÀ½°ú °°Àº »óȲ¿¡¼ ¹ß»ýÇÑ´Ù. - Á¢±Ù ±ÇÇÑ Ã¼Å©³ª »óÅ üũ´Â ÆÄÀϸíÀ» ÀÌ¿ëÇÒ ¶§ ¹ß»ýÇÑ´Ù. - ÆÄÀÏ ¸í·ÉÀº °°Àº ÆÄÀÏÀ̸§ÀÇ ¸í·É¾î¸¦ ÅëÇØ ½ÇÇàµÈ´Ù. ¿©±â¼ ÀϾ´Â ¹®Á¦´Â ù ¹ø°¿Í µÎ¹ø° ¸í·É¾î »çÀÌ¿¡ Á¢±Ù ±ÇÇÑÀ̳ª »óÅ üũ¸¦ üũÇϰųª ´Ù¸¥ ÆÄÀÏÀÌ ÆÄÀÏ ¸í·É¾î¸¦ ÂüÁ¶ÇÒ ¶§ °ø°ÝÀÚ°¡ ÆÄÀÏÀ» À§Á¶ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î ÀÌ Å¸ÀÔÀÇ °ø°ÝÀº ÇÁ·Î±×·¥ÀÇ ºÒ¾ÈÁ¤À» ÀÌ¿ëÇϱâ À§ÇØ ½Éº¼¸¯ ¸µÅ©¸¦ ÀÌ¿ëÇÑ´Ù. ºÒ¾ÈÁ¤ÇÑ setuid ÀÖ´Â ·çÆ® ÇÁ·Î±×·¥ ¼Ò½ºÄÚµåÀÇ ÀϺκÐÀ» ¿¹·Î º¸ÀÚ. <ÇÁ·Î±×·¥-9> ·¹À̽ºÄÁµð¼ÇÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Â ÇÁ·Î±×·¥
À§ÀÇ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº Ư¡À» °¡Áö°í ÀÖ´Ù. ¨ç ÆÄÀϸíÀÌ Á¸ÀçÇÏ´ÂÁö üũÇÏ°í, ±× ÆÄÀÏÀÌ ·çÆ® ¼ÒÀ¯°¡ È®½ÇÇϸé ÆÄÀÏÀ» ¸¸µç´Ù. ¨è ÆÄÀÏÀ» ¿¬´Ù. µÎ °³ÀÇ ºÐ¸®µÈ ½Ã½ºÅÛ È£ÃâÀÌ ÀϾ´Âµ¥ µÎ °³ÀÇ ¸í·É »çÀÌ¿¡ ½Ã°£ Áö¿¬ÀÖ´Ù. ÀÌ ½Ã°£ Áö¿¬³»¿¡¼ ÆÄÀÏ°ú ½Ã½ºÅÛ Æ¯Â¡À» ¹Ù²Ù´Â °ÍÀÌ °¡´ÉÇÏ´Ù. °ø°ÝÀÚ´Â ¾Æ·¡ÀÇ ¹æ¹ýÀ¸·Î °¡´ÉÇÏ°Ô µÈ´Ù. ¨ç ·çÆ® ±ÇÇÑÀÇ ÆÄÀÏ(/etc/passwd)À» ½Éº¼¸¯ ¸µÅ©(/tmp/filename)·Î »ý¼ºÇÒ ¼ö ÀÖ´Ù. ¨è stat()´Â ½Éº¼¸¯ ¸µÅ©¸¦ ÅëÇØ È£ÃâÇÑ´Ù. ±×¸®°í /etc/passwdÀÇ Á¤º¸¸¦ µÇµ¹¸°´Ù. ¨é °ø°ÝÀÚ´Â ½Éº¼¸¯ ¸µÅ©¸¦ ÇØÁ¦ÇÑ´Ù. ±×¸®°í ÆÄÀÏÀ» ÀÚ½ÅÀÇ ±ÇÇÑÀ¸·Î ÇÑ´Ù. ¨ê ÇÁ·Î±×·¥¿¡¼ ÇöÀç ¿ì¿¬È÷µµ /tmp/filenameÀÌ ¿·Á ÀÖÀ¸¸é, ·çÆ® ±ÇÇÑÀÇ ¶Ç ´Ù¸¥ ÇÁ·Î¼¼½ºÀÇ ÆÄÀÏÀÇ µ¥ÀÌÅÍ ´ë½Å¿¡ ÀÚ½ÅÀÇ µ¥ÀÌÅ͸¦ Àд´Ù. <ÇÁ·Î±×·¥-10> ·¹À̽ºÄÁµð¼ÇÀÌ ¹ß»ýÇÏÁö ¾Ê´Â ÇÁ·Î±×·¥
À§ÀÇ ÇÁ·Î±×·¥Àº ¾ÈÀüÇÏ°Ô ÀÛ¼ºµÈ ÇÁ·Î±×·¥À¸·Î stat() ´ë½Å¿¡ lstat()¸¦ »ç¿ëÇÑ´Ù. ¸¸ÀÏ ÁöÁ¤µÈ ÆÄÀÏÀÌ ½Éº¼¸¯ ¸µÅ©¸é ÀÌ°ÍÀº ¸µÅ©ÀÇ »óŸ¦ µ¹·ÁÁØ´Ù. ´ÙÀ½ ÆÄÀÏÀ» ¿°í, ¿¸° ÆÄÀÏÀÇ »óŸ¦ ¾ò´Â´Ù. »óÅ Á¤º¸ÀÇ inode¿Í device number´Â ºñ±³µÇ¾î ±×µéÀÌ µ¿ÀÏÇÏ´Ï ¾ÊÀ¸¸é ÁßÁöµÈ´Ù. ¥·. chroot()ÀÇ º¸¾È À¯´Ð½º ½Ã½ºÅÛÀº ¿î¿µÃ¼Á¦ÀÇ °üÁ¡¿¡¼ ÇÁ·Î±×·¥À» Á¦ÇÑÇÔÀ¸·Î½á ¿ÜºÎ¿¡ ³ëÃâµÇ´Â °ÍÀ» ¸·À» ¼ö ÀÖ´Â ´É·ÂÀÌ Àִµ¥ ÀÌ·¯ÇÑ ±â´ÉÀ» chroot() ÇÔ¼ö°¡ ¼öÇàÇÑ´Ù. int chroot(const char *path); chroot() ÇÔ¼ö¿¡¼ÀÇ path´Â »õ·Î¿î ÆÄÀϽýºÅÛÀÇ root µð·ºÅ丮·Î ÀνĵǾî ÆÄÀϽýºÅÛÀÇ ´Ù¸¥ ºÎºÐ¿¡ ´ëÇÑ Á¢±ÙÀº Á¦ÇѵȴÙ
chroot() ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °Íµµ ¼öÆÛÀ¯ÀúÀÇ ±ÇÇÑÀ» Á¦ÇÑÇÏ´Â ÁÁÀº ¹æ¹ýÀ̱⵵ ÇÑ´Ù. ¥¸. ÃÖ¼ÒÇÑÀÇ ±ÇÇÑ ¿ø¸® 1. ÃÖ¼ÒÇÑÀÇ ±ÇÇÑÀÇ Çʿ伺 ´ëºÎºÐÀÇ ÇÁ·Î±×·¥Àº root³ª Ưº°ÇÑ ±ÇÇÑÀ» °¡Áø »ç¿ëÀÚ°¡ ¼ÒÀ¯ÇÏ°í ÀÖ´Â ½Ã½ºÅÛ ÀÚ¿ø¿¡ Á¢±ÙÇϱâ À§Çؼ´Â Ưº°ÇÑ ±ÇÇÑÀ» °¡Á®¾ß ÇÑ´Ù. ³×Æ®¿öÅ© ¼ºñ½º¿Í °°Àº °æ¿ì ÀϹݻç¿ëÀÚ´Â »ç¿ëÇÒ ¼ö ¾ø´Â ±ÇÇÑÀÖ´Â TCP³ª UDP Æ÷Æ®¸¦ ÇÒ´çÇϱâ À§Çؼ Ưº°ÇÑ ±ÇÇÑÀÌ ÇÊ¿äÇÏ´Ù. ·ÎÄà ±ÇÇÑÀÌ ÀÖ´Â ÇÁ·Î±×·¥Àº ¸Þ¸ð¸®³ª µð½ºÅ©, ½Ã½ºÅÛ ±¸¼º Á¤º¸ µîÀÇ Á¦ÇÑµÈ ½Ã½ºÅÛ ÀÚ¿øÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ƯÈ÷ ¸ðµç ÀÚ¿øµé¿¡ ´ëÇØ ÃʱâÈÇÏ°í ±ÇÇÑÀ» ³·Ãß´Â °ÍÀº Ưº°ÇÑ ±ÇÇÑÀ» °¡Áö°í ½ÇÇàµÇ´Â ÇÁ·Î±×·¥¿¡¼´Â Áß¿äÇÏ´Ù. 2. ÃÖ¼ÒÇÑÀÇ ±ÇÇÑ ¼³Á¤ ¹æ¹ý ±ÇÇÑÀ» ³·Ãß±â À§Çؼ´Â ÇÁ·Î¼¼½ºÀÇ EUID¿Í EGID¸¦ ´õ ³·Àº ±ÇÇÑÀ¸·Î ¼³Á¤ÇØ¾ß ÇÑ´Ù. ÀÓÀÇ·Î ±ÇÇÑÀ» ³·Ã߰ųª Á¦°ÅÇϱâ À§Çؼ´Â seteuid()¿Í setegid() ÇÔ¼ö°¡ ÇÊ¿äÇÏ°í ¿µ±¸ÀûÀ¸·Î ±ÇÇÑÀ» Á¦°ÅÇϱâ À§Çؼ´Â setuid()¿Í setgid() ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. 2.1 ³×Æ®¿öÅ© ¼ºñ½º¿¡¼ ±ÇÇÑ ³·Ã߱⠳×Æ®¿öÅ© ¼ºñ½ºÀÇ ±ÇÇÑÀ» ³·Ãß±â À§Çؼ´Â ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇÀÚ¸¶ÀÚ ±ÇÇÑÀ» ³·Ãß¾î¾ß ÇÑ´Ù. º¸Åë ÃÖ¼ÒÇÑÀÇ Á¢±Ù ±ÇÇÑÀ» °¡Áø »ç¿ëÀÚ¸¦ "nobody"·Î »ç¿ëÇÑ´Ù.
ƯÈ÷ À§ÀÇ ÇÁ·Î±×·¥¿¡ setuid¸¦ ¼³Á¤Çϱâ Àü¿¡ setgid¸¦ ¸ÕÀú ¼³Á¤ÇÒ °ÍÀ» º¼ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº setuid¸¦ ¸ÕÀú ¼³Á¤ÇÏ¿´À» °æ¿ì ±ÇÇÑÀÌ gid°¡ °¡Áö°í ÀÖ´Â ±ÇÇѺ¸´Ù ³·¾ÆÁ® ±ÇÇÑÀ» ¼öÁ¤ÇÒ ¾ø°Ô µÉ ¼ö Àֱ⠶§¹®¿¡ setgid ¸ÕÀú ¼³Á¤ÇÑ´Ù. 2.2 ·ÎÄà setuid ÇÁ·Î±×·¥¿¡¼ ±ÇÇÑ ³·Ã߱⠱ÇÇÑÀÖ´Â SUID/SGID ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â °æ¿ì ÇÁ·Î¼¼½ºÀÇ RUID¿Í RGID´Â ÇÁ·Î±×·¥À» ½ÇÇàÇÑ »ç¿ëÀÚÀÇ uid¿Í gidÀÌÁö¸¸ EUID¿Í EGID, saved UID, saved GIDÀº ÆÄÀÏÀÇ ¼ÒÀ¯ÀÚ³ª ±×·ìÀÇ ±ÇÇÑÀ¸·Î ¼³Á¤µÈ´Ù. ÀÌ·± SUID ÇÁ·Î±×·¥´Â ±ÇÇÑÀ» Àӽ÷γª ¿µ±¸ÀûÀ¸·Î ±ÇÇÑÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù. ⼔ ±ÇÇÑÀ» ¿µ±¸ÀûÀ¸·Î ³·Ã߱⠱ÇÇÑÀ» ¿µ±¸ÀûÀ¸·Î ³·Ãß±â À§Çؼ´Â ÇÁ·Î±×·¥ÀÇ EUID, EGID SUID¿Í SGID¸¦ RUID¿Í RGID·Î ¼³Á¤ÇØ¾ß ÇÑ´Ù. setuid()¿Í setgid() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© RUID/RGID·Î ¼³Á¤Çϸé EUID/SUID/RUID´Â ¸ðµÎ º¯ÇÑ´Ù. <ÇÁ·Î±×·¥-12> ¿µ±¸ÀûÀ¸·Î ±ÇÇÑ ³·Ãß´Â ÇÁ·Î±×·¥
⼔ ±ÇÇÑÀ» Àӽ÷Π³·Ãß±â Àӽ÷Π±ÇÇÑÀ» ³·Ãß±â À§ÇÏ¿© EUIDÀÇ °ªÀ» ¿øÇÏ´Â °ªÀ¸·Î ¼³Á¤ÇÑ´Ù. EUIDÀº ½Ã½ºÅÛ ÇÔ¼ö³ª ±ÇÇÑ °Ë»ç¸¦ ¼öÇàÇÒ ¶§ »ç¿ëµÇ¹Ç·Î ´ÙÀ½¿¡ »ç¿ëÇϱâ À§ÇÏ¿© ÀÌ °ªÀ» ÀúÀåÇØ ³õ´Â´Ù. <ÇÁ·Î±×·¥-13> ÀÓ½ÃÀûÀ¸·Î ±ÇÇÑÀ» ³·Ãß´Â ÇÁ·Î±×·¥
¸¶Ä¡¸ç Áö±Ý±îÁö Àü¹ÝÀûÀ¸·Î À¯´Ð½º ÇÁ·Î±×·¥ ÀÛ¼º½Ã À¯ÀÇÇØ¾ß ÇÒ »çÇ×°ú ¾î¶»°Ô ÀÛ¼ºÇØ¾ß ¾ÈÀüÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö Àִ°¡¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸¾Ò´Ù. À§¿¡¼ ¼³¸íÇÑ °Í°ú °°ÀÌ ÇÁ·Î±×·¥À» ÀÛ¼ºÇß´Ù°í ¿ÏÀüÇÏ°Ô ¾ÈÀüÇÑ ÇÁ·Î±×·¥Àº ¾Æ´Ï´Ù. ´Ù¸¸ ¾ÈÀü¼ºÀ» °í·ÁÇÏÁö ¾ÊÀº ÇÁ·Î±×·¥º¸´Ù´Â ¾àÁ¡À̳ª ÇêÁ¡ÀÌ ¾ø´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏÀÚ´Â Àǵµ¿¡¼ ÀÌ Áöħ¼ ÀÛ¼ºÇÑ °ÍÀÌ´Ù. ´ëºÎºÐ ÇØÅ· °ø°ÝÀÇ ¿øÀÎÀÌ µÇ´Â Ãë¾àÁ¡µéÀÌ ¿î¿µÃ¼Á¦³ª ½Ã½ºÅÛ ÇÁ·Î±×·¥µîÀÇ ¾ÈÀü¼ºÀ» °í·ÁÇÏÁö ¾ÊÀº Äڵ忡¼ ³ª¿Â´Ù°í ÇÒ ¼ö Àֱ⠶§¹®¿¡ ÀÌ Áöħ¼´Â ½ÇÁ¦ ÇÁ·Î±×·¥À» °³¹ßÇÏ´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô À¯¿ëÇÏ°Ô »ç¿ëµÉ ¼ö ÀÖ´Ù. ¶ÇÇÑ ÇØÅ· °ø°Ý ¹æ¹ýÀÌ ¼³¸íÇÑ ¹æ¹ýµé¿¡¸¸ ¸Ó¹«¸£Áö ¾Ê°í °è¼Ó º¯ÈÇÏ°í °³¹ßµÇ¾îÁö¹Ç·Î ¾ÈÀüÇÑ ¼Ò½ºÄÚµå Áöħ¼µµ ±×¿¡ µû¶ó ¼öÁ¤µÇ°í ¹öÀü¾÷µÇ¾î¾ß ÇÒ Çʿ伺ÀÌ ÀÖ´Ù. <Âü°í¹®Çå> [1] Simson Garfinke and Gene Spafford, "Practical UNIX & Internet Security", O'Reilly & Associates, Inc., 2nd Edition, April 1996. [2] Nemeth¡¤Snyder¡¤Seebass¡¤Hein, "Unix System Administration Handbook", A Division of Simon & Schusyer, Inc., Third Edition, October 1998. [3] Grahan Glass Àú. Á¶°æ»ê ¿ª, "ÇÁ·Î±×·¡¸Ó¿Í »ç¿ëÀÚ¸¦ À§ÇÑ UNIX ¿Ï¼º", ÀÌÇÑÃâÆÇ»ç, March 1998. [4] David A. Wheeler, "Secure Programming for Linux and Unix HOWTO", 1999. [5] whitefang.com, "Secure UNIX Programming FAQ", 1999. [6] M. Bishop, "Writing Safe Privileged Programs," Network Security 1997. [7] M. Bishop, "How to Write a Setuid Program," 1986. [8] ``Secure Programming Guidelines''. FreeBSD, Inc. 1999. [9] AUSCERT and O'Reilly, "Lab Engineers Check List for Writing Secure Unix Code.", 1996 [10] NCSA "Secure Programming Guidelines". [11] SETUID manual page. |
Ãâó : cert