SUID, SGID 和 Sticky Bit 究竟是什麼

對於Linux系統而言,針對可執行文件與目錄存在三個特殊權限設置。分別是:git

  • SUID
  • SGID
  • Sticky bit

Set-user Identification (SUID)

你是否想過,一個非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
複製代碼

你會發現該文件在ownergroup區域的執行權限字段不是x而是s。其中owner區的s表明SUID,而group區的s則表明SGIDbash

若是一個命令的SUID位被設置爲s, 那麼其在執行的過程當中,命令的執行用戶就會切換成命令的owner進行執行。ide

注意,有時候在owner區的s可能設置的是S。大寫的意思是,owner區執行位權限是空-ui

Set-group identification (SGID)

SGIDSUID基本相似,只是在命令執行後切換的用戶不是owner而是groupspa

SUID不一樣的是,若是group區的執行位權限設置是空-的話,同時SGID位設置了,那麼在其執行位表示的不是S,而是lcode

Sticky Bit

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 鏡像: 原理與實踐的補充。

參考:

相關文章
相關標籤/搜索