linux之文件系统权限——介绍各种设置和修改文件权限的命令(chmod、chown、chgrp等等),万字教学,快来学习吧!!!(4)

前言

本篇文章主要针对Linux文件系统的权限进行了讲解,通过各种命令对文件的权限进行设置和修改,除了普通权限读(r)、写(w)、执行(x),还介绍了特殊权限、隐藏权限、ACL访问控制列表等,使用的命令有chmod、chown、chagrp、chattr、setfacl、umask,通过这些命令的学习,让大家可以精确的修改和设置文件的权限,从而使文件的使用变得更加严谨。

1、了解文件和目录的权限

1.1 查看文件和目录的权限

Linux中每个文件都有属于自己的权限,权限分为三种:读(r)、写(w)、执行(x)

1、查看权限:

  1. 查看目录下所有文件和目录的权限

    ls -l 文件/目录 # 会查看指定目录下所有的文件和目录的详细信息
    

    在这里插入图片描述

  2. 只查看指定目录或文件的权限

    ls -ld 目录/文件
    

    在这里插入图片描述

2、分析文件或目录返回的权限信息

我们通过 ls 命令查看文件文件和目录的详细信息后,会返回8个字段,如下:

   -		rw-r--r--.    1 	root 	root 	2292 	429 21:29 	/etc/passwd
文件类型	文件权限    连接数	所属人  所属组	大小	修改时间		文件/目录名

说明:
从上面可以看到 /etc/passwd 这个文件的权限是: rw-r--r-- ,这里包含着三个角色的权限,每个角色占三个字符,如下:

  1. rw- :文件所属人,权限为可读可写
  2. r-- :文件所属组用户,权限为可读
  3. r--:其它用户,权限为可读


文件权限分配示意图:

在这里插入图片描述

1.2 文件的分类


1、我们通过命令 ls 查看文件信息时,最前面的一个字段表示的是文件的类型,如下:

在这里插入图片描述

2、文件常见类型

  • - :普通文件
  • d:目录
  • l:链接文件
  • b :块设备
  • c:字符设备
  • ps :表示特殊文件

3、权限对文件和目录的影响

权限对文件的影响对目录的影响
r (读)可以读取文件的内容可以列出目录的内容 (文件名)
w (写)可以更改文件的内容可以创建或删除目录中的任一文件
x (执行)可以作为命令执行文件可以进入目录(还需要r权限才能读目录内容)

注意:

  1. 超级管理员root无视任何进入目录的权限,可随意进入
  2. 如果某个用户没有目录的执行权,默认也会丧失目录的写入权限
  3. 超级管理员无视除执行权限外其它文件的操作权限,可随意读写其它用户的文件

2、文件权限管理

2.1 修改文件或目录的权限(chmod)

chmod 是 Linux/Unix 中用于修改文件或目录权限的命令,其名称源自 change mode。权限分为 读(r)、写(w) 和 执行(x),分别对应数字 4、2、1

1、基本语法

chmod [选项] 权限模式 文件/目录


2、权限模式表示方法

  1. 数字模式(常用)
    • 权限用三位八进制数表示,分别对应 所有者(Owner)、所属组(Group) 和 其他用户(Others)。

    • 权限数字计算:r(4) + w(2) + x(1)。

      数字权限说明
      7rwx读 + 写 + 执行
      6rw-读 + 写
      5r-x读 + 执行
      4r–只读
      0无权限
    • 示例:

      chmod 755 file.txt    # 所有者:rwx,组和其他:r-x
      chmod 644 file.txt    # 所有者:rw-,组和其他:r--
      
  2. 符号模式
    • 通过 u(所有者)、g(组)、o(其他)、a(所有用户)和 + - = 操作符修改权限。
    • 示例:
      chmod u+x script.sh    # 给所有者添加执行权限
      chmod go-w file.txt    # 移除组和其他用户的写权限
      chmod a=rw file.txt    # 所有用户设置为读写权限
      

3、常用选项

选项作用
-R递归修改目录及其内容权限
-v显示权限修改的详细信息
-c仅显示发生变化的文件信息

递归修改示例:

chmod -R 755 /path/to/dir    # 递归修改目录及子文件权限


4、特殊权限

  1. SUID

    • SUID 是一种对二进制程序(命令)进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者的权限。在触发拥有该权限的二进制程序时,一瞬间获得该程序拥有人的权限,进而可以维持该权限执行在与该二进制程序所关联的文件或目录上。

    • 设置方法

      数字模式:

      chmod 4777 /usr/bin/rm	# 第一个数字 4 代表特殊权限 SUID ,后面三个数字则分别为所有者、所属组用户、其它用户的权限
      

      符号模式:

      chmod u+s /usr/bin/rm	# 给 /usr/bin/rm 命令加上 SUID 权限
      chmod u-s /usr/bin/rm	# 去除 /usr/bin/rm 命令的 SUID 权限
      
    • 注意事项:
      给某条命令设置了SUID权限后,会让没有该命令权限的用户临时拥有它的控制权,从而执行命令,因此; SUID 谨慎设置在vim、cat、rm 等命令上,防止没有该命令权限的用户执行了错误操作

  2. SGID

    • 作用:

      1. 当对二进制程序进行设置时,能够让执行者临时获得文件所属组的权限
      2. 当对目录进行设置时,则是让目录内创建的文件自动继承该目录原有的用户组(一般用来做共享目录)
    • 设置方法

      数字模式:

      chmod 2777 /usr/bin/rm	# 第一个数字 2 代表特殊权限 SGID ,后面三个数字则分别为所有者、所属组用户、其它用户的权限
      

      符号模式:

      chmod g+s /usr/bin/rm	# 给 /usr/bin/rm 命令加上 SGID 权限
      chmod g-s /home	# 去除 /home 目录的 SGID 权限
      
  3. SBIT(粘滞位)

    • 如果目录设置了SBIT权限,则可确保用户智能删除拥有人是自已的文件,不可以删除其他人的文件。(一般用来做共享目录)

    • 设置方法

      数字模式:

      chmod 1777 /home	# 第一个数字 1 代表特殊权限 SBIT ,后面三个数字则分别为所有者、所属组用户、其它用户的权限
      

      符号模式:

      chmod o+t /home	# 给 /home 目录加上 SBIT 权限
      chmod o-t /home	# 去除 /home 目录的 SBIT 权限
      

4. 总结

数字符号作用
4sSUID(仅对文件)
2sSGID(对文件/目录)
1tSBIT(对目录)
  1. SUID 是用来文件所有者赋权的,SGID 是用来给文件所有组赋权的,SBIT 是给其他用户赋权的;在chmod命令中 分别对应:u、g、o
  2. 以上三种特殊权限都只能修改,u、g、o 三种用户的 执行(x) 权限,若赋予权限时,参数都为大写字母;那么就代表该文件拥有者没有 执行(x) 权限;如:chmod u+S,g+S,o+T huawei01 ,该方法用于取消文件的特殊权限
  3. 修改权限可以用 数字表示;如:chmod +7777 file.txt ;其中第一个 7 代表文件的特殊权限,SUID(4)、SGID(2)、SBIT(1)7 就相当与该文件同时拥有三种特殊权限,后面三个数字就分别代表 用户、用户组、其它组用户

5、注意事项

  • 修改权限需要 所有者 或 root 权限。

  • 目录需有 执行权限(x) 才能进入。

  • 敏感文件(如 /etc/passwd)权限需谨慎设置。


通过灵活组合数字和符号模式,可以精确控制文件/目录的访问权限。

2.2 更改文件或目录的所有者和所有组(chown)

chown 是 Linux 中用于更改文件或目录的所有者(owner)和所属组(group)的命令,其名称来源于 change owner。

1、基本语法

chown [选项] [新所有者][:新所属组] 文件或目录

常用选项:

选项作用
-R递归处理目录及其子内容
-v显示详细操作信息(verbose)
-c类似 -v,但仅显示更改过的文件
--reference=文件参考指定文件的所有者和组


2、常用方法使用示例

  1. 更改文件的所有者

    chown username filename
    

    filename 的所有者改为 username(需要 sudo 权限,除非你是 root)。

  2. 更改文件的所有者和所属组

    chown username:groupname filename
    

    同时将 filename 的所有者改为 username,所属组改为 groupname

  3. 仅更改文件的所属组

    chown :groupname filename
    

    仅修改所属组(注意前面的冒号 :)。

  4. 递归更改目录及其内容

    chown -R username:groupname dirname
    

    -R 表示递归操作,适用于目录及其子目录和文件。

  5. 从参考文件复制所有者配置

    chown --reference=参考文件 目标文件
    

    目标文件 的所有者和组设置为与 参考文件 相同。

3、注意事项

  1. 权限要求:普通用户只能更改自己拥有的文件,若需修改其他用户的文件,需用 sudo

  2. 组名可选:如果省略 :groupname,则只修改所有者。

  3. 符号链接:默认不跟随符号链接(需用 -h 修改链接本身,或用 -L 跟随链接)。

4、示例场景

  1. 将 /var/www 的所有权交给用户 www-data 和组 www-data:

    chown -R www-data:www-data /var/www
    
  2. 仅修改文件 test.txt 的组为 developers:

    chown :developers test.txt
    

通过 man chown 可以查看完整手册。使用时注意权限问题,避免误操作系统关键文件!

2.3 只更改文件或目录的所属组(chgrp)

chgrp 是 Linux 中用于更改文件或目录的所属组的命令,其名称来源于 change group。

1、基本语法

chgrp [选项] 新组名 文件或目录

常用选项:

选项描述
-R递归更改目录及其子内容的所有组(用于目录)
-v显示详细操作信息(verbose)
-c仅显示更改过的文件信息
-f忽略错误信息(静默模式)
--reference=参考文件将目标文件的组设置为与参考文件相同


2、常用方法使用示例

  1. 更改文件的所属组

    chgrp developers file.txt
    

    file.txt 的组更改为 developers(需确保组名已存在)。

  2. 递归更改目录及其内容的所属组

    chgrp -R developers /path/to/directory
    

    将目录及其子文件、子目录的组全部改为 developers

  3. 显示操作详情

    chgrp -v developers file.txt
    

    输出类似:changed group of ‘file.txt’ from oldgroup to developers。

  4. 使用参考文件同步组

    chgrp --reference=source_file.txt target_file.txt
    

    target_file.txt 的组设置为与 source_file.txt 相同。

  5. 仅显示实际更改的文件

    chgrp -c developers *.txt
    

    仅当文件组确实被修改时才会显示信息。

3、注意事项

  1. 组名必须存在

    • 使用前需确认目标组已在 /etc/group 中定义,否则会报错。
  2. 权限要求

    • 普通用户只能更改自己拥有的文件的组,且目标组必须是该用户的附加组之一。

    • root 用户可任意更改。

  3. 符号链接

    • 默认情况下,chgrp 作用于符号链接指向的文件(而非链接本身)。若需修改链接本身的组,使用 -h 选项(但需系统支持)。
  4. chown 的区别

    • chown 可以同时修改文件的所有者(user)和组(如 chown user:group file),而 chgrp 仅修改组。

通过以上命令,你可以灵活管理文件或目录的组权限。如需进一步帮助,可通过 man chgrp 查看手册。

2.4 修改文件或目录的扩展属性(chattr)

chattr 是 Linux 中用于修改文件或目录的扩展属性(extended attributes)的命令,这些属性可以控制文件系统的行为,例如防止文件被删除或修改。

1、基本语法

chattr [选项] [+/-/=属性] 文件或目录

常用属性:

属性作用
a文件只能追加内容(不可删除或修改已有内容),适用于日志文件
i文件不可修改、删除、重命名或创建硬链接(超级用户也无法直接修改)
A不更新文件的访问时间(atime)
c文件压缩存储(需文件系统支持)
s文件删除后,其磁盘空间会被清零(安全删除)
u文件删除后,其内容仍可恢复
d目录在执行 dump 备份时跳过
S文件的修改会同步写入磁盘(同步更新)
b不更新文件或目录的存取时间
x可以直接访问压缩文件中的内容


2、 常用操作示例

  1. 添加属性(+)

    chattr +i file.txt  # 文件不可修改/删除
    chattr +a /var/log/syslog  # 只能追加日志
    
  2. 移除属性(-)

    chattr -i file.txt  # 取消不可修改属性
    chattr -a /var/log/syslog
    
  3. 设置属性(=)

    chattr =i file.txt  # 仅保留 `i` 属性,移除其他所有属性
    
  4. 递归操作目录(-R)

    sudo chattr -R +i /path/to/dir  # 目录及其内容均不可修改
    
  5. 查看属性(使用 lsattr)

    lsattr file.txt  # 显示文件的扩展属性
    

3、注意事项

  • 需要 root 权限:大多数属性(如 i、a)需用 sudo 执行。

  • 文件系统支持:仅适用于 ext2/ext3/ext4、xfs、btrfs 等支持扩展属性的文件系统。

  • 谨慎使用 -R:递归操作可能影响目录下所有文件,导致系统异常(如锁住 /usr/bin)。

  • 限制root用户:隐藏权限可以作用于root用户,设置后root用户也会被限制

4、典型应用场景

  1. 保护关键文件

    chattr +i /etc/passwd /etc/shadow  # 防止用户或密码被修改
    
  2. 日志保护

    chattr +a /var/log/secure  # 日志只能追加,防止篡改
    
  3. 禁用临时文件删除

    chattr +u /tmp/important.tmp  # 允许恢复误删文件
    
  4. 恢复被锁定的文件

    若误操作锁定了重要文件(如 /bin/chmod),可通过以下步骤恢复:

    chattr -i /bin/chmod  # 先移除不可修改属性
    chmod +x /bin/chmod   # 重新赋予执行权限
    

通过合理使用 chattr,可以增强文件的安全性和完整性。

2.5 设置文件或目录的访问控制列表(setfacl)

setfacl 是 Linux 中用于设置文件或目录的 访问控制列表(ACL, Access Control List) 的命令,它允许更精细地控制权限,超越传统的 chmodchown 限制。

1、基本语法

setfacl [选项] [规则] 文件/目录

常用选项:

选项说明
-m修改或添加 ACL 规则
-x删除指定的 ACL 规则
-b删除所有 ACL 规则(保留基础权限)
-R递归操作目录及其内容
-d设置默认 ACL(对新创建的文件/目录生效)
-k删除所有默认 ACL 规则
-M从文件中读取权限
--restore恢复文件的ACL记录


2、常用规则格式

  1. 用户规则

    u:用户名:权限
    

    示例:给用户 alice 读写权限

    setfacl -m u:alice:rw file.txt
    
  2. 组规则

    g:组名:权限
    

    示例:给组 developers 读执行权限

    setfacl -m g:developers:rx dir/
    
  3. 默认规则(继承)

    d:规则
    

    示例:对新创建的文件继承组读写权限

    setfacl -dm g:developers:rw dir/
    
  4. 掩码(mask)

    限制最大有效权限:

    setfacl -m m::r file.txt  # 限制所有ACL权限为只读
    

3、 常用方法使用示例

  1. 添加用户 ACL

    setfacl -m u:alice:rwx /var/www/html/
    
  2. 添加组 ACL

    setfacl -m g:webadmins:r-x /etc/nginx/
    
  3. 递归设置目录及子文件

    setfacl -R -m u:bob:rw ~/projects/
    
  4. 设置默认 ACL(继承)

    setfacl -dm u:alice:rw /shared/
    
  5. 删除特定 ACL 规则

    setfacl -x u:alice file.txt
    
  6. 清除所有 ACL 规则

    setfacl -b dir/
    

4、进阶操作

  1. 查看文件的ACL规则

    getfacl file.txt
    
  2. 备份文件的ACL规则

    getfacl file.txt > backup.acl
    

    将文件或目录的ACL规则重定向进一个acl文件里,必须在该文件的相对路径下进行备份

  3. 恢复文件的ACL规则

    setfacl --restore backup.acl
    

5、注意事项

  1. 文件系统支持ACL 需要文件系统支持(如 ext4、XFS 等),且挂载时需启用 acl 选项。

  2. 权限优先级ACL 规则的优先级高于传统 chmod 权限。

  3. 备份恢复cp -prsync -a 可保留 ACL,但某些操作可能需要显式指定 --acls

  4. 作用范围ACL赋予的权限 是针对某一个人或某个组的,而特殊权限和隐藏权限是针对使用该文件的所有对象


通过 setfacl,你可以实现更灵活的权限管理,例如让多个用户/组共享目录,而无需创建公共组。

2.6 设置文件或目录默认权限掩码(umask)

umask 是 Linux/Unix 中用于设置文件和目录默认权限掩码的命令。权限掩码决定了新创建文件或目录的初始权限。

  1. 基本语法

    umask [选项] [掩码值]
    
    • 不加参数时:显示当前掩码值(八进制格式)。

    • 加掩码值时:临时设置新的掩码(仅对当前会话有效)。

  2. 查看当前 umask

    umask      # 显示八进制掩码(如 0022)
    umask -S   # 显示符号格式(如 u=rwx,g=rx,o=rx)
    
    • 八进制格式:如 0022,实际权限需通过计算得出,计算方式:实际权限 = 最高权限-umask值

    • 符号格式:直接显示用户(u)、组(g)、其他(o)的权限。

  3. 设置 umask

    • 临时设置(仅当前会话有效)

      umask 0027   # 设置为0027(八进制)
      

      生效范围:仅当前 Shell 或终端会话。

    • 永久设置(对所有新会话生效)

      将命令添加到 Shell 的配置文件中(如 ~/.bashrc~/.zshrc/etc/profile):

      echo "umask 0022" >> ~/.bashrc   # 对当前用户永久生效
      source ~/.bashrc                 # 立即生效
      
  4. umask 如何影响权限

    • 计算方式实际权限 = 最高权限-umask值

    • 目录:默认最高权限为 777

      例如: umask 022 → 目录权限为 755(rwxr-xr-x)。

    • 文件:默认最高权限为 666(且默认无执行权限)

      例如: umask 027 → 文件权限为 640rw-r-----)。

  5. 常见 umask 值及效果

    umask目录权限文件权限说明
    0000777666最大开放权限(不安全)
    0022755644默认值(组和其他可读)
    0027750640组可读,其他无权限
    0077700600仅用户可读写(最严格)
  6. 使用场景示例

    # 设置 umask 为 027
    umask 027
    
    # 创建文件和目录验证权限
    mkdir test_dir    # 权限变为 750 (rwxr-x---)
    touch test_file   # 权限变为 640 (rw-r-----)
    
  7. 注意事项

    • 系统默认 umask:通常为 0022(在 /etc/profile/etc/bashrc 中定义)。

    • 安全性建议:生产环境中建议使用 027 或 0077 限制组/其他用户的权限。

    • 子进程继承:umask 会被子进程(如新启动的 Shell)继承。


通过合理设置 umask,可以确保新创建的文件和目录具有安全的默认权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盲敲代码的阿豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值