À´Ô´£ºLinuxÖйú
ÎÒÊÇÒ»¸ö¸Õ½Ó´¥ Linux ºÍ Unix µÄÐÂÊÖ¡£ÎÒ¸ÃÈçºÎ¸Ä±äÒ»¸öÃüÁîµÄ¸ùĿ¼£¿ÎÒÒªÔõÑù¸Ä±äÒ»¸ö½ø³ÌµÄ¸ùÄ¿Â¼ÄØ£¬±ÈÈçÓà chroot ÃüÁweb·þÎñÓëÎļþϵͳ¸ôÀ룿ÎÒÒªÈçºÎʹÓà chroot »Ö¸´ÃÜÂë»òÐÞ¸´»ùÓÚ Linux/UnixµÄÊÜË𻵵Ļ·¾³£¿
ÔÚ LinuxºÍÀà Unix ϵͳÏÂÿһ¸ö½ø³Ì/ÃüÁîµÄµ±Ç°¹¤×÷Ŀ¼³ÆÖ®Îª½ø³Ì/ÃüÁîµÄ¸ùĿ¼£¨Òë×¢£ºÒëÕßÒÔΪ´Ë´¦ÓÐÎó£¬Êµ¼ÊÉÏûÓнøÐйýchrootµÄ½ø³Ì£¬Æä¸ùĿ¼ÊÇϵͳµÄ¸ùĿ¼£¬¶ø²»ÊÇÆä¹¤×÷Ŀ¼£©¡£Äã¿ÉÒÔʹÓà chroot ÃüÁî¸Ä±äÒ»¸öÃüÁîµÄ¸ùĿ¼£¬Õâ×îÖÕ½«»á¸Ä±äµ±Ç°ÔËÐеĽø³Ì¼°Æä×Ó½ø³ÌµÄ¸ùĿ¼¡£
Èç¹ûÒ»¸ö½ø³Ì/ÃüÁîÔËÐÐÔÚÒ»¸ö²»ÄÜ·ÃÎÊÍⲿ¸ùĿ¼ÎļþµÄÒÑÐ޸Ļ·¾³ÖС£ÕâÖÖÐ޸Ļ·¾³Í¨³£±»³ÆÎª"¼à½ûĿ¼"£¨jail£©»òÊÇ"chroot ¼à½û"¡£Ö»ÓÐÌØÈ¨½ø³ÌºÍ¸ùÓû§²ÅÄÜʹÓà chroot ÃüÁȻ¶øÕâͨ³£ÊǺÜÓÐÓõģº
1.½«ÌØÈ¨·ÖÅ䏸ÎÞÌØÈ¨µÄ½ø³Ì£¬ÀýÈç Web ·þÎñ»ò DNS ·þÎñ¡£
2.½¨Á¢²âÊÔ»·¾³¡£
3.²»Ê¹³ÌÐò»òϵͳ±ÀÀ£Ï£¬ÔËÐоɳÌÐò»ò ABI ¼æÈݵijÌÐò¡£
4.ϵͳ»Ö¸´¡£
5.ÖØÐ°²×°Òýµ¼×°ÔسÌÐò£¬ÀýÈç Grub »ò Lilo¡£
6.ÃÜÂëÕһأ¬ÖØÖÃÒ»¸öÒѶªÊ§µÄÃÜÂëµÈ¡£
ÓÃ;
chroot ÃüÁî ¸Ä±äÆäµ±Ç°Ä¿Â¼£¬²¢½«¸ùĿ¼±äΪָ¶¨Ä¿Â¼,È»ºóÈç¹ûÌṩÁËÃüÁîÔòÔËÐÐÃüÁҲ¿ÉÒÔÔËÐÐÒ»¸öÓû§µÄ½»»¥Ê½shellµÄ¸±±¾£¨Òë×¢£º¼´bashµÈ¡££©¡£Çë×¢Òâ²¢²»ÊÇÿһ¸ö³ÌÐò¶¼¿ÉÒÔʹÓà chroot ÃüÁî¡£
Óï·¨
»ù±¾Óï·¨ÈçÏ£º
1.chroot /path/to/new/root command
»òÕß
1.chroot /path/to/new/root /path/to/server
»òÕß
1.chroot [options]/path/to/new/root /path/to/server
chroot ÃüÁîʵÀý
ÔÚÕâ¸öÀý×ÓÖУ¬½¨Á¢ÁËÒ»¸ö"ÃÔÄã¼àÓü"ÓÃÀ´²âÊÔÒ»¸öÖ»ÓÐ ls ÃüÁîµÄ Bash shell¡£Ê×ÏÈÓà mkdir ÃüÁîÉ趨ºÃ jail "¼àÓü" ·¾¶¡£
1.$ J=$HOME/jail
ÔÚ $J ÄÚ´´½¨Ä¿Â¼£º
1.$ mkdir -p $J
2.$ mkdir -p $J/{bin,lib64,lib}
3.$ cd $J
ÓÃcp ÃüÁ/bin/bash ºÍ /bin/ls ¸´ÖƵ½ $J/bin/ ·¾¶Ï£º
1.$ cp -v /bin/{bash,ls} $J/bin
½«ËùÐè¿âÎļþ¿½±´µ½$J¡£¿ÉÒÔÓà ldd ÃüÁîÕÒµ½ bash ËùÒÀÀµµÄ¹²Ïí¿â¡£
1.$ ldd /bin/bash
Êä³öÑùÀý£º
1.linux-vdso.so.1=>(0x00007fff8d987000)
2.libtinfo.so.5=>/lib64/libtinfo.so.5(0x00000032f7a00000)
3.libdl.so.2=>/lib64/libdl.so.2(0x00000032f6e00000)
4.libc.so.6=>/lib64/libc.so.6(0x00000032f7200000)
5./lib64/ld-linux-x86-64.so.2(0x00000032f6a00000)
Ö±½Ó¿½±´ÉÏÃæÊä³öÖеĿâÎļþµ½ $J Ŀ¼£º
1.$ cp -v /lib64/libtinfo.so.5/lib64/libdl.so.2/lib64/libc.so.6/lib64/ld-linux-x86-64.so.2 $J/lib64/
Êä³öÑùÀý£º
1.`/lib64/libtinfo.so.5' -> `/home/vivek/jail/lib64/libtinfo.so.5'
2.`/lib64/libdl.so.2'->`/home/vivek/jail/lib64/libdl.so.2'
3.`/lib64/libc.so.6' -> `/home/vivek/jail/lib64/libc.so.6'
4.`/lib64/ld-linux-x86-64.so.2' -> `/home/vivek/jail/lib64/ld-linux-x86-64.so.2'
¸´ÖÆ ls ÃüÁîËùÐèµÄ¿âÎļþµ½ $J Ŀ¼Ï¡£Óà ldd ÃüÁî´òÓ¡³ö ls ÃüÁîÒÀÀµµÄ¹²Ïí¿â£º
1.$ ldd /bin/ls
Êä³öÑùÀý£º
1.linux-vdso.so.1=>(0x00007fff68dff000)
2.libselinux.so.1=>/lib64/libselinux.so.1(0x00000032f8a00000)
3.librt.so.1=>/lib64/librt.so.1(0x00000032f7a00000)
4.libcap.so.2=>/lib64/libcap.so.2(0x00000032fda00000)
5.libacl.so.1=>/lib64/libacl.so.1(0x00000032fbe00000)
6.libc.so.6=>/lib64/libc.so.6(0x00000032f7200000)
7.libdl.so.2=>/lib64/libdl.so.2(0x00000032f6e00000)
8./lib64/ld-linux-x86-64.so.2(0x00000032f6a00000)
9.libpthread.so.0=>/lib64/libpthread.so.0(0x00000032f7600000)
10.libattr.so.1=>/lib64/libattr.so.1(0x00000032f9600000)
Äã¿ÉÒÔÒ»¸ö¸öµÄ¸´ÖÆ¿âÎļþ£¬ÎªÁ˸ü¸ßЧµÄ×÷Òµ£¬ÎÒÃÇÒ²¿ÉÒÔʹÓÃbash shell µÄÑ»·Ö¸ÁîʵÏÖ£º
1.list="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')"
2.for i in $list;do cp -v "$i""${J}${i}";done
Êä³öÑùÀý£º
1.`/lib64/libselinux.so.1' -> `/home/vivek/jail/lib64/libselinux.so.1'
2.`/lib64/librt.so.1'->`/home/vivek/jail/lib64/librt.so.1'
3.`/lib64/libcap.so.2' -> `/home/vivek/jail/lib64/libcap.so.2'
4.`/lib64/libacl.so.1' -> `/home/vivek/jail/lib64/libacl.so.1'
5.`/lib64/libc.so.6'->`/home/vivek/jail/lib64/libc.so.6'
6.`/lib64/libdl.so.2' -> `/home/vivek/jail/lib64/libdl.so.2'
7.`/lib64/ld-linux-x86-64.so.2' -> `/home/vivek/jail/lib64/ld-linux-x86-64.so.2'
8.`/lib64/libpthread.so.0'->`/home/vivek/jail/lib64/libpthread.so.0'
9.`/lib64/libattr.so.1' -> `/home/vivek/jail/lib64/libattr.so.1'
×îºó£¬chroot µ½ÄãµÄÐÂjail£º
1.$ sudo chroot $J /bin/bash
³¢ÊÔä¯ÀÀһϠ/etc »ò /var£º
1.# ls /
2.# ls /etc/
3.# ls /var/
¸Ä±äÁ˸ùĿ¼µÄ bash ºÍ ls ³ÌÐòÏÖÔÚ±»¼à½ûÔÚ$HOME/$JÕâ¸öÌØÊâĿ¼ÖУ¬¶øÇÒ²»ÄÜÔÙ·ÃÎÊÍⲿµÄĿ¼Ê÷£¬Õâ¸öĿ¼¿ÉÒÔ¿´×öÊÇËüÃǵÄ"/"(root)Ŀ¼¡£Èç¹ûÅäÖÃÕýÈ·µÄ»°,Õâ»á¼«´óÔöÇ¿°²È«ÐÔ¡£ÎÒͨ³£ÓÃÕâÖÖ¼¼ÊõËø¶¨ÒÔϵÄÓ¦ÓóÌÐò¡£
1.Apache - Red Hat / CentOS: Chroot Apache 2 Web Server
2.Nginx - Linux nginx: Chroot (Jail) Setup
3.Chroot Lighttpd web server on a Linux based system
4.Chroot mail server.
5.Chroot Bind DNS server µÈµÈ
ÈçºÎÍ˳ö chroot ¼à½ûÄØ£¿
¼üÈë exit ¼´¿É
1.$ exit
Gif ¶¯»01: Linux / Unix: Bash Chroot ls ÃüÁîÑÝʾ
²éÕÒ·þÎñÊÇ·ñ´æÔÚÓÚ chrooted ¼à½ûÄÚ
Äã¿ÉÒÔÓÃÏÂÃæÁ½¸öÃüÁî[ÇáËɵÄÕÒ³ö Postfix Óʼþ·þÎñÊÇ·ñÒѾ chrooted]£º
1.pid=$(pidof -s master)
2.ls -ld /proc/$pid/root
´Ó»ù±¾Linux·þÎñÖÐÊä³öÑùÀý£º
1.lrwxrwxrwx.1 root root 0Mar911:16/proc/8613/root ->/
PID 8613 Ö¸ÏòÁË / (root) Ò²¾ÍÊÇ˵Õâ¸ö³ÌÐòµÄ¸ùĿ¼²¢Ã»Óб»¸Ä±ä»òÊDZ» chroot¡£Õâ¸ö·½·¨·Ç³£µÄ¿ìËÙ¶øÓÖÖ±½Ó£¬²»ÐèÒª´ò¿ªÅäÖÃÎļþ¡£ÏÂÃæÊÇ´ÓÒѾ chroot µÄ ngnix ·þÎñÖеõ½µÄÁíÒ»¸öÀý×Ó£º
1.pid=$(pidof -s master)
2.ls -ld /proc/$pid/root
Êä³öÑùÀý£º
1.lrwxrwxrwx 1 nginx nginx 0Mar911:17/proc/4233/root ->/nginxjail
³ÌÐòµÄ¸ùĿ¼ÒѾ¸ÄΪ /nginxjail¡£