±¾ÎÄ×÷Õß´ÓDocker¾µÏñ¡¢ÍøÂçÃüÃû¿Õ¼ä¡¢ÈÕÖ¾ºÍÉóºË¡¢ÊØ»¤½ø³ÌÌØÈ¨¡¢SELinux¡¢¶þ½øÖÆSUID/GUID¡¢É豸¿ØÖÆ×é¡¢·þÎñºÍÓ¦Óá¢
LinuxÄںˡ¢Óû§ÃüÃû¿Õ¼ä¡¢libseccompµÈ·½Ãæ¸ø³öÁË×Ô¼ºµÄ½¨Ò飬¿ÉÒÔÒ»¶Á¡£
µ±Ç°³ÖÐøÔö³¤µÄÔÆ¼ÆËãÊг¡¶ÔÐéÄ⻯¼¼ÊõÓÐ×ÅÇ¿ÁÒµÄÐèÇó¡£Òź¶µÄÊÇ£¬´ó¶àÊýµÄÐéÄ⻯½â¾ö·½°¸²»¹»Áé»î£¬ÎÞ·¨Âú×ãÑз¢ÐèÇó£¬ÇÒʹÓÃÈ«ÐéÄ⻯½â¾ö·½°¸µÄDZÔÚ¿ªÏú±ä³ÉÁËÖÆÔ¼»ù´¡ÉèÊ©À©Õ¹ÐԵĸºµ£¡£
DockerÈÿª·¢ºÍÔËάÈËÔ±ÄÜÎÞ·ìµØ²¿ÊðÈÝÆ÷£¬ÓÃÓÚÔËÐÐÒµÎñËùÐèµÄÓ¦ÓÃÓë·þÎñ£¬´Ó¶ø¼õÉÙÕâÀ࿪Ïú¡£È»¶ø£¬ÒòΪDockerÓëËÞÖ÷ϵͳʹÓÃͬһÄںˣ¬ÅäÖò»µ±µÄÈÝÆ÷½«Ôì³ÉÖØ´ó°²È«Òþ»¼¡£
ÒÔÏÂÁбíÿһÌõÔÚÏà¹ØÈÝÆ÷»·¾³ÄÚ¶ÔÌá¸ßÆä°²È«ÐÔÌá³öÁ˽¨Òé¡£ÐèҪעÒâµÄÊÇ£¬ÕâЩ·½°¸½öÊÊÓÃÓÚ²¿ÊðÔÚLinuxÖ÷»úÉϵÄDockerÈÝÆ÷£¬²¢Ê¹ÓÃ×îеÄDocker°æ±¾£¨1.4.0£¬commit4595d4f£¬ÈÕÆÚ11/12/14£©¡£
ÒÔϲ¿·ÖÄÚÈݲο¼ÁËJ¨¦r?me PetazzoniºÍDaniel J WalshµÄÎÄÕ¡£±¾ÎÄÖ¼ÔÚ¶ÔËûÃǵĽ¨Òé½øÐв¹³ä£¬²¢ËµÃ÷ÈçºÎÔÚDocker¾ßÌåʵÏÖ¡£
×¢£º´ó¶àÊý½¨ÒéµÄÃüÁîÐÐÑ¡Ïî¿ÉÒÔÔÚDockerfileÖÐÒÔÀàËÆµÄ·½Ê½±£´æºÍʹÓã¬ÊµÏÖ×Ô¶¯»¯¾µÏñ¹¹½¨¡££¨ÒëÕß×¢£ºÔÎÄ17ÏÒéÒÔ±í¸ñÐÎʽ³ÊÏÖ£¬ÓÉÓÚ±à¼Æ÷ÔÒò£¬ÕâÀォ¸ÄΪÁбíÐÎʽ±íÊö£©
1. Docker¾µÏñ
Docker 1.3¿ªÊ¼Ö§³ÖʹÓÃÊý×ÖÇ©ÃûÀ´ÑéÖ¤¹Ù·½²Ö¿â¾µÏñµÄÀ´Ô´ºÍÍêÕûÐÔ¡£¸Ã¹¦ÄÜÈÔÔÚ¿ª·¢ÖУ¬Òò´ËDockerÖ»¶Ô£¨ÒëÕß×¢£ºÃ»ÓÐÊý×ÖÇ©ÃûµÄ£©¾µÏñ·¢³ö¾¯¸æÐÅÏ¢µ«²»»á×èÖ¹Æäʵ¼ÊÔËÐС£´ËÍ⣬Õâµã¶Ô·Ç¹Ù·½¾µÏñ²»ÊÊÓá£
Ò»°ãÇé¿öÏ£¬ÎÒÃÇҪȷ±£Ö»´ÓÊÜÐÅÈεĿâÖлñÈ¡¾µÏñ£¬²¢ÇÒ²»ÒªÊ¹ÓÃ--insecure-registry=[]²ÎÊý¡£
2. ÍøÂçÃüÃû¿Õ¼ä
ĬÈÏÇé¿öÏ£¬DockerÊØ»¤½ø³Ì±©Â¶³öÀ´ÓÃÓÚ¿ØÖÆÈÝÆ÷µÄREST APIÖ»ÄÜÔÚ±¾µØÍ¨¹ýUnix Domain
Socket½øÐзÃÎÊ¡£
ÔÚÒ»¸öTCP¶Ë¿ÚÉÏÔËÐÐDocker£¨±ÈÈ磬Æô¶¯DockerÊØ»¤½ø³ÌʱʹÓÃ-HÑ¡ÏîÇ¿ÖÆ°ó¶¨µØÖ·£©½«ÔÊÐíÈκοÉÒÔ·ÃÎʸö˿ڵÄÈË»ñÈ¡ÈÝÆ÷µÄ·ÃÎÊȨÏÞ£¬ÉõÖÁÔÚ±¾µØÓû§ÊôÓÚDocker×éµÄijЩÇé¿öÏÂÓпÉÄÜ»ñµÃËÞÖ÷µÄrootȨÏÞ¡£
ÔÚÔÊÐíͨ¹ýTCP·ÃÎÊÊØ»¤½ø³Ìʱ£¬È·±£Í¨Ñ¶Ê¹ÓÃSSL¼ÓÃܺÍȨÏÞ¿ØÖÆÄÜÓÐЧµØ·ÀֹδÊÚȨÓû§ÓëÆä½øÐн»»¥¡£
¿ÉÔÚDockerµÄ±ê×¼ÍøÂçÇŽӽӿÚdocker0ÉÏÆôÓÃÄں˷À»ðǽiptables¹æÔò£¬ÓÃÓÚ¼ÓÇ¿ÕâЩ¿ØÖÆ¡£
ÀýÈ磬¿ÉÒÔʹÓÃÒÔÏÂiptables¹ýÂËÆ÷ÏÞÖÆDockerÈÝÆ÷µÄÔ´IPµØÖ··¶Î§ÓëÍâ½çͨѶ¡£iptables
-t filter -A FORWARD -s <source_ip_range> -j REJECT
--reject-with icmp-admin-prohibited
3. ÈÕÖ¾ºÍÉóºË
ÊÕ¼¯²¢¹éµµÓëDockerÏà¹ØµÄ°²È«ÈÕÖ¾À´´ïµ½ÉóºËºÍ¼à¿ØµÄÄ¿µÄ¡£¿ÉÒÔÔÚËÞÖ÷ÉÏʹÓÃÒÔÏÂÃüÁîÔÚÈÝÆ÷Íⲿ·ÃÎÊÈÕÖ¾Îļþ£º
dockerrun-v/dev/log:/dev/log<container_name>/bin/sh |
ʹÓÃDockerÄÚÖÃÃüÁ
dockerlogs...(-ftofollowlogoutput) |
ÈÕÖ¾ÎļþÒ²¿ÉÒÔµ¼³ö³ÉÒ»¸öѹËõ°üʵÏֳ־ô洢£º
4. SELinux »ò AppArmor
ͨ¹ý·ÃÎÊ¿ØÖƵݲȫ²ßÂÔ£¬¿ÉÒÔÅäÖÃLinuxÄں˰²È«Ä£¿é£¬È簲ȫÔöÇ¿ÐÍLinux£¨SELinux£©ºÍAppArmor£¬´Ó¶øÊµÏÖÇ¿ÖÆÐԵķÃÎÊ¿ØÖÆ£¨MAC£©ÓÃÒÔ½«½ø³ÌÔ¼ÊøÔÚÒ»Ì×ÓÐÏÞµÄϵͳ×ÊÔ´»òȨÏÞÖС£
Èç¹ûÏÈǰÒѾ°²×°²¢ÅäÖùýSELinux£¬ÄÇô¿ÉÒÔÔÚÈÝÆ÷ʹÓÃsetenforce
1À´ÆôÓÃËü¡£DockerÊØ»¤½ø³ÌµÄSELinux¹¦ÄÜĬÈÏÊǽûÓõģ¬ÐèҪʹÓÃ--selinux-enabledÀ´ÆôÓá£
ÈÝÆ÷µÄ±êÇ©ÏÞÖÆ¿ÉʹÓÃÐÂÔöµÄ¡ª-security-opt¼ÓÔØSELinux»òÕßAppArmorµÄ²ßÂÔ½øÐÐÅäÖ㬸ù¦ÄÜÔÚDocker°æ±¾1.3ÒýÈë¡£
ÀýÈ磺
dockerrun--security-opt=secdriver:name:value-i-tcentosbash |
5. ÊØ»¤½ø³ÌÌØÈ¨
²»ÒªÊ¹ÓÃ--privilegedÃüÁîÐÐÑ¡Ïî¡£·ñÔò½«ÔÊÐíÈÝÆ÷·ÃÎÊËÞÖ÷ÉϵÄËùÓÐÉ豸£¬ÁíÍ⣬ΪÈÝÆ÷Ìá¹©ÌØ¶¨µÄLSM£¨ÀýÈçSELinux»òAppArmor£©ÅäÖ㬽«¸øÓèËüÓëÔËÐÐÔÚËÞÖ÷ÉϵĽø³ÌͬµÈ·ÃÎÊȨÏÞ¡£
±ÜÃâʹÓÃ--privilegedÓÐÖúÓÚ¼õÉÙ¹¥»÷ÃæºÍ¿ÉÄܵÄËÞÖ÷Íþв¡£µ«ÊÇ£¬Õâ²¢²»Òâζ×ÅÔËÐÐÊØ»¤½ø³Ìʱ²»ÐèÒªrootȨÏÞ£¬ÔÚ×îа汾ÖÐÕâÈÔÈ»ÊDZØÐëµÄ¡£
Æô¶¯ÊØ»¤½ø³ÌºÍÈÝÆ÷µÄȨÏÞÖ»Äܸ³ÓèÊÜÐÅÈεÄÓû§¡£
¿Éͨ¹ýʹÓÃ-uÑ¡ÏîÈõ»¯ÈÝÆ÷ÄÚ·ÃÎÊȨÏÞ¡£ÀýÈ磺
dockerrun-u<username>-it<container_name>/bin/bash |
Docker×éµÄÈκÎÓû§²¿·Ö¿ÉÄÜ×îÖÕ´ÓÈÝÆ÷ÖеÄÖ÷»úÉÏ»ñµÃ¸ùÔ´¡£
6. cgroups
ΪÁË·Àֹͨ¹ýºÄ¾¡ÏµÍ³×ÊÔ´Òý·¢¾Ü¾ø·þÎñ£¨DoS£©¹¥»÷£¬¿ÉʹÓÃÌØ¶¨µÄÃüÁîÐвÎÊý±»À´ÆôÓÃһЩ×ÊÔ´ÏÞÖÆ¡£
CPUʹÓãº
dockerrun-it--rm--cpuset=0,1-c2... |
ÄÚ´æÊ¹Óãº
dockerrun-it--rm-m128m... |
´æ´¢Ê¹Óãº
docker-d--storage-optdm.basesize=5G |
´ÅÅÌI/O£º
ĿǰDocker²»Ö§³Ö¡£Í¨¹ýsystemd±©Â¶µÄBlockIO*ÌØÐÔ¿ÉÒÔÔÚÖ§³ÖµÄ²Ù×÷ϵͳÖÐÓÃÀ´¿ØÖÆ´ÅÅÌʹÓÃÅä¶î¡£
7. ¶þ½øÖÆSUID/GUID
SUIDºÍGUID³ÌÐòÔÚÊܹ¥»÷µ¼ÖÂÈÎÒâ´úÂëÖ´ÐУ¨È绺³åÇøÒç³ö£©Ê±½«·Ç³£Î£ÏÕ£¬ÒòΪËüÃǽ«ÔËÐÐÔÚ½ø³ÌÎļþËùÓÐÕß»ò×éµÄÉÏÏÂÎÄÖС£
Èç¹û¿ÉÄܵϰ£¬Ê¹ÓÃÌØ¶¨µÄÃüÁîÐвÎÊý¼õÉÙ¸³ÓèÈÝÆ÷µÄÄÜÁ¦£¬×èÖ¹SUIDºÍSGIDÉúЧ¡£
dockerrun-it--rm--cap-dropSETUID--cap-dropSETGID... |
»¹ÓÐÖÖ×ö·¨£¬¿ÉÒÔ¿¼ÂÇÔÚ¹ÒÔØÎļþϵͳʱʹÓÃnosuidÊôÐÔÀ´ÒƳýµôSUIDÄÜÁ¦¡£
×îºóÒ»ÖÖ×ö·¨ÊÇ£¬É¾³ýϵͳÖв»ÐèÒªµÄSUIDºÍGUID³ÌÐò¡£ÕâÀà³ÌÐò¿ÉÔÚLinuxϵͳÖÐÔËÐÐÒÔÏÂÃüÁî¶øÕÒµ½£º
find/-perm-4000-execls-l{};2>/dev/null
find/-perm-2000-execls-l{};2>/dev/null |
È»ºó£¬¿ÉÒÔʹÓÃÀàËÆÓÚÏÂÃæµÄ[11]ÃüÁî½«ÒÆ³ýSUIDºÍGUIDÎļþȨÏÞ£º
sudochmodu-sfilenamesudochmod-Rg-sdirectory |
8. É豸¿ØÖÆ×é(/dev/*)
Èç¹ûÐèÒª£¬Ê¹ÓÃÄÚÖõÄ--deviceÑ¡Ï-v²ÎÊý²»ÒªÓë--privilegedÒ»ÆðʹÓã©¡£´Ë¹¦ÄÜÔÚ1.2°æ±¾[12]ÒýÈë¡£
ÀýÈ磨ʹÓÃÉù¿¨£©£º
dockerrun--device=/dev/snd:/dev/snd¡ |
9. ·þÎñºÍÓ¦ÓÃ
Èç¹ûDockerÈÝÆ÷ÓпÉÄܱ»ÈëÇÖ£¬ÎªÁ˼õÉÙºáÏòÔ˶¯µÄ¿ÉÄÜ£¬Ó¦¿¼ÂǸôÀëÃô¸Ð·þÎñ£¨ÈçÔÚËÞÖ÷»òÐéÄâ»úÉÏÔËÐÐSSH·þÎñ£©¡£
´ËÍ⣬²»ÒªÔÚÈÝÆ÷ÄÚʹÓÃrootȨÏÞÔËÐв»ÊÜÐÅÈεÄÓ¦Óá£
10. ¹ÒÔØµã
ʹÓÃÔÉúÈÝÆ÷¿â£¨Èçlibcontainer£©Ê±£¬Docker»á×Ô¶¯´¦ÀíÕâÏî¡£
µ«ÊÇ£¬Ê¹ÓÃLXCÈÝÆ÷¿âʱ£¬Ãô¸ÐµÄ¹ÒÔØµã×îºÃÒÔÖ»¶ÁȨÏÞÊÖ¶¯¹ÒÔØ£¬°üÀ¨£º
/sys
/proc/sys
/proc/sysrq-trigger
/proc/irq
/proc/bus |
¹ÒÔØÈ¨ÏÞÓ¦ÔÚÖ®ºóÒÆ³ý£¬ÒÔ·ÀÖ¹ÖØÐ¹ÒÔØ¡£
11. LinuxÄÚºË
ʹÓÃϵͳÌṩµÄ¸üй¤¾ß£¨Èçapt-get¡¢yumµÈ£©È·±£ÄÚºËÊÇ×îеġ£¹ýʱµÄÄÚºËÏà±ÈÒѹ«¿ªµÄ©¶´Î£ÏÕÐÔ¸ü´ó¡£
ʹÓÃGRSEC»òPAXÀ´Ç¿»¯Äںˣ¬ÀýÈçÕë¶ÔÄÚ´æÆÆ»µÂ©¶´Ìṩ¸ü¸ßµÄ°²È«ÐÔ¡£
12. Óû§ÃüÃû¿Õ¼ä
Docker²»Ö§³ÖÓû§ÃüÃû¿Õ¼ä£¬µ«ËüÊÇĿǰÕýÔÚ¿ª·¢µÄ¹¦ÄÜ¡£ÏÖÔÚ£¬LXCÇý¶¯Ö§³ÖUIDÓ³É䣬µ«ÔÉúµÄlibcontainer¿â²»Ö§³Ö¡£
¸Ã¹¦ÄÜÔÊÐíDockerÊØ»¤½ø³ÌÒÔ·ÇÌØÈ¨Óû§Éí·ÝÔËÐÐÔÚËÞÖ÷ÉÏ£¬µ«ÔÚÈÝÆ÷ÄÚ¿´ÆðÀ´ÏñÊÇÒÔrootÔËÐС£
13. libseccomp£¨ºÍseccomp-bpf À©Õ¹£©
libseccomp¿âÔÊÐí»ùÓÚ°×Ãûµ¥·½·¨À´ÏÞÖÆLinuxÄں˵Äϵͳµ÷ÓóÌÐòµÄʹÓá£×îºÃ½ûÓÃÊܹ¥»÷ÈÝÆ÷ÖжÔÓÚϵͳ²Ù×÷²»ÊǺÜÖØÒªµÄϵͳµ÷ÓóÌÐò£¬ÒÔ·ÀÖ¹Æä±»ÀÄÓûòÎóÓá£
´Ë¹¦ÄÜĿǰÕýÔÚ¿ª·¢ÖУ¨LXCÇý¶¯ÖдæÔÚ£¬µ«ÊÇÏÖÔÚĬÈϵÄlibcontainerÖÐûÓУ©¡£Ê¹ÓÃLXCÇý¶¯³ÌÐòÀ´ÖØÆôDocker³ÌÐò£º
ÈçºÎÉú³ÉseccompÅäÖõÄ˵Ã÷¶¼ÔÚGitHub²Ö¿âµÄ¡°contrib¡±]Îļþ¼Ð¡£Ö®ºó¿ÉÓÃÏÂÃæµÄÃüÁîÀ´´´½¨Ò»¸öÒÔLXCΪ»ù´¡µÄDockerÈÝÆ÷£º
dockerrun--lxc-conf="lxc.seccomp=$file"<restofarguments> |
14. ÄÜÁ¦
¾¡¿ÉÄܽµµÍLinuxÄÜÁ¦¡£DockerĬÈϵÄÄÜÁ¦°üÀ¨£ºchown¡¢dac_override¡¢fowner¡¢kill¡¢setgid¡¢setuid¡¢setpcap¡¢net_bind_service¡¢net_raw¡¢sys_chroot¡¢mknod¡¢setfcap¡¢ºÍaudit_write`¡£
ÔÚÃüÁîÐÐÆô¶¯ÈÝÆ÷ʱ£¬¿ÉÒÔͨ¹ý--cap-add=[]»ò--cap-drop=[]½øÐпØÖÆ¡£
ÀýÈ磺
dockerrun--cap-dropsetuid--cap-dropsetgid-ti<container_name>/bin/sh |
´Ë¹¦ÄÜÔÚDocker 1.2°æ±¾ÒýÈë¡£
15. ¶à×â»§»·¾³
ÓÉÓÚDockerÈÝÆ÷Äں˵Ĺ²ÏíÐÔÖÊ£¬ÎÞ·¨ÔÚ¶à×â»§»·¾³Öа²È«µØÊµÏÖÔðÈηÖÀë¡£½¨Ò齫ÈÝÆ÷ÔËÐÐÔÚûÓÐÆäËüÄ¿µÄ£¬ÇÒ²»ÓÃÓÚÃô¸Ð²Ù×÷µÄËÞÖ÷ÉÏ¡£¿ÉÒÔ¿¼Âǽ«ËùÓзþÎñÇ¨ÒÆµ½Docker¿ØÖƵÄÈÝÆ÷³Ç¡£
¿ÉÄܵϰ£¬ÉèÖÃÊØ»¤½ø³ÌʹÓÃ--icc=false£¬²¢¸ù¾ÝÐèÒªÔÚdocker runʱָ¶¨-link£¬»òͨ¹ý¡ª-export=port±©Â¶ÈÝÆ÷µÄÒ»¸ö¶Ë¿Ú£¬¶ø²»ÐèÒªÔÚËÞÖ÷ÉÏ·¢²¼¡£
½«Ï໥ÐÅÈεÄÈÝÆ÷µÄ×éÓ³Éäµ½²»Í¬»úÆ÷ÉÏ¡£
16. ÍêÈ«ÐéÄ⻯
ʹÓÃÒ»¸öÍêÈ«ÐéÄ⻯½â¾ö·½°¸À´ÈÝÄÉDocker£¬ÈçKVM¡£Èç¹ûÈÝÆ÷ÄÚµÄÄں˩¶´±»·¢ÏÖ£¬Õ⽫·ÀÖ¹Æä´ÓÈÝÆ÷À©´óµ½ËÞÖ÷ÉÏ¡£
ÈçͬDocker-in-Docker¹¤¾ßËùʾ£¬Docker¾µÏñ¿ÉÒÔǶÌ×À´Ìṩ¸ÃKVMÐéÄâ²ã¡£
17. °²È«ÉóºË
¶¨ÆÚ¶ÔÄãµÄËÞÖ÷ϵͳºÍÈÝÆ÷½øÐа²È«ºË²é£¬ÒÔÕÒ³ö¿ÉÄܵ¼ÖÂϵͳ±»ÈëÇֵĴíÎóÅäÖûò©¶´¡£ |