以下是CentOS系统中传统UGO权限管理与ACL权限管理的详细对比及其结合应用场景的解析,附实际案例说明:


​一、传统UGO权限管理​

​1. 核心机制​

  • ​权限模型​​:将用户分为三类:

    • ​User (u)​​:文件所有者,拥有最高控制权。
    • ​Group (g)​​:文件所属用户组的成员。
    • ​Others (o)​​:既非所有者也非组成员的用户。
  • ​权限类型​​:

    • ​读 (r)​​:查看文件内容或目录列表(数值4)。
    • ​写 (w)​​:修改文件或增删目录内容(数值2)。
    • ​执行 (x)​​:运行程序或进入目录(数值1)。
  • ​权限表示​​:

    -rwxr-xr--   # 所有者:读写执行(rwx=7);组:读执行(r-x=5);其他:只读(r--=4)
    

​2. 操作命令​

  • ​修改权限​​:

    chmod u+x file.txt      # 为所有者添加执行权限(符号模式)
    chmod 754 file.txt      # 数字模式:u=rwx(7), g=r-x(5), o=r--(4)
    
  • ​修改归属​​:

    chown user:group file  # 同时修改所有者和属组
    chgrp developers dir/  # 仅修改目录的属组
    

​3. 局限性​

  • ​无法精细化控制​​:例如,需授权多个不同用户不同权限时,UGO仅支持一个组,无法单独设置非组内用户的权限。

​二、ACL权限管理:UGO的扩展​

​1. 核心优势​

  • ​多用户/组控制​​:可对任意用户或组单独授权,突破UGO的三类限制。

  • ​权限优先级​​:ACL规则优先于UGO规则(如ACL拒绝某用户访问,即使UGO的others有权限也无效)。

​2. 操作命令​

  • ​设置ACL​​:

    setfacl -m u:alice:rw file.txt  # 授予alice读写权限
    setfacl -m g:hr:rx dir/         # 授予hr组读执行权限
    
  • ​查看与删除​​:

    getfacl file.txt                # 查看所有ACL规则
    setfacl -x u:alice file.txt     # 删除alice的ACL规则
    setfacl -b file.txt             # 清除所有ACL规则
    

​3. 特殊机制:ACL掩码(Mask)​

  • ​作用​​:限制​​额外用户/组​​的最大权限(不影响所有者)。
    setfacl -m m::r file.txt  # 设置掩码为只读,则额外用户即使被赋rwx也仅生效r
    

​三、UGO与ACL对比总结​

​特性​ ​UGO​ ​ACL​
控制粒度 粗粒度(三类用户) 细粒度(任意用户/组)
多用户支持 ❌ 仅一个组 ✅ 支持多用户、多组
权限优先级 基础规则 高于UGO
适用场景 简单权限分配(如私有文件) 复杂共享(如团队协作目录)
管理复杂度 简单(chmod/chown) 较高(需setfacl/getfacl)

​四、结合应用场景与案例​

​场景1:共享研发目录(精细化控制)​

  • ​需求​​:目录 /project 需允许:

    • 所有者 dev_lead 完全控制。
    • developers 可读写。
    • 外部测试员 tester1 仅可读。
  • ​解决方案​​:

    # 设置基础UGO权限
    chown dev_lead:developers /project
    chmod 770 /project         # 组内可读写,其他无权限
    # 添加ACL规则
    setfacl -m u:tester1:r-x /project  # 单独授予tester1读和执行(进入目录)
    setfacl -m m::rx /project          # 限制额外用户最大权限为读执行
    

​场景2:Web服务器目录(安全隔离)​

  • ​需求​​:网站目录 /var/www/html

    • 用户 apache 需读写权限(写入日志/上传)。
    • 开发者组 web_dev 需读写,但禁止执行脚本(防漏洞)。
  • ​解决方案​​:

    # 基础权限:所有者可读写执行,组可读写,其他无权限
    chmod 750 /var/www/html
    # ACL细化
    setfacl -m g:web_dev:rw /var/www/html      # 组可读写
    setfacl -m d:g:web_dev:rw /var/www/html    # 默认规则(新文件继承)
    find /var/www/html -type f -name "*.php" -exec chmod -x {} \;  # 禁用PHP执行
    

​场景3:敏感文件保护(结合特殊权限)​

  • ​需求​​:配置文件 /etc/app.conf 需:

    • 拒绝所有非root用户的修改(包括所有者)。
    • 允许应用用户 app_user 只读。
  • ​解决方案​​:

    # 锁定文件(禁止任何修改)
    chattr +i /etc/app.conf      # 使用chattr加锁
    # 授予app_user只读(ACL优先)
    setfacl -m u:app_user:r /etc/app.conf
    

​五、最佳实践建议​

  1. ​最小权限原则​​:优先用UGO满足基础需求,复杂场景叠加ACL。

  2. ​权限继承​​:ACL的默认规则(如 setfacl -d)确保新文件自动继承父目录权限。

  3. ​定期审计​​:通过 getfacl 检查权限分布,避免冗余规则。

  4. ​特殊权限慎用​​:SUID/SGID(如 chmod u+s)可能导致提权漏洞,非必要不启用。

⚠️ ​​注意​​:ACL权限在 ls -l 显示中末尾出现 + 标记(如 drwxr-x---+),此时需用 getfacl 查看完整规则。

通过结合UGO的简洁性与ACL的灵活性,可高效实现从简单到复杂的权限管控,同时兼顾安全性与可维护性。

posted on 2025-07-21 10:53  LeeHang  阅读(31)  评论(0)    收藏  举报