chroot === ææ ¹ç®å½æ¢ææå®çç®çç®å½ ## è¡¥å 说æ **chrootå½ä»¤** ç¨æ¥å¨æå®çæ ¹ç®å½ä¸è¿è¡æä»¤ãchrootï¼å³ change root directory ï¼æ´æ¹ root ç®å½ï¼ãå¨ linux ç³»ç»ä¸ï¼ç³»ç»é»è®¤çç®å½ç»æé½æ¯ä»¥`/`ï¼å³æ¯ä»¥æ ¹ (root) å¼å§çãèå¨ä½¿ç¨ chroot ä¹åï¼ç³»ç»çç®å½ç»æå°ä»¥æå®çä½ç½®ä½ä¸º`/`ä½ç½®ã å¨ç»è¿ chroot å½ä»¤ä¹åï¼ç³»ç»è¯»åå°çç®å½åæä»¶å°ä¸å¨æ¯æ§ç³»ç»æ ¹ä¸çèæ¯æ°æ ¹ä¸ï¼å³è¢«æå®çæ°çä½ç½®ï¼çç®å½ç»æåæä»¶ï¼å æ¤å®å¸¦æ¥ç好å¤å¤§è´æä»¥ä¸3ä¸ªï¼ **å¢å äºç³»ç»çå®å ¨æ§ï¼éå¶äºç¨æ·çæåï¼** å¨ç»è¿ chroot ä¹åï¼å¨æ°æ ¹ä¸å°è®¿é®ä¸å°æ§ç³»ç»çæ ¹ç®å½ç»æåæä»¶ï¼è¿æ ·å°±å¢å¼ºäºç³»ç»çå®å ¨æ§ãè¿ä¸ªä¸è¬æ¯å¨ç»å½ (login) åä½¿ç¨ chrootï¼ä»¥æ¤è¾¾å°ç¨æ·ä¸è½è®¿é®ä¸äºç¹å®çæä»¶ã **建ç«ä¸ä¸ªä¸åç³»ç»é离çç³»ç»ç®å½ç»æï¼æ¹ä¾¿ç¨æ·çå¼åï¼** ä½¿ç¨ chroot åï¼ç³»ç»è¯»åçæ¯æ°æ ¹ä¸çç®å½åæä»¶ï¼è¿æ¯ä¸ä¸ªä¸åç³»ç»æ ¹ä¸æä»¶ä¸ç¸å ³çç®å½ç»æãå¨è¿ä¸ªæ°çç¯å¢ä¸ï¼å¯ä»¥ç¨æ¥æµè¯è½¯ä»¶çéæç¼è¯ä»¥åä¸äºä¸ç³»ç»ä¸ç¸å ³çç¬ç«å¼åã **åæ¢ç³»ç»çæ ¹ç®å½ä½ç½®ï¼å¼å¯¼ Linux ç³»ç»å¯å¨ä»¥åæ¥æç³»ç»çï¼** chroot çä½ç¨å°±æ¯åæ¢ç³»ç»çæ ¹ä½ç½®ï¼èè¿ä¸ªä½ç¨æä¸ºææ¾çæ¯å¨ç³»ç»åå§å¼å¯¼ç£ççå¤çè¿ç¨ä¸ä½¿ç¨ï¼ä»åå§ RAM ç£ç (initrd) åæ¢ç³»ç»çæ ¹ä½ç½®å¹¶æ§è¡çæ£ç initãå¦å¤ï¼å½ç³»ç»åºç°ä¸äºé®é¢æ¶ï¼æä»¬ä¹å¯ä»¥ä½¿ç¨ chroot æ¥åæ¢å°ä¸ä¸ªä¸´æ¶çç³»ç»ã ### è¯æ³ ```shell chroot(é项)(åæ°) ``` ### é项 ```shell --helpï¼å¨çº¿å¸®å©ï¼ --versionï¼æ¾ç¤ºçæ¬ä¿¡æ¯ã ``` ### åæ° * ç®å½ï¼æå®æ°çæ ¹ç®å½ï¼ * æä»¤ï¼æå®è¦æ§è¡çæä»¤ã ### å®ä¾ **å°targetä½ä¸ºæ ¹ç®å½ï¼è¿è¡å ¶ä¸ç`/bin/sh`ï¼:** ```shell chroot target /bin/sh ``` è¿é,targetæ¯busyboxå®è£ 好çè·¯å¾ï¼ç±»ä¼¼ä¸ä¸ªæä»¶ç³»ç»å å«äºè®¸å¤å·¥å ·ãè¿æ ·ï¼å°ä¼è¿å ¥ä¸ä¸ªshellçé¢ï¼è¿ä¸ªshell以targetä¸ºæ ¹ãè¿è¡exitéåºè¯¥shellåè¿ååæ¥çæ¬æºç¯å¢äºï¼ä¹å¯ä»¥ä½¿ç¨Ctrl+Dã æ³¨æï¼ * æ ¹ç¨æ·æè¡ * å¦æç´æ¥chroot targeté»è®¤å¯»æ¾targetç/bin/bash.è¿ä¼ä»¥targetä½ä¸ºæ ¹ç®å½ å°targetä½ä¸ºæ ¹ç®å½(è¿è¡å ¶ä¸ç`/bin/ls`): ```shell chroot target /bin/ls ``` è¿éï¼targetæ¯busyboxå®è£ 好çè·¯å¾ï¼ç±»ä¼¼ä¸ä¸ªæä»¶ç³»ç»å å«äºè®¸å¤å·¥å ·ãè¿æ ·è¿è¡çæ¯targetä¸çlsï¼ä¸æ¯æ¬æºç`/bin/ls`ï¼ï¼ç¶åè¿åç«å³æ¬æºçç®å½ç¯å¢ã 注æï¼èªå·±å¨æ¬å°ç¼è¯ä¸ä¸ªç¨åºçæa.outä¹åï¼æ·è¿`target/bin/`ä¸è¿æ ·è¿è¡å´ä¸è¡,å 为å®å å«äºå¨æè¿æ¥çåºï¼éè¦ç¨lddæ¥ça.outéè¦é£äºå¨æåºï¼å°è¿äºåºæ·è´å°æ°æ ¹ç对åºè·¯å¾ä¸æè½æ§è¡ã **ç¨chrootè¿è¡èªå·±ç¼è¯çä¸ä¸ªç¨åºï¼** åå¤chrootçæ ¹ç®å½ï¼ ```shell mkdir newRoot ``` ç¼è¯èªå·±çç¨åºï¼ ```shell gcc main.c ``` è¿émain.cçæa.outï¼åè½æ¯è¾åºhelloã æ¥çç¨åºéè¦çåºï¼ ```shell ldd a.out ``` è¾å ¥ä¹åï¼è¾åºå¦ä¸ï¼ ```shell linux-gate.so.1 = > (0xb8034000) libc.so.6 = > /lib/tls/i686/cmov/libc.so.6 (0xb7eab000) /lib/ld-linux.so.2 (0xb801a000) ``` å°ç¨åºéè¦çåºåç¨åºæ·è´å°æ°æ ¹ç®å½ä¸ï¼ ```shell cp a.out newRoot mkdir newRoot/lib cp /lib/tls/i686/cmov/libc.so.6 newRoot/lib cp /lib/ld-linux.so.2 newRoot/lib ``` è¿énewRootå 容å°å¦ä¸ï¼ ```shell a.out lib/ ``` 使ç¨chrootè¿è¡èªå·±çç¨åºï¼ ```shell su chroot newRoot /a.out ``` è¿æ ·å°±è½å¤æ£ç¡®è¿è¡a.outäºï¼å 为a.out使ç¨å°äºå ¶ä»çå¨æè¿æ¥åºï¼æä»¥éè¦å°åºæ·è´å°newRootä¸ï¼å¦ææ²¡æå ¶ä»åºé£ä¹ç´æ¥æ·è´a.outå°±è½è¿è¡ãä¾å¦éæç¼è¯åçbusyboxï¼å ¶å®è£ ç®å½ä¸ç`/bin/busybox`就没æä¾èµå ¶ä»åºã