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

目錄 搜尋
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構建) 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
文字

在審查Docker安全性時,需要考慮四個主要方面:

  • 內核的內在安全性及其對命名空間和cgroups的支持;

  • Docker守護進程本身的攻擊面;

  • 容器配置文件中的漏洞,默認情況下或用戶自定義時。

  • 內核的“hardening”安全功能以及它們如何與容器交互。

內核命名空間

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

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

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

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

控制組

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

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

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

Docker守護進程攻擊面

使用Docker運行容器(和應用程序)意味著運行Docker守護進程。這個守護進程當前需要root特權,因此你應該知道一些重要的細節(jié)。

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

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

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

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

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

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

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

Linux內核功能

默認情況下,Docker使用一組受限制的功能啟動容器。那是什么意思?

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

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

您的平均服務器(裸機或虛擬機)需要以root身份運行一系列進程。那些通常包括SSH,cron,syslogd; 硬件管理工具(例如加載模塊),網(wǎng)絡配置工具(例如處理DHCP,WPA或VPN)等等。容器是非常不同的,因為幾乎所有這些任務都由容器周圍的基礎設施處理:

  • SSH訪問通常由Docker主機上運行的單個服務器管理;

  • cron在必要時應該作為用戶進程運行,專門針對需要其調度服務的應用程序專門定制,而不是作為平臺范圍的設施;

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

  • 硬件管理是無關緊要的,這意味著你永遠不需要udevd在容器中運行或等效的守護進程;

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

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

  • 否認所有“mount”操作;

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

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

  • 拒絕模塊加載;

  • 和其他許多。

這意味著即使入侵者設法在容器內升級到根目錄,對于造成嚴重破壞或升級到主機也將變得更加困難。

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

運行Docker容器的一個主要風險是給容器默認的一組功能和掛載可能會獨立提供不完全的隔離,或者與內核漏洞結合使用。

Docker支持添加和刪除功能,允許使用非默認配置文件。這可能會通過刪除功能使Docker更安全,或者通過增加功能降低Docker的安全性。對于用戶來說,最好的做法是去除除了他們的進程明確需要的所有功能。

其他內核安全功能

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

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

  • 您可以使用GRSEC和PAX運行內核。這將在編譯時和運行時增加許多安全檢查; 它也會擊敗許多漏洞,這要歸功于地址隨機化等技術。它不需要特定于Docker的配置,因為這些安全特性適用于系統(tǒng)范圍,獨立于容器。

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

  • 您可以使用您最喜歡的訪問控制機制來定義自己的策略。

就像有很多第三方工具來擴充Docker容器,例如特殊網(wǎng)絡拓撲或共享文件系統(tǒng)一樣,您可以期望看到工具來強化現(xiàn)有的Docker容器,而不會影響Docker的核心。

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

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

結論

默認情況下,Docker容器非常安全; 特別是如果你照顧在容器內運行你的進程作為非特權用戶(即非root)。

您可以通過啟用AppArmor,SELinux,GRSEC或您最喜歡的強化解決方案來添加額外的安全層。

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

相關信息

  • 使用可信映像

  • Seccomp Docker的安全配置文件

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

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

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

上一篇: 下一篇: