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 锁定一个文件防止被篡改或者删除的相关知识。