亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

directory search
Compose About versions and upgrading (Compose) ASP.NET Core + SQL Server on Linux (Compose) CLI environment variables (Compose) Command-line completion (Compose) Compose(組成) Compose command-line reference(組合命令行參考) Control startup order (Compose) Django and PostgreSQL (Compose) Docker stacks and distributed application bundles (Compose) docker-compose build(docker-compose構(gòu)建) docker-compose bundle docker-compose config docker-compose create docker-compose down docker-compose events docker-compose exec docker-compose help docker-compose images docker-compose kill docker-compose logs docker-compose pause docker-compose port docker-compose ps docker-compose pull docker-compose push docker-compose restart docker-compose rm docker-compose run docker-compose scale docker-compose start docker-compose stop docker-compose top docker-compose unpause docker-compose up Environment file (Compose) Environment variables in Compose Extend services in Compose Frequently asked questions (Compose) Getting started (Compose) Install Compose Link environment variables (deprecated) (Compose) Networking in Compose Overview of Docker Compose Overview of docker-compose CLI Quickstart: Compose and WordPress Rails and PostgreSQL (Compose) Sample apps with Compose Using Compose in production Using Compose with Swarm Engine .NET Core application (Engine) About images, containers, and storage drivers (Engine) Add nodes to the swarm (Engine) Apply custom metadata (Engine) Apply rolling updates (Engine) apt-cacher-ng Best practices for writing Dockerfiles (Engine) Binaries (Engine) Bind container ports to the host (Engine) Breaking changes (Engine) Build your own bridge (Engine) Configure container DNS (Engine) Configure container DNS in user-defined networks (Engine) CouchDB (Engine) Create a base image (Engine) Create a swarm (Engine) Customize the docker0 bridge (Engine) Debian (Engine) Default bridge network Delete the service (Engine) Deploy a service (Engine) Deploy services to a swarm (Engine) Deprecated Engine features Docker container networking (Engine) Docker overview (Engine) Docker run reference (Engine) Dockerfile reference (Engine) Dockerize an application Drain a node (Engine) Engine FAQ (Engine) Fedora (Engine) Get started (Engine) Get started with macvlan network driver (Engine) Get started with multi-host networking (Engine) How nodes work (Engine) How services work (Engine) Image management (Engine) Inspect the service (Engine) Install Docker (Engine) IPv6 with Docker (Engine) Join nodes to a swarm (Engine) Legacy container links (Engine) Lock your swarm (Engine) Manage nodes in a swarm (Engine) Manage sensitive data with Docker secrets (Engine) Manage swarm security with PKI (Engine) Manage swarm service networks (Engine) Migrate to Engine 1.10 Optional Linux post-installation steps (Engine) Overview (Engine) PostgreSQL (Engine) Raft consensus in swarm mode (Engine) Riak (Engine) Run Docker Engine in swarm mode Scale the service (Engine) SDKs (Engine) Select a storage driver (Engine) Set up for the tutorial (Engine) SSHd (Engine) Storage driver overview (Engine) Store service configuration data (Engine) Swarm administration guide (Engine) Swarm mode key concepts (Engine) Swarm mode overlay network security model (Engine) Swarm mode overview (Engine) Understand container communication (Engine) Use multi-stage builds (Engine) Use swarm mode routing mesh (Engine) Use the AUFS storage driver (Engine) Use the Btrfs storage driver (Engine) Use the Device mapper storage driver (Engine) Use the OverlayFS storage driver (Engine) Use the VFS storage driver (Engine) Use the ZFS storage driver (Engine) Engine: Admin Guide Amazon CloudWatch logs logging driver (Engine) Bind mounts (Engine) Collect Docker metrics with Prometheus (Engine) Configuring and running Docker (Engine) Configuring logging drivers (Engine) Control and configure Docker with systemd (Engine) ETW logging driver (Engine) Fluentd logging driver (Engine) Format command and log output (Engine) Google Cloud logging driver (Engine) Graylog Extended Format (GELF) logging driver (Engine) Journald logging driver (Engine) JSON File logging driver (Engine) Keep containers alive during daemon downtime (Engine) Limit a container's resources (Engine) Link via an ambassador container (Engine) Log tags for logging driver (Engine) Logentries logging driver (Engine) PowerShell DSC usage (Engine) Prune unused Docker objects (Engine) Run multiple services in a container (Engine) Runtime metrics (Engine) Splunk logging driver (Engine) Start containers automatically (Engine) Storage overview (Engine) Syslog logging driver (Engine) tmpfs mounts Troubleshoot volume problems (Engine) Use a logging driver plugin (Engine) Using Ansible (Engine) Using Chef (Engine) Using Puppet (Engine) View a container's logs (Engine) Volumes (Engine) Engine: CLI Daemon CLI reference (dockerd) (Engine) docker docker attach docker build docker checkpoint docker checkpoint create docker checkpoint ls docker checkpoint rm docker commit docker config docker config create docker config inspect docker config ls docker config rm docker container docker container attach docker container commit docker container cp docker container create docker container diff docker container exec docker container export docker container inspect docker container kill docker container logs docker container ls docker container pause docker container port docker container prune docker container rename docker container restart docker container rm docker container run docker container start docker container stats docker container stop docker container top docker container unpause docker container update docker container wait docker cp docker create docker deploy docker diff docker events docker exec docker export docker history docker image docker image build docker image history docker image import docker image inspect docker image load docker image ls docker image prune docker image pull docker image push docker image rm docker image save docker image tag docker images docker import docker info docker inspect docker kill docker load docker login docker logout docker logs docker network docker network connect docker network create docker network disconnect docker network inspect docker network ls docker network prune docker network rm docker node docker node demote docker node inspect docker node ls docker node promote docker node ps docker node rm docker node update docker pause docker plugin docker plugin create docker plugin disable docker plugin enable docker plugin inspect docker plugin install docker plugin ls docker plugin push docker plugin rm docker plugin set docker plugin upgrade docker port docker ps docker pull docker push docker rename docker restart docker rm docker rmi docker run docker save docker search docker secret docker secret create docker secret inspect docker secret ls docker secret rm docker service docker service create docker service inspect docker service logs docker service ls docker service ps docker service rm docker service scale docker service update docker stack docker stack deploy docker stack ls docker stack ps docker stack rm docker stack services docker start docker stats docker stop docker swarm docker swarm ca docker swarm init docker swarm join docker swarm join-token docker swarm leave docker swarm unlock docker swarm unlock-key docker swarm update docker system docker system df docker system events docker system info docker system prune docker tag docker top docker unpause docker update docker version docker volume docker volume create docker volume inspect docker volume ls docker volume prune docker volume rm docker wait Use the Docker command line (Engine) Engine: Extend Access authorization plugin (Engine) Docker log driver plugins Docker network driver plugins (Engine) Extending Engine with plugins Managed plugin system (Engine) Plugin configuration (Engine) Plugins API (Engine) Volume plugins (Engine) Engine: Security AppArmor security profiles for Docker (Engine) Automation with content trust (Engine) Content trust in Docker (Engine) Delegations for content trust (Engine) Deploying Notary (Engine) Docker security (Engine) Docker security non-events (Engine) Isolate containers with a user namespace (Engine) Manage keys for content trust (Engine) Play in a content trust sandbox (Engine) Protect the Docker daemon socket (Engine) Seccomp security profiles for Docker (Engine) Secure Engine Use trusted images Using certificates for repository client verification (Engine) Engine: Tutorials Engine tutorials Network containers (Engine) Get Started Part 1: Orientation Part 2: Containers Part 3: Services Part 4: Swarms Part 5: Stacks Part 6: Deploy your app Machine Amazon Web Services (Machine) Digital Ocean (Machine) docker-machine active docker-machine config docker-machine create docker-machine env docker-machine help docker-machine inspect docker-machine ip docker-machine kill docker-machine ls docker-machine provision docker-machine regenerate-certs docker-machine restart docker-machine rm docker-machine scp docker-machine ssh docker-machine start docker-machine status docker-machine stop docker-machine upgrade docker-machine url Driver options and operating system defaults (Machine) Drivers overview (Machine) Exoscale (Machine) Generic (Machine) Get started with a local VM (Machine) Google Compute Engine (Machine) IBM Softlayer (Machine) Install Machine Machine Machine CLI overview Machine command-line completion Machine concepts and help Machine overview Microsoft Azure (Machine) Microsoft Hyper-V (Machine) Migrate from Boot2Docker to Machine OpenStack (Machine) Oracle VirtualBox (Machine) Provision AWS EC2 instances (Machine) Provision Digital Ocean Droplets (Machine) Provision hosts in the cloud (Machine) Rackspace (Machine) VMware Fusion (Machine) VMware vCloud Air (Machine) VMware vSphere (Machine) Notary Client configuration (Notary) Common Server and signer configurations (Notary) Getting started with Notary Notary changelog Notary configuration files Running a Notary service Server configuration (Notary) Signer configuration (Notary) Understand the service architecture (Notary) Use the Notary client
characters

在審查Docker安全性時(shí),需要考慮四個(gè)主要方面:

  • 內(nèi)核的內(nèi)在安全性及其對(duì)命名空間和cgroups的支持;

  • Docker守護(hù)進(jìn)程本身的攻擊面;

  • 容器配置文件中的漏洞,默認(rèn)情況下或用戶自定義時(shí)。

  • 內(nèi)核的“hardening”安全功能以及它們?nèi)绾闻c容器交互。

內(nèi)核命名空間

Docker容器與LXC容器非常相似,并且它們具有類似的安全功能。當(dāng)你啟動(dòng)一個(gè)容器時(shí)docker run,Docker會(huì)在后臺(tái)創(chuàng)建一組容器的命名空間和控制組。

命名空間提供了第一個(gè)也是最直接的隔離形式:在容器中運(yùn)行的進(jìn)程看不到,甚至更少影響在另一個(gè)容器或主機(jī)系統(tǒng)中運(yùn)行的進(jìn)程。

每個(gè)容器也都有自己的網(wǎng)絡(luò)堆棧,這意味著容器不會(huì)獲得對(duì)另一個(gè)容器的套接字或接口的特權(quán)訪問(wèn)。當(dāng)然,如果主機(jī)系統(tǒng)相應(yīng)設(shè)置,容器可以通過(guò)各自的網(wǎng)絡(luò)接口相互交互 - 就像他們可以與外部主機(jī)進(jìn)行交互一樣。當(dāng)您為容器指定公共端口或使用鏈接時(shí),容器之間允許IP流量。它們可以互相ping通,發(fā)送/接收UDP數(shù)據(jù)包,并建立TCP連接,但如果需要可以限制它們。從網(wǎng)絡(luò)體系結(jié)構(gòu)的角度來(lái)看,給定Docker主機(jī)上的所有容器都位于網(wǎng)橋接口上。這意味著它們就像通過(guò)普通以太網(wǎng)交換機(jī)連接的物理機(jī)器一樣; 不多也不少。

提供內(nèi)核命名空間和專用網(wǎng)絡(luò)的代碼有多成熟?在內(nèi)核版本2.6.15和2.6.26之間引入了內(nèi)核命名空間。這意味著自2008年7月(2.6.26發(fā)布日期)以來(lái),命名空間代碼已在大量生產(chǎn)系統(tǒng)上得到運(yùn)用和審查。還有更多:命名空間代碼的設(shè)計(jì)和靈感甚至更老。命名空間實(shí)際上是為了重新實(shí)現(xiàn)OpenVZ的功能,以便它們可以在主流內(nèi)核中合并。OpenVZ最初于2005年發(fā)布,因此設(shè)計(jì)和實(shí)現(xiàn)都相當(dāng)成熟。

控制組

控制組是Linux容器的另一個(gè)關(guān)鍵組件。他們實(shí)施資源會(huì)計(jì)和限制。它們提供了許多有用的度量標(biāo)準(zhǔn),但它們也有助于確保每個(gè)容器獲得其公平的內(nèi)存,CPU和磁盤I/O份額; 更重要的是,單個(gè)容器不能耗盡這些資源中的一個(gè)來(lái)降低系統(tǒng)的性能。

因此,盡管它們不能阻止一個(gè)容器訪問(wèn)或影響另一個(gè)容器的數(shù)據(jù)和進(jìn)程,但它們對(duì)抵御一些拒絕服務(wù)攻擊至關(guān)重要。它們對(duì)于多租戶平臺(tái)尤其重要,例如公共和私有PaaS,即使在某些應(yīng)用程序開始出現(xiàn)故障時(shí)也能保證一致的正常運(yùn)行時(shí)間(和性能)。

控制組也有一段時(shí)間了:代碼是在2006年開始的,最初被合并到內(nèi)核2.6.24中。

Docker守護(hù)進(jìn)程攻擊面

使用Docker運(yùn)行容器(和應(yīng)用程序)意味著運(yùn)行Docker守護(hù)進(jìn)程。這個(gè)守護(hù)進(jìn)程當(dāng)前需要root特權(quán),因此你應(yīng)該知道一些重要的細(xì)節(jié)。

首先,應(yīng)該只允許受信任的用戶來(lái)控制你的Docker守護(hù)進(jìn)程。這是一些強(qiáng)大的Docker功能的直接后果。具體來(lái)說(shuō),Docker允許您在Docker主機(jī)和訪客容器之間共享一個(gè)目錄; 它允許您在不限制容器訪問(wèn)權(quán)限的情況下這樣做。這意味著您可以啟動(dòng)一個(gè)容器,其/host目錄將成為/主機(jī)上的目錄; 容器將能夠不受任何限制地改變你的主機(jī)文件系統(tǒng)。這與虛擬化系統(tǒng)如何允許文件系統(tǒng)資源共享類似。沒(méi)有什么能夠阻止你與虛擬機(jī)共享你的根文件系統(tǒng)(甚至你的根塊設(shè)備)。

這具有很強(qiáng)的安全意義:例如,如果您通過(guò)Web服務(wù)器來(lái)監(jiān)控Docker以通過(guò)API配置容器,則應(yīng)該比平時(shí)更加仔細(xì)地進(jìn)行參數(shù)檢查,以確保惡意用戶無(wú)法傳遞制作的參數(shù),從而導(dǎo)致Docker創(chuàng)建任意容器。

出于這個(gè)原因,Docker 0.5.2中更改了REST API端點(diǎn)(由Docker CLI用于與Docker守護(hù)進(jìn)程通信),現(xiàn)在使用UNIX套接字而不是127.0.0.1上綁定的TCP套接字(后者容易發(fā)生如果您碰巧在您的本地機(jī)器上直接運(yùn)行Docker,而不是在虛擬機(jī)之外),則可以發(fā)起跨站請(qǐng)求偽造攻擊。然后,您可以使用傳統(tǒng)的UNIX權(quán)限檢查來(lái)限制對(duì)控制套接字的訪問(wèn)。

如果您明確決定這么做,您還可以通過(guò)HTTP公開REST API。但是,如果您這樣做,意識(shí)到上述安全隱含意義,則應(yīng)確保它只能從可信網(wǎng)絡(luò)或VPN訪問(wèn); 或受到例如stunnel和客戶端SSL證書的保護(hù)。您還可以使用HTTPS和證書保護(hù)他們。

守護(hù)進(jìn)程也可能容易受到其他輸入的影響,例如從磁盤docker load或從網(wǎng)絡(luò)加載磁盤的映像docker pull。從Docker 1.3.2開始,圖像現(xiàn)在在Linux/Unix平臺(tái)的chrooted子進(jìn)程中提取,這是實(shí)現(xiàn)特權(quán)分離更廣泛工作的第一步。從Docker 1.10.0開始,所有圖像都通過(guò)其內(nèi)容的加密校驗(yàn)和進(jìn)行存儲(chǔ)和訪問(wèn),從而限制了攻擊者與現(xiàn)有圖像發(fā)生沖突的可能性。

最終,預(yù)計(jì)Docker守護(hù)進(jìn)程將運(yùn)行受限特權(quán),將操作委托給審核良好的子進(jìn)程,每個(gè)子進(jìn)程都有其自己的(非常有限的)Linux功能范圍,虛擬網(wǎng)絡(luò)設(shè)置,文件系統(tǒng)管理等。也就是說(shuō),大多數(shù)很可能,Docker引擎本身的部分將運(yùn)行在容器內(nèi)部。

最后,如果您在服務(wù)器上運(yùn)行Docker,則建議在服務(wù)器上專門運(yùn)行Docker,并將所有其他服務(wù)移動(dòng)到由Docker控制的容器中。當(dāng)然,保留你最喜歡的管理工具(可能至少是一個(gè)SSH服務(wù)器)以及現(xiàn)有的監(jiān)控/監(jiān)督流程(如NRPE和collectd)是很好的。

Linux內(nèi)核功能

默認(rèn)情況下,Docker使用一組受限制的功能啟動(dòng)容器。那是什么意思?

功能將二元“root/non-root”二分法轉(zhuǎn)變?yōu)橐粋€(gè)細(xì)粒度的訪問(wèn)控制系統(tǒng)。只需要在1024以下的端口上綁定的進(jìn)程(如Web服務(wù)器)不必以root用戶身份運(yùn)行:他們可以net_bind_service改為授予權(quán)限。對(duì)于幾乎所有需要root權(quán)限的特定領(lǐng)域,還有許多其他功能。

這對(duì)于容器安全意義重大。讓我們看看為什么!

您的平均服務(wù)器(裸機(jī)或虛擬機(jī))需要以root身份運(yùn)行一系列進(jìn)程。那些通常包括SSH,cron,syslogd; 硬件管理工具(例如加載模塊),網(wǎng)絡(luò)配置工具(例如處理DHCP,WPA或VPN)等等。容器是非常不同的,因?yàn)閹缀跛羞@些任務(wù)都由容器周圍的基礎(chǔ)設(shè)施處理:

  • SSH訪問(wèn)通常由Docker主機(jī)上運(yùn)行的單個(gè)服務(wù)器管理;

  • cron在必要時(shí)應(yīng)該作為用戶進(jìn)程運(yùn)行,專門針對(duì)需要其調(diào)度服務(wù)的應(yīng)用程序?qū)iT定制,而不是作為平臺(tái)范圍的設(shè)施;

  • 日志管理通常也會(huì)交給Docker,或者由Loggly或Splunk等第三方服務(wù)提供;

  • 硬件管理是無(wú)關(guān)緊要的,這意味著你永遠(yuǎn)不需要udevd在容器中運(yùn)行或等效的守護(hù)進(jìn)程;

  • 網(wǎng)絡(luò)管理發(fā)生在容器的外面,執(zhí)行關(guān)注點(diǎn)分離盡可能的,這意味著一個(gè)容器不應(yīng)該需要執(zhí)行ifconfig,route或IP命令(當(dāng)容器被特別設(shè)計(jì),以表現(xiàn)得象一個(gè)路由器或防火墻除外,當(dāng)然) 。

這意味著,在大多數(shù)情況下,容器將不再需要“真正的” root特權(quán)可言。因此,集裝箱可以運(yùn)行一個(gè)能力較低的集合;這意味著容器中的“根”比真正的“根”要少得多。例如,有可能:

  • 否認(rèn)所有“mount”操作;

  • 拒絕訪問(wèn)原始套接字(以防止數(shù)據(jù)包欺騙);

  • 拒絕訪問(wèn)某些文件系統(tǒng)操作,如創(chuàng)建新設(shè)備節(jié)點(diǎn),更改文件所有者或更改屬性(包括不可變標(biāo)志);

  • 拒絕模塊加載;

  • 和其他許多。

這意味著即使入侵者設(shè)法在容器內(nèi)升級(jí)到根目錄,對(duì)于造成嚴(yán)重破壞或升級(jí)到主機(jī)也將變得更加困難。

這不會(huì)影響常規(guī)的網(wǎng)絡(luò)應(yīng)用程序; 但惡意用戶會(huì)發(fā)現(xiàn)他們可以使用的武器庫(kù)大大縮?。∧J(rèn)情況下,Docker將刪除除所需功能之外的所有功能,即白名單而不是黑名單方法。您可以在Linux手冊(cè)頁(yè)中看到完整的可用功能列表。

運(yùn)行Docker容器的一個(gè)主要風(fēng)險(xiǎn)是給容器默認(rèn)的一組功能和掛載可能會(huì)獨(dú)立提供不完全的隔離,或者與內(nèi)核漏洞結(jié)合使用。

Docker支持添加和刪除功能,允許使用非默認(rèn)配置文件。這可能會(huì)通過(guò)刪除功能使Docker更安全,或者通過(guò)增加功能降低Docker的安全性。對(duì)于用戶來(lái)說(shuō),最好的做法是去除除了他們的進(jìn)程明確需要的所有功能。

其他內(nèi)核安全功能

功能只是現(xiàn)代Linux內(nèi)核提供的眾多安全功能之一。還可以利用Docker等現(xiàn)有知名系統(tǒng),如TOMOYO,AppArmor,SELinux,GRSEC等。

雖然Docker目前僅支持功能,但不會(huì)干擾其他系統(tǒng)。這意味著有很多不同的方法來(lái)加固Docker主機(jī)。這里有一些例子。

  • 您可以使用GRSEC和PAX運(yùn)行內(nèi)核。這將在編譯時(shí)和運(yùn)行時(shí)增加許多安全檢查; 它也會(huì)擊敗許多漏洞,這要?dú)w功于地址隨機(jī)化等技術(shù)。它不需要特定于Docker的配置,因?yàn)檫@些安全特性適用于系統(tǒng)范圍,獨(dú)立于容器。

  • 如果您的發(fā)行版帶有Docker容器的安全模型模板,您可以直接使用它們。例如,我們發(fā)布了一個(gè)可與AppArmor配合使用的模板,而Red Hat提供了適用于Docker的SELinux策略。這些模板提供了一個(gè)額外的安全網(wǎng)(盡管它與功能重疊)。

  • 您可以使用您最喜歡的訪問(wèn)控制機(jī)制來(lái)定義自己的策略。

就像有很多第三方工具來(lái)擴(kuò)充Docker容器,例如特殊網(wǎng)絡(luò)拓?fù)浠蚬蚕砦募到y(tǒng)一樣,您可以期望看到工具來(lái)強(qiáng)化現(xiàn)有的Docker容器,而不會(huì)影響Docker的核心。

從Docker 1.10起,Docker守護(hù)進(jìn)程直接支持用戶命名空間。此功能允許將容器中的根用戶映射到容器外部的非uid-0用戶,這有助于減輕容器突破的風(fēng)險(xiǎn)。該工具可用,但默認(rèn)情況下不啟用。

有關(guān)此功能的更多信息,請(qǐng)參閱命令行參考中的守護(hù)程序命令。有關(guān)Docker中用戶命名空間實(shí)現(xiàn)的其他信息可以在此博客文章中找到。

結(jié)論

默認(rèn)情況下,Docker容器非常安全; 特別是如果你照顧在容器內(nèi)運(yùn)行你的進(jìn)程作為非特權(quán)用戶(即非root)。

您可以通過(guò)啟用AppArmor,SELinux,GRSEC或您最喜歡的強(qiáng)化解決方案來(lái)添加額外的安全層。

最后但并非最不重要的一點(diǎn)是,如果您在其他集裝箱系統(tǒng)中看到有趣的安全功能,這些內(nèi)核功能也可能在Docker中實(shí)現(xiàn)。我們歡迎用戶提交問(wèn)題,提出請(qǐng)求并通過(guò)郵件列表進(jìn)行溝通。

相關(guān)信息

  • 使用可信映像

  • Seccomp Docker的安全配置文件

  • 適用于Docker的AppArmor安全配置文件

  • 關(guān)于集裝箱安全(2014年)

  • Docker群集模式覆蓋網(wǎng)絡(luò)安全模型

Previous article: Next article: