20分钟搞定Linux系统文件权限管理

1、在Linux系统中,将权限分为了读(r)、写(w)、执行(x)这三类权限,后续对于文件权限的管理与优化都离不开这三种权限。

  • 读取(r): 允许查看文件内容,显示目录列表
  • 写入(w): 允许修改文件内容,允许在目录中新建、删除、移动文件或者子目录
  • 可执行(x): 允许运行程序,切换目录,比如常见的脚本文件或二进制程序
  • 无权限(-): 没有权限

2、Linux系统中分为七种文件类型

1、普通文件类型
这是最常见的文件类型,可以包括文本文件、二进制文件、数据文件和各种压缩文件。普通文件的属性第一个字符是"-"。
2、目录文件
目录文件允许使用cd命令进入,其属性第一个字符是"d"。
3、块设备文件
块设备文件是系统存取接口设备,如硬盘,其属性第一个字符是"b"。
4、字符设备
字符设备文件是串行端口的接口设备,如键盘、鼠标,其属性第一个字符是"c"。
5、套接字文件
套接字文件通常用于网络数据连接,其属性第一个字符是"s"。
6、管道文件
管道文件(FIFO)主要用于解决多个程序同时存取一个文件可能造成的错误,其属性第一个字符是"p"。
7、软链接文件
链接文件类似于Windows系统中的快捷方式,其属性第一个字符是"I"。

3、文件权限说明

权限项文件类型执行执行执行
字符表示看具体文件类型rwxrwxrwx
数字表示421421421
权限所属User(文件所属人)Group(文件所属组)Others(其他人)

    -    |    rw-r--r--    |   .   |   1   |   root   |   root   |   16   |   3月 30 11:41   |   lee

   [1]            [2]         [3]      [4]      [5]         [6]         [7]               [8]               [9]

下列是对这九个字段代表含义的解析:

[1]文件类型,这里的“-”代表是文件

[2]文件权限说明,这里的文件所属人可以读写,而文件所属组和其他人只能读

[3]文件安全上下文标记,与SELinux上下文有关,表示文件有其他安全属性

[4]对于文件来说,这个字段指的是文件内容被系统记录的次数,即硬链接个数

[5]文件拥有者,即文件所属人,这里为root

[6]文件拥有组,即文件所属组,这里为root

[7]对于文件:指的是文件内容大小,这个文件有16字节大小

[8]文件最后修改日期,这里为3月30 11:41

[9]文件名,这个文件名为lee,文件名称中一个英文字符占用一个字节,一个中文字符占用三个字节

   d    |    rwxr-xr-x    |   .   |   2   |   root   |   root   |    16    |   3月 30 11:41   |   lee

  [1]               [2]         [3]     [4]       [5]         [6]         [7]               [8]                [9]

下列是对这九个字段代表含义的解析:

[1]文件类型,这里的“d”代表是目录

[2]文件权限说明,这里的文件所属人有读、写和执行的权限,而文件所属组和其他人只有读和执行的权限

[3]文件安全上下文标记,与SELinux上下文有关,表示文件有其他安全属性

[4]硬链接数量: 对于目录,硬链接数默认至少为 2(目录自身的 . 和父目录的 .. 条目)。
若有子目录,数量会进一步增加。

[5]文件拥有者,即文件所属人,这里为root

[6]文件拥有组,即文件所属组,这里为root

[7]对于目录:指的是目录中子文件的元数据大小,这里有82字节

[8]文件最后修改日期,这里为3月23 10:39

[9]目录名,这个目录名为bak,文件名称中一个英文字符占用一个字节,一个中文字符占用三个字节

 4、用户对于文件的三种身份

在 Linux 系统中,用户对文件的身份分为以下三种,每种身份对应不同的权限和作用:


1. 文件所有者(User)

  • 含义
    文件的所有者是创建该文件的用户,拥有最高控制权。

  • 作用

    • 可以修改文件内容(写权限)。

    • 可以更改文件的权限(如通过 chmod 命令)。

    • 可以删除文件或转移所有权(通过 chown 命令)。

  • 权限位置
    在 ls -l 输出的权限字符串中,第一组 rwx(如 -rwxr--r-- 的 rwx)。


2. 所属组(Group)

  • 含义
    文件属于一个用户组,组内的成员共享相同的权限。

  • 作用

    • 方便批量管理用户权限(例如项目团队共享文件)。

    • 组内用户可依据权限读写或执行文件。

  • 权限位置
    权限字符串的第二组 rwx(如 -rwxr--r-- 的 r--)。

  • 管理命令

    • 修改所属组:chgrp 或 chown :组名 文件名

    • 查看用户所属组:groups 用户名


3. 其他用户(Others)

  • 含义
    除了文件所有者和所属组成员外的其他所有用户。

  • 作用

    • 控制非相关用户的访问权限,确保系统安全。

    • 默认权限通常最严格(如仅允许读)。

  • 权限位置
    权限字符串的第三组 rwx(如 -rwxr--r-- 的 r--)。


权限示例解析

假设文件权限为 -rw-r--r--,对应如下身份权限:

身份权限说明
Userrw-所有者可读、写,不可执行。
Groupr--组内用户仅可读。
Othersr--其他用户仅可读。

5、用户对于文件的身份识别及设定(以及修改文件权限)

watch -n 1 "ls -lR test"

使用上述命令获得监视窗,如下图

从监视窗中可以看到test目录中有子目录hajimi和两个文件test1、test2,然后子目录hajimi中又有两个文件hajimi1和hajimi2,并且文件的权限都是相同的,而子目录hajimi的权限则是目录所属人多了个执行权限。

下面将使用chmod、chown、chgrp这三种命令修改用户对于文件的身份识别及设定,以及修改对于文件的权限 。

chmod命令:

使用字符修改文件权限:

此命令是将hajimi这个目录的权限复制到test1,让两个文件的权限相同。示例如下,d代表的是文件类型为目录,所在位不是权限,不能复制。

上面这三条命令就是分别在test1文件中的User权限中减去执行权限,Group权限中增加写权限,Others权限中增加写权限,且这三条命令可以合在一起用逗号隔开写成一条命令。下图为执行命令后的示例。

此命令则会把User和Group位的权限同时设置为rwx,即文件所属人和文件所属组都可读可写可执行。例图如下

此命令中的a指的是all(全部),即将User、Group、Others这三位权限全部设置为rw。例图如下

使用数字修改文件权限:

可以将User、Group、Others这三种用户所对应的三位权限看成三位连起来的二进制,则每位的值由 r(4)+w(2)+x(1) 组成。

所以上图命令中的744代表了User的rwx权限、Group的r权限和Others的r权限。

chown命令: 

将文件test1和目录hajimi的所属人由原来的超级用户root改为用户lcf。

而目录里面的文件的所属人没有变化。

-R表示递归,此命令可以同时将目录以及目录下的文件的所属人改为lcf。

同时改变文件所属人和文件所属组:

下图为未进行操作前。

这条命令可以将目录hajimi以及目录hajimi下的文件的文件所属人和文件所属组同时更改为root,两个root之间用的是.(点)连接。

这条命令是将文件test1的文件所属人和文件所属组同时更改为root,两个root之间用的是:(冒号)连接。

chgrp命令:

此三条命令同上方的chown命令相差无几,只是从更改文件所属人变为了更改文件所属组。

chgrp lcf test1        这条命令可以将文件test1的文件所属组更改为lcf。

chgrp lcf hajimi         这条命令可以将目录hajimi的文件所属组更改为lcf。

chgrp -R lcf hajimi        这条命令可将目录hajimi和目录下的文件的文件所属组同时更改为lcf。

6、以下是 Linux 系统中 chmodchownchgrp 三个命令的详细用法和作用说明:


1. chmod:修改文件/目录的权限

作用

设置文件或目录的读(r)、写(w)、执行(x)权限,控制不同用户(User/Group/Others)的访问能力。

语法
chmod [选项] <权限模式> <文件或目录>
常用选项
  • -R:递归修改目录及其子内容的权限(慎用,避免误操作)。

  • -v:显示详细操作信息。

权限模式
  • 符号模式(直观易读):

    chmod [ugoa][+-=][rwx] 文件
    • u:所有者(User)

    • g:所属组(Group)

    • o:其他用户(Others)

    • a:所有用户(All)

    • +:添加权限

    • -:移除权限

    • =:直接设置权限

    示例

    chmod u+rwx file.txt    # 所有者添加读、写、执行权限
    chmod go-w file.txt     # 组和其他用户移除写权限
    chmod a=rx file.txt     # 所有用户权限设为读+执行
  • 数字模式(八进制):
    用三位数字表示权限,每位对应 User/Group/Others,每位的值由 r(4)+w(2)+x(1) 组成。
    示例

    chmod 755 script.sh     # User: rwx(7), Group/Others: r-x(5)
    chmod 644 config.conf   # User: rw-, Group/Others: r--
典型场景
  • 让脚本可执行:chmod +x script.sh

  • 限制敏感文件:chmod 600 private.key(仅所有者可读写)


2. chown:修改文件/目录的所有者和所属组

作用

更改文件或目录的 所有者(User) 和 所属组(Group)

语法
chown [选项] <新所有者>:<新组> <文件或目录>
常用选项
  • -R:递归修改目录及其子内容的所有权。

  • --from=原所有者:原组:仅当原所有者/组匹配时才修改。

示例
chown alice file.txt          # 将所有者改为 alice
chown :developers file.txt    # 将所属组改为 developers
chown alice:developers /data  # 同时修改所有者和组
chown -R bob:team /project    # 递归修改 /project 目录下所有内容
注意事项
  • 只有 root 用户或当前所有者有权修改文件所有权。

  • 若省略组名(如 chown alice file),组保持不变。


3. chgrp:修改文件/目录的所属组

作用

专门修改文件或目录的 所属组(Group)(功能是 chown 的子集)。

语法
chgrp [选项] <新组> <文件或目录>
常用选项
  • -R:递归修改目录及其子内容的所属组。

  • -v:显示操作详情。

示例
chgrp admins file.txt     # 将文件所属组改为 admins
chgrp -R www-data /var/www  # 递归设置 /var/www 目录的组为 www-data
与 chown 的区别
  • chgrp 仅修改组,chown 可同时修改所有者和组。

  • 普通用户需是目标组的成员才能使用 chgrp


关键总结

命令核心功能典型用途
chmod控制访问权限保护敏感文件、开放共享目录权限
chown修改所有者和组文件归属转移、团队协作权限管理
chgrp仅修改所属组快速调整文件的组共享权限

7、系统的默认权限设定

umask表示的是系统的保留权力。

使用umask 权限值 可以临时设定系统预留权力,

下图为未作更改的root用户的默认系统保留权限。

分别进入/etc/bashrc和/etc/profile这两个文件,在这两个文件最下行增加umask 077这条数据,然后利用source命令使配置生效,则再次新创建的窗口的默认umask为077。

umask(权限掩码)解析:

在 Linux 系统中,文件和目录的默认权限由 umask(权限掩码)控制。以下是详细解释和计算方法:


一、默认权限的初始值

  1. 文件的默认初始权限
    新创建的普通文件(如文本、脚本)的初始权限为 666(即 rw-rw-rw-),但默认会去除可执行权限(x),因为普通文件通常不需要自动可执行。

  2. 目录的默认初始权限
    新创建的目录的初始权限为 777(即 rwxrwxrwx),因为目录需要执行权限(x)才能被访问和遍历。


二、umask 的作用

umask 是一个 权限掩码,用于从初始权限中剔除不需要的权限,最终得到实际权限。

  • umask 值通常为 4 位八进制数(如 0022),但常用后 3 位(如 022)。

  • 计算规则:实际权限 = 初始权限 & (~umask)
    (按位取反后与初始权限做按位与操作)。


三、权限计算示例

假设当前用户的 umask 为 022

1. 文件的权限计算
  • 初始权限666(二进制 110 110 110

  • umask022(二进制 000 010 010

  • 取反后的 umask755(二进制 111 101 101

  • 实际权限
    666 & 755 = 644
    (符号表示:rw-r--r--

2. 目录的权限计算
  • 初始权限777(二进制 111 111 111

  • umask022(二进制 000 010 010

  • 取反后的 umask755(二进制 111 101 101

  • 实际权限
    777 & 755 = 755
    (符号表示:rwxr-xr-x

四、常见 umask 值及对应权限

umask 值文件权限目录权限说明
0000666777所有用户有完全权限(不推荐)。
0022644755所有者完全,组和其他只读/执行。
0002664775组用户可写(适合团队协作)。
0027640750严格限制其他用户权限。

8、系统中的特殊权限

文件权限中分为ugo三位,即User、Group、Others,可看作三位二进制,则u代表4、g代表2、o代表1,所以在用数字模式设置的权限前加一位数字代表在ugo三位设置特殊权限。

例如1777,这里的1即是在Others位的x更改为t,实现粘滞键的特殊权限;2777的2则是Group位的SGID特殊权限,以此类推6777则代表同时开启User和Group位的特殊权限。

1)SUID(Set UID)

只针对二进制可执行文件,当二进制可执行文件开启SUID,那么任何人在运行这个文件时产生的进程都以文件拥有者身份运行,和运行者的身份没有任何关系。

更改这个文件后,普通用户haha也能以root身份运行这个文件程序,即可以创建用户。这里的两行sss_cache must be run as root是因为认证插件发现用户身份不对,实际上还是可以创建用户的。

下图就可以查看到新创建的用户hehe的信息,所以创建用户是成功的。

当把SUID的权限取消后就发现普通用户haha想要创建用户会报错,显示权限不足。

2)SGID(Set GID)

当一个目录设置SGID后,这个目录里面新建的文件都属于这个目录的所属组。

下图为未操作之前。

可以看到新建文件的所属人和所属组都为用户haha。

上图两条命令作用相同,第一条命令的2是将Group位的x更改为s,而777是保持权限不变;第二条命令是直接将Group位的x更改为s。

可以看到新创建的文件hahafile2的所属组为目录所属组pub

3)Sticky Bit

设置粘滞键之后,目录里新创建的文件只能由文件所属人删除,其他人不能删除。

下图为未操作之前。

上图两条命令作用相同,第一条命令的1是将Others位的x更改为t,而777是保持权限不变;第二条命令是直接将Others位的x更改为t。

这里Others位的x更改为t后,其他人将不能删除其他人创建的文件,只有文件所属人能够删除。

所以这里用户lee无法删除用户lcf创建的文件。

9、ACL权限列表

传统的Linux权限分为所有者、所属组和其他用户三个类别,每个类别有读、写、执行权限。但有时候,这种简单的分类无法满足复杂的权限需求,比如需要为多个用户或组设置不同的权限,这时候就需要用到ACL。

(1)查看ACL权限

使用watch -n 1 "ls -ld /mnt/timinglee;ls -lR /mnt/timinglee;getfacl /mnt/timinglee"这条命令打开监视窗口观察目录timinglee的权限内容、目录timinglee中是否有文件以及目录timinglee的ACL权限内容情况。

(2)设置ACL权限

添加/修改 ACL 条目:setfacl -m <规则> /path/to/file

下图的命令的作用就是为目录 /mnt/timinglee/ 添加一条 ACL 规则,赋予用户 admin 对该目录的 读(r)、写(w)、执行(x) 权限。

删除 ACL 条目:setfacl -x <规则> /path/to/file

清除所有 ACL 规则:setfacl -b /path/to/file

一、ACL 规则的基本格式

<规则> 的通用格式为:

[类型]:[主体]:[权限]
  • 类型:指定 ACL 的作用对象(如用户、组等)。

  • 主体:具体的用户或组名称(可为空)。

  • 权限:赋予的读(r)、写(w)、执行(x)权限。


二、规则类型与示例

1. 用户规则
  • 格式:user:用户名:权限

  • 作用:为指定用户设置权限。

  • 示例:

    # 允许用户 alice 读写执行
    setfacl -m u:alice:rwx /data/file.txt
    
    # 所有者权限(等同于传统权限的 owner)
    setfacl -m u::rwx /data/file.txt  # 用户字段为空时指文件所有者
2. 组规则
  • 格式:group:组名:权限

  • 作用:为指定组设置权限。

  • 示例:

    # 允许组 developers 读写
    setfacl -m g:developers:rw /data/
3. 其他用户规则
  • 格式:other:权限

  • 作用:控制非所有者和所属组外的其他用户权限。

  • 示例:

    # 禁止其他用户访问
    setfacl -m o::0 /data/  # 0 表示无权限
4. 掩码(Mask)规则
  • 格式:mask:权限

  • 作用:限制用户和组的最大有效权限(权限交集)。

  • 示例:

    # 限制用户和组的最大权限为读和执行
    setfacl -m m::rx /data/
5. 默认规则(仅目录有效)
  • 格式:default:[类型]:[主体]:[权限]

  • 作用:设置目录的默认 ACL,其子文件和子目录将继承此规则。

  • 示例:

    # 子文件自动继承用户 alice 的读写权限
    setfacl -d -m u:alice:rw /shared/

三、ACL关键机制解析

1. 权限优先级
  • ACL 条目优先级高于传统权限。例如:

    • 若用户 alice 在 ACL 中被赋予 rwx,即使传统权限的 others 为 ---alice 仍可访问。

2. 掩码(Mask)
  • 定义用户和组的最大有效权限。

  • 若掩码为 r--,即使 ACL 条目赋予 rwx,实际权限仍为 r--

  • 自动调整:当修改 ACL 时,掩码可能自动更新为所有用户/组权限的最大值。

3. 默认 ACL(Default ACL)
  • 仅适用于 目录,控制其子文件和子目录的初始 ACL。

  • 子项会继承父目录的默认 ACL,但不会继承普通 ACL 条目。

10、文件系统属性的attr权限

attr权限可以限制所有用户,无论是文件所属人、文件所属组还是其他人。

1. 作用

通过 chattr 设置的属性直接影响文件在文件系统中的行为(如防删除、防修改)。

  • 常用属性

    属性说明
    i不可变(Immutable):禁止删除、修改、重命名或创建硬链接。
    a仅追加(Append-only):只能追加内容,不能修改或删除已有内容。
    A不更新访问时间(No atime):禁用文件的访问时间更新。
    S同步写入(Synchronous):强制文件修改后立即同步到磁盘。
2. 操作命令
命令功能示例
chattr设置/修改文件属性chattr +i file
lsattr查看文件属性lsattr -d file

示例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值