Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 文件權限管理完全指南:chmod/chown/chgrp 實戰與 ACL 進階

編輯:Linux 教學

一、權限模型基礎

1. 三層主體

代碼名稱說明
uUser (Owner)文件創建者,擁有最高控制權
gGroup文件所屬組,組內成員共享組權限
oOthers除擁有者和組成員外的所有用戶
aAllu+g+o 的簡寫,默認對象

2. 三種基本權限

字母八進制文件含義目錄含義
r4讀取內容列出目錄條目 (ls)
w2修改內容創建/刪除/重命名條目
x1執行程序進入目錄 (cd)、訪問條目元數據

3. 特殊權限位

名稱字母八進制作用典型場景
SetUIDs (u+x 位顯示為 s)4000執行時進程獲得文件擁有者權限/usr/bin/passwd (root 權限改密碼)
SetGIDs (g+x 位顯示為 s)2000執行時進程獲得文件組權限;目錄下新文件繼承組協作目錄 chmod g+s /shared
Sticky Bitt (o+x 位顯示為 t)1000只有文件擁有者/目錄擁有者/root 能刪除/tmp、/var/tmp

4. 權限顯示解讀

-rwxr-xr--  1 root root  1024 Jan 1 10:00 script.sh
│││││││││
│││││││└─ Others: r-- (4)
││││││└──── Others: -w- (0)
│││││└───── Others: --x (0)
││││├────── Group:  r-x (5)
│││├─────── Group:  -w- (0)
││└──────── Group:  --x (1)
│├───────── User:   rwx (7)
└────────── Type:   - (文件) / d (目錄) / l (鏈接) / b/c (塊/字符設備)

二、chmod:修改權限

1. 符號模式(推薦,語義清晰)

chmod [ugoa...][+-=][rwxXst] 文件...

# 示例
chmod u+x script.sh           # 擁有者加執行權
chmod go-w file.txt           # 組和其他去寫權限
chmod a=r,ugo+x dir/          # 所有人讀+目錄可進入
chmod g+s /shared             # 設置 SetGID
chmod +t /tmp                 # 設置 Sticky Bit
chmod u+s /usr/bin/myprog     # 設置 SetUID (慎用!)

2. 數字模式(快速、適合腳本)

chmod 755 script.sh    # u=rwx(7) g=rx(5) o=rx(5)
chmod 644 file.txt     # u=rw(6) g=r(4) o=r(4)
chmod 750 /private     # u=rwx g=rx o=---
chmod 4755 /usr/bin/su # SetUID(4) + 755
chmod 2755 /shared     # SetGID(2) + 755
chmod 1777 /tmp        # Sticky(1) + 777

3. 遞歸操作

chmod -R u+rwX,go=rX /path  # 大 X: 只給目錄加 x,文件不加
chmod -R 644 /var/www/html  # 文件 644,但目錄會失去 x 無法進入!

最佳實踐:目錄 755,文件 644,腳本/二進制 755。

三、chown:修改擁有者

基本語法

chown [選項] [用戶][:組] 文件...

# 示例
chown alice file.txt              # 改擁有者
chown alice:dev file.txt          # 改擁有者和組
chown :dev file.txt               # 只改組 (等同 chgrp)
chown -R alice:web /var/www       # 遞歸
chown --reference=ref.txt target.txt  # 參考文件屬性

常用選項

  • -R:遞歸
  • -v:顯示變更詳情
  • -c:僅顯示已變更項
  • --from=原用戶:原組:僅修改匹配項(安全)

四、chgrp:修改所屬組

chgrp [選項] 組 文件...
chgrp dev file.txt
chgrp -R web /var/www/html
# 等同於 chown :dev file.txt

五、默認權限:umask

1. umask 含義

umask 是權限補碼,表示不授予的權限。

# 文件默認 666 (rw-rw-rw-),目錄默認 777 (rwxrwxrwx)
# 實際權限 = 默認權限 - umask (按位減,非數學減)

umask 022  # 文件 644 (rw-r--r--),目錄 755 (rwxr-xr-x)  ← 最常用
umask 027  # 文件 640 (rw-r-----) ,目錄 750 (rwxr-x---)  ← 組協作環境
umask 077  # 文件 600 (rw-------) ,目錄 700 (rwx------)  ← 高安全

2. 設置持久化

# 全局:/etc/profile 或 /etc/login.defs (UMASK 022)
# 用戶:~/.bashrc 或 ~/.profile
echo 'umask 022' >> ~/.bashrc

六、ACL:突破 UGO 限制的精細控制

1. 啟用 ACL

現代文件系統 (ext4/xfs/btrfs) 默認支持,掛載選項 acl(通常默認開啟)。

# 驗證
tune2fs -l /dev/sda1 | grep "Default mount options"
mount | grep acl

2. 查看 ACL

getfacl file.txt
# 輸出示例:
# file: file.txt
# owner: alice
# group: dev
user::rw-
user:bob:rwx      # bob 額外擁有 rwx
group::r--
group:qa:r-x      # qa 組額外擁有 r-x
mask::rwx         # 有效權限上限
other::r--

3. 設置 ACL

# 給用戶授權
setfacl -m u:bob:rwx file.txt

# 給組授權
setfacl -m g:qa:rx file.txt

# 設置默認 ACL(目錄下新文件自動繼承)
setfacl -d -m u:bob:rwx /shared
setfacl -d -m g:qa:rx /shared

# 刪除特定 ACL
setfacl -x u:bob file.txt

# 刪除所有 ACL
setfacl -b file.txt

# 遞歸設置
setfacl -R -m u:bob:rwx /shared

4. ACL 與 chmod 交互

  • chmod 修改會更新 ACL 的 mask,間接影響 ACL 生效權限
  • getfacl 顯示的 mask 是實際生效上限
  • 備份 ACL:getfacl -R /path > acl.bak,恢復:setfacl --restore=acl.bak

七、屬性:chattr/lsattr(文件系統級保護)

屬性字母作用適用對象
不可修改i不能刪除、重命名、寫入、鏈接;root 也需先移除屬性文件/目錄
只能追加a只能在文件末尾追加,不能覆蓋/截斷日志文件
同步更新S修改立即同步到磁盤關鍵數據
不納入備份ddump 忽略臨時文件
壓縮c文件系統層面透明壓縮 (btrfs/zfs)大文件
# 設置
chattr +i /etc/passwd          # 鎖定關鍵文件
chattr +a /var/log/messages    # 日志只能追加

# 查看
lsattr /etc/passwd
# ----i---------e----- /etc/passwd

# 移除
chattr -i /etc/passwd

八、實戰場景速查

場景命令序列
Web 目錄部署chown -R www:www /var/www/html; find /var/www/html -type d -exec chmod 755 {} \;; find /var/www/html -type f -exec chmod 644 {} \;
團隊協作目錄mkdir /shared; chgrp dev /shared; chmod 2775 /shared; setfacl -d -m g:dev:rwx /shared
腳本可執行chmod 755 script.sh 或 chmod u+x script.sh
保護關鍵配置chattr +i /etc/ssh/sshd_config
臨時授權給用戶setfacl -m u:temp:rw /etc/nginx/nginx.conf
遷移服務器權限同步getfacl -R /src > acl.bak; setfacl --restore=acl.bak (目標機)

九、常見誤區與排查

  1. 目錄無 x 權限 = 無法 cd/ls/訪問內部文件,即使文件有 r 權限
  2. chmod -R 777 是惡習,破壞 setuid/setgid/sticky,暴露安全風險
  3. umask 不影響已存在文件,只影響新建
  4. ACL 生效受 mask 限制,chmod g=rx file 會壓低 mask 導致 ACL 失效
  5. root 繞過 DAC 但受 MAC (SELinux) 限制,權限正確仍報 Permission denied 查 SELinux

總結

Linux 權限體系分層清晰:

  • UGO 基礎權限(chmod/chown/chgrp/umask)覆蓋 90% 場景
  • 特殊位(SetUID/SetGID/Sticky)解決特定提權/協作/保護需求
  • ACL(setfacl/getfacl)提供用戶/組級別的精細授權
  • 屬性(chattr/lsattr)在文件系統層面實施不可變/只追加保護

運維鐵律:最小權限原則、避免 777、善用 ACL 替代寬鬆組權限、關鍵文件加 i 屬性。

Copyright © Windows教程網 All Rights Reserved