前言在现代操作系统中,权限管理是保障安全与系统稳定运行的关键环节。Linux作为一个广泛应用的开源操作系统,其权限体系以灵活性、可扩展性和严谨性著称。无论是个人用户还是企业环境,理解并掌握Linux权限管理,既是保障信息安全的基础,也能大幅提升系统管理效率。本文将带你深入探索Linux权限体系的核心概念、常见操作以及最佳实践。
‼️一、Linux权限的概念Linux下有两种用户:超级用户(root)、普通用户
超级用户:可以再linux系统下做任何事情,不受限制普通用户:在linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。退出用户使用 exit 或者 ctrl + d。
‼️二、Linux权限管理❕2.1 文件访问者的分类(人) 文件和文件目录的所有者:u—User(中国平民 法律问题)
文件和文件目录的所有者所在的组的用户:g—Group(不多说)
其它用户:o—Others (外国人)
❕2.2 文件类型和访问权限(事物属性)✔️1. 文件类型Linux 文件类型由文件的第一个字符标识,当使用命令 ls -l 查看文件列表时,可以看到类似如下的输出:
代码语言:javascript复制-rwxr-xr--
drwxr-xr-x
lrwxrwxrwx第一个字符表示文件的类型,可能的取值如下:
字符
文件类型
-
普通文件 (Regular File)
d
目录 (Directory)
l
符号链接 (Symbolic Link)
b
块设备文件 (Block Device)
c
字符设备文件 (Character Device)
p
管道 (Pipe)
s
套接字 (Socket)
✔️2. 基本权限Linux 文件权限分为三组:
所有者 (Owner):文件的创建者。所属组 (Group):同组用户。其他人 (Others):非所有者或非所属组的用户。权限有三种:
权限
描述
值
r
读 (Read)
4
w
写 (Write)
2
x
执行 (Execute)
1
✔️3. 权限值的表示方法a. 符号表示法
用字母表示文件权限,例如:-rw-r--r--
字符
含义
r
读权限
w
写权限
x
执行权限
-
没有该权限
例子:
-rw-r--r-- 表示普通文件,所有者有读写权限,组用户和其他用户只有读权限。b. 数值表示法
每种权限的值相加表示最终权限。例如:
权限
数值
二进制
---
0
000
--x
1
001
-w-
2
010
-wx
3
011
r--
4
100
r-x
5
101
rw-
6
110
rwx
7
111
权限分为三组(Owner, Group, Others),组合成三位数字。例如:
-rwxr-xr-- 的数值表示为 754。❕2.3 文件访问权限的相关设置方法✔️1. chmod 命令chmod (Change Mode) 是用于修改 Linux 文件或目录权限的命令。权限可以用符号或八进制数表示。
基本语法
代码语言:javascript复制chmod [选项] 模式 文件名模式:可以是符号表示法 (u+r, g-w) 或数字表示法 (755)。文件名:要更改权限的目标文件或目录。a. 符号表示法
符号表示法适合逐步修改权限:
代码语言:javascript复制chmod [ugoa][+-=][rwx] 文件名符号
作用
u
文件所有者 (user)
g
文件所属组 (group)
o
其他人 (others)
a
所有用户 (all)
+
添加权限
-
移除权限
=
直接设定权限
示例:
给文件所有者添加写权限:
代码语言:javascript复制chmod u+w filename删除其他人的执行权限:
代码语言:javascript复制chmod o-x filename所有用户设定只读权限:
代码语言:javascript复制chmod a=r filenameb. 数字表示法:
数字表示法直接设定文件权限值(例如 644,755)。
权限
数值
二进制
---
0
000
--x
1
001
-w-
2
010
-wx
3
011
r--
4
100
r-x
5
101
rw-
6
110
rwx
7
111
设置文件权限为 rwxr-xr--:
代码语言:javascript复制chmod 754 filename设置目录权限为 rwx------:
代码语言:javascript复制chmod 700 directory_name常用选项
选项
描述
-R
递归修改权限,适用于目录及其所有子目录和文件。
-v
显示每个文件权限修改的详细信息。
-c
仅显示被更改的文件信息。
--reference=ref_file
将 ref_file 的权限应用到目标文件。
示例:
递归修改目录及其内容的权限:
代码语言:javascript复制chmod -R 755 /path/to/directory使用参考文件权限:
代码语言:javascript复制chmod --reference=ref_file target_file✔️2. chown 命令chown(Change Ownership)用于更改文件或目录的所有者和/或所属组。
语法
代码语言:javascript复制chown [选项] [所有者][:组] 文件名所有者:文件的新所有者用户。组:文件的新所属组。如果不指定所有者,只修改组时,可以用 : 开头。文件名:要修改的目标文件或目录。常用选项
选项
描述
-R
递归更改目录及其内容的所有者和组。
-v
显示更改的详细信息。
--reference=ref_file
使用参考文件的所有者和组进行设置。
示例
更改文件所有者:
代码语言:javascript复制chown user1 filename将 filename 的所有者改为 user1。
更改所有者和组:
代码语言:javascript复制chown user1:group1 filename将 filename 的所有者改为 user1,所属组改为 group1。
仅更改组:
代码语言:javascript复制chown :group1 filename递归更改目录和文件的所有者:
代码语言:javascript复制chown -R user1:group1 /path/to/directory参考其他文件的所有者和组:
代码语言:javascript复制chown --reference=ref_file target_file✔️3. chgrp 命令chgrp(Change Group)用于更改文件或目录的所属组。
语法
代码语言:javascript复制chgrp [选项] [组] 文件名组:文件的新所属组。文件名:要修改的目标文件或目录。常用选项
选项
描述
-R
递归更改目录及其内容的所属组。
-v
显示更改的详细信息。
--reference=ref_file
使用参考文件的组进行设置。
示例
更改文件的所属组:
代码语言:javascript复制chgrp group1 filename将 filename 的所属组改为 group1。
递归更改目录和文件的所属组:
代码语言:javascript复制chgrp -R group1 /path/to/directory参考其他文件的组:
代码语言:javascript复制chgrp --reference=ref_file target_file‼️三、其他权限问题❕3.1 问题一:为什么普通文件是664,目录文件是775?实际上:
创建文件时的默认权限是 666(没有执行权限)。
创建目录时的默认权限是 777(包括执行权限)。
但是:实际权限 = 默认权限 - umask
这里我们引入一个叫做umask的东西。
✔️1. umask 的作用与工作原理umask(User File Creation Mask)是一个在 Linux 操作系统中用于控制文件和目录默认权限的命令。它定义了文件和目录创建时的权限掩码,从而决定新创建的文件或目录的最终权限。
✔️2. umask 的计算规则实际权限 = 默认权限 - umask
注意:这里的 - 并不是简单的减,而是,默认权限 & (~umask)。
例如:
如果 umask = 022: 文件默认权限 = 666 - 022 = 644(rw-r–r–)目录默认权限 = 777 - 022 = 755(rwxr-xr-x)如果 umask = 027: 文件默认权限 = 666 - 027 = 640(rw-r-----)目录默认权限 = 777 - 027 = 750(rwxr-x–)示例:
更改 umask: 修改为 077:
代码语言:javascript复制umask 077
touch test3.txt
mkdir dir3✔️3. 查看和设置 umask查看当前 umask 值运行命令:
代码语言:javascript复制umask这将返回一个四位的八进制数字(前三位是有效的)。
例如:
代码语言:javascript复制$ umask
0022临时设置 umask在当前会话中临时更改:
代码语言:javascript复制umask 0027此更改仅适用于当前 shell 会话。
注意事项
umask 不会增加权限:umask 只能限制权限,而不能授予额外权限。例如,设置 umask 为 0000 允许最大权限,但不能为文件自动添加执行权限。❕3.2 问题二:目录的权限代表什么?✔️1. 读取权限(r - Read)作用: 允许查看目录中的文件名列表。如果没有读取权限,用户即使知道目录的路径,也无法列出其中的内容(如使用 ls 命令)。效果: 如果对目录有读取权限,你可以看到该目录内的文件和子目录的名称,但不能访问其内容(如果缺少执行权限)。✔️2. 写入权限(w - Write)作用: 允许在目录中创建、删除或重命名文件。如果没有写入权限,你无法在该目录中添加新文件、删除文件或修改目录结构。注意: 写入权限还受执行权限的限制(即需要同时有执行权限才能实际修改目录内容)。✔️3. 执行权限(x - Execute)作用: 允许进入该目录,也就是说,用户可以切换到该目录(使用 cd 命令)。允许访问目录中的具体文件(前提是对文件本身有合适的权限)。效果: 如果对目录没有执行权限,即使有读取权限,你也无法查看目录的内容。执行权限对目录至关重要,因为它决定了目录是否可用作工作路径。❕3.3 问题三:想要建立共享文件,但不想让其他人删除怎么办?解决方案:设置粘滞位
粘滞位(Sticky Bit)是一种特殊的权限位,用于保护目录下的文件和子目录,使得只有文件的所有者或者目录的所有者才能删除或修改该文件,即使其他用户对目录有写权限。
✔️1. 粘滞位的作用功能:当粘滞位设置在目录上时,只有以下用户可以删除或重命名该目录中的文件或子目录: 文件所有者。目录所有者。超级用户(root)。应用场景:最常见的例子是 /tmp 目录。该目录通常对所有用户开放写入权限,但由于设置了粘滞位,用户只能删除或修改自己的文件,而不能影响其他用户的文件。✔️2. 粘滞位的表示符号模式:在文件或目录权限的符号表示中,粘滞位通常显示为目录权限的最后一位 t 或 T。
如果目录同时有执行权限,粘滞位显示为 t。如果目录没有执行权限,粘滞位显示为 T。 例如:代码语言:javascript复制drwxrwxrwt 10 root root 4096 Nov 19 /tmp/tmp 目录的权限显示 t,表示粘滞位已启用,且目录具有执行权限。
八进制模式:粘滞位对应的八进制值是 1,可以通过在权限数字前加上 1 设置粘滞位。例如:
1755:设置了粘滞位,并且目录权限为 rwxr-xr-x。1777:设置了粘滞位,并且目录权限为 rwxrwxrwx(例如 /tmp 目录)。✔️3. 设置和移除粘滞位设置粘滞位
使用 chmod 命令为目录添加粘滞位:
代码语言:javascript复制chmod +t directory_name # 使用符号模式添加粘滞位。
chmod 1777 directory_name # 使用八进制模式设置权限并添加粘滞位。移除粘滞位
代码语言:javascript复制chmod -t directory_name # 使用符号模式移除粘滞位。
chmod 0777 directory_name # 使用八进制模式移除粘滞位。结语Linux权限体系是一个兼具严谨与灵活的设计,其核心在于平衡安全性与实用性。通过深入理解权限管理的原理和操作,你不仅能够应对常见的安全威胁,还能更高效地管理系统资源。希望本文能为你的学习和实践提供实用参考,让你在Linux系统的使用中更加自信、游刃有余。
今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,17的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是17前进的动力!