Linux 系统权限知识及应用实践

Linux 系统权限知识及应用实践

一、文件权限介绍

文件权限位说明:Linux 文件或目录的基础权限位是由 9 个字符来控制的,每三位字符为一组,通过下表从另一个维度来说明文件权限的重点知识。

这里的 "r" 表示可读,"w" 表示可写,"x" 表示可执行,"-" 表示无权限。

二、 Linux 文件及目录权限核心知识说明

1、普通文件对应读、写、执行权限的详细说明

Linux 系统中的权限对于文件目录 来说,是有一定区别的,下面先列举一下普通文件对应的权限的重要知识。

  • 可读 r:表示具有读取、浏览文件内容(即读取文件实体 block) 的权限。
  • 可写 w:表示具有新增、修改、删除文件内容的权限。
  • 可执行 x:表示具有执行文件的权限。

其中,对于可读 r,这里有两点需要做进一步说明。

  • 如果没有可读 r 的配合,那么使用 vim 编辑文件时会提示无法编辑 (但可强制编辑覆盖文件),可以使用 echo 等命令进行重定向或追加内容到文件。
  • 删除、移动或创建文件等的权限是受父目录(上一级目录)的权限控制的(因为文件名没有存放在 Inode 里,而是在上级目录的 block 里存放着的,若修改上级目录的 block(删除文件本体),当然会受到上级目录的 Inode 的权限控制),与文件本身的权限无关, 因此,文件本身的可写 w 权限与文件是否能被删除和改名无关

对于可执行 x,需要注意以下 3 点。

  • 首先文件的本身要能够执行(文件为命令或脚本)。
  • 如果是普通用户,同时还需要具备可读 r 的权限才能执行文件。
  • 而 root 用户只要有可执行 x 的权限就能执行文件。

2、目录对应读、写、执行权限的详细说明

Linux 系统中目录的权限和文件的权限有一些细微的区别

  • 可读 r:表示具有浏览目录下面文件及子目录名的权限, 例如, 可执行 ls dir 命令查看目录下的内容。但是如果没有可执行 x 权限的配合,则不能切换到指定目录里,即无法执行 cd dir 命令,而且在执行 ls 命令查看列表时,虽然可以看到所有的文件名,但是会提示无权访问目录下的文件。执行 ls -l 命令查看列表目录下的文件属性时,所有文件对应的属性都会带有问号,也会提示无权访问目录下的文件,但是依然可以看到所有的文件名。
  • 可写 w:表示具有增加、删除或修改目录内文件的权限。 但是, 如果没有可执行 x 权限的配合,即使有 w 权限,也无法删除或创建文件。
  • 可执行 x:表示具有进入目录的权限。 例如,可以执行 cd dir 命令切换到目录下,但是无法列表目录下的文件及子目录。

上述的描述可能比较枯燥,不好理解,下面就来一起搭建测试环境,通过实践来理解上述的总结。

三、Linux 权限体系核心知识实践

1、权限实践环境准备

a. 规划三种不同的用户角色

权限实践环境三种不同用户角色规划见下表:

b. 创建对应的用户及用户组角色

首先,创建一个用户组名字为 incahome:

复制代码
groupadd incahome		# groupadd是添加用户组的命令

接下来创建 oldboy 用户,并使之属于 incahome 这个组,相当于让家庭主人 oldboy 成为用户组 incahome 这个家的家庭成员:

复制代码
userdel -r oldboy		# 如果先前已经创建了 oldboy 用户,就先删除再创建
useradd oldboy -g incahome		# 添加 oldboy 用户并加入 incahome 组
id oldboy				# 查看创建的 oldboy 用户及所属组的信息

然后,添加女主人 oldgirl 用户,并使之也属于 incahome 这个组,相当于让 oldgirl 成为 incahome 这个家的家庭成员:

复制代码
useradd oldgirl -g incahome		# 添加 oldgirl 用户并加入 incahome 组。
id oldgirl						# 查看创建的 oldgirl 用户及所属组信息。

最后,添加一个其他用户 test,表示与 oldboy、oldgirl 没有任何关联的其他组的其他人。

复制代码
useradd test
id test
c. 创建用于测试的目录及文件环境
复制代码
mkdir -p /oldboy		# 在根目录下创建测试目录 oldboy。
echo "echo oldboyLinux" >/oldboy/test.sh   # 生成脚本文件test.sh,内容是打印oldboyLinux字符串。
cat /oldboy/test.sh		# 查看脚本test.sh内容。
chmod +x /oldboy/test.sh		# 添加执行权限,chmod的使用详见本章后文。
ls -l /oldboy/test.sh	# 查看授权后的权限属性。
d. 打开远程登录窗口,并登录

打开4个 Xshell SSH 远程登录窗口,并分别使用 root、oldboy、 oldgirl、test 用户角色进行登录,其中 root 窗口是用来修改文件属性的,其他 3 个用户窗口则是用来测试对应权限是否符合预期,设置好后不同窗口的登录情况下图所示。

2、通过实践测试文件对应权限

a. 测试默认情况下不同用户的对应权限

待测试文件及目录的默认属性如下:

复制代码
ls -ld /oldboy				# -d:只显示目录文件名称而不显示其子文件和子目录
ls -l /oldboy/test.sh		# 长格式显示详细信息

接着分别测试 oldboy、oldgirl、test 用户针对上述 test.sh文件的权限。对比如下:

经过对比,不难发现三个用户都有着相同的 oldboy 目录权限和 test.sh 文件权限。

因此,这里将只以 oldboy 用户为例,针对操作过程进行整理。命令如下:

复制代码
cat /oldboy/test.sh		# 查看文件内容,说明有读文件的权限
echo "echo oldboy" >>/oldboy/test.sh	# 往文件里追加内容
/oldboy/test.sh			# 执行后有打印输出,说明有执行的权限
rm -f /oldboy/test.sh	# 测试一下删除文件

对于上述 test.sh 文件来说,用户和组都是 root,因此,相对 tesh.sh 文件来说,oldboy、oldgirl、test 这三个用户都是其他用户角色,即针对 tesh.sh 的权限查看最后三位(r-x),可以发现, 它们都有读和执行的权限。

综上所述,oldboy、oldgirl、test 三个用户针对上述 test.sh 文件都拥有同样的其他用户(Other)权限,即读和执行,但都没有写的权限。可能有读者会思考,因为 "r-x" 中的 "-" 位置没有 w,所以不可写文件,这没有错,但是不能删除文件是不是也因为没有这个 w 呢?后面测试时加上 w 权限之后再删除看看。

b. 在 root 窗口将与文件对应的用户改为 oldboy,用户组改为 incahome。
复制代码
[root@shy ~]# chown oldboy.incahome /oldboy/test.sh		# 将文件所属的用户改为 oldboy,组改为 incahome。
[root@shy ~]# ls -l /oldboy/test.sh 
-rwxr-xr-x 1 oldboy incahome 17 4月  30 20:33 /oldboy/test.sh

提示: oldboy 用户对 test.sh 的权限,可查看前 3 位,即 "rwx"; oldgirl 用户属于 incahome 组,因此,对 tesh.sh 的权限,可查看中间三位,即 "r-x";test 用户则查看后三位,即 "r-x"。

根据文件属性信息可知,test.sh 的所有者已经改为了 oldboy 用户, 所以 oldboy 用户对 test.sh 的权限是看前三位(rwx),可以得知, 它具有读、写和执行的权限。登录 oldboy 用户窗口的实践步骤如下:

复制代码
[root@shy ~]# whoami 
root
[root@shy ~]# su - oldboy
上一次登录:四 4月 30 20:38:42 CST 2026pts/1 上
[oldboy@shy ~]$ whoami
oldboy
[oldboy@shy ~]$ cat /oldboy/test.sh 		# 浏览内容
echo oldboyLinux
[oldboy@shy ~]$ echo "echo oldboy" >>/oldboy/test.sh 		# 追加(写)内容
[oldboy@shy ~]$ cat /oldboy/test.sh 
echo oldboyLinux
echo oldboy
[oldboy@shy ~]$ /oldboy/test.sh 			# 执行文件
oldboyLinux
oldboy

测试结论 :oldboy 用户对 test.sh 拥有的权限要看前三位 (rwx), 可以看出,其具有读、写和执行的权限。

下面同样根据文件属性信息来进行测试,这里 test.sh 对应的用户组已经改为了 incahome,而 oldgirl 属于 incahome 组,因此,oldgirl 对 test.sh 的权限就看中间三位(r-x),可以看出,它具有读和执行的权限,而无写入文件的权限。登录 oldgirl 用户窗口的实践步骤如下:

复制代码
[oldboy@shy ~]$ exit
登出
[root@shy ~]# su - oldgirl
上一次登录:四 4月 30 20:40:04 CST 2026pts/2 上
[oldgirl@shy ~]$ whoami
oldgirl
[oldgirl@shy ~]$ cat /oldboy/test.sh 		# 浏览内容
echo oldboyLinux
echo oldboy
[oldgirl@shy ~]$ echo "echo oldboy" >>/oldboy/test.sh 
-bash: /oldboy/test.sh: 权限不够			 # 不可以写入
[oldgirl@shy ~]$ /oldboy/test.sh 			# 可以执行
oldboyLinux
oldboy
[oldgirl@shy ~]$ rm -f /oldboy//test.sh 		
rm: 无法删除"/oldboy//test.sh": 权限不够	   # 不能删除文件

测试结论 :oldgirl 用户对 test.sh 文件拥有对应用户组 (incahome)的权限,即读和执行的权限,没有写权限。

同样地,test 用户对于 test.sh 文件拥有对应其他用户位的权限, 即读和执行的权限,没有写的权限。

c. 重点测试 oldboy 用户对文件的 w 删除权限及 test 用户的执行权限

test.sh 中其他用户权限的 r 权限去掉:

复制代码
[oldgirl@shy ~]$ exit
登出
[root@shy ~]# chmod 751 /oldboy/test.sh 
[root@shy ~]# ls -l /oldboy/test.sh 
-rwxr-x--x 1 oldboy incahome 29 5月  11 16:48 /oldboy/test.sh	# 后三位为 --x 只有执行权限

下面测试 oldboy 用户下是否有删除 test.sh 的权限:

复制代码
[root@shy ~]# su - oldboy			# 先切换到 oldboy 用户下
上一次登录:一 5月 11 17:19:30 CST 2026pts/0 上
[oldboy@shy ~]$ rm -f /oldboy/test.sh 
rm: 无法删除"/oldboy/test.sh": 权限不够

现在测试 test 用户下是否有执行 test.sh 的权限:

复制代码
[oldboy@shy ~]$ exit				# 先退出 oldboy 用户
登出
[root@shy ~]# su - test				# 切换到 test 用户下
上一次登录:四 4月 30 20:41:27 CST 2026pts/3 上
[test@shy ~]$ /oldboy/test.sh 
bash: /oldboy/test.sh: 权限不够		 # 其他用户位有 x 权限,但是依然无法执行。

测试结论总结如下:

  • oldboy 用户无删除 test.sh 的权限,即使有 w 属性也不行,原因后文会讲。
  • test 用户无执行权限,即使有 x 权限,普通用户要想执行文件,也必须要有 r 和 x 权限才行。
  • 文件的 w 或 x 权限要能顺利生效,也必须要有 r 权限的配合,因为读不了文件内容,那么修改文件和执行文件都是有问题的。
d. 修改 /oldboy 目录的权限,并测试 oldboy 用户对 oldboy 目录下 test.sh 的删除权限
复制代码
[test@shy ~]$ exit				# 退出 test 用户,回到 root 用户下
登出
[root@shy ~]# chmod 000 /oldboy/test.sh 	# 将文件调整为无任何权限
[root@shy ~]# ls -l /oldboy/test.sh 
---------- 1 oldboy incahome 19 5月  12 01:03 /oldboy/test.sh
[root@shy ~]# chown -R oldboy /oldboy	# 将 test.sh 的上级目录所属的用户修改为 oldboy。
[root@shy ~]# ls -ld /oldboy/			# 查看调整结果
drwxr-xr-x 4 oldboy root 77 5月  12 01:03 /oldboy/

测试分析,根据 test.sh 文件属性信息可知,oldboy 用户对 test.sh 的权限看前三位(---),即无任何权限,测试步骤如下:

复制代码
[root@shy ~]# su - oldboy			  # 切换到 oldboy 用户下
上一次登录:二 5月 12 01:07:49 CST 2026pts/0 上
[oldboy@shy ~]$ cat /oldboy/test.sh 
cat: /oldboy/test.sh: 权限不够			# 无法查看内容
[oldboy@shy ~]$ echo "echo oldboy" >>/oldboy/test.sh 
-bash: /oldboy/test.sh: 权限不够		# 无法追加(写)内容
[oldboy@shy ~]$ /oldboy/test.sh
-bash: /oldboy/test.sh: 权限不够		# 无法执行
[oldboy@shy ~]$ rm -f /oldboy/test.sh  # 可以删除文件
[oldboy@shy ~]$ ls -l /oldboy/test.sh
ls: 无法访问/oldboy/test.sh: 没有那个文件或目录	# 文件已被删除

测试结论:删除 test.sh 文件与文件本身的属性无关 ,而与上级目录对应的用户权限是否有 w 权限有关。出现这个问题的原因是:前面章节已经讲解过,文件名不是文件的属性 ,文件名存在于上一级目录的 block 里面,删除文件就相当于是删除了文件名 ,即修改了上级目录的 Block 信息,因此,必然会受上级目录权限的控制 ,这是目录 w 权限的真正作用 ,即删除目录下的文件和修改文件名

3、通过实践测试目录属性对应的权限

a. 针对当下目录 /oldboy 属性测试权限

复制代码
[root@shy ~]# ls -ld /oldboy/
drwxr-xr-x 4 oldboy root 62 5月  12 01:20 /oldboy/

通过上述命令可知,/oldboy 目录的用户为 oldboy,用户组为 root, 因此,oldboy 用户对 /oldboy 目录下的内容的权限看前三位 (rwx),可以得知,其具备浏览 oldboy 目录下内容的权限、删除 oldboy 目录下文件的权限和切换到 oldboy 目录下的权限。而 oldgirl 及 test 用户对于 /oldboy 目录权限的属性来说,都属于其他用户角 色,因此,对应权限都看最后三位(r-x),即都有浏览 oldboy 目录下内容的权限、切换到 oldboy 目录下的权限,但是无删除 oldboy 目录下文件的权限。测试实践过程如下。

使用 oldboy 用户进行测试:

复制代码
[root@shy ~]# su - oldboy		# 切换到 oldboy 用户下
上一次登录:二 5月 12 01:19:36 CST 2026pts/0 上
[oldboy@shy ~]$ whoami
oldboy
[oldboy@shy ~]$ ls -ld /oldboy
drwxr-xr-x 4 oldboy root 62 5月  12 01:20 /oldboy
[oldboy@shy ~]$ touch /oldboy/{1..3}.txt	# oldboy 的 w 权限允许在当前目录下创建文件。
[oldboy@shy ~]$ ls /oldboy/					# oldboy 的 r 权限允许在当前目录下读取文件。
1.txt  2.txt  3.txt  oldboydir  oldboydir_soft_link  test
[oldboy@shy ~]$ ls -l /oldboy/		# oldboy 的 r 权限允许查看列表目录下的内容及属性信息。
总用量 0
-rw-r--r-- 1 oldboy incahome 0 5月  19 21:35 1.txt
-rw-r--r-- 1 oldboy incahome 0 5月  19 21:35 2.txt
-rw-r--r-- 1 oldboy incahome 0 5月  19 21:35 3.txt
drwxr-xr-x 2 oldboy root     6 3月  27 17:13 oldboydir
lrwxrwxrwx 1 oldboy root     9 3月  27 17:14 oldboydir_soft_link -> oldboydir
drwxr-xr-x 2 oldboy root     6 3月  24 16:11 test
[oldboy@shy ~]$ cd /oldboy/	 # 切换到 oldboy 目录下,这是 oldboy 目录用户位中 x 权限的作用。
[oldboy@shy oldboy]$ pwd
/oldboy
[oldboy@shy oldboy]$ rm -f 1.txt 	# 可以删除目录下的文件,这是oldboy目录用户位中 w 权限的作用。
[oldboy@shy oldboy]$ ls
2.txt  3.txt  oldboydir  oldboydir_soft_link  test

在使用 oldgirl、test 用户测试时,会发现二者的权限相同,因此这里仅以 oldgirl 用户为例进行讲解,测试过程如下:

复制代码
[root@shy ~]# su - oldgirl
上一次登录:一 5月 11 17:07:06 CST 2026pts/0 上
[oldgirl@shy ~]$ whoami
oldgirl
[oldgirl@shy ~]$ ls -ld /oldboy
drwxr-xr-x 4 oldboy root 88 5月  19 21:36 /oldboy	# oldgirl 对应权限看最后三位(r-x)
[oldgirl@shy ~]$ ls /oldboy							 # 可以列表文件名,因为具有 r 权限。
2.txt  3.txt  oldboydir  oldboydir_soft_link  test
[oldgirl@shy ~]$ ls -l /oldboy						 # 可以列表属性信息。
总用量 0
-rw-r--r-- 1 oldboy incahome 0 5月  19 21:35 2.txt
-rw-r--r-- 1 oldboy incahome 0 5月  19 21:35 3.txt
drwxr-xr-x 2 oldboy root     6 3月  27 17:13 oldboydir
lrwxrwxrwx 1 oldboy root     9 3月  27 17:14 oldboydir_soft_link -> oldboydir
drwxr-xr-x 2 oldboy root     6 3月  24 16:11 test
[oldgirl@shy oldboy]$ touch /oldboy/{a.c}.txt		 # 无法创建文件,没有 w 权限
touch: 无法创建"/oldboy/{a.c}.txt": 权限不够
[oldgirl@shy ~]$ cd /oldboy						     # 可以切换到 oldboy 目录下,有 x 权限
[oldgirl@shy oldboy]$ pwd
/oldboy
[oldgirl@shy oldboy]$ ls
2.txt  3.txt  oldboydir  oldboydir_soft_link  test
[oldgirl@shy oldboy]$ rm -f 2.txt 					 # 无法删除文件,没有 w 权限
rm: 无法删除"2.txt": 权限不够

b. 测试 oldboy 目录权限中 x 和 w 与 r 的配合,以及 r 和 w 与 x 的配合

将文件的权限和用户及组调整为如下属性:

复制代码
[oldgirl@shy oldboy]$ 登出
[root@shy ~]# chmod 736 /oldboy/
[root@shy ~]# chown oldboy.incahome /oldboy			# 修改用户和组
[root@shy ~]# ls -ld /oldboy
drwx-wxrw- 4 oldboy incahome 88 5月  19 21:36 /oldboy

根据修改后的目录属性信息可知,/oldboy 目录的所属的用户及组分别为 oldboy 用户和 incahome 组,因此,oldboy 用户对 /oldboy 目录的权限看前三位(rwx),而 oldgirl 用户属于 incahome 组,因此, oldgirl 用户对 /oldboy 目录的权限看中三位(-wx),最后 test 用户对 /oldboy 目录的权限看最后三位(rw-)。

下面是使用 oldgirl 用户进行测试的情况,注意这里要看中三位( -wx):

复制代码
[root@shy ~]# su - oldgirl
上一次登录:二 5月 19 21:44:11 CST 2026pts/0 上
[oldgirl@shy ~]$ ls -ld /oldboy/			# 中三位(-wx)是 old- girl 对应的权限。
drwx-wxrw- 4 oldboy incahome 88 5月  19 21:36 /oldboy/	 
[oldgirl@shy ~]$ ls /oldboy					# 无法列出目录下的内容,无 r 权限。
ls: 无法打开目录/oldboy: 权限不够
[oldgirl@shy ~]$ touch /oldboy/m.txt		# 可以创建文件,有 w 权限。
[oldgirl@shy ~]$ cd /oldboy					# 可以切换目录,有 x 权限。
[oldgirl@shy oldboy]$ ls					# 无法列表目录下的内容,无 r 权限。
ls: 无法打开目录.: 权限不够
[oldgirl@shy oldboy]$ rm -f m.txt			# 可以删除文件,有 w 权限。

以下是使用 test 用户进行测试的情况,注意这里要看后三位 (rw-):

复制代码
[oldgirl@shy oldboy]$ 登出
[root@shy ~]# su - test
上一次登录:二 5月 12 01:09:27 CST 2026pts/0 上
[test@shy ~]$ whoami
test
[test@shy ~]$ ls -ld /oldboy					# 后三位(rw-)是 test 用户对应的权限。
drwx-wxrw- 4 oldboy incahome 88 5月  19 22:02 /oldboy
[test@shy ~]$ ls /oldboy						# 可以列表目录下的内容,有 r 权限。
ls: 无法访问/oldboy/test: 权限不够 				   # 但是缺少 x 权限配合,报错了。
ls: 无法访问/oldboy/oldboydir: 权限不够
ls: 无法访问/oldboy/oldboydir_soft_link: 权限不够
ls: 无法访问/oldboy/2.txt: 权限不够
ls: 无法访问/oldboy/3.txt: 权限不够
2.txt  3.txt  oldboydir  oldboydir_soft_link  test
[test@shy ~]$ ls -l /oldboy						# 可以列表目录下内容的属性信息。
ls: 无法访问/oldboy/test: 权限不够
ls: 无法访问/oldboy/oldboydir: 权限不够
ls: 无法访问/oldboy/oldboydir_soft_link: 权限不够
ls: 无法访问/oldboy/2.txt: 权限不够
ls: 无法访问/oldboy/3.txt: 权限不够
总用量 0
-????????? ? ? ? ?            ? 2.txt	  # 属性信息为多个问号属于不正常现象,因为缺少 x 权限配合
-????????? ? ? ? ?            ? 3.txt
d????????? ? ? ? ?            ? oldboydir
l????????? ? ? ? ?            ? oldboydir_soft_link
d????????? ? ? ? ?            ? test
[test@shy ~]$ touch /oldboy/n.txt		 # 无法创建文件,虽然有 w,但是没有 x 权限配合。
touch: 无法创建"/oldboy/n.txt": 权限不够
[test@shy ~]$ rm -f /oldboy/3.txt 		 # 无法删除文件,虽然有 w,但是没有 x 权限配合。
rm: 无法删除"/oldboy/3.txt": 权限不够
[test@shy ~]$ cd /oldboy				 # 无法进入目录,因为没有 x 权限配合。
-bash: cd: /oldboy: 权限不够

测试结论:

  • 对于目录,r 权限表示可以浏览目录下的内容(ls 以及 ls -l),w 权限表示可以删除目录下的文件,以及在目录下创建文件,x 权限表示切换到目录下。
  • 没有 x 权限的配合,即使有 w 权限也无法删除和创建文件。
  • 没有 x 权限的配合,即使有 r 权限,在查看目录内容及目录下的内容属性时也会报错或者显示问号,但依然可以看到列表的文件名。

四、chmod 设置及更改文件及目录权限命令

chmod 用来改变文件或目录权限,但只生效于文件的属主和超级用户 root 。

语法格式

复制代码
chmod		[option]		[mode]		 [file]
chmod		[选项]		   [模式]		  [文件或目录]

有两种方法使用 chmod 改变文件或目录的权限,一种是使用数字方法 (常用)来设置权限;另一种是通过字母和操作符表达式的方法来设置权限。

参数说明

复制代码
-R		递归处理指定目录及其子目录下的所有文件

chmod 使用数字权限设置权限的命令格式如下:

复制代码
chmod		[数字组合]		文件名

表 12-4 中列出了用数字表示权限的组合,该组合由 3 位八进制数来表示文件的 3 类用户的权限组合。

这样就可以根据表 12-4 所示的数字列表来组合权限,比如,想让属主拥有 rwx(所对应的数字是 7),属组拥有 --x(所对应的数字是 1),其他用户拥有 ---(所对应的数字是 0),这样将各组的权限组合起来就是 rwx--x---(对应的数字是 710)。

chmod 的数字方法计算说明

可读 r 对应的数字为 4,可写 w 对应的数字为 2,可执行 x 对应的数字为 1,"-" 对应的数字为 0。

例如,文件权限为 rwxr-xr-x,其中,前三位相加 4+2+1=7,中三位相加 4+0+1=5,后三位相加 4+0+1=5,那么rwxr-xr-x 对应的完整数字权限就是 755。

下面来看看以下字符权限表示的数字权限:

  • rw-rw-r-x 代表的数字权限为 665
  • --xr-x-wx 代表的数字权限为 153
  • -wx--x--x 代表的数字权限为 311

而以下数字权限表示的字符权限如下:

  • 755 代表的字符权限为 rwxr-xr-x
  • 644 代表的字符权限为 rw-r--r--
  • 134 代表的字符权限为 --x-wxr--

范例 12-1 :将 oldboy 目录权限设置为 r-xrw-rwx。

分析:r-xrw-rwx 权限的前三位相加即 4+0+1=5,中三位相加即 4+2+0=6,后三位相加即 4+2+1=7,因此对应的数字权限为 567,操作的最终命令如下:

复制代码
[root@shy ~]# chmod 567 /oldboy		# 实际数字权限的设置命令
[root@shy ~]# ls -ld /oldboy
dr-xrw-rwx 4 oldboy incahome 88 5月  19 22:02 /oldboy

五、企业环境下文件和目录的安全核心知识

Linux 的权限是保障 Linux 下数据安全的重要核心基础。

1、 禁止普通用户删除和创建文件

这是绝大多数网站业务目录的安全临界点,删除文件数据就会造成数据丢失,创建文件将会生成木马病毒危害系统。要实现标题中的需求,目录的权限最低要设置为 755 权限 ,对应字符权限为 rwxr-xr x,而且仅设置权限还不够,还要控制用户和用户组,设置用户和用户组都为 root 才能达到题目所要求的安全级别。对于 /oldboy 目录, 要防止普通用户删除和创建文件的具体操作就是:

复制代码
[root@shy ~]# chmod -R 755 /oldboy			# 防止删除及创建文件安全权限临界点
[root@shy ~]# chown -R root.root /oldboy	# 设置合适的用户和用户组
[root@shy ~]# ls -ld /oldboy
drwxr-xr-x 4 root root 88 5月  19 22:02 /oldboy

针对普通用户 oldboy 的测试具体如下:

复制代码
[root@shy ~]# su - oldboy					# 切换到 oldboy 用户下
上一次登录:二 5月 19 21:34:57 CST 2026pts/0 上
[oldboy@shy ~]$ whoami 
oldboy
[oldboy@shy ~]$ ls -l /oldboy				# 能够查看目录下的内容
总用量 0
-rwxr-xr-x 1 root root 0 5月  19 21:35 2.txt
-rwxr-xr-x 1 root root 0 5月  19 21:35 3.txt
drwxr-xr-x 2 root root 6 3月  27 17:13 oldboydir
lrwxrwxrwx 1 root root 9 3月  27 17:14 oldboydir_soft_link -> oldboydir
drwxr-xr-x 2 root root 6 3月  24 16:11 test
[oldboy@shy ~]$ touch /oldboy/test.txt		# 无法在目录下创建文件
touch: 无法创建"/oldboy/test.txt": 权限不够
[oldboy@shy ~]$ rm -f /oldboy/2.txt 		# 无法删除目录下的文件
\rm: 无法删除"/oldboy/2.txt": 权限不够

2、防止用户修改文件内容

这是绝大多数网站业务文件安全的临界点 ,如果普通用户可以随便篡改文件内容,那是极其危险和不安全的,要防止文件内容被修改,可利用文件本身的 w 权限 来实现,同时,将文件的用户和用户组相关联,设置用户和用户组都为 root ,这样才能达到标题所示的要求。对于 /oldboy 目录下的文件,防止普通用户篡改文件的具体操作如下:

复制代码
[oldboy@shy ~]$ exit
登出
[root@shy ~]# cd /oldboy/
[root@shy oldboy]# touch test.txt				# 创建待测试文件
[root@shy oldboy]# chmod 644 test.txt 			# 授予 644 权限,文件的反修改安全临界点
[root@shy oldboy]# chown root.root test.txt 	# 设置合适的用户和组
[root@shy oldboy]# ls -l test.txt 
-rw-r--r-- 1 root root 0 5月  21 14:22 test.txt

3、变态的安全措施

如果安全要求除了不能删除和创建,以及不能修改文件以外,还有更多的需求,那么就要控制 r 和 x 权限了。例如,如果不希望浏览目录下的内容,就要对目录取消 r 权限;如果不希望切换到目录下,就要对目录取消 x 权限。如果不希望查看文件内容,就要对文件取消 r 权限,如果不希望执行文件,就要对文件取消 x 权限。不过,这种变 态的安全措施,除了不对外备份数据以外,工作中几乎是没有的。

结论:绝大多数企业中业务安全的临界点都是防止删除、创建和篡改操作,因此:

  • 目录安全权限 的临界点,即 root 用户 默认创建的目录 ,权限为 755,用户和组为 root
  • 文件安全权限 的临界点,即 root 用户 默认创建的文件 ,权限为 644,用户和组为 root

六、umask 默认权限掩码及设置命令

1、文件默认权限计算

创建文件默认最大的权限为 666 (-rw-rw-rw-),其默认创建的文件没有可执行权限 x 位

对于文件来说,umask 的设置是在假定文件拥有八进制 666 的权限上进行的,文件的权限就是 666 减 umask (umask 的各个位数字也不能大于 6 ,比如 077 就不符合条件)的掩码数值。如果得到的 3 位数字每一位都是偶数,那么这就是最终结果;如果有若干位的数字是奇数, 那么这个奇数需要加 1 变成偶数 ,最后得到全是偶数的结果。

列举几个示例进行说明::

1)假设 umask 值为 022(所有位均为偶数),那么文件的对应权限计算式为:

复制代码
    6 6 6
 -  0 2 2
 ------------------------------
    6 4 4

2)假设 umask 值为 045(其他用户组位为奇数),那么文件的对应权限计算式为:

复制代码
    6 6 6
 -  0 4 5
 ------------------------------
    6 2 1		# 最后一位为奇数,需要加 1
 +  0 0 1
 ------------------------------
    6 2 2		# 最终的文件权限

2、目录默认权限计算(umask 没有奇偶之分)

创建目录默认最大的权限为 777(-rwx-rwx-rwx),默认创建的目录属主是有 x 权限的,即允许用户进入。

对于目录来说,umask 的设置是在假定文件拥有八进制 777 权限上进行的,目录八进制权限 777 减去 umask 的掩码数值,即为:

复制代码
    7 7 7
 -  0 2 2
 ------------------------------
    7 5 5

3、使用范例

范例 12-3 :查看系统用户默认的 umask 值。

复制代码
[root@shy ~]# umask 		# 默认情况下,root 用户对应的 umask 值为 022,第一个 0 暂且忽略
0022
[root@shy ~]# su - test
上一次登录:二 5月 19 22:06:18 CST 2026pts/0 上
[test@shy ~]$ umask 		# 普通用户 test 对应的 umask 值为 002,第一个 0 暂且忽略
0002

注意,用户的 umask 值的设定默认存在于 /etc/bashrc 文件中,命令如下:

复制代码
[root@shy ~]# sed -n '70,74p' /etc/bashrc 	# sed 命令取出文件的第 70 行到第 74 行,打印输出。
    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
       umask 002
    else
       umask 022
    fi

提示 : 当用户 UID 值大于 199,并且用户与用户组名相同时,上述 if 条件判断成立,umask 值就为 002,否则就为 022。

4、umask 设置与 Linux 默认权限设置小结

七、 chown 改变文件或目录的用户和用户组命令

chown 命令用于改变文件或目录的用户和用户组。

语法格式:

复制代码
chown		[option]		[OWNER][:[GROUP]]		[file]
chown		[选项]		   [用户:用户组]			   [文件或目录]
  • 其中的 ":" 可以用 "." 代替。
  • 要授权的用户和组名,必须是 Linux 系统中真实存在的。

参数选项:

复制代码
-R			递归更改目录的用户和用户组

范例 12-4 :更改文件 alex.txt 所属的用户为 inca 的示例。

复制代码
[root@shy ~]# touch alex.txt			# 创建测试文件
[root@shy ~]# ls -l alex.txt 			# 查看默认属性
-rw-r--r-- 1 root root 0 5月  22 19:40 alex.txt		# 授权 inca 用户
[root@shy ~]# chown inca alex.txt 
chown: 无效的用户: "inca"				 # 提示用户不存在,待授权的用户和组必须存在
[root@shy ~]# useradd inca				# 添加 inca 用户
[root@shy ~]# chown inca alex.txt 		# 重新授权
[root@shy ~]# ls -l alex.txt 
-rw-r--r-- 1 inca root 0 5月  22 19:40 alex.txt		# 用户已更改为 inca

范例 12-5:更改 oldboy.txt 文件所属的用户组为 tech。

复制代码
[root@shy ~]# ls -l oldboy.txt 
-rw-r--r-- 1 root root 12 3月  25 12:49 oldboy.txt
[root@shy ~]# chown .tech oldboy.txt 		# 将 oldboy.txt 所属的组授权为 tech。
chown: 无效的用户: ".tech"
[root@shy ~]# groupadd tech					# 添加用户组 tech
[root@shy ~]# chown .tech oldboy.txt 
[root@shy ~]# ls -l oldboy.txt 
-rw-r--r-- 1 root tech 12 3月  25 12:49 oldboy.txt	# # 用户组已更改为 tech

范例 12-6:同时将/ oldboy 目录及子目录所属的用户改为 inca,将用户组改为 tech。

复制代码
[root@shy ~]# ls -ld /oldboy
drwxr-xr-x 4 root root 104 5月  21 14:22 /oldboy
[root@shy ~]# chown -R inca.tech /oldboy			# -R:递归更改用户和用户组
[root@shy ~]# ls -ld /oldboy
drwxr-xr-x 4 inca tech 104 5月  21 14:22 /oldboy

还有一种文件所属的用户及用户组特殊情况:当文件及目录的用户或用户组被删除时,对应的用户和用户组位就 会显示为如下的数字形式:

复制代码
[root@shy ~]# userdel -r inca
[root@shy ~]# groupdel tech
[root@shy ~]# ls -ld /oldboy
drwxr-xr-x 4 1006 1007 104 5月  21 14:22 /oldboy

解决办法就是重新创建 uid 为1006 的用户,以及 gid 为 1007 的用户组, 具体步骤如下:

复制代码
[root@shy ~]# useradd inca -u 1006			# 重建用户 inca,uid 为 1006
[root@shy ~]# groupadd -g 1007 tech			# 重建用户组 tech,gid 为 1007
[root@shy ~]# ls -ld /oldboy				# 查看重建结果
drwxr-xr-x 4 inca tech 104 5月  21 14:22 /oldboy

八、chattr 改变文件的扩展属性

chattr 命令用于改变文件的扩展属性。与 chmod 命令相比,chmod 只是改变了文件的读、写、执行权限,更底层的属性控制是由 chattr 来改变的。

语法格式:

复制代码
chattr			[options]			[mode]			[files]
chattr			[选项]			   [模式]			  [文件或目录]

chattr 命令的参数选项及说明如下:

范例 12-7 :设置只能向文件里追加内容,但不能删除文件。

复制代码
[root@shy ~]# touch test1.txt
[root@shy ~]# lsattr test1.txt 			# lsattr  查看文件的扩展属性
---------------- test1.txt
[root@shy ~]# chattr +a test1.txt 		# +a 追加属性
[root@shy ~]# lsattr test1.txt 
-----a---------- test1.txt
[root@shy ~]# rm -f test1.txt 			# root 用户也无法删除
rm: 无法删除"test1.txt": 不允许的操作
[root@shy ~]# echo 111 >>test1.txt 		# 可以追加文本
[root@shy ~]# cat test1.txt 
test
liyao
oldboy
111
[root@shy ~]# echo 111 >test1.txt 		# 不能清空文件
-bash: test1.txt: 不允许的操作

范例 12-8 :对文件加锁,使其只能被读取。

复制代码
[root@shy ~]# chattr +i file1.txt 			# 使用 +i 参数为文件加锁
[root@shy ~]# lsattr file1.txt 
----i----------- file1.txt
[root@shy ~]# rm file1.txt 					# root 用户无法删除文件
rm:是否删除普通空文件 "file1.txt"?y
rm: 无法删除"file1.txt": 不允许的操作
[root@shy ~]# echo 111 > file1.txt 			# 不能清空
-bash: file1.txt: 权限不够
[root@shy ~]# echo 111 >> file1.txt 		# 也不能追加
-bash: file1.txt: 权限不够
[root@shy ~]# chattr -i file1.txt 			# 使用 -i 参数解锁
[root@shy ~]# rm file1.txt 
rm:是否删除普通空文件 "file1.txt"?y			 # 解锁后就可以删除了
[root@shy ~]# 

安全优化实战:下面利用 -a 和 -i 参数讲解 chattr 在企业中的实战应用。

避免恶意删除 .bash_history 历史记录文件或者重定向到 /dev/null,又因为系统需要向这个文件写入历史记录,因此采用追加模式,只增不减。

复制代码
[root@shy ~]# chattr +a .bash_history		# 对历史记录文件加上只能追加的属性。

# 如果希望锁定文件不能被删除或修改,可以使用如下命令来实现:
[root@shy ~]# chattr +i /etc/passwd /etc/group /etc/shadow /etc/gshadow /etc/inittab # 锁定系统关键文件
[root@shy ~]# useradd kk		# 添加用户的命令
useradd:无法打开 /etc/passwd

# 做完上面实验后,请立即解锁这些文件,因为以后的学习都需要修改这些文件。解锁命令如下:
[root@shy ~]# chattr -i /etc/passwd /etc/group /etc/shadow /etc/gshadow /etc/inittab

九、 lsattr 查看文件的扩展属性

lsattr 命令可用于查看文件扩展属性。

语法格式

复制代码
lsattr			[options]			[files] 
lsattr			[选项]   			   [<文件或目录>]

参数选项

复制代码
-R			递归查看目录的扩展属性
-a			显示所有文件包括隐藏文件的扩展属性
-d			显示目录的扩展属性

范例 12-9 :查看文件的扩展属性。

复制代码
[root@shy ~]# touch file1.txt
[root@shy ~]# lsattr file1.txt			# 查看文件默认的扩展属性
---------------- file1.txt
[root@shy ~]# chattr +i file1.txt 
[root@shy ~]# lsattr file1.txt 
----i----------- file1.txt				# 查看文件,具有 i 属性

范例 12-10 :查看目录的扩展属性。

复制代码
[root@shy ~]# cd data
[root@shy data]# ll -d dir2
ls: 无法访问dir2: 没有那个文件或目录
[root@shy data]# mkdir dir2
[root@shy data]# ls
dir2
[root@shy data]# ll -d dir2
drwxr-xr-x 2 root root 6 5月  25 23:41 dir2
[root@shy data]# lsattr -d dir2				# 使用 -d 选项查看目录的扩展属性
---------------- dir2
[root@shy data]# chattr +i dir2				# 对目录加锁
[root@shy data]# lsattr -d dir2
----i----------- dir2

十、本章重点

  • Linux 基本 9 位权限之文件和目录权限的详细说明。

  • Linux 基本 9 位权限之字符和数字(8 进制)的权限知识。

  • 权限及用户和用户组属性修改命令 chmod、chown、chgrp。

  • 默认权限 umask 以及系统目录安全案例。

  • chattr 和 lsattr 锁定一个文件防止被篡改或者删除的相关知识。

    [root@shy ~]# touch file1.txt
    [root@shy ~]# lsattr file1.txt # 查看文件默认的扩展属性
    ---------------- file1.txt
    [root@shy ~]# chattr +i file1.txt
    [root@shy ~]# lsattr file1.txt
    ----i----------- file1.txt # 查看文件,具有 i 属性

范例 12-10 :查看目录的扩展属性。

复制代码
[root@shy ~]# cd data
[root@shy data]# ll -d dir2
ls: 无法访问dir2: 没有那个文件或目录
[root@shy data]# mkdir dir2
[root@shy data]# ls
dir2
[root@shy data]# ll -d dir2
drwxr-xr-x 2 root root 6 5月  25 23:41 dir2
[root@shy data]# lsattr -d dir2				# 使用 -d 选项查看目录的扩展属性
---------------- dir2
[root@shy data]# chattr +i dir2				# 对目录加锁
[root@shy data]# lsattr -d dir2
----i----------- dir2

十、本章重点

  • Linux 基本 9 位权限之文件和目录权限的详细说明。
  • Linux 基本 9 位权限之字符和数字(8 进制)的权限知识。
  • 权限及用户和用户组属性修改命令 chmod、chown、chgrp。
  • 默认权限 umask 以及系统目录安全案例。
  • chattr 和 lsattr 锁定一个文件防止被篡改或者删除的相关知识。
相关推荐
同聘云8 小时前
腾讯云国际站云服务器实例的底层虚拟化技术主要分为哪几类?
云计算·腾讯云·云服务器·云小强
kjmkq8 小时前
2026智算中心液冷服务器机房建设标准及常见方案对比
运维·服务器
腾讯蓝鲸智云8 小时前
【运维自动化-节点管理】资源配额功能如何使用
运维·服务器·自动化·云计算
一氧化二氢.h8 小时前
Linux手动脚本 vs Dockerfile部署:核心区别与适用场景
linux·运维·服务器
茉莉清茶LG8 小时前
Xshell成功创建了Ubuntu连接,但是显示虚拟机连接断开了,连接失败。
linux·运维·ubuntu
cvcode_study8 小时前
Nginx 基础
运维·nginx
_Emma_8 小时前
【QCOM】CAMSS架构中CSi与CSIPHY驱动结构
linux·图像处理·视频编解码
程序员JerrySUN8 小时前
Jetson边缘嵌入式实战课程第五讲:Jetson Secure Boot - 安全启动
android·linux·服务器·人工智能·安全·unity·游戏引擎
穷人小水滴8 小时前
ssh-bridge: 在 Linux 虚拟机中转发消息的简单实现 (UNIX socket)
linux·ssh·unix