Linux (5)| 入门进阶:Linux 权限管理的基础规则与实践

在经过前面基本指令的学习后,可能对于ls指令展示的某些东西好奇,本篇博客将为你解疑答惑

一、用户分类、用户切换和指令提权

1、用户分类

root:超级用户

bash 复制代码
[root@instance-157t533k ~]# 

root:用户名

@xxxxx:主机名

~:当前目录

#:命令行提示符

在windows下有没有类似的root用户呢?

有,类似以管理员身份运行

普通用户:以root身份,通过adduser创建的

bash 复制代码
[xzx@instance-157t533k ~]$ 

和上面只有命令行提示符的区别

在这里也有类似普通用户,可以创建,拥有自己的桌面

在我们之前的学习中可以发现,root用户进行指令操作时不会受到权限约束,而普通用户在yum安装软件的时候,date -s不能设置时间只能查看等,会受到权限的约束

结论:root基本不会受到权限的约束,普通用户是受权限约束的

2、这两个用户之间是如何切换的?

Linux中所有用户,都要有密码,无论是root,还是普通用户,即便是多个普通用户,也要一一设置密码

建议:root账号的密码和普通账号的密码不要一样

1、su -

bash 复制代码
[xzx@instance-157t533k ~]$ su -
Password: 

此时password输入的是root的密码,不是普通用户的密码!

bash 复制代码
Last login: Sun Sep 28 10:13:14 CST 2025 from 223.104.249.229 on pts/0
Last failed login: Sun Sep 28 11:05:22 CST 2025 from 196.251.83.216 on ssh:notty
There were 207 failed login attempts since the last successful login.
[root@instance-157t533k ~]# 

此时已切换成功,我们已变成root用户,我们查看一下自己的家目录用pwd

这是之前的普通用户的

bash 复制代码
[xzx@instance-157t533k ~]$ pwd
/home/xzx

这是切换后root用户的

bash 复制代码
[root@instance-157t533k ~]# pwd
/root
结论:su - 更改身份,家目录也更改了
退出:通过ctrl+d或者命令行输入exit
bash 复制代码
[root@instance-157t533k ~]# exit
logout
[xzx@instance-157t533k ~]$ 

2、su

bash 复制代码
[xzx@instance-157t533k ~]$ su
Password: 

这里的password依旧输入root的密码

同样的查看家目录用pwd

bash 复制代码
[root@instance-157t533k xzx]# pwd
/home/xzx

和上面的su -相比,可以发现su更改了用户身份,但家目录没有改

结论:su 更改身份,家目录没有更改
退出:通过ctrl+d或者命令行输入exit
bash 复制代码
[root@instance-157t533k xzx]# exit
exit

3、su + 用户名

bash 复制代码
[root@instance-157t533k ~]# adduser zhangsan
[root@instance-157t533k ~]# passwd zhangsan
Changing password for user zhangsan.
New password: 
BAD PASSWORD: The password contains the user name in some form
Retype new password: 
passwd: all authentication tokens updated successfully.

这里先回顾之前的创建用户流程(这里BAD PASSWORD是博主设置密码偷懒了,密码中包含了用户名)

可以通过ls /home/查看创建的用户

bash 复制代码
[xzx@instance-157t533k ~]$ ls /home
xzx  zhangsan

root用户su+zhangsan,可以看到不需要输入zhangsan的密码

bash 复制代码
[root@instance-157t533k ~]# su zhangsan
[zhangsan@instance-157t533k root]$ 

普通用户su+zhangsan,可以看到是需要输入zhangsan的密码

bash 复制代码
[xzx@instance-157t533k ~]$ su zhangsan
Password: 
[zhangsan@instance-157t533k xzx]$ 

3、如果我们想暂时的对一条命令提权,该怎么做?

sudo command

但另一个问题来了,如果普通用户任何一条指令都可以sudo,那岂不是普通用户也成为root用户了?

先说结论:我们通过adduser创建普通用户,是无法使用sudo的,因为系统不信任你。除非未来将该普通用户加入到系统的信任白名单。

可以用张三试试sudo

bash 复制代码
[zhangsan@instance-157t533k xzx]$ sudo yum install -y zip unzip

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for zhangsan: 
zhangsan is not in the sudoers file.  This incident will be reported.

最后提示说zhangsan不在sudoers file中

二、权限

1、什么叫做权限?

一件事是否允许你做

1、权限认证的时是身份(权限和"人"有关)

2、权限也和事物的属性有关

文件=文件内容+文件属性,文件属性中包括文件的权限:可读、可写、可执行

初步结论:权限=人+身份/角色

2、文件属性

1、文件的类型:Linux系统中文件名后缀没有直接意义(当然不代表没用)

bash 复制代码
drwxrwxr-x 2 xzx xzx 4096 Sep 30 11:36 test
-rw-rw-r-- 1 xzx xzx    0 Sep 30 11:35 test.txt

观察开头第一个字符

-:普通文件(文本库)
d:目录文件
b:块设备文件(磁盘文件)
c:字符设备文件(键盘、显示器文件)
Linux不以文件名后缀区分文件,但把test.c重命名为test.txt用gcc编译不过,这是为什么?

gcc是一款编译器、软件,不代表其他Linux系统上运行的其他软件不需要后缀

Linux中如何看待后缀?看我们自己的需求

2、文件的权限属性

bash 复制代码
drwxrwxr-x 2 xzx xzx 4096 Sep 30 11:36 test
-rw-rw-r-- 1 xzx xzx    0 Sep 30 11:35 test.txt

从第二个字符开始到数字之前的内容,这些字符代表文件的权限属性

r:可读
w:可写
x:可执行
-:对应的权限位置,没有权限

3、权限身份

bash 复制代码
drwxrwxr-x 2 xzx xzx 4096 Sep 30 11:36 test
-rw-rw-r-- 1 xzx xzx    0 Sep 30 11:35 test.txt
从数字到下一个数字之间的代表权限身份,第一个是拥有者,第二个是所属组,为什么没有其他人(other)呢?

因为其他人(other)太多了,没必要写进文件,占用内存

|----------------|------|------|
| 权限身份(角色)/用户(人) | root | 普通用户 |
| 拥有者(owner) | ✔ | ✔ |
| 所属组(group) | ✔ | ✔ |
| 其他人(other) | ✔ | ✔ |

这个表展现了用户所能具有权限身份,二者合起来就变成了用户所具有的权限了

什么是所属组?什么是其他人(other)?
详细版:

举个例子,公司有一个项目,需要你张三等程序员去完成,你们被分为了不同小组,你张三等人分到了A组,李四等人分到了B组。假如我们只有拥有者,那么每个人都是独立的,无法协同工作。所以便有了所属组,我们一个组的人可以在一起协助开发了。一天B组的李四想要来看看你们的工作进度,但由于你们不是一个所属组的,李四没有权限查看你们的文件。但是在李四走后,你的领导王五来查看你们的工作进度,此时给领导所属组的权限,他就能查看了。假如有一天公司将项目开源了,别人想要看看你们的源码,但他既不是拥有者,也不是所属组,所以其他人(other)便诞生了

省流版:

|------------|-------------|----------------|------------------|
| 权限主体 | 具体用户/群体 | 权限设置 | 作用 |
| 拥有者(owner) | A组张三(文件创建者) | 读、写、可执行(最高) | 完全控制文件,可修改其他人生权限 |
| 所属组(group) | A组全体人员,领导王五 | A组:读、写,可执行领导:读 | A 组协同开发,管理层监督进度 |
| 其他人(other) | B组李四,公司外部人员 | 未开源:没有权限,开源:仅读 | 未开源时保护隐私,开源时共享 |

bash 复制代码
drwxrwxr-x 2 xzx xzx 4096 Sep 30 11:36 test
-rw-rw-r-- 1 xzx xzx    0 Sep 30 11:35 test.txt
我们也能看到权限身份和文件权限属性具有对应关系

在test中第一组三个字符rwx代表拥有者的权限,第二组三个字符rwx代表拥有者的权限,第三组三个字符r-x代表其他人的权限

这里每个位置只有r、w、x、-四种选择,说明:

1、每个位置是什么含义是确定的!

2、每一个位置只有是或者否,具有确定的权限!

3、root和other虽然具有相同的权限,但root不受权限的限制

bash 复制代码
-rwxrwxr-x 1 xzx xzx 8440 Oct  4 15:07 a.out
-rw-rw-r-- 1 xzx xzx   69 Oct  4 15:06 test.c

对于adduser创建的普通用户lisi,它访问test.c只有读权限,访问a.out可读也可执行

通过su切换用户,我们来验证一下

bash 复制代码
[xzx@instance-157t533k 10_4]$ su lisi
Password: 
[lisi@instance-157t533k 10_4]$ pwd
/home/xzx/10_4

访问test.c,通过vim尝试修改test.c

提示我们没有w权限,因为lisi是other,权限为r--,表示只能看文件内容

对于a.out可执行程序lisi是可以执行的,它具有r-x的权限

bash 复制代码
[lisi@instance-157t533k 10_4]$ ./a.out
Hello Linux[lisi@instance-157t533k 10_4]$ 

此时我们切换为root,观察root用户是否能修改test.c

bash 复制代码
[root@instance-157t533k 10_4]# vim test.c
[root@instance-157t533k 10_4]# cat test.c
#include<stdio.h>

int main()
{
	printf("Hello Linux\n");
	printf("Hello,Linux\n");
	return 0;
}

按道理,root也应该和lisi一样不能修改,但结果是root可以修改

说明root是不受权限限制的

4、权限修改问题

权限修改者:1、文件的拥有者 2、root

修改指令:chomd 权限 文件

修改方式:

1、u+r/w/x g+r/w/x o+r/w/x u-r/w/x g-r/w/x o-r/w/x

这里的u代表user(不是owner的原因,避免重复使用o)拥有者,这里的g代表group所属组,这里的o代表other

通过将o+w,lisi就可以对test.c进行写操作了

bash 复制代码
[xzx@instance-157t533k 10_4]$ ll
total 16
-rwxrwxr-x 1 xzx xzx 8440 Oct  4 15:07 a.out
-rw-rw-r-- 1 xzx xzx   97 Oct  9 10:48 test.c
[xzx@instance-157t533k 10_4]$ chmod o+w test.c
[xzx@instance-157t533k 10_4]$ ll
total 16
-rwxrwxr-x 1 xzx xzx 8440 Oct  4 15:07 a.out
-rw-rw-rw- 1 xzx xzx   97 Oct  9 10:48 test.c

此时可以对test.c的内容进行修改了

bash 复制代码
[xzx@instance-157t533k 10_4]$ vim test.c
[xzx@instance-157t533k 10_4]$ cat test.c
#include<stdio.h>

int main()
{
	printf("Hello Linux\n");
	printf("Hello,Linux\n");
	printf("Hello,World\n");
	return 0;
}

假如有多个权限更改可以用(,)逗号隔开,例如u+rwx,g+rwx,o+rws

也可以用a(all,代表所有人)+rwx和上面是一样的,也可以a-r所有人没有读权限

这里可以举另一个例子证明3的root不受权限限制

先对test.c减去所有权限,即a-rwx or u-rwx,g-rwx,o-rwx

bash 复制代码
[xzx@instance-157t533k 10_4]$ chmod a-rwx test.c
[xzx@instance-157t533k 10_4]$ ll
total 16
-rwxrwxr-x 1 xzx xzx 8440 Oct  4 15:07 a.out
---------- 1 xzx xzx  123 Oct  9 13:05 test.c

此时我们拥有者尝试读写操作

读提示我们没有权限

bash 复制代码
[xzx@instance-157t533k 10_4]$ cat test.c
cat: test.c: Permission denied

写也是如此

通过:wq!强制退出vim底行模式(vim一种工具,后面会介绍)

我们能看到在将所有权限减去后,我自己作为拥有者是不能读不能写的,接下来看看root的表现

bash 复制代码
[xzx@instance-157t533k 10_4]$ su root
Password: 
[root@instance-157t533k 10_4]# cat test.c
[root@instance-157t533k 10_4]# vim test.c
[root@instance-157t533k 10_4]# cat test.c
#include<stdio.h>

int main()
{
	printf("Hello,Linux\n");
	return 0;
}

可以看到虽然root没有r和w权限,但是在vim :wq!强制写入下test.c被写入了内容,写入的内容可以通过cat查看到

这个例子也能说明root不受权限约束的

2、由于权限是333一组的,每个权限有或没有是固定的,由此三个二进制组成一个八进制数

例如rwx 111 7,rw- 110 6,r-x 101 5,r-- 100 4,-wx 011 3,-w- 010 2,--x 001 1

通过chmod 777 test.c实现全权限拥有

bash 复制代码
[root@instance-157t533k 10_4]# ll
total 16
-rwxrwxr-x 1 xzx xzx 8440 Oct  4 15:07 a.out
---------- 1 xzx xzx   71 Oct  9 13:24 test.c
[root@instance-157t533k 10_4]# chmod 777 test.c
[root@instance-157t533k 10_4]# ll
total 16
-rwxrwxr-x 1 xzx xzx 8440 Oct  4 15:07 a.out
-rwxrwxrwx 1 xzx xzx   71 Oct  9 13:24 test.c

5、拥有者、所属组、拥有者和所属组的更改

修改拥有者指令:chown 用户名 文件

bash 复制代码
[root@instance-157t533k 10_4]# ll
total 16
-rwxrwxr-x 1 xzx xzx 8440 Oct  4 15:07 a.out
-rwxrwxrwx 1 xzx xzx   71 Oct  9 13:24 test.c
[root@instance-157t533k 10_4]# chown root test.c
[root@instance-157t533k 10_4]# ll
total 16
-rwxrwxr-x 1 xzx  xzx 8440 Oct  4 15:07 a.out
-rwxrwxrwx 1 root xzx   71 Oct  9 13:24 test.c

也可以配合sudo 对chown提权

修改所属组指令:chgrp 用户名 文件

bash 复制代码
[root@instance-157t533k 10_4]# ll
total 16
-rwxrwxr-x 1 xzx  xzx 8440 Oct  4 15:07 a.out
-rwxrwxrwx 1 root xzx   71 Oct  9 13:24 test.c
[root@instance-157t533k 10_4]# chgrp root test.c
[root@instance-157t533k 10_4]# ll
total 16
-rwxrwxr-x 1 xzx  xzx  8440 Oct  4 15:07 a.out
-rwxrwxrwx 1 root root   71 Oct  9 13:24 test.c

修改拥有者和所属组指令:chown 用户名:用户名 文件

bash 复制代码
[root@instance-157t533k 10_4]# ll
total 16
-rwxrwxr-x 1 xzx  xzx  8440 Oct  4 15:07 a.out
-rwxrwxrwx 1 root root   71 Oct  9 13:24 test.c
[root@instance-157t533k 10_4]# chown xzx:xzx test.c
[root@instance-157t533k 10_4]# ll
total 16
-rwxrwxr-x 1 xzx xzx 8440 Oct  4 15:07 a.out
-rwxrwxrwx 1 xzx xzx   71 Oct  9 13:24 test.c

为什么没有修改other?和前面的原因一样,因为other太多了,不需要修改

6、多角色权限认证问题

bash 复制代码
-r--rw---- 1 xzx xzx   71 Oct  9 13:24 test.c

对于此时的test.c我能写吗?看权限拥有者只有r,但所属组是r和w,那应该能写,我们来验证一下是否能写

依旧vim打开test.c

提示我们只有读权限(但:wq! 强制写入是不需要w权限的)

再看另一个例子

bash 复制代码
[xzx@instance-157t533k 10_4]$ chown lisi test.c
chown: changing ownership of 'test.c': Operation not permitted
[xzx@instance-157t533k 10_4]$ sudo chown lisi test.c
[sudo] password for xzx: 
[xzx@instance-157t533k 10_4]$ ll
total 16
-rwxrwxr-x 1 xzx  xzx 8440 Oct  4 15:07 a.out
-r--rw---- 1 lisi xzx   97 Oct  9 14:11 test.c

(结合上面chown指令的演示,我们能发现更改为root用户时,不需要额外操作,但如果更改为另一普通用户,则需要sudo提权)

我们通过sudo提权将拥有者强行更改为lisi,此时test.c拥有者是lisi只有r,我是所属组有r和w,我能写吗?依旧验证一下

bash 复制代码
[xzx@instance-157t533k 10_4]$ ll
total 16
-rwxrwxr-x 1 xzx  xzx 8440 Oct  4 15:07 a.out
-r--rw---- 1 lisi xzx   97 Oct  9 14:22 test.c
[xzx@instance-157t533k 10_4]$ cat test.c
#include<stdio.h>

int main()
{
	printf("Hello,Linux\n");
	printf("hello,linux\n");
	return 0;
}
[xzx@instance-157t533k 10_4]$ vim test.c
[xzx@instance-157t533k 10_4]$ cat test.c
#include<stdio.h>

int main()
{
	printf("Hello,Linux\n");
	printf("hello,world\n");
	printf("hello,linux\n");
	return 0;
}

可以看到,我们成功写入了

结合这两个例子,我们可以知道在进行权限认证的时候,只能选择一个角色进行认证!而且是先看是否属于拥有者,如果是就不关注其他角色,不是才看所属组和其他人

三、扩展问题

1、起始权限问题

bash 复制代码
[xzx@instance-157t533k 10_9]$ ll
total 8
drwxrwxr-x 2 xzx xzx 4096 Oct  9 19:10 dir1
drwxrwxr-x 2 xzx xzx 4096 Oct  9 19:10 dir2
-rw-rw-r-- 1 xzx xzx    0 Oct  9 19:10 test1.txt
-rw-rw-r-- 1 xzx xzx    0 Oct  9 19:10 test2.txt

对于我们创建的目录文件和普通文件,为什么它们的默认权限是我们所看到的样子?

为什么目录文件是775(八进制rwxrwxr-x)?

为什么普通文件是664(八进制rw-rw-r--)?

可以看到other都没有w(写)权限

这里需要补充一个知识:umask,权限掩码

bash 复制代码
[xzx@instance-157t533k 10_9]$ umask
0002

这里的umask除开前导0,剩下的三位各代表一个八进制数

而权限掩码的作用是:凡是在umask中出现的权限,不会再最终的文件权限中出现!

在解答上面疑问的过程中,还需要我们了解两个东西

1、默认给目录文件的起始权限其实是777

2、默认给普通文件的起始权限其实是666

这可以通过暂时修改umask值来新建目录文件和普通文件验证

bash 复制代码
[xzx@instance-157t533k 10_9]$ umask 0000
[xzx@instance-157t533k 10_9]$ mkdir dir3
[xzx@instance-157t533k 10_9]$ touch test3.txt
[xzx@instance-157t533k 10_9]$ ll
total 12
drwxrwxr-x 2 xzx xzx 4096 Oct  9 19:10 dir1
drwxrwxr-x 2 xzx xzx 4096 Oct  9 19:10 dir2
drwxrwxrwx 2 xzx xzx 4096 Oct  9 19:28 dir3
-rw-rw-r-- 1 xzx xzx    0 Oct  9 19:10 test1.txt
-rw-rw-r-- 1 xzx xzx    0 Oct  9 19:10 test2.txt
-rw-rw-rw- 1 xzx xzx    0 Oct  9 19:28 test3.txt

可以看到目录文件为777,普通文件为666

它们是如何通过权限掩码变成775和664的?

是减法吗?

看起来倒像那麽一回事,我们改变umask验证一下,将umask改为0100看是否符合我们的减法运算

bash 复制代码
[xzx@instance-157t533k 10_9]$ umask 0111
[xzx@instance-157t533k 10_9]$ rm -rf dir1 dir2 dir3
[xzx@instance-157t533k 10_9]$ rm -rf test1.txt test2.txt test3.txt
[xzx@instance-157t533k 10_9]$ touch test.txt
[xzx@instance-157t533k 10_9]$ ll
total 0
-rw-rw-rw- 1 xzx xzx 0 Oct  9 20:05 test.txt

减法得到的结果是555,但普通文件却是666,这也证明了权限掩码并不是单纯的二进制减法

这里小编也不卖关子了,最终权限计算:

起始权限 &(按位与) (~umask)(对umask的二进制位取反)

(可以下来自己修改umask的值研究为什么是这样计算的,这里对umask赋值是暂时的,并不会永久改变)

2、目录权限

bash 复制代码
drwxrwxr-x 2 xzx xzx 4096 Oct  9 20:13 test

我们能看到目录文件的权限基本是满的,所以我们可以研究一下权限对我们行为的影响

我们已知可以用ls+选项or ll查看目录信息,我们把目录的r权限减去后看看还能不能使用ll展示信息

bash 复制代码
[xzx@instance-157t533k 10_9]$ ll
total 4
drwxrwxr-x 2 xzx xzx 4096 Oct  9 20:13 test
[xzx@instance-157t533k 10_9]$ chmod u-r test
[xzx@instance-157t533k 10_9]$ cd test
[xzx@instance-157t533k test]$ ll
ls: cannot open directory .: Permission denied
[xzx@instance-157t533k test]$ cd ..
[xzx@instance-157t533k 10_9]$ ll
total 4
d-wxrwxr-x 2 xzx xzx 4096 Oct  9 20:13 test

可以看到在r权限没有后,在test目录下ll提示没有权限

r:是否允许我们查看指定目录下的文件内容

我们可以在目录下创建普通文件和目录文件,也可以对其更改,还可以删除,这些行为对应哪个权限呢?

我们大胆猜测,小心求证,先把w权限减去试试吧!

bash 复制代码
[xzx@instance-157t533k test]$ touch data.txt
[xzx@instance-157t533k test]$ ll
total 0
-rw-rw-r-- 1 xzx xzx 0 Oct  9 22:20 data.txt
[xzx@instance-157t533k test]$ cd ..
[xzx@instance-157t533k 10_9]$ chmod u-w test
[xzx@instance-157t533k 10_9]$ cd test
[xzx@instance-157t533k test]$ mkdir dir
mkdir: cannot create directory 'dir': Permission denied

哇哦,居然一下就猜中了(哈哈1/2的概率),当然这里只是验证了创建,感兴趣可以去验证一下更改和删除

w:是允许我们在当前目录下进行创建、更改和删除

剩下的一个x可执行权限,结合我们之前了解指令的本质(可执行程序),大胆猜测一下,没有x权限我们或许就不能执行指令了,来验证一下吧

bash 复制代码
[xzx@instance-157t533k 10_9]$ chmod u-x test
[xzx@instance-157t533k 10_9]$ ll
total 4
drw-rwxr-x 2 xzx xzx 4096 Oct  9 22:20 test
[xzx@instance-157t533k 10_9]$ cd test
-bash: cd: test: Permission denied

看来和我们想的一样,缺少了x权限不能执行指令,我们现在都不能通过cd进入test目录了

x:是否允许用户进入对应的目录

3、粘滞位

在团队协作和开发时,我们会在一个工作目录下各自分工,组长可以随时查看每个人的进度,同事之间也可以一起工作。

假如你的小伙伴上传了一份学习资料在你们的共享目录下,每个人都可以去查看资料,也可以增加新的内容。结果有次你和朋友闹矛盾了,朋友一怒之下把你的r和w权限都删除了,此时的你打不开资料,也不能增加或修改资料,此时你能把资料删掉吗?

我们来模拟验证一下

bash 复制代码
[xzx@instance-157t533k 10_9]$ chmod o+w test
[xzx@instance-157t533k 10_9]$ ll
total 4
drwxrwxrwx 2 xzx xzx 4096 Oct  9 22:20 test
[xzx@instance-157t533k 10_9]$ cd test
[xzx@instance-157t533k test]$ ll
total 0
-rw-rw-r-- 1 xzx xzx 0 Oct  9 22:20 data.txt
[xzx@instance-157t533k test]$ chmod o-r data.txt
[xzx@instance-157t533k test]$ ll
total 0
-rw-rw---- 1 xzx xzx 0 Oct  9 22:20 data.txt

我们将test目录的other设置为满权限,test目录下的data.txt普通文件other设置无权限,我们切换为lisi,来看看我们能否删除data.txt

bash 复制代码
[xzx@instance-157t533k test]$ su lisi
Password: 
[lisi@instance-157t533k test]$ ll
total 0
-rw-rw---- 1 xzx xzx 0 Oct  9 22:20 data.txt
[lisi@instance-157t533k test]$ rm data.txt
rm: remove write-protected regular empty file 'data.txt'? y
[lisi@instance-157t533k test]$ ll
total 0

居然lisi在既没有r,也没有w的前提下把data.txt给删除了,这是为什么呢?

我们将test目录other的w权限给减去在试一试

bash 复制代码
[xzx@instance-157t533k 10_9]$ chmod o-w test
[xzx@instance-157t533k 10_9]$ ll
total 4
drwxrwxr-x 2 xzx xzx 4096 Oct  9 22:44 test
[xzx@instance-157t533k 10_9]$ cd test
[xzx@instance-157t533k test]$ touch data1.txt
[xzx@instance-157t533k test]$ ll
total 0
-rw-rw-r-- 1 xzx xzx 0 Oct  9 22:47 data1.txt
[xzx@instance-157t533k test]$ chmod o-r data1.txt
[xzx@instance-157t533k test]$ ll
total 0
-rw-rw---- 1 xzx xzx 0 Oct  9 22:47 data1.txt
[xzx@instance-157t533k test]$ su lisi
Password: 
[lisi@instance-157t533k test]$ rm data1.txt
rm: remove write-protected regular empty file 'data1.txt'? y
rm: cannot remove 'data1.txt': Permission denied

我们通过将other的w权限恢复后发现,普通文件data1.txt不能被属于other的lisi给删除

一个文件能否被删除,并不由文件本身做决定,而是由这个文件所处目录决定的!

话又说回来了,假如让你实现一个共享目录,你会怎么实现?

放在我自己的家目录下是不行的,因为普通用户自己的家目录权限是700,在我家目录下创建文件别人看不见

bash 复制代码
[xzx@instance-157t533k home]$ ll
total 8
drwx------  4 lisi lisi 4096 Oct  4 15:26 lisi
drwx------ 26 xzx  xzx  4096 Oct  9 19:10 xzx

所以我创建的共享目录,不能在任何一个人的家目录,那共享目录该放在哪里呢?

在根目录(/)下创建一个目录,并打开权限770

但我们会面临上面的问题,一个没有r和w的other能够随意删除你共享目录的东西,这你咋办?

如果把共享目录的w权限去掉,那我们自己也无法创建文件!这个共享目录,共享体现在哪里?

由此粘滞位就诞生了

粘滞位:给目录设置,一般是共享目录,设置粘滞位后,大家可以在目录中进行各自的文件的增删改查,只允许文件拥有者or root能删除这个文件,其他人一概不许。

如何设置粘滞位? chmod +t 目录

共享目录系统会自动生成 /tmp

四、总结

至此,我们围绕 Linux 用户与权限两大核心模块展开了完整梳理:从 root 与普通用户的权限差异、切换方式(su -/su/su 用户名)、sudo 提权逻辑,到文件权限的身份划分(拥有者 / 所属组 / 其他人)、属性解读(r/w/x)、修改方法(字符法 / 数字法),再到 umask 权限掩码计算、目录特殊权限(r/w/x 对应功能)及粘滞位(chmod +t)的实用场景,均通过实操案例验证了核心规则 ------root 不受权限约束,普通用户受角色与文件属性双重限制

这些知识点是 Linux 系统安全与协作的基础:日常操作中,避免直接用 root 操作,通过 sudo 按需提权;共享目录用粘滞位保障文件安全;修改权限时结合业务场景选择字符或数字方式,既能满足协作需求,也能防范越权风险。后续可结合实际需求灵活运用,进一步深化对 Linux 权限体系的理解~

相关推荐
imc.111 小时前
linux基础IO
linux·运维·服务器
躺不平的理查德1 小时前
让Ubuntu 的第二块网卡 ens37 永久固定为 192.168.30.111
运维·服务器
bitbrowser2 小时前
Facebook 验证反复回到原页面,应该从哪里排查
运维·服务器·facebook
Land03292 小时前
AI网页元素变化无法自动修复?自带元素自愈的自动化解决方案
运维·人工智能·ai·自动化·rpa
fengyehongWorld2 小时前
Jenkins 安装与简单配置
运维·jenkins
云智慧AIOps社区2 小时前
2026 国产化 ITSM 替代指南:横向测评 ServiceNow、轻帆云、Jira等五款主流IT服务管理平台
运维·人工智能·运维开发·it服务管理·itsm平台
糖果店的幽灵2 小时前
langgraph的分支结构之 - 静态分支详解
java·服务器·数据库·langgraph
虹科网络安全2 小时前
艾体宝新闻|从 SQL 注入到服务器接管:CVE-2026-57517 暴露 Web 管理面板的供应链与安全编码风险
服务器·前端·sql
Urbano2 小时前
针织卫衣全流程生产工序科普:自动化替代、产能优化与设备选型实战方案
运维·自动化
BelongPanda3 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx