Linux 權限模型是系統安全的基石。每個文件/目錄擁有三組權限位(所有者、同組用戶、其他用戶),每組包含讀、寫、執行三種基本權限。本文將從權限表示法、核心命令(chmod/chown/chgrp)兩種用法、特殊權限位、默認權限控制、ACL 擴展、常見陷阱與最佳實踐七個維度,構建完整的權限管理知識體系。
$ ls -l sobsrc.tgz
-rw-r--r-- 1 root root 483997 Jul 15 17:31 sobsrc.tgz
10 字符位含義:
| 位置 | 含義 | 示例值 |
|---|---|---|
| 1 | 文件類型 | -普通文件 d目錄 l符號鏈接 b塊設備 c字符設備 p管道 sSocket |
| 2-4 | 所有者權限 | r=讀 w=寫 x=執行 -=無 |
| 5-7 | 同組用戶權限 | 同上 |
| 8-10 | 其他用戶權限 | 同上 |
示例解讀:-rw-r--r-- → 普通文件,所有者讀寫,同組/其他僅讀。
| 數值 | 二進制 | 權限組合 | 助記 |
|---|---|---|---|
| 0 | 000 | --- | 無 |
| 1 | 001 | --x | 執行 |
| 2 | 010 | -w- | 寫入 |
| 3 | 011 | -wx | 寫+執行 |
| 4 | 100 | r-- | 讀取 |
| 5 | 101 | r-x | 讀+執行 |
| 6 | 110 | rw- | 讀+寫 |
| 7 | 111 | rwx | 全權限 |
三位八進制數依次對應:所有者、同組、其他。例:644 = rw-r--r--,755 = rwxr-xr-x。
chmod [who][+|-|=][mode] file...
who: u(所有者) g(同組) o(其他) a(所有=默認)
操作符: +增加 -移除 =精確設置
mode: r w x X s t u g o
實戰示例:
chmod g+r,o+r file — 同組與其他增加讀權限chmod a-x script.sh — 移除所有人執行權限chmod u=rwx,go= file — 所有者全權限,同組/其他無權限chmod u+s program — 設置 SUID(執行時提升為文件所有者權限)chmod g+s /shared/dir — 設置 SGID(新文件繼承目錄組)chmod +t /tmp — 設置 Sticky 位(僅所有者/root可刪除文件)chmod 750 file # 所有者 rwx, 同組 r-x, 其他 ---
chmod 644 *.txt # 批量設置文件 644
chmod 755 $(find /path -type d) # 目錄 755
chmod 644 $(find /path -type f) # 文件 644
| 位 | 八進制 | 文件效果 | 目錄效果 | 典型場景 |
|---|---|---|---|---|
| SUID (Set UID) | 4xxx | 執行時進程 EUID = 文件所有者 | 無 | /usr/bin/passwd、/usr/bin/sudo |
| SGID (Set GID) | 2xxx | 執行時進程 EGID = 文件所屬組 | 新文件繼承目錄組 ID | 協作目錄 /shared/team |
| Sticky | 1xxx | 歷史遺留(無效) | 僅文件所有者/目錄所有者/root 可刪除 | /tmp, /var/tmp |
組合示例: chmod 3775 /shared/team = rwxrwsr-x (SGID+Sticky)
chown user:group file # 同時修改所有者和組
chown :group file # 僅修改組 (等同 chgrp)
chown -R user:group /dir # 遞歸修改
chown -v user:group file # 顯示操作詳情
chown --reference=ref_file file # 參考文件屬性
chgrp group file
chgrp -R group /dir
chgrp --reference=ref_file file
-h/--no-dereference 修改鏈接本身uid=/gid=/umask= 決定no_root_squash 或客戶端 sudochmod 0755 等同 755,但 0755 明確表示無特殊位666,目錄默認 777umask 022 → 文件 644,目錄 755umask 077 → 文件 600,目錄 700(高安全)/etc/profile、/etc/login.defs、~/.bashrc# 查看 ACL
getfacl file
# 設置用戶/組權限
setfacl -m u:alice:rwx file
setfacl -m g:dev:rw file
# 設置默認 ACL (目錄繼承)
setfacl -d -m u:alice:rwx /project
# 移除 ACL
setfacl -x u:alice file
setfacl -b file # 移除所有擴展 ACL
ls -l 顯示 + 號 表示存在擴展 ACL。cp -p/mv 保留 ACL,tar/rsync -A 需顯式參數。
r-x,數據目錄 rw-,嚴禁 777chown root:team /proj; chmod 2775 /proj; setfacl -d -m g:team:rwx /proj755,生產機通過 CI/CD 部署,運行用戶無寫權限find / -perm /6000 -type f (SUID/SGID)、find / -perm -0002 -type d ! -perm -1000 (無 Sticky 的全寫目錄)file 模塊、Puppet file 資源、Salt file.directory 統一聲明式管理Linux 權限管理遠不止 chmod 777 這樣的暴力操作。精通符號/八進制雙模式、特殊權限位語義、umask/ACL 進階機制、遞歸與符號鏈接邊界,並將其內化為基礎設施即代碼的聲明式配置,才是從「會用命令」進階為「掌控系統安全」的關鍵飛躍。