如何在Fedora中為用戶授予使用Docker的權(quán)限?
譯文
在docker開發(fā)列表上,有人詢問有沒有描述如何將用戶添加到docker用戶組的Fedora說明文檔。該用戶想要允許其用戶可以執(zhí)行docker search(在docker中搜索一番),設(shè)法找到用戶可以使用的映像。
下面內(nèi)容來自關(guān)于Fedora的Docker安裝說明文檔(http://docs.docker.com/installation/fedora/):
為用戶授予使用Docker的權(quán)限
Fedora 19和20隨帶Docker 0.11。該軟件包在Fedora 20中已經(jīng)被更新到了1.0版本。如果你眼下仍使用使用0.11版本,就需要將權(quán)限授予Docker用戶。
docker命令行工具通過用戶組docker擁有的套接字文件/var/run/docker.sock,聯(lián)系docker守護(hù)進(jìn)程。某個用戶必須是該用戶組的成員,才能聯(lián)系docker -d進(jìn)程。
幸好,該說明文檔有點(diǎn)錯誤,你仍需要將用戶添加到docker用戶組,才能讓這些用戶通過非root帳戶使用docker。但愿所有發(fā)行版都有這條政策。
在Fedora和RHEL上,我們對docker.sock擁有下列權(quán)限:
# ls -l /run/docker.sock
srw-rw----. 1 root docker 0 Sep 19 12:54
/run/docker.sock
這意味著,只有root用戶或docker用戶組中的用戶才能與該套接字進(jìn)行對話。另外由于docker運(yùn)行asdocker_t,SELinux防止所有被限制的域連接到該docker.sock。
docker沒有授權(quán)控制機(jī)制
docker目前沒有任何的授權(quán)控制機(jī)制。如果你能與docker套接字進(jìn)行對話,或者docker偵聽某個網(wǎng)絡(luò)端口,你能與之對話,就可以執(zhí)行所有的docker命令。
比如說,如果我在自己的電腦上將“dwalsh”添加到docker用戶組,就可以執(zhí)行:
> docker run -ti --rm --privileged --net=host -v /:/host fedora /bin/sh
# chroot /host
這時,你或者擁有這些權(quán)限的任何用戶都完全控制你的系統(tǒng)。
將用戶添加到docker用戶組應(yīng)該被認(rèn)為與將USERNAME ALL=(ALL) NOPASSWD: ALL添加到/etc/sudoers文件一樣。用戶在其電腦上運(yùn)行的任何應(yīng)用程序都可以成為root,甚至在用戶不知情的情況下。我認(rèn)為,一種更安全的解決辦法就是編寫腳本,允許你想允許訪問的用戶有權(quán)訪問。
cat /usr/bin/dockersearch
#!/bin/sh
docker search $@
然后使用下面這個命令創(chuàng)建sudo:
USERNAME ALL=(ALL) NOPASSWD: /usr/bin/dockersearch
我希望最終將某一種授權(quán)數(shù)據(jù)庫添加到docker,以便管理員們可以配置你允許用戶執(zhí)行哪些命令、允許用戶開啟/停止哪些容器。
正確的***步將是,先消除執(zhí)行docker run --privileged或docker run --cap-remove的功能。但是,如果你之前讀過我寫的其他文章,就知道為了確保容器安全,還需要做好多的事情。
英文:https://opensource.com/business/14/10/docker-user-rights-fedora