資安筆記 - Linux 權限設定

白龍 Lv3

待整理

我還沒寫完

文章目標

權限在電腦中是用來限制每個使用者能夠執行的命令包跨寫入檔案、讀取檔案、刪除檔案,權限的出現就是用來 限制/區隔 每個使用者可以執行的命令
權限在電腦的應用有非常多,例如之前在建立 root 和 user 就是兩個不同權限的使用者,可以執行的命令也不一樣,這篇文章會講道的內容有

  • 了解權限的重要性
  • 四種權限的不同
  • 系統預設權限
  • 檔案目錄權限的查詢、識別與意義
  • 各種權限的修改與設定
  • 權限遮罩與權限的關係
  • 延伸屬性的使用方式與應用場景
  • 延伸屬性的查詢與設定
  • 特殊權限
  • 特殊權限的三種類型
  • 特殊權限的查詢與設定
  • ACL
  • ACL 控制的項目
  • ACL 的查詢與設定

四種權限

  • 系統預設權限 ( 基本權限 )
    系統安全最重要的一環,最早也是現行最基本的權限機制
    絕大多數的 Linux、Unix 都通用
    應用簡單、容易識別…

  • 延伸屬性 ( 隱藏權限 )
    使用檔案系統 ( filesystem ) 機制補足系統預設權限的不足

  • 特殊權限
    以狀況例外 ( 額外增設 ) 的角度補足系統預設權限的不足

  • ACL ( Access Control List, 存取控制列表 )
    以系統預設權限的角度再增設多組的機制

系統預設權限

這個權限是在 Linux 系統中存取的能力或限制的權限類別,也是最基本的類別,總共有三種狀態

  • 檔案或目錄的會有個擁有者 ( user ) 的獨立權限
  • 檔案或目錄指會有個所屬群組 ( group ) 的獨立權限
  • 未符合以上者,則有個其它人 ( other ) 的獨立權限

而可以執行的命令有:讀 ( read )、寫 ( write )、執行 ( execute ),就只有這三個並且可以分別控制開關

接下來就進入時做看一下如何查看電腦權限吧,我們之前介紹指令時有介紹到 ls -l <dir> 這個指令,有試過的人會發現前面有一串奇怪的東西,像這樣

1
-rw-r--r-- 1 root root 7 Apr 13 11:48 /etc/hostname


一開始有點看不懂,但其實會了之後就覺得很簡單了,其實前面那串就是Linux顯示權限的方式,我們用表格給大家看一下就很清楚了

-/d rwx rw- r– 1 root root 7 Apr 13 11:48 /etc/hostname
類型 使用者權限 群主權限 所有權限 idk 使用者 ♠ 群主 ♥ idk 日期 時間 路徑

是不是好像大概看得懂了在幹嘛了,但還是仔細說明一下好了

  • 類型:就是這個檔案的類型,但這邊不是那種 .py .js .cpp 等,這邊是指 資料夾檔案
  • 使用者權限:指 使用者 的權限,就是有 ♠ 的那一格
  • 群主權限:只 群主 的權限,有 ♥ 的那一格
  • 所有權限:只除了使用者和群主外所有使用者的權限

剩下的以目前水平應該可以自己判斷了

# 喔對 idk = I don’t know

rwx是甚麼

這個東西其實就是,Read / Write / Execute 的簡寫,如果有顯示在上面的就表示擁有權限的意思
另外如果是 - 就代表這個使用者沒有這個權限,例如 rw- 就是可以讀/寫,但是不能執行程式因為沒有 x

其他表示權限的方式

除了使用英文字母表示權限,也可以用數字表示權限,例如 700 就表示這個檔案的所有者有所有權限,其他使用者沒有權限,760就表示檔案所有者有權不權限,檔案群主有讀和寫的權限,沒有執行的權限
你肯定很好奇這是如何運作的,其實很簡單這邊給你看個對照表

Read Write Execute
4 2 1

有了這個對照表後,只要把每個想要的權限數字相加起來並分別且在排序起來就可以落得權限的數字了,例如我想要一個

檔案所有者有全部的權限,檔案群主可以執行的權限,預設只能的權限,那我就要這樣設定

7 3 4
4+2+1 0+2+1 4+0+0
r w x - w x r - -
使用者 群主 預設

這樣你懂了嗎

變更權限

更變權限

chmod,變更權限
指令: chmod [選項] 權限 檔案名稱或目錄名稱
root@Workstation: ~# chmod u-x filename
root@Workstation: ~# chmod a+x filename
root@Workstation: ~# chmod a=rx dirname
root@Workstation: ~# chmod go-x dirname
root@Workstation: ~# chmod u=rx,g=r,o= filename

u | g | o | a 指 user, group, other, all
+ | - | = 指 增加, 去除, 指定
r | w | x 指 read, write, execute

chmod,變更權限的簡易變更
至少以三個數字代表權限
每個數字分別代表 user, group, other
每個數字即為權限的總和
指令: chmod [選項] 權限 檔案名稱或目錄名稱

      root@Workstation: ~#  chmod  664  filename
      root@Workstation: ~#  chmod  600  filename 
      root@Workstation: ~#  chmod  775  dirname
      root@Workstation: ~#  chmod  755  dirname
      root@Workstation: ~#  chmod  777  dirname

變更檔案使用者

chown,變更所屬擁有者
指令: chown [選項] 帳號 檔案名稱或目錄名稱
root@Workstation: ~# chown user filename
root@Workstation: ~# chown user dirname

chown,變更所屬擁有者,可一併變更檔案群組
指令: chown [選項] 帳號[:群組] 檔案
root@Workstation: ~# chown user:user filename
root@Workstation: ~# chown user:user dirname
root@Workstation: ~# chown root:user dirname

chgrp,變更所屬群組
指令: chgrp [選項] 群組 檔案名稱或目錄名稱
root@Workstation: ~# chgrp user filename
root@Workstation: ~# chgrp user dirname

權限遮罩

又是遮罩,但這次比較簡單一點啦

權限遮罩其實就是指一個檔案被創建時的預設權限是如何計算的,並且不同權限的使用者創建出來的檔案權限也不會一樣,例如

  • root 創建出來的檔案/資料夾預設權限
    • 檔案 => 644
    • 資料夾 => 755
  • user 創建出來的檔案/資料夾預設權限
    • 檔案 => 664
    • 資料夾 => 775

但是這些是如何計算出來的,這時候就用到mask了…其實這跟網路遮罩很相似,都是運用遮罩跟權限做 XOR 運算的結果,還記得網路遮罩運算吧(不記得趕快翻,在這也是相同的道理,只要把權限數值轉換成二進位,在跟權限遮罩運算出來的結果就是這個檔案的預設權限了

不過好像還沒有提到什麼是權限遮罩,權限遮照就是一串二進位數值,他可以在一個檔案被創建時讓電腦算出這個檔案的權限是多少,有點類似電腦算網路遮罩是因為要比對IP是否相同。不過在電腦中為了要區分管理者和使用者創建檔案的權限,因此這兩者的權限遮罩當然就是不同的

  • root 權限遮罩:0022
  • user 權限遮罩:0002

我們拿root創建檔案和user創建檔案的預設權限來舉例…

  • 計算root檔案預設權限:
初始權限 權限遮罩 等於 預設權限
0666 - 0022 = 644
  • 計算user檔案預設權限:
初始權限 權限遮罩 等於 預設權限
0666 - 0002 = 664

# 我們沒有使用XOR,因為把它換成10進位計算減法會比較方便

初始權限

這個只列出兩個最常見的就是 檔案資料夾

  • 檔案:666 | 所有人都只可以讀和寫
  • 資料夾:777 | 所有人有所有權限

延伸屬性

延伸屬性就是用於補足Linux系統預設權限的設定不夠使用,因此才會出現延伸屬性來補足預設權限設定不足的問題,不過這些補足權限並不是在所有的檔案系統中都可以使用,實現的功能也會不同

# 市場上常見的檔案系統 -> ASM、BRF、Btrfs、EXT2/3/4、HFS/HFS+、JFS、NTFS、Reiser4、UDF、XFS…

權限介紹

  • 新增的補足權限有這個列表
代號 解釋
A 不變更存取時間 ( 存取時間鎖定 )
a 只能增加內容 ( 禁止內容的刪除、修改;檔案改名、刪除 )
c 存檔時壓縮、讀取時解壓縮
D 目錄內容變更即時同步 ( 寫入硬碟 )
d 跳過檔案系統的備份工具機制 ( 不會被備份 )
i 完全鎖定 ( 不可變更、改名、刪除、移動 )
S 檔案內容變更即時同步 ( 寫入硬碟 )
s 完全刪除
u 不完全刪除
還有更多

特殊權限指令

特殊權限與一般預設的系統權限不同,他們他們專屬的指令例如設定權限和查看權限的指令就不同

查看特殊權限
  • 語法:lsattr <option> <path>

顯示出來的資訊會更長,因為包含了所有特殊權限的開關狀態,會像這樣

1
2
root@Workstation: ~# lsattr /etc/hostname
[console] --------------e--- /etc/hostname
  • 指令可以使用的option有…
    R -> 遞歸操作,一併列出指定目錄下子目錄檔案
    a -> 列出隱藏檔
    d -> 指列出目錄

設定特殊權限

  • 語法:chattr <option> <type&perm>... <path>

語法稍微講一下,chattr 可以支援一次設定多項權限,每個組權限就是 <type&perm>,並且可以一直接下去

  • 可用的 option
    R -> 遞歸操作,將所有指定目錄下的檔案或目錄都套用相同變更
    V -> 顯示操作成果

  • 可用的 type
    + -> 加入權限
    - -> 刪除權限
    = -> 設定權限

  • 可用的 perm
    剛剛上面的權限列表都可以使用

特殊權限

特蘇權限與補足權限不同,但是都是為了補足原生權限不足的問題,通常是為了特定用途所補充的一種機制

某個狀況下 提升 ( 置換 ) 檔案目錄或執行檔的權限 ( 帳號 )
無須經由特殊方式或機制授權
例如: su、sudo…

於基礎的 3 組RWX,再增加一組 ( 個 )
原本權限不會變動
簡單、易識別

系統安全

三種特殊權限

SUID,Set UID
將 user 權限設定為特殊權限
使用者執行時,該檔案將以檔案的所屬擁有者執行

SGID,Set GID
將 group 權限設定為特殊權限
使用者執行時,該檔案將以檔案或目錄的所屬群組執行

SBIT,Sticky Bit
將 other 權限設定為特殊權限
使用者於該目錄底下所建立的檔案或目錄
權限最大為 root 與自己 ( 能刪除或改名 )