以下是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  阅读(135)  评论(0)    收藏  举报