·çÆ® µð·ºÅ丮¸¦ º¯°æÇÑ´Ù.
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=chroot">chroot</a>(2)

1장. chroot(2)

·çÆ® µð·ºÅ丮¸¦ º¯°æÇÑ´Ù.


1.1. »ç¿ë¹ý

#include <unistd.h>

int chroot(const char *path);
		


1.2. ¼³¸í

chroot()´Â path°¡ ÁöÁ¤ÇÑ °÷À¸·Î ·çÆ® µð·ºÅ丮¸¦ º¯°æÇÑ´Ù. µð·ºÅ丮´Â "/"·Î ½ÃÀÛÇÏ´Â Àý´ë°æ·Î À̸§À» »ç¿ëÇÑ´Ù. ¼³Á¤µÈ ·çÆ®µð·ºÅ丮´Â ÇöÀç ÇÁ·Î¼¼½ºÀÇ ¸ðµç ÀÚ½Ä ÇÁ·Î¼¼½º¿¡°Ô »ó¼ÓµÈ´Ù.

´ÜÁö ½´ÆÛÀ¯Àú¸¸ÀÌ ·çÆ® µð·ºÅ丮¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù.

ÀÌ ½Ã½ºÅÛ ÄÝÀº ÇöÀç ÀÛ¾÷ µð·ºÅ丮¸¦ ¹Ù²ÙÁö´Â ¾Ê´Â´Ù. ±×·¡¼­ "."Àº "/"·Î ÁöÁ¤µÈ ·çÆ® Æ®¸® ¹ÛÀÇ À§Ä¡°¡ µÉ ¼öµµ ÀÖ´Ù.


1.3. ¹Ýȯ°ª

¼º°ø½Ã 0ÀÌ ¸®Åϵǰí, ¿¡·¯°¡ ¹ß»ýÇϸé -1ÀÌ ¸®ÅϵȴÙ.


1.4. ¿¡·¯

EPERM

À¯È¿ UID°¡ 0ÀÌ ¾Æ´Ï´Ù.

EFAULT

path°¡ Á¢±ÙÇÒ ¼ö ¾ø´Â ¸Þ¸ð¸® ¿µ¿ªÀ» °¡¸®Å°°í ÀÖ´Ù.

ENAMETOOLONG

path°¡ ³Ê¹« ±æ´Ù.

ENOENT

ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù.

ENOMEM

Ä¿³Î ¸Þ¸ð¸®°¡ ÃæºÐÇÏÁö ¾Ê´Ù.

ENOTDIR

path°¡ µð·ºÅ丮°¡ ¾Æ´Ï´Ù.

EACCESS

Çã°¡°¡ °ÅºÎµÇ¾ú´Ù.

ELOOP

path¸¦ ã¾Æ°¡±â À§ÇØ ³Ê¹« ¸¹Àº ½Éº¼¸¯ ¸µÅ©°¡ Á¸ÀçÇÑ´Ù.

EIO

I/O ¿¡·¯°¡ ¹ß»ýÇß´Ù.


1.5. ¿¹Á¦

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{
    int pid;

    if (chroot("/home/mydir") != 0)
    {
        perror("chroot");
        exit(0);
    }
    if (execl("/bin/bash","bash", NULL) == -1) 
    {
        perror("error");
    }
}
		
À§ Äڵ带 ÄÄÆÄÀÏ ÈÄ ½ÇÇà ½Ã۸é /home/mydir°¡ ·çÆ®(/)µð·ºÅ丮°¡ µÇ°í bash°¡ ½ÇÇàµÈ´Ù. ·çÆ® µð·ºÅ丮°¡ ¹ÙÄ×À¸¹Ç·Î /home/mydir/bin ¹Ø¿¡ bash½©ÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ¶ÇÇÑ bash¸¦ ½ÇÇà½Ã۱â À§ÇÑ ±âº»ÀûÀÎ ¶óÀ̺귯¸®µµ ÀÖ¾î¾ß Çϴµ¥ ldd ¸¦ ÅëÇØ¼­ bash¸¦ ½ÇÇà½Ã۱â À§ÇØ ÇÊ¿äÇÑ ¶óÀ̺귯¸®ÀÇ ¸ñ·ÏÀ» ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. /home/mydir/lib µð·ºÅ丮 ¹Ø¿¡ ÇÊ¿äÇÑ ¶óÀ̺귯¸®¸¦ º¹»çÇÑ´ÙÀ½ À§ ÇÁ·Î±×·¥À» ½ÇÇàÇϵµ·Ï ÇÏÀÚ.


1.6. Âü°í¹®Çå

  1. chdir(2)


  • DeleteMe:½ÇÁ¦ chroot¿¡¼­´Â "/bin/bash"¸¦ Á÷Á¢ ½ÇÇàÇÏÁö ¾Ê°í "/bin/sh"¸¦ ½ÇÇàÇϵµ·Ï À¯µµµÇ´Â°Ô ¸Â´Ù°í »ý°¢ÇÕ´Ï´Ù. yundream´Ô È®ÀκÎŹµå·Á¿ä. - minzkn
    • ³× À̰Š¿Ï¼º ¸Þ´º¾óÀÌ ¾Æ´Õ´Ï´Ù. ÀÌ»óÇÏ°Ô Á¦²¨ ¸®´ª½º¿¡¼­´Â Å×½ºÆ®°¡ ¾ÈµÇ¾î¼­¿ä.. ¹ö±×ÀÎÁö ¸ÕÁö´Â ¸ð¸£°Ú´Âµ¥.. "/bin/bash"¸¦ ÀÚ²Ù ¸øÃ£´Â´Ù°í.. ¹°·Ð /bin/sh·Î µµ ÇØºÃ±¸¿ä.. ±Ùµ¥.. ´Ù¸¥ ºÐÀº Å×½ºÆ®°¡ Á¦´ë·Î µÈ´Ù°í Çϰí -.-;. ¾Æ¹«·¡µµ ´Ù¸¥ Å×½ºÆ® µÇ´Â ºÐÀÌ È®ÀÎÀ» ÇØÁà¾ß ÇÒ°Í °°´Ù´Â minzkn´ÔÀÌ ÇØÁÖ½Ç ·Á³ª È÷Èý.. minzkn ´ÔÀº Àú ¿¹Á¦ Á¦´ë·Î ½ÇÇà µÇ³ª¿ä ? ³õÄ¡°í ÀÖ´Â ¹«¾ð°¡°¡ Àִ°ÇÁö :-?
    • ±âº»ÀûÀ¸·Î /home/mydir/bin/sh ¶Ç´Â /home/mydir/bin/bash °¡ ÀÖ¾î¾ß °ÚÁö¿ä. yundream´Ô º¹»çÇϽðí ÇϽŰÅÁÒ? ±×¸®°í ¸¸¾à º¹»ç¸¦ ÇÏÁö ¾Ê¾Æµµ µÇµµ·Ï ÇÏ·Á¸é chroot ÁøÀÔÀü¿¡ ÇØ´ç ½ÇÇàÆÄÀÏ À̹ÌÁö¸¦ Àоî³õ°í chroot ÁøÀÔÇÏ¿© ½ÇÇàÀ̹ÌÁö¸¦ ÀÓÀÇÀÇ À§Ä¡¿¡ ÀúÀåÇÏ°í ½ÇÇàÇØ¾ß °Ú³×¿ä. ±×¸®°í /bin/sh ÀÇ Àǹ̴ ÀÚ½ÅÀÇ shellÀÌ ¾î¶²°ÍÀ̶ó°í ¾Ë¸®´Â link À̰í¿ä. ¶§¹®¿¡ Á¤È®È÷ yundream´ÔÀÇ ¿¹Á¦ Äڵ带 Å×½ºÆ®Çغ¸±â À§Çؼ­´Â /usr/mydir/bin/bash °¡ ÀÖ¾î¾ß Çϰí /usr/mydir/bin/sh ´Â ./bash ·Î ¸µÅ©°¡ °É·ÁÀÖ¾î¾ß Çϰí¿ä. ¶ÇÇÑ chroot ÇÔ¼ö´Â root À¯Àú¸¸ÀÌ ±ÇÇÑÀ» °®´Â Ư±Ç ¸í·ÉÀ̹ǷΠroot À¯Àú·Î ½ÇÇàÇØ¾ß Çϰڰí¿ä. ±×¸®°í chroot ½ÇÇàÈÄ¿¡ chdir("/") ÇÔ¼ö°¡ È£ÃâµÇ´Â°Ô ÁÁ´Ù´Â »ý°¢ÀÌ µå³×¿ä.

  • ȯ°æ Àû¿ëÀü¿¡ È®ÀÎ... 
    /home/mydir/bin/bash 
    /home/mydir/bin/sh -> ./bash 
    /home/mydir/lib/libtermcap.so.2 
    /home/mydir/lib/libdl.so.2 
    /home/mydir/lib/libc.so.6 
    /home/mydir/lib/ld-linux.so.2 
     

    const char __mydir__[] = {"/home/mydir"};
    const char __root__[] = {"/"};
    const char __shell__[] = {"/bin/sh"};
    
    if(chroot(__mydir__) == 0){
     chdir(__root__);
     setenv("SHELL", "/bin/bash", 1);
     setenv("LD_LIBRARY_PATH", "/lib", 1); /* ±×¹Û¿¡ ÇÊ¿äÇÑ È¯°æº¯¼öµé... */
     (void)execl(__shell__, __shell__, (void *)0);
    }
    fprintf(stdout, "¿¡·¯³µ¾î¿ä. Å«ÀÏÀÌ¿¹¿ä. Á¾·áµÇ¿ä. \n");
    
    • Çã°Å°Å°Å°Å°Æ.. libc¿Í ld-linux¸¦ º¹»çÇÏÁö ¾Ê¾Ò³×¿ä -.-; ¸¶Àú º¹»çÇÏ°í ³ª¼­ Å×½ºÆ® Çϴϱî Àߵdz׿ä T.T - yundream
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.