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 600 與 chattr +i 不可變屬性雙重防線

編輯:關於 Linux

保護關鍵配置文件 (nginx.conf, sshd_config, passwd, shadow) 防止誤修改、惡意篡改、勒索病毒加密,需構建權限控制 (DAC) + 強制屬性 (MAC-like) 雙重防線。本文詳解 chmod 600 最小權限原則、chattr +i 不可變屬性原理與操作、lsattr 查看、解除保護、典型保護清單、容器/只讀掛載增強方案。

一、第一道防線:chmod 600 —— 最小權限原則


# 僅擁有者 (root) 可讀寫,組/其他無任何權限
chmod 600 /etc/nginx/nginx.conf
chmod 600 /etc/ssh/sshd_config
chmod 600 /etc/shadow
# 驗證
ls -l /etc/nginx/nginx.conf
# -rw------- 1 root root 2345 Jan 1 12:00 nginx.conf
  • 原理:DAC (自主訪問控制),內核根據進程 EUID/EGID 與文件 mode 位匹配權限。
  • 局限:root (EUID=0) 繞過所有 DAC 檢查,仍可修改/刪除。sudo、內核模塊、掛載命名空間均可突破。

二、第二道防線:chattr +i —— 不可變屬性 (ext2/3/4, xfs, btrfs)


# 添加不可變屬性 (i = immutable)
chattr +i /etc/nginx/nginx.conf
chattr +i /etc/ssh/sshd_config
chattr +i /etc/passwd
chattr +i /etc/shadow

# 查看屬性
lsattr /etc/nginx/nginx.conf
# ----i---------e----- /etc/nginx/nginx.conf
# i = immutable, e = extent format (ext4默認)

# 嘗試修改 (root 也失敗)
echo "test" > /etc/nginx/nginx.conf
# bash: /etc/nginx/nginx.conf: Operation not permitted
rm /etc/nginx/nginx.conf
# rm: cannot remove '/etc/nginx/nginx.conf': Operation not permitted
vim /etc/nginx/nginx.conf
# E212: Can't open file for writing
  • 原理:文件系統層面 (inode 標誌位) 攔截寫入/刪除/重命名/鏈接/截斷操作,內核權限檢查前生效,root 亦受限。
  • 適用文件系統:ext2/3/4, XFS, Btrfs, JFS。tmpfs/procfs/sysfs/NFS (視服務端) 不支持。
  • 其他常用屬性:
    • a (append only):僅允許追加寫入 (適合日志文件 chattr +a /var/log/messages)
    • s (secure deletion):刪除時零填充數據塊
    • u (undeletable):刪除時保留內容供恢復
    • d (no dump):dump 備份時跳過

三、解除保護:chattr -i


# 移除不可變屬性
chattr -i /etc/nginx/nginx.conf
lsattr /etc/nginx/nginx.conf
# --------------e----- /etc/nginx/nginx.conf (i 消失)
# 現可正常修改、刪除

最佳實踐:修改配置流程 → chattr -i → 編輯 → 驗證語法 (nginx -t) → chattr +i → 重載服務。

四、典型核心文件保護清單

文件/目錄chmodchattr說明
/etc/passwd644+i用戶信息,需可讀
/etc/shadow600+i加密密碼,極敏感
/etc/group644+i組信息
/etc/gshadow600+i組密碼
/etc/ssh/sshd_config600+iSSH 核心配置
/etc/sudoers440+isudo 權限,visudo 編輯會臨時解除
/etc/fstab644+i掛載配置,關鍵啟動
/boot/grub2/grub.cfg600+i引導配置
/etc/nginx/nginx.conf600+iWeb 核心配置
/etc/my.cnf600+iMySQL 配置
/var/log/755+a (日志文件)僅追加,防止清空日志

五、進階防護:只讀掛載與容器不可變根文件系統


# 1. 掛載選項 ro (整個分區只讀)
/dev/sda2  /opt/app  ext4  ro,relatime  0 0

# 2. 綁定掛載只讀
mount --bind /etc/nginx /etc/nginx
mount -o remount,ro,bind /etc/nginx

# 3. 容器運行時 --read-only
docker run --read-only -v /data:/app/data nginx
# 根文件系統只讀,僅掛載卷可寫

# 4. Kubernetes SecurityContext
securityContext:
  readOnlyRootFilesystem: true
  allowPrivilegeEscalation: false

六、總結

chmod 600 針對非 root 用戶/進程的 DAC 保護;chattr +i 針對 root/特權進程的文件系統級強制保護。兩者結合,構建「防誤操作、防惡意篡改、防勒索加密」的立體防線。操作規範:改配置先 chattr -i,改完驗證再 chattr +i,並納入變更管理流程。

chattr +i 文件保護示意圖

Copyright © Windows教程網 All Rights Reserved