萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 文件權限管理全攻略:chmod、chown、chgrp 核心命令深度解析與實戰技巧

Linux 權限模型是系統安全的基石。每個文件/目錄擁有三組權限位(所有者、同組用戶、其他用戶),每組包含讀、寫、執行三種基本權限。本文將從權限表示法、核心命令(chmod/chown/chgrp)兩種用法、特殊權限位、默認權限控制、ACL 擴展、常見陷阱與最佳實踐七個維度,構建完整的權限管理知識體系。

權限表示法完全圖解

ls -l 輸出解碼

$ 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-- → 普通文件,所有者讀寫,同組/其他僅讀。

八進制數字權限速查表

數值二進制權限組合助記
0000---無
1001--x執行
2010-w-寫入
3011-wx寫+執行
4100r--讀取
5101r-x讀+執行
6110rw-讀+寫
7111rwx全權限

三位八進制數依次對應:所有者、同組、其他。例:644 = rw-r--r--,755 = rwxr-xr-x。

chmod:權限修改的兩種範式

符號模式(文本設定法)

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
Sticky1xxx歷史遺留(無效)僅文件所有者/目錄所有者/root 可刪除/tmp, /var/tmp

組合示例: chmod 3775 /shared/team = rwxrwsr-x (SGID+Sticky)

chown / chgrp:所有權與歸屬組管理

chown 核心用法

chown user:group file          # 同時修改所有者和組
chown :group file              # 僅修改組 (等同 chgrp)
chown -R user:group /dir       # 遞歸修改
chown -v user:group file       # 顯示操作詳情
chown --reference=ref_file file # 參考文件屬性

chgrp 核心用法

chgrp group file
chgrp -R group /dir
chgrp --reference=ref_file file

常見陷阱與避坑指南

  • 符號鏈接:默認修改鏈接目標,使用 -h/--no-dereference 修改鏈接本身
  • 掛載選項:FAT/NTFS/exFAT 不支持 Linux 權限,掛載時由 uid=/gid=/umask= 決定
  • NFS 根壓縮:root 用戶映射為 nobody,需服務端 no_root_squash 或客戶端 sudo
  • 數字權限前導零:chmod 0755 等同 755,但 0755 明確表示無特殊位

默認權限與 ACL:超越基礎模型

umask:創建時的權限遮罩

  • 文件默認 666,目錄默認 777
  • umask 022 → 文件 644,目錄 755
  • umask 077 → 文件 600,目錄 700(高安全)
  • 設置持久化:/etc/profile、/etc/login.defs、~/.bashrc

ACL (Access Control List):精細到用戶/組級別

# 查看 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 需顯式參數。

企業級最佳實踐清單

  1. 最小權限原則:服務賬號僅擁有必要目錄的 r-x,數據目錄 rw-,嚴禁 777
  2. 協作目錄標準化:chown root:team /proj; chmod 2775 /proj; setfacl -d -m g:team:rwx /proj
  3. 腳本執行權限分離:開發機 755,生產機通過 CI/CD 部署,運行用戶無寫權限
  4. 定期審計:find / -perm /6000 -type f (SUID/SGID)、find / -perm -0002 -type d ! -perm -1000 (無 Sticky 的全寫目錄)
  5. 配置管理:Ansible file 模塊、Puppet file 資源、Salt file.directory 統一聲明式管理

結語

Linux 權限管理遠不止 chmod 777 這樣的暴力操作。精通符號/八進制雙模式、特殊權限位語義、umask/ACL 進階機制、遞歸與符號鏈接邊界,並將其內化為基礎設施即代碼的聲明式配置,才是從「會用命令」進階為「掌控系統安全」的關鍵飛躍。

copyright © 萬盛學電腦網 all rights reserved