What's Next for Containers ? User Namespaces
原文 http://dockone.io/article/530
【編者的話】本文翻譯自Red Hat官方博客,文中從namespace介紹起,并介紹namespace對容器的幫助,其后,介紹了namespace使用不當的后果,以及 namespace自身缺陷,并在最后解釋了為什么Red Hat不在企業產品中使用namespace的原因。
什么是用戶命名空間呢? 繼續 apartment complex 的類比,過去,用戶和組的編號在每個容器和底層主機一直是相同的,就像公共頻道10在一棟公寓樓的每個單元上通常是一樣的。
但想象一下,如果不同公寓的人們從不同的有線和衛星電視公司接收電視信號,頻道10對每個人來說就是不一樣的。對某人來說可能是體育,而對其他人來說則是新聞。
在舊的linux內核中(linux內核版本3.8以前),有一個單一數據結構,這是用來保存用戶和群組。從內核版本3.8開始,用戶命名是不可變的。用戶可以通過一個CLONE_NEWUSER標記,使用clone()系統調用,這樣做之后,一個分離的用戶命名空間就創建好了。你可以把這些作為新命名空間內的嵌套數據結構。在這個新的命名空間中,有一個用戶和組的虛擬設置。這些以uid/gid 0開頭的用戶和組,會映射到命名空間外一個非信任的(非root)uid/gid。
在現代linux內核中,管理員可以創建大約40億的用戶,具體來說是4,294,967,294(無符號32位整數)。40億用戶可以被映射到每個用戶命名空間中,這為管理員提供了充足的可伸縮性。
useradd -u 4294967294 testuser
你可以自己嘗試4294967295...
用戶命名空間與容器
有了一個用戶命名空間,不同的容器就可以有完全不同的用戶(uid)和群組(gid)編號。容器A中的用戶500可以映射到容器外用戶1500,容器B中的用戶500則可以映射到容器外用戶2500.
那我為什么做這些呢?因為對某一容器內的root訪問,這是特別有用的。想象一下,容器A中的root用戶(uid 0)映射到容器外用戶uid 1000,容器B中的root用戶映射到容器外用戶uid 2000。和網絡端口映射相似,管理員可以在容器內分配給用戶uid 0(root),而不用在底層主機分配給用戶uid 0。同時,在容器內,這也允許一個用戶自由地增加或刪除用戶。
第一次聽到這些,可能覺得不錯,但還有后話。回到apartment complex analogy,想象一下,每個租戶可以定制他們電力和自來水管道。每一個人都是他們自己的微型主管人。如果一個用戶在給他們的公寓接電源時,沒有使用適當的標準線路,這將給其他租戶造成危害。
完成工作
檢查一下內核提交日志,用戶命名空間是在內核版本3.8添加的,Red Hat Enterprise Linux 7使用的是內核3.10,但命名空間在Red Hat Enterprise Linux 7.1無法工作,出什么事了呢?通過Fedora Project,廣大Linux社區和內部,Red Hat可以和用戶命名空間一起正常工作很長一段時間了,我們將其視為一個重要的功能,并鼓勵容器采用這項功能。但Red Hat現在禁用這些,因為我們認為用戶命名空間需要在上游社區孵化更長時間,才能讓用戶充分理解安全影響,以及如何減輕或補救任何漏洞或攻擊,這些漏洞或攻擊向量可能會將我們的用戶暴露給惡意活動。
新技術通常是不安全的,無論何時,一個常規用戶在容器內被分配為root,就有可能在容器外逐步升級為root。因此,當我們把用戶命名空間作為企業組合內部功能時,只有擁有root權限的用戶可以創建它們。在限制可能暴露給新的攻擊向量時,阻止非信任用戶利用用戶命名空間是很重要的。這是一個有目的的,戰略的,以及社區主導的方法,這個方法可以讓用戶安全地對用戶命名空間施加杠桿效應。Red Hat相信,在命名空間可以被非root用戶在企業產品,如Red Hat Enterprise Linux,全面地施加杠桿作用之前,社區還有很多工作需要完成。
在所有的Red Hat企業產品中,包括專注于Linux容器的解決方案,如Red Hat Enterprise Linux Atomic Host and OpenShift Enterprise 3,我們不會允許這些功能(無論是否在內核中),直到我們確定這些功能已經適合在企業中使用。在命名空間中的案例中,它們并不適合企業使用。作為致力于尖端Linux技術項目和企業硬件化過程的重要組成部分,上游的Fedora社區已經在最新的 Fedora Cloud, Fedora Server和Fedora Workstation允許這項特色。這提供了一個極好的測試平臺,用來檢驗這項特色在實踐中的表現,以及讓社區對這項特色有持續性創新。
Red Hat Enterprise Linux的目標,以及其所有專業產品是為用戶在部署應用時,提供一個穩定,安全,并容易管理的操作環境。Red Hat只允許root用戶使用命名空間的方式,是高標準(我們為產品安全所設置的)的反映。軟件正在迅速改變,但在特色功能和安全之間有一個持久的斗爭,Red Hat正在努力推動這兩者前進。
原文鏈接: What's Next for Containers ? User Namespaces (翻譯:洪國安 審校:)
</div>