這篇文章主要介紹“Docker容器運(yùn)行時(shí)權(quán)限和Linux系統(tǒng)功能簡(jiǎn)單介紹”,在日常操作中,相信很多人在Docker容器運(yùn)行時(shí)權(quán)限和Linux系統(tǒng)功能簡(jiǎn)單介紹問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Docker容器運(yùn)行時(shí)權(quán)限和Linux系統(tǒng)功能簡(jiǎn)單介紹”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)企業(yè)建站,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁(yè)設(shè)計(jì),有多年建站和網(wǎng)站代運(yùn)營(yíng)經(jīng)驗(yàn),設(shè)計(jì)師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對(duì)于網(wǎng)站制作、成都網(wǎng)站制作中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動(dòng)的思維在網(wǎng)頁(yè)中充分展現(xiàn),通過對(duì)客戶行業(yè)精準(zhǔn)市場(chǎng)調(diào)研,為客戶提供的解決方案。
相關(guān)Docker參數(shù)
--cap-add: Add Linux capabilities --cap-drop: Drop Linux capabilities --privileged=false: Give extended privileges to this container --device=[]: Allows you to run devices inside the container without the --privileged flag.
出于容器之間和容器與宿主機(jī)的安全隔離保護(hù),在默認(rèn)的Docker配置下,Docker容器是沒有系統(tǒng)權(quán)限的。例如不能在一個(gè)Docker容器內(nèi),再運(yùn)行一個(gè)Dokcer服務(wù)(譯者注:或者在容器內(nèi)修改系統(tǒng)時(shí)間)。這是因?yàn)樵谀J(rèn)情況下,容器內(nèi)的進(jìn)程不允許訪問任何宿主機(jī)上的設(shè)備。只有獲得設(shè)備訪問授權(quán)的容器,才可以訪問所有設(shè)備(請(qǐng)參閱關(guān)于 cgroups設(shè)備的文檔)。
當(dāng)容器管理員執(zhí)行docker run --privileged
時(shí),將允許Docker容器訪問宿主機(jī)上的所有設(shè)備,并在AppArmor或SELinux中設(shè)置一些配置,使容器內(nèi)的進(jìn)程可以與容器外運(yùn)行的進(jìn)程幾乎一樣權(quán)限來訪問宿主機(jī)。(有關(guān)運(yùn)行--privileged
參數(shù)的更多信息,請(qǐng)?jiān)L問
Docker博客。)
如果想限制對(duì)特定設(shè)備的訪問,可以使用--device
參數(shù)。它允許您指定從容器內(nèi)訪問的一個(gè)或多個(gè)設(shè)備。
$ docker run --device=/dev/snd:/dev/snd ...
開啟--device
參數(shù)后,容器內(nèi)的進(jìn)程默認(rèn)將獲得這些設(shè)備的read
、write
和mknod
權(quán)限。您也可以為每個(gè)--device
參數(shù),附加第三個(gè):rwm
選項(xiàng)來覆蓋默認(rèn)的設(shè)置:
$ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc Command (m for help): q $ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc You will not be able to write the partition table. Command (m for help): q $ docker run --device=/dev/sda:/dev/xvdc:w --rm -it ubuntu fdisk /dev/xvdc crash.... $ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc fdisk: unable to open /dev/xvdc: Operation not permitted
除了--privileged
之外,操作員還可以使用--cap-add
和--cap-drop
對(duì)功能進(jìn)行細(xì)粒度控制。默認(rèn)情況下,Docker有一個(gè)保留的默認(rèn)功能列表。
下表列出了Linux功能選項(xiàng),這些選項(xiàng)是默認(rèn)允許的,可以刪除。
功能項(xiàng) | 功能描述 |
---|---|
SETPCAP | 修改進(jìn)程的權(quán)限 |
MKNOD | 使用mknod(2)創(chuàng)建特殊文件 |
AUDIT_WRITE | 將記錄寫入內(nèi)核審計(jì)日志 |
CHOWN | 任意更改文件UIDs和GIDs(見chown(2)) |
NET_RAW | 使用 RAW 和 PACKET 套接字 |
DAC_OVERRIDE | 繞過文件的讀、寫和執(zhí)行權(quán)限檢查 |
FOWNER | 繞過對(duì)進(jìn)程的文件系統(tǒng)UID與文件的UID進(jìn)行權(quán)限匹配的檢查操作 |
FSETID | 當(dāng)文件被修改時(shí),不要清除set-user-ID和set-group-ID權(quán)限位 |
KILL | 繞過發(fā)送信號(hào)的權(quán)限檢查 |
SETGID | 自定義處理進(jìn)程GID和補(bǔ)充GID列表 |
SETUID | 自定義處理進(jìn)程UID |
NET_BIND_SERVICE | 將套接字綁定到互聯(lián)網(wǎng)域名專用端口(端口號(hào)小于1024)。 |
SYS_CHROOT | 使用chroot(2),更改根目錄 |
SETFCAP | 設(shè)置文件功能 |
下表顯示了默認(rèn)情況下未授予的功能,可以手動(dòng)添加這些功能。
功能項(xiàng) | 功能描述 |
---|---|
SYS_MODULE | 加載和卸載內(nèi)核模塊 |
SYS_RAWIO | 執(zhí)行I / O端口操作(iopl(2)和ioperm(2)) |
SYS_PACCT | 使用acct(2),打開或關(guān)閉進(jìn)程計(jì)數(shù) |
SYS_ADMIN | 執(zhí)行一系列系統(tǒng)管理操作 |
SYS_NICE | 提高進(jìn)程的nice值(nice(2),setpriority(2))并更改任意進(jìn)程的nice值 |
SYS_RESOURCE | 覆蓋資源限制 |
SYS_TIME | 設(shè)置系統(tǒng)時(shí)鐘(settimeofday(2),stime(2),adjtimex(2)); 設(shè)置實(shí)時(shí)(硬件)時(shí)鐘 |
SYS_TTY_CONFIG | 使用vhangup(2); 在虛擬終端上使用各種特權(quán)的ioctl(2)操作 |
AUDIT_CONTROL | 啟用和禁用內(nèi)核審核; 更改審核過濾器規(guī)則; 檢索審核狀態(tài)和過濾規(guī)則 |
MAC_ADMIN | 允許MAC配置或狀態(tài)更改。 為Smack LSM而實(shí)現(xiàn)的功能 |
MAC_OVERRIDE | 覆蓋強(qiáng)制訪問控制(MAC)。 為Smack Linux安全模塊(LSM)實(shí)現(xiàn) |
NET_ADMIN | 執(zhí)行各種與網(wǎng)絡(luò)相關(guān)的操作 |
SYSLOG | 執(zhí)行syslog(2)的權(quán)限操作。 |
DAC_READ_SEARCH | 繞過文件讀取權(quán)限檢查以及目錄讀取和執(zhí)行權(quán)限檢查 |
LINUX_IMMUTABLE | 設(shè)置FS_APPEND_FL和FS_IMMUTABLE_FL i-node 標(biāo)志 |
NET_BROADCAST | 使套接字可以實(shí)現(xiàn)廣播,并監(jiān)聽廣播包 |
IPC_LOCK | 鎖定內(nèi)存(mlock(2),mlockall(2),mmap(2),shmctl(2)) |
IPC_OWNER | 繞過對(duì)System V IPC對(duì)象操作的權(quán)限檢查 |
SYS_PTRACE | 使用ptrace(2)跟蹤任意進(jìn)程 |
SYS_BOOT | 使用reboot(2)和kexec_load(2),重新引導(dǎo)并加載新內(nèi)核以供程序執(zhí)行 |
LEASE | 在任意文件上建立Lease租約(請(qǐng)參閱fcntl(2)) |
WAKE_ALARM | 觸發(fā)喚醒系統(tǒng)的操作 |
BLOCK_SUSPEND | 開啟可以阻止系統(tǒng)掛起的功能 |
更多的參考信息可以在
capabilities(7) - Linux man page Linux手冊(cè)頁(yè)中找到
--cap-add --cap-drop
兩個(gè)參數(shù)都支持值ALL
,所以如果Docker管理員想要獲得除了MKNOD
以外的所有Linux功能,可以使用:
$ docker run --cap-add=ALL --cap-drop=MKNOD ...
如果想與系統(tǒng)的網(wǎng)絡(luò)堆棧進(jìn)行交互,應(yīng)該使用--cap-add=NET_ADMIN
來修改網(wǎng)絡(luò)接口,而不是使用--privileged
。
$ docker run -it --rm ubuntu:14.04 ip link add dummy0 type dummy RTNETLINK answers: Operation not permitted $ docker run -it --rm --cap-add=NET_ADMIN ubuntu:14.04 ip link add dummy0 type dummy
要安裝一個(gè)基于FUSE的文件系統(tǒng),您需要結(jié)合--cap-add
和--device
:
$ docker run --rm -it --cap-add SYS_ADMIN sshfs sshfs sven@10.10.10.20:/home/sven /mnt fuse: failed to open /dev/fuse: Operation not permitted $ docker run --rm -it --device /dev/fuse sshfs sshfs sven@10.10.10.20:/home/sven /mnt fusermount: mount failed: Operation not permitted $ docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs # sshfs sven@10.10.10.20:/home/sven /mnt The authenticity of host '10.10.10.20 (10.10.10.20)' can't be established. ECDSA key fingerprint is 25:34:85:75:25:b0:17:46:05:19:04:93:b5:dd:5f:c6. Are you sure you want to continue connecting (yes/no)? yes sven@10.10.10.20's password: root@30aa0cfaf1b5:/# ls -la /mnt/src/docker total 1516 drwxrwxr-x 1 1000 1000 4096 Dec 4 06:08 . drwxrwxr-x 1 1000 1000 4096 Dec 4 11:46 .. -rw-rw-r-- 1 1000 1000 16 Oct 8 00:09 .dockerignore -rwxrwxr-x 1 1000 1000 464 Oct 8 00:09 .drone.yml drwxrwxr-x 1 1000 1000 4096 Dec 4 06:11 .git -rw-rw-r-- 1 1000 1000 461 Dec 4 06:08 .gitignore ....
默認(rèn)的seccomp配置文件將根據(jù)所選的功能進(jìn)行調(diào)整,以允許使用功能所允許的功能,所以從Docker1.12之后的版本,不應(yīng)該對(duì)此進(jìn)行調(diào)整。在Docker 1.10和1.11中沒有這種情況,在添加功能時(shí)可能需要使用一個(gè)自定義的seccomp配置文件或使用--security-opt seccomp=unconfined
。
到此,關(guān)于“Docker容器運(yùn)行時(shí)權(quán)限和Linux系統(tǒng)功能簡(jiǎn)單介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!