2016-04-05 30 views

回答

14

以特權模式運行確實爲容器提供了所有功能。 但它是很好的做法,總是給一個容器,它需要 的最低要求,如果你看看碼頭工人文檔它們也指該標誌

全集裝箱能力(--privileged)

的 - 特權標誌賦予容器所有的功能,並且還提升了設備cgroup控制器強制實施的所有限制。換句話說,容器可以做主機可以做的幾乎所有事情。這個標誌存在允許特殊的用例,比如在Docker中運行Docker。

您可以使用--cap-add標誌提供特定功能。有關這些功能的更多信息,請參閱man 7 capabilities。可以使用字面名稱,例如--cap-add CAP_FOWNER

+0

的一側有什麼辦法瞭解特定應用程序需要哪些功能?這對於大多數應用程序來說似乎沒有記錄。 – codefx

+0

@codefx這裏沒有經驗法則,它取決於應用程序以及它在運行時可能調用的系統調用。如果您使用集線器上的現成碼頭圖像,那麼很可能會在那裏提到它。如果你使用你自己編寫的東西,你應該知道你使用的哪些內核API可能需要特殊的功能 – buddy123

2

有一個很好的文章涵蓋from RedHat covering this

雖然搬運工人容器中運行的「根」具有比主機根少的特權,它仍可能取決於你的使用情況需要硬化(使用作爲開發環境VS共享生產羣集)

9

由於這個職位是高在谷歌搜索排名,我想補充的,爲什麼你從來沒有想要運行使用--privileged

我在我的筆記本電腦有NVMe驅動器這樣的容器信息,但它適用於任何工作主辦。

docker run --privileged -t -i --rm ubuntu:latest bash 

首先讓做一些輕微的,以測試/ proc文件系統

從容器:

[email protected]:/# cat /proc/sys/vm/swappiness 
60 
[email protected]:/# echo "61" > /proc/sys/vm/swappiness  
[email protected]:/# cat /proc/sys/vm/swappiness 
60 

確定並改變它爲它的容器或主機?

$ cat /proc/sys/vm/swappiness 
61 

OOPS !,我們可以隨意更改主機的內核參數。但這只是DOS情況,讓我們看看我們是否可以從父主機收集特權信息。

讓我們步行/sys樹並找到引導磁盤的主要次要號碼。

注:我有兩個NVMe驅動器和容器LVM在另一個驅動器

[email protected]:/proc# cat /sys/block/nvme1n1/dev 
259:2 

OK上運行可以讓使設備文件中的位置,其中DBUS規則將不會自動掃描。

[email protected]:/proc# mknod /devnvme1n1 b 259 2 
[email protected]:/proc# sfdisk -d /devnvme1n1 
label: gpt 
label-id: 1BE1DF1D-3523-4F22-B22A-29FEF19F019E 
device: /devnvme1n1 
unit: sectors 
first-lba: 34 
last-lba: 2000409230 
<SNIP> 

OK,我們可以讀到的啓動盤,讓我們做一個設備文件的分區中的一個。雖然我們無法安裝它,但仍然可以使用dd進行復制。

[email protected]:/proc# mknod /devnvme1n1p1 b 259 3 
[email protected]:/# dd if=devnvme1n1p1 of=foo.img 
532480+0 records in 
532480+0 records out 
272629760 bytes (273 MB, 260 MiB) copied, 0.74277 s, 367 MB/s 

確定讓它掛載,看看我們的努力是否有效!

[email protected]:/# mount -o loop foo.img /foo 
[email protected]:/# ls foo 
EFI 
[email protected]:/# ls foo/EFI/ 
Boot Microsoft ubuntu 

因此,基本上,你讓任何人上啓動--privileged容器中的任何容器主機一樣給他們的根訪問該主機上的每個容器。

不幸的是,泊塢窗項目選擇可信計算模型,以及AUTH外插件就沒有辦法防止這一點,所以總是錯誤的添加需要的功能與使用--privileged