【Linux操作系统】简学深悟启示录:Linux权限

发布于:2025-07-15 ⋅ 阅读:(16) ⋅ 点赞:(0)

Linux 权限是系统通过对文件 / 目录设置读(r)、写(w)、执行(x)权限,分别管控文件所有者、所属组及其他用户对其的访问操作,以保障系统安全

1.shell的运行原理

在这里插入图片描述

对于 Linux 来说,我们输入的命令行本质上就是在输入字符串,指令的本质就是调用在特定路径下存放的可执行文件,所有的指令最终都要在 OS(操作系统)内执行,但是 OS 的使用难度比较高,用户一般很难直接使用 OS 和他打交道,所以在用户输入的指令和 OS 之间设置了一层命令行解释器

命令行解释器会将命令翻译给核心(kernel)处理,同时将翻译后的结果给到使用者

存在的意义:

  • 进行命令行解释
  • 保护 OS,对于用户的非法请求直接拦截,起到过滤器的效果

2.用户的分类

在这里插入图片描述

用户一般分为:

  • root:超级用户
  • 普通用户:我们新建的用户,即 adduser

由于某些情况下,比如下载依赖的时候就需要切换到 root 账号才能下载,可以使用 su 指令进行切换

超级用户的命令提示符是 #,普通用户的命令提示符是 $

3.用户的切换

  • root用户切换普通用户
[root@hcss-ecs-6aa4 ~]# su zzh_test
[zzh_test@hcss-ecs-6aa4 root]$

su user 表示切换到普通用户,也可以使用exitctrl+d 退出 root 账号,普通用户切换普通用户同理

  • 普通用户切换root用户
[zzh_test@hcss-ecs-6aa4 ~]$ su -
Password: 
Last login: Wed Jul  9 09:07:24 CST 2025 from IP on pts/0
Last failed login: Wed Jul  9 22:23:47 CST 2025 from IP on ssh:notty
There were 4128 failed login attempts since the last successful login.
[root@hcss-ecs-6aa4 ~]#

[zzh_test@hcss-ecs-6aa4 ~]$ su
Password: 
[root@hcss-ecs-6aa4 zzh_test]#

su 后面不加 user 默认表示切换到 root 用户,su - 也是切换到 root 用户,但是会显示登录时的时间、IP 等信息

在这里插入图片描述

关键差异对比

特性 su(无 - su -(带 -
环境变量 保留当前用户的环境变量 加载目标用户的环境变量
工作目录 保持当前目录 切换到目标用户的主目录
用户体验 部分命令可能因环境变量不匹配而无法正常工作(如找不到命令) 完全进入目标用户的环境,命令路径正常
使用场景 临时执行特定命令,无需完整环境 需要以目标用户身份进行完整操作

例如,若要以root身份执行单个命令,可直接用 su -c "command" root;若要完整登录root环境,则用 su -

🔥值得注意的是:

[zzh_test@hcss-ecs-6aa4 ~]$ sudo whoami
[sudo] password for zzh_test:
root

我们如果想要对特定指令进行 root 身份运行又不想登录那么麻烦的话,可以用 sudo 进行提权,那么以后就可以使用 sudo command 的方式在 root 身份下快速执行命令

但是这种使用方式就会有疑问,因为输入的是普通账户的密码就能使用 root 的权限,那么这样岂不是显得 su 很没用,人人都可以用 root 了?

其实不是这样的,目前我们用 adduser 新建的用户,没有办法执行 sudo,系统不信任你,除非你添加到系统信任的白名单里才能执行以上操作

关于这部分知识到了后面会做介绍

4.权限的访问属性

在这里插入图片描述

一件事是否允许被执行,取决于权限的属性,相当于一个人的身份

-rwxrw-r-- 1 zzh_test zzh_test 44 Jun 29 20:41 text1

看一个例子,该代码展示的是一个文件的详细信息

  • r表示可读
  • w 表示可写
  • x 表示可执行
  • - 对应权限位置,表示没有权限

对于文件和目录来说,rwx 的意思稍微有些区别:

  • r 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  • w 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
  • x 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限

但是这么一长串表示什么意思呢?

在这里插入图片描述

Linux 里分为三种身份:拥有者所属组其他人(即除了拥有者,所属组以外的)

举个例子讲解下所属组的具体作用:

假设有甲和乙分别在同一家公司的 AB 组,他们虽然在不同组但是负责同一项目,由于公司竞争机制,所以他们并不想所做的成果被互相看到,比如甲刚做好一个部分不想给乙看到,那么他可以直接设置该文件的其他人权限为 --- ,但是这就无法给老板看成果了,因此就需要所属组,可以理解为白名单,把老板拉到这个所属组里,让老板有权限进行操作

回到这个例子上:

-rwxrw-r-- 1 zzh_test zzh_test 44 Jun 29 20:41 text1
  • 第一位表示文件类型,之前讲过,- 表示文件,d 表示文件夹
  • 2-4 位表示拥有者的权限,对于该例子表示拥有者可读可写可执行
  • 5-7 位表示所属组的权限,对于该例子表示所属组成员可读可写
  • 8-10 位表示其他人的权限,对于该例子表示其他人可读

再往后看,第一个 zzh_test 表示文件所属用户,第二个 zzh_test 表示文件所属用户组

🔥值得注意的是:

  1. Linux 系统中,文件名都是我们自己取的,例如 test.c,加上 .c 是为了方便我们知道这是个 C 语言文件,对于 Linux 系统来说这个文件名后缀没有直接意义,系统识别类型主要还是通过第一位的符号
  2. 创建用户时会默认创建一个同名的基本组,用户所属组的名字和用户名相同,默认情况下该用户会被包含在这个所属组中,即 zzh_test 用户默认是包含在 zzh_test 所属组的

5.权限的修改

5.1 chmod

[zzh_test@hcss-ecs-6aa4 ~]$ ll text1
---------- 1 zzh_test zzh_test 44 Jun 29 20:41 text1
[zzh_test@hcss-ecs-6aa4 ~]$ chmod u+rwx,g+rw,o+r text1
[zzh_test@hcss-ecs-6aa4 ~]$ ll text1
-rwxrw-r-- 1 zzh_test zzh_test 44 Jun 29 20:41 text1

chmod 用于设置文件的访问权限,只有文件的拥有者和 root 才可以改变文件的权限,-R 递归修改目录文件的权限

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限

用户符号:

  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:所有用户

🔥值得注意的是:

也可以通过 chmod 000 text1 的方式来修改权限,即将所有角色的权限取消,但一般修改不同角色的权限时用八进制,比如 chmod 420 text1

在这里插入图片描述

5.2 chown

[root@hcss-ecs-6aa4 zzh_test]# ll text1
-rwxrw-r-- 1 zzh_test zzh_test 44 Jun 29 20:41 text1
[root@hcss-ecs-6aa4 zzh_test]# chown root text1
[root@hcss-ecs-6aa4 zzh_test]# ll text1
-rwxrw-r-- 1 root zzh_test 44 Jun 29 20:41 text1

chown 用于修改文件的拥有者,此命令只能由 root 使用,-R 递归修改文件或目录的所有者

5.3 chgrp

[zzh_test@hcss-ecs-6aa4 ~]$ charge other_group text1

修改文件或目录的所属组,-R 递归修改文件或目录的所属组

假设你是用户 zzh_test,属于 zzh_groupdev_group 两个组,你有一个自己的文件 text1(所有者是 zzh_test)。你可以把 text1 的所属组改成 zzh_groupdev_group(因为你是这两个组的成员),但不能改成 root 组或 other_group(如果你不在这些组里),会提示权限不足

6.常见问题

6.1 umask掩码的作用?

在这里插入图片描述

系统会为新文件默认分配权限(通常文件是 666,目录是 777),而 umask 会 “屏蔽” 掉其中某些权限,最终权限 = 默认权限 - umask 权限

在这里插入图片描述
其实实际权限的计算是通过位运算实现的,但是为了计算简便直接相减也是可以的

例如:若 umask022,则新文件权限为 666 - 022 = 644(即 -rw-r--r--),新目录权限为 777 - 022 = 755(即 drwxr-xr-x

  • 默认情况下,系统创建文件和目录的权限可能过于宽松(如文件 666、目录 777),这会导致所有用户都能读写甚至执行文件,存在安全风险。通过 umask 屏蔽不必要的权限,确保文件和目录仅拥有完成任务所需的最低权限。例如,日志文件通常只需所有者可写,其他用户只读(644),此时 umask 可设为 022

  • 每次创建文件时手动指定权限(如 chmod)繁琐且易出错,umask 提供了自动化的默认权限设置机制。团队协作规范:团队环境中,统一的 umask 配置可确保所有成员创建的文件权限一致,避免因权限混乱导致的协作问题

6.2 如何防止文件被删除?

[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 919 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作

我们知道对于一个目录来说,other 只要具有 w 权限就可以对文件进行修改删除,但是常常我们只希望别人写入,而不是删除,为了实现只可写的权限,可以使用粘滞位 chmod +t,即 x 的位置被替换成 t

此时该目录下的文件只能由

  • root 删除
  • 该目录的所有者删除
  • 该文件的所有者删除

🔥值得注意的是: 一个文件能否被删除,并不由文件本身决定的,是由文件所处的目录权限决定的。因此粘滞位是给目录设置的,目录设置了粘滞位,文件除了上述所说的角色,其他人就无法删除了

6.3 目录权限的区分

目录的可执行权限是表示你可否在目录下执行命令:

  • 如果目录没有 -x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目,即使目录仍然有 -r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
  • 如果目录具有 -x 权限,但没有 -r 权限,则用户可以执行命令,可以 cd 进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行 ls 命令,但仍然没有权限读出目录下的文档(可以执行和可以实现是两码事)

希望读者们多多三连支持

小编会继续更新

你们的鼓励就是我前进的动力!

请添加图片描述


网站公告

今日签到

点亮在社区的每一天
去签到