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、文件权限说明
权限项 | 文件类型 | 读 | 写 | 执行 | 读 | 写 | 执行 | 读 | 写 | 执行 |
---|---|---|---|---|---|---|---|---|---|---|
字符表示 | 看具体文件类型 | r | w | x | r | w | x | r | w | x |
数字表示 | 无 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
权限所属 | 无 | 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--
,对应如下身份权限:
身份 | 权限 | 说明 |
---|---|---|
User | rw- | 所有者可读、写,不可执行。 |
Group | r-- | 组内用户仅可读。 |
Others | r-- | 其他用户仅可读。 |
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 系统中 chmod
、chown
、chgrp
三个命令的详细用法和作用说明:
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
(权限掩码)控制。以下是详细解释和计算方法:
一、默认权限的初始值
-
文件的默认初始权限
新创建的普通文件(如文本、脚本)的初始权限为666
(即rw-rw-rw-
),但默认会去除可执行权限(x
),因为普通文件通常不需要自动可执行。 -
目录的默认初始权限
新创建的目录的初始权限为777
(即rwxrwxrwx
),因为目录需要执行权限(x
)才能被访问和遍历。
二、umask 的作用
umask
是一个 权限掩码,用于从初始权限中剔除不需要的权限,最终得到实际权限。
-
umask 值通常为 4 位八进制数(如
0022
),但常用后 3 位(如022
)。 -
计算规则:实际权限 = 初始权限 & (~umask)
(按位取反后与初始权限做按位与操作)。
三、权限计算示例
假设当前用户的 umask
为 022
:
1. 文件的权限计算
-
初始权限:
666
(二进制110 110 110
) -
umask:
022
(二进制000 010 010
) -
取反后的 umask:
755
(二进制111 101 101
) -
实际权限:
666 & 755 = 644
(符号表示:rw-r--r--
)
2. 目录的权限计算
-
初始权限:
777
(二进制111 111 111
) -
umask:
022
(二进制000 010 010
) -
取反后的 umask:
755
(二进制111 101 101
) -
实际权限:
777 & 755 = 755
(符号表示:rwxr-xr-x
)
四、常见 umask 值及对应权限
umask 值 | 文件权限 | 目录权限 | 说明 |
---|---|---|---|
0000 | 666 | 777 | 所有用户有完全权限(不推荐)。 |
0022 | 644 | 755 | 所有者完全,组和其他只读/执行。 |
0002 | 664 | 775 | 组用户可写(适合团队协作)。 |
0027 | 640 | 750 | 严格限制其他用户权限。 |
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 |
示例: