熱門分類
載入中…
目錄0%

🔐 Linux ACL / Setuid / Setgid / Sticky bit:進階檔案安全與權限管理指南

    🔐 Linux ACL / Setuid / Setgid / Sticky bit:進階檔案安全與權限管理指南

    Linux 的檔案權限控制不只 rwxchmod。 在企業環境、多人協作、專案資料夾與多服務架構下,你常會遇到:

    • 同一份資料,需給「多組人」不同權限
    • 要讓一般使用者以特定身份執行程式(如 passwd)
    • 團隊共用資料夾,但不能互相刪除文件
    • 希望建立 UID/GID 變動後,資料夾自動繼承群組與權限

    這些需求都屬於「進階權限管理」,需要用到: ACL、Setuid、Setgid、Sticky bit。 本文將用清楚的範例與實戰流程帶你掌握所有細節。


    📑 目錄


    一、ACL:突破 chmod 限制的細粒度權限控制

    傳統 chmod 權限僅支持:

    • Owner
    • Group
    • Others

    但在企業環境常需同一資料夾提供多組人不同權限。例如:

    • 工程部:讀 + 寫
    • 品保部:只能讀
    • 外包廠商:只能讀某些檔案

    這時就需要 ACL(Access Control List)

    ✔ 查看 ACL

    getfacl filename

    ✔ 設定 ACL(新增使用者/群組權限)

    # 給 user tom 讀寫權
    setfacl -m u:tom:rw file.txt
    
    # 給 group qa 讀取權
    setfacl -m g:qa:r file.txt
    

    ✔ 移除 ACL

    setfacl -b filename

    ✔ 資料夾自動繼承(default ACL)

    # 新增進資料夾的檔案自動帶有 ACL
    setfacl -m d:u:tom:rw /project/data
    

    常見用途:

    • 多人協作專案
    • 多部門共用資料夾(Dev、QA、PM)
    • 精準控管 API 或 App 的後端檔案存取

    二、Setuid:程式以檔案 Owner 身份執行

    當檔案設置 Setuid bit 時,執行者會以「檔案 owner」的身份執行,而不是自己的身份。

    最常見的例子:

    -rwsr-xr-x 1 root root /usr/bin/passwd

    passwd 需要修改 /etc/shadow,因此必須以 root 身份執行。

    ✔ 設定 Setuid

    chmod u+s program

    ✔ 取消 Setuid

    chmod u-s program

    ⚠ 安全警告

    • 絕不要對 shell script(sh, bash, python)設 Setuid
    • 容易造成提權漏洞
    • 僅適用「經過安全審查」的編譯程式

    適用情境:

    • 需要一般使用者執行特權操作(修改密碼、掛載裝置…)

    三、Setgid:以群組身份執行、資料夾自動繼承群組

    Setgid 有兩種用途:

    📌(1)檔案:以群組身份執行

    chmod g+s script

    📌(2)資料夾:新檔案自動繼承群組(最常用)

    當資料夾設定 Setgid,新建的檔案或資料夾會自動繼承該資料夾的群組。

    # 設定 Setgid
    chmod g+s /project/data
    

    這對團隊協作非常重要: 所有人新增檔案都會保持同一個群組,避免產生「不同使用者寫入不同群組」而無法存取的問題。

    常見用途:

    • 團隊共用資料夾
    • CI/CD 產生檔案要保持相同群組(如 Jenkins)

    四、Sticky Bit:多人共用目錄的強制保護

    Sticky Bit 的作用: 使用者只能刪除自己建立的檔案

    典型例子: /tmp

    drwxrwxrwt  tmp
                 ↑
              Sticky Bit (t)
    

    ✔ 設定 Sticky Bit

    chmod +t /shared

    ✔ 移除 Sticky Bit

    chmod -t /shared

    用途:

    • /tmp
    • 多人共用資料夾
    • 雲端同步暫存資料夾

    五、ACL vs chmod vs 特殊權限比較表

    功能 chmod ACL Setuid Setgid Sticky Bit
    細粒度權限
    多人共用管理普通✔ 最適合✔(資料夾)
    以 Owner 身份執行
    避免互刪檔案

    六、實戰情境:專案資料夾權限一次配置完成

    假設你有一個團隊資料夾:

    /project/data

    需求:

    • Dev:讀寫
    • QA:只讀
    • 所有新檔案都自動繼承群組
    • 每個人不能刪除別人的檔案

    ✔ 建立群組

    groupadd dev
    groupadd qa
    

    ✔ 設定資料夾基本權限

    chown root:dev /project/data
    chmod 2770 /project/data   # 2 = Setgid
    

    ✔ 加上 Sticky Bit

    chmod +t /project/data

    ✔ 設定 ACL 給 QA(只讀)

    setfacl -m g:qa:r /project/data

    ✔ 設 Default ACL(新檔案繼承權限)

    setfacl -m d:g:dev:rw /project/data
    setfacl -m d:g:qa:r   /project/data
    

    🔍 完成後你會得到: 可維護、可擴充、可審計、可自動繼承的專案資料夾權限架構。


    七、常見問題 FAQ

    Q:ACL 會讓權限變得複雜嗎?

    會,但換來的是更高彈性。建議搭配 getfacl 查詢工具與文件控管。

    Q:Setuid / Setgid 怎麼看是否啟用?

    檔案權限會出現 S / s 例如:

    -rwsr-xr-x

    Q:Sticky Bit 的 t / T 差在哪?

    • t:執行位元存在 → 權限完整
    • T:沒有執行位元 → 但 sticky bit 仍在

    • 🐧 Linux 使用者與群組管理:useradd、usermod、passwd、sudoers 深度解析
    • 🐧 Linux 檔案系統:inode、EXT4、XFS、權限與實體儲存結構
    • 🐧 Linux 系統加固:SELinux、AppArmor、auditd、Fail2Ban 全面安全防護
    • 🐧 LVM 與磁碟擴容:PV/VG/LV、線上擴展、縮小與快照完整教學

    — WWFandy・Linux 權限管理筆記

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級