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 ¿¡¼­ ´õ¿í ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù.