溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Docker容器運行時權(quán)限和Linux系統(tǒng)功能簡單介紹

發(fā)布時間:2021-09-15 09:13:41 來源:億速云 閱讀:659 作者:chen 欄目:云計算

這篇文章主要介紹“Docker容器運行時權(quán)限和Linux系統(tǒng)功能簡單介紹”,在日常操作中,相信很多人在Docker容器運行時權(quán)限和Linux系統(tǒng)功能簡單介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Docker容器運行時權(quán)限和Linux系統(tǒng)功能簡單介紹”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

Docker容器運行時權(quán)限和Linux系統(tǒng)功能

相關(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.

出于容器之間和容器與宿主機的安全隔離保護,在默認的Docker配置下,Docker容器是沒有系統(tǒng)權(quán)限的。例如不能在一個Docker容器內(nèi),再運行一個Dokcer服務(wù)(譯者注:或者在容器內(nèi)修改系統(tǒng)時間)。這是因為在默認情況下,容器內(nèi)的進程不允許訪問任何宿主機上的設(shè)備。只有獲得設(shè)備訪問授權(quán)的容器,才可以訪問所有設(shè)備(請參閱關(guān)于 cgroups設(shè)備的文檔)。

當容器管理員執(zhí)行docker run --privileged時,將允許Docker容器訪問宿主機上的所有設(shè)備,并在AppArmor或SELinux中設(shè)置一些配置,使容器內(nèi)的進程可以與容器外運行的進程幾乎一樣權(quán)限來訪問宿主機。(有關(guān)運行--privileged參數(shù)的更多信息,請訪問 Docker博客。)

如果想限制對特定設(shè)備的訪問,可以使用--device參數(shù)。它允許您指定從容器內(nèi)訪問的一個或多個設(shè)備。

$ docker run --device=/dev/snd:/dev/snd ...

開啟--device參數(shù)后,容器內(nèi)的進程默認將獲得這些設(shè)備的readwritemknod權(quán)限。您也可以為每個--device參數(shù),附加第三個:rwm選項來覆蓋默認的設(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對功能進行細粒度控制。默認情況下,Docker有一個保留的默認功能列表。

下表列出了Linux功能選項,這些選項是默認允許的,可以刪除。

功能項功能描述
SETPCAP修改進程的權(quán)限
MKNOD使用mknod(2)創(chuàng)建特殊文件
AUDIT_WRITE將記錄寫入內(nèi)核審計日志
CHOWN任意更改文件UIDs和GIDs(見chown(2))
NET_RAW使用 RAW 和 PACKET 套接字
DAC_OVERRIDE繞過文件的讀、寫和執(zhí)行權(quán)限檢查
FOWNER繞過對進程的文件系統(tǒng)UID與文件的UID進行權(quán)限匹配的檢查操作
FSETID當文件被修改時,不要清除set-user-ID和set-group-ID權(quán)限位
KILL繞過發(fā)送信號的權(quán)限檢查
SETGID自定義處理進程GID和補充GID列表
SETUID自定義處理進程UID
NET_BIND_SERVICE將套接字綁定到互聯(lián)網(wǎng)域名專用端口(端口號小于1024)。
SYS_CHROOT使用chroot(2),更改根目錄
SETFCAP設(shè)置文件功能

下表顯示了默認情況下未授予的功能,可以手動添加這些功能。

功能項功能描述
SYS_MODULE加載和卸載內(nèi)核模塊
SYS_RAWIO執(zhí)行I / O端口操作(iopl(2)和ioperm(2))
SYS_PACCT使用acct(2),打開或關(guān)閉進程計數(shù)
SYS_ADMIN執(zhí)行一系列系統(tǒng)管理操作
SYS_NICE提高進程的nice值(nice(2),setpriority(2))并更改任意進程的nice值
SYS_RESOURCE覆蓋資源限制
SYS_TIME設(shè)置系統(tǒng)時鐘(settimeofday(2),stime(2),adjtimex(2)); 設(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而實現(xiàn)的功能
MAC_OVERRIDE覆蓋強制訪問控制(MAC)。 為Smack Linux安全模塊(LSM)實現(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 標志
NET_BROADCAST使套接字可以實現(xiàn)廣播,并監(jiān)聽廣播包
IPC_LOCK鎖定內(nèi)存(mlock(2),mlockall(2),mmap(2),shmctl(2))
IPC_OWNER繞過對System V IPC對象操作的權(quán)限檢查
SYS_PTRACE使用ptrace(2)跟蹤任意進程
SYS_BOOT使用reboot(2)和kexec_load(2),重新引導(dǎo)并加載新內(nèi)核以供程序執(zhí)行
LEASE在任意文件上建立Lease租約(請參閱fcntl(2))
WAKE_ALARM觸發(fā)喚醒系統(tǒng)的操作
BLOCK_SUSPEND開啟可以阻止系統(tǒng)掛起的功能

更多的參考信息可以在 capabilities(7) - Linux man page Linux手冊頁中找到

--cap-add --cap-drop兩個參數(shù)都支持值ALL,所以如果Docker管理員想要獲得除了MKNOD以外的所有Linux功能,可以使用:

$ docker run --cap-add=ALL --cap-drop=MKNOD ...

如果想與系統(tǒng)的網(wǎng)絡(luò)堆棧進行交互,應(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

要安裝一個基于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
....

默認的seccomp配置文件將根據(jù)所選的功能進行調(diào)整,以允許使用功能所允許的功能,所以從Docker1.12之后的版本,不應(yīng)該對此進行調(diào)整。在Docker 1.10和1.11中沒有這種情況,在添加功能時可能需要使用一個自定義的seccomp配置文件或使用--security-opt seccomp=unconfined

到此,關(guān)于“Docker容器運行時權(quán)限和Linux系統(tǒng)功能簡單介紹”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI