對於Linux系統而言,針對可執行文件與目錄存在三個特殊權限設置。分別是:git
你是否想過,一個非root
用戶是如何經過修改他的密碼,而且新的密碼寫入到一個他沒有寫權限的文件/etc/shadow
中的。要解答這個問題,咱們首先檢查如下/usr/bin/passwd
命令的文件屬性:安全
$: ls -lrt /usr/bin/passwd
-r-sr-sr-x 1 root sys 31396 Jan 20 2014 /usr/bin/passwd
複製代碼
你會發現該文件在owner
與group
區域的執行權限字段不是x
而是s
。其中owner
區的s
表明SUID
,而group
區的s
則表明SGID
。bash
若是一個命令的SUID
位被設置爲s
, 那麼其在執行的過程當中,命令的執行用戶就會切換成命令的owner
進行執行。ide
注意,有時候在owner
區的s
可能設置的是S
。大寫的意思是,owner
區執行位權限是空-
。ui
SGID
與SUID
基本相似,只是在命令執行後切換的用戶不是owner
而是group
。spa
與SUID
不一樣的是,若是group
區的執行位權限設置是空-
的話,同時SGID
位設置了,那麼在其執行位表示的不是S
,而是l
。code
Sticky Bit
主要用於目錄的共享。目錄 /var/tmp
and /tmp
就具有共享功能,全部用戶均可以建立文件,還能夠修改或執行其它用戶的文件,可是刪除文件只能是文件擁有者。一旦目錄的Sticky Bit
被設置了,就能保證目錄中各自的文件只有文件的擁有者能夠刪除。get
# ls -ld /var/tmp
drwxrwxrwt 2 sys sys 512 Jan 26 11:02 /var/tmp
複製代碼
相似S
,當Sticky Bit
設置的值是T
時,表示other
區的執行權限爲空-
。t
則表明other
區的執行權限已設置。博客
設置可執行文件或目錄的特殊權限,關鍵是要知道這些權限值具體在文件屬性中是如何存儲的。其實文件屬性設置位,不是咱們看到的10位,即1字節的類型位 + 9字節的3組rwx
位。it
其實在系統的實現中,文件權限使用12個二進制位表示:
11 10 9 8 7 6 5 4 3 2 1 0
S G T r w x r w x r w x
複製代碼
第11位爲SUID位,第10位爲SGID位,第9位爲sticky位,第8-0位對應於上面的三組rwx位。因此要設置相應的值和其它位相似:
# 設置SUID
$: chmod 4555 [path_to_file]
# 設置SGID
$: chmod 2555 [path_to_file]
# 設置Sticky Bit
$: chmod 1777 [path_to_directory]
# 或者
$: chmod +t [path_to_directory]
複製代碼
本篇短文主要是對個人博客文章構建可靠、安全、最小化的 Docker 鏡像: 原理與實踐的補充。