当前位置: 首页 > news >正文

Linux文件权限管理全解

管理目录和文件属性

  1. 查看文件属性 (ls -l 输出详解)

    • 示例: drwxr-xr-x. 3 root root 16 May 28 09:28 home
    • 字段解析:
      • d: 文件类型 (d=目录, -=普通文件, l=符号链接, c=字符设备, b=块设备, s=套接字, p=管道)
      • rwxr-xr-x: 权限 (9个字符,分三组)
        • 1-3: 属主 (owner) 权限 (u)
        • 4-6: 属组 (group) 权限 (g)
        • 7-9: 其他用户 (others) 权限 (o)
      • . (有时是 +): . 表示无额外属性 (如 SELinux context 未完全列出),+ 表示设置了 ACL (访问控制列表)。
      • 3: 硬链接计数 (对于目录,通常表示其直接子目录的数量 + 2 (...))
      • root: 属主 (owner)
      • root: 属组 (group)
      • 16: 大小 (对于目录,通常是文件系统元数据占用的空间,不是目录内容的总大小;对于文件,是实际内容大小;单位为字节 B)
      • May 28 09:28: 最后修改时间 (mtime)
      • home: 文件或目录名
  2. 文件权限表示法

    • 字符表示:
      • r = 读 (Read)
      • w = 写 (Write)
      • x = 执行 (eXecute)
      • - = 无此权限
    • 数字 (八进制) 表示: (将每组权限视为一个 3 位二进制数,转换为十进制)
      • r = 4
      • w = 2
      • x = 1
      • - = 0
    • 示例: rwxr-xr-- = 7 (4+2+1) 5 (4+0+1) 4 (4+0+0) => 数字表示 754
  3. 设置修改文件权限 (chmod 命令)

    • a. 使用数值改变权限:

      chmod 777 test1   # 给 test1 的属主(u)、属组(g)、其他用户(o) 都赋予 rwx 权限 (4+2+1=7)
      chmod 644 file.txt # 属主 rw- (6), 属组 r-- (4), 其他 r-- (4)
      chmod 750 script.sh # 属主 rwx (7), 属组 r-x (5), 其他 --- (0)
      
    • b. 使用字母改变权限:

      • 操作对象:

        • u = 属主 (user/owner)
        • g = 属组 (group)
        • o = 其他用户 (others)
        • a = 所有用户 (all, 等价于 ugo)
      • 操作符:

        • + = 添加权限
        • - = 移除权限
        • = = 设置确切权限 (覆盖原有)
      • 常用示例:

        chmod o+w test2     # 给 test2 的其他用户添加写权限
        chmod go-rw test3   # 给 test3 的属组和其他用户移除读写权限
        chmod a-rw test4    # 给 test4 的所有用户移除读写权限
        chmod u+x script.sh # 允许文件属主执行文件
        chmod g=rx sharedir # 设置属组用户只能读和执行目录(不可写)
        chmod a+rw public.log # 允许所有用户读和写文件
        chmod ug+r confidential # 允许文件属主和属组用户读文件
        
      • 递归修改 (-R 参数): 改变整个目录树及其内容的权限 (谨慎使用!)

        chmod -R g+w /home/test5/  # 给 /home/test5/ 目录下所有文件和子目录的属组添加写权限
        
  4. 修改目录或文件的所有者/属组

    • chown (Change Owner): 设置文件或目录的属主和/或属组

      • -R: 递归操作 (用于目录)

      • 语法:

        chown [新属主] [文件/目录]            # 仅改属主
        chown [新属主]:[新属组] [文件/目录]    # 同时改属主和属组
        chown :[新属组] [文件/目录]           # 仅改属组 (等价于 `chgrp`)
        
      • 示例:

        chown linux /home/test6       # 将 /home/test6 的属主改为用户 `linux`
        chown linux:linux /home/test7 # 将 /home/test7 的属主改为用户 `linux`,属组改为组 `linux`
        
    • chgrp (Change Group): 专门设置文件或目录的属组。(功能已被 chown 包含,但有时更清晰)

      • -R: 递归操作 (用于目录)

      • 语法:

        chgrp [新属组] [文件/目录]
        
      • 示例:

        chgrp linux /home/test8        # 将 /home/test8 的属组改为组 `linux`
        chgrp -R linux /home/test9/    # 递归地将 /home/test9/ 目录下所有内容的属组改为组 `linux`
        

特殊权限 (SUID, SGID, Sticky Bit)

  • SUID (Set User ID) u+s:

    • 作用: 应用于可执行的二进制文件

    • 效果: 当用户执行这个文件时,进程将临时拥有文件属主的权限,而不是执行者的权限。常用于需要提升权限执行特定任务的程序 (如 passwd, sudo)。

    • 设置方法:

      chmod u+s /path/to/binary      # 字符法
      chmod 4xxx /path/to/binary     # 数字法 (xxx 代表文件原有的 ugo 权限数字,SUID=4)
      # 示例:给 mkdir 设置 SUID (通常不建议!仅作演示)
      chmod u+s /usr/bin/mkdir      # 或 chmod 4755 /usr/bin/mkdir
      
    • 显示: 在属主的 x 权限位置上显示为 s (如果属主原来有 x) 或 S (大写 S,如果属主原来没有 x)。

  • SGID (Set Group ID) g+s:

    • 作用于文件: 应用于可执行的二进制文件

      • 效果: 当用户执行这个文件时,进程将临时拥有文件属组的权限。较少用于文件。
    • 作用于目录: (更常用!)

      • 效果: 在该目录下新建的文件或子目录,其属组将自动继承该目录的属组 (而不是创建者的主要组)。常用于需要协作的共享目录。
    • 设置方法:

      chmod g+s /path/to/file_or_dir  # 字符法
      chmod 2xxx /path/to/file_or_dir # 数字法 (xxx 代表文件原有的 ugo 权限数字,SGID=2)
      # 示例:给目录 /tmp/test 设置 SGID
      chmod g+s /tmp/test             # 或 chmod 2755 /tmp/test
      
    • 显示: 在属组的 x 权限位置上显示为 s (如果属组原来有 x) 或 S (大写 S,如果属组原来没有 x)。

  • Sticky Bit o+t:

    • 作用: 应用于目录

    • 效果: 在设置了粘滞位的目录中,用户只能删除或重命名自己拥有属主权限的文件或目录,即使该用户对该目录拥有写 (w) 权限。root 用户不受此限制。经典例子:系统临时目录 /tmp

    • 设置方法:

      chmod o+t /path/to/directory   # 字符法
      chmod 1xxx /path/to/directory  # 数字法 (xxx 代表目录原有的 ugo 权限数字,Sticky=1)
      # 示例:给目录 /tmp/test 设置 Sticky Bit
      chmod o+t /tmp/test            # 或 chmod 1755 /tmp/test
      
    • 显示: 在其他用户的 x 权限位置上显示为 t (如果其他用户原来有 x) 或 T (大写 T,如果其他用户原来没有 x)。

重要补充:

  1. 数字法表示特殊权限: 4xxx, 2xxx, 1xxx 中的 xxx 必须替换为文件/目录原有的基础权限数字。特殊权限值 (4, 2, 1) 是加在基础权限数字前面的第四位。例如:
    • 原有权限 755 (rwxr-xr-x) + SUID -> 4755
    • 原有权限 755 + SGID -> 2755
    • 原有权限 755 + Sticky -> 1755
    • 原有权限 755 + SGID + Sticky -> 3755
  2. SUID/SGID 安全警告: 不当设置 SUID/SGID 可造成严重安全隐患。只应在明确理解其作用且必要的情况下设置,并确保目标程序本身安全可靠。

默认权限与 umask

  • umask: 是一个掩码值,决定了新创建文件或目录的初始权限。它定义了需要从默认最大权限中屏蔽掉的权限位。
  • 默认最大权限:
    • 目录: rwxrwxrwx (777)
    • 文件: rw-rw-rw- (666) (文件创建时通常不会默认有执行权限 x)
  • umask 计算权限:
    • 新目录权限 = 777 - umask
    • 新文件权限 = 666 - umask (如果结果导致有执行位 x,系统通常会自动屏蔽掉文件的计算得到的 x 位)
  • 常见默认值:
    • root 用户: umask 通常为 0022
      • 新目录权限: 777 - 022 = 755 (rwxr-xr-x)
      • 新文件权限: 666 - 022 = 644 (rw-r--r--)
    • 普通用户: umask 通常为 0002
      • 新目录权限: 777 - 002 = 775 (rwxrwxr-x)
      • 新文件权限: 666 - 002 = 664 (rw-rw-r--)
  • 查看 umask: 直接运行 umask 命令。
  • 修改 umask: umask [新值] (例如 umask 077 会设置更严格的权限)。修改通常只在当前 shell 会话有效,如需永久修改需写入 shell 配置文件 (如 ~/.bashrc)。

ACL 权限 (访问控制列表)

ACL 提供了比传统 Unix 权限 (属主/属组/其他) 更精细的访问控制能力,允许为特定用户特定组设置特定权限

  • 设置 ACL (setfacl):

    # 基本语法: setfacl -m [规则] [文件/目录]
    # 规则格式:
    #   u:[用户名]:[权限]   # 针对特定用户
    #   g:[组名]:[权限]     # 针对特定组
    #   m:[权限]           # 设置有效权限掩码 (mask)
    #   d:[规则]           # 设置默认规则 (用于目录继承)
    # 权限: r, w, x (组合使用,如 rw, r-x)# 示例:
    setfacl -m u:admin:rw a.txt        # 允许用户 admin 对文件 a.txt 有读写权限
    setfacl -m g:lisi:rw a.txt         # 允许组 lisi 对文件 a.txt 有读写权限
    setfacl -m u:admin:rwx b/          # 允许用户 admin 对目录 b/ 有 rwx 权限 (访问目录本身)
    setfacl -m g:lisi:rwx b/           # 允许组 lisi 对目录 b/ 有 rwx 权限 (访问目录本身)# 设置默认 ACL (继承): 允许 admin 对目录 b/ 有 rwx 权限,且在此目录下新建的文件/目录自动继承此 ACL 规则
    setfacl -m u:admin:rwx b/          # 设置访问 ACL (当前目录)
    setfacl -m d:u:admin:rwx b/        # 设置默认 ACL (继承给子项)# 设置默认 ACL (继承) 并同时设置当前目录权限 (常用简写):
    setfacl -m d:u:admin:rwx b/        # 这也会自动设置当前目录的访问 ACL (如果需要)
    # 更精确的写法通常是分开设置访问 ACL 和默认 ACL
    
  • 查看 ACL (getfacl):

    getfacl a.txt  # 查看文件 a.txt 的 ACL
    getfacl b/     # 查看目录 b/ 的 ACL (包含默认 ACL)
    
  • 删除 ACL:

    setfacl -x u:admin a.txt      # 删除文件 a.txt 上用户 admin 的特定 ACL 条目
    setfacl -x g:lisi a.txt       # 删除文件 a.txt 上组 lisi 的特定 ACL 条目
    setfacl -k b/                 # 删除目录 b/ 的 *所有* 默认 ACL 规则 (停止继承)
    setfacl -b a.txt              # 删除文件 a.txt 的 *所有* ACL 规则 (包括基本权限外的所有条目)
    setfacl -b b/                 # 删除目录 b/ 的 *所有* ACL 规则 (包括访问 ACL 和默认 ACL)
    
  • 递归设置 ACL (-R): (谨慎使用!)

    setfacl -R -m u:admin:rwx b/         # 递归设置目录 b/ 下所有*现有*文件和子目录,允许 admin rwx
    setfacl -R -m d:u:admin:rwx b/       # 递归设置目录 b/ 下所有*现有*子目录的默认 ACL (继承)
    # 注意: 同时修改现有文件和设置未来继承通常需要两条命令结合 -R 和 -d
    
http://www.dtcms.com/a/313814.html

相关文章:

  • Java Getter 与 C# Getter 比较
  • WPF中引用其他元素各种方法
  • AUTOSAR AR-Explorer正式发布
  • C语言的数组与字符串
  • 从物理扇区到路径访问:Linux文件抽象的全景解析
  • 读写分离有那些坑?
  • 【企业架构】TOGAF概念之三
  • 【Linux | 网络】网络层(IP协议、NAT技术和ICMP协议)
  • 大模型 与 自驾 具身 3D世界模型等相关知识
  • GaussDB 数据库架构师(十二) 资源规划
  • 音视频文案字幕一键提取,免费使用,效率软件!
  • 开源的现代数据探索和可视化平台:Apache Superset 快速指南 Quickstart
  • 大模型探秘–AI 感知世界:从对话到掌控的交互革命
  • 13015计算机系统原理-速记宝典
  • 【Linux操作系统】简学深悟启示录:进程初步
  • Apache IoTDB(3):时序数据库 IoTDB Docker部署实战
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现人脸面部表情的追踪识别(C#代码UI界面版)
  • 商标续展如果逾期了还有办法补救吗?
  • 第1章-信息系统与信息技术发展
  • 案件线索展示与交付项目
  • C++11 nullptr:解决空指针语义模糊的终极方案
  • 疯狂星期四文案网第29天运营日记
  • 2.1 vue组件
  • 音视频学习笔记
  • Apache Spark 的结构化流
  • LiveQing视频推流点播流媒体常见问题-分屏展示页面如何显示直播间的名称多分屏视频画面监控
  • javacc学习笔记 02、JavaCC 语法描述文件的格式解析
  • iOS 内测上架流程详解:跨平台团队如何快速部署 TestFlight
  • iostat 系统IO监控命令学习
  • 墨者学院SQL过滤字符后手工注入漏洞测试(第1题)