Linux权限探秘:驾驭权限模型,筑牢系统安全


♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥

♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥

♥♥♥我们一起努力成为更好的自己~♥♥♥

♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥

♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥
✨✨✨✨✨✨ 个人主页✨✨✨✨✨✨


前面的一篇博客,我们已经学习了Linux的一些基础指令,并且理解了什么是操作系统,这一篇博客我们将开启新的篇章------Linux权限,准备好了吗~我们发车去探索Linux的奥秘啦~🚗🚗🚗🚗🚗🚗

目录

Linux文件类型😉

Linux用户😎

用户类型

用户登录与切换

创建用户

设置密码

修改用户信息

删除用户

用户切换

普通用户权限提升

权限的理论解释😊

权限的本质

Linux的核心理念

文件权限的构成

权限的符号表示

方法一(字母表示)

方法二(数字简写表示/八进制模式)

权限的核心作用

权限的实践操作😍

权限修改

chmod

chown和chgrp

目录的权限

进入目录需要的权限

默认权限

普通用户文件共享😝

粘滞位

file指令


Linux文件类型😉

在正式谈Linux权限之前,我们首先来看看Linux文件类型的话题~首先想一想在Windows操作系统中,我们是使用什么来区分文件类型的~

答案是Windows操作系统使用文件名后缀来区分文件类型~

Windows操作系统中文件名后缀(扩展名)用于标识文件的类型和用途。下面是一些常用的文件名后缀及其说明:

  1. .exe - 可执行文件:这些文件包含计算机可执行的程序代码。双击此类文件会运行相应的程序。

  2. .msi - Microsoft安装程序包:用于安装、更新或删除程序的安装包。

  3. .dll - 动态链接库:包含可由多个程序共享的代码和数据的库文件。

  4. .sys - 系统文件:通常是设备驱动程序或Windows操作系统核心文件。

  5. .bat - 批处理文件:包含一系列命令的文本文件,可通过命令行界面执行。

  6. .cmd - 命令脚本文件:类似于批处理文件,用于执行命令序列,主要用于Windows NT系列。

  7. .txt - 文本文件:纯文本格式的文件,可以用记事本等文本编辑器查看和编辑。

  8. .doc/.docx - Microsoft Word文档:由Microsoft Word创建的文档文件,.docx是较新的格式。

  9. .xls/.xlsx - Microsoft Excel电子表格:由Microsoft Excel创建的电子表格文件。

  10. .ppt/.pptx - Microsoft PowerPoint演示文稿:由Microsoft PowerPoint创建的演示文稿文件。

  11. .pdf - 便携式文档格式:由Adobe开发的跨平台文档格式,用于交换和查看文档。

  12. .jpg/.jpeg - 图像文件:常用的图像压缩格式,适用于照片和复杂图像。

  13. .png - 可移植网络图形:支持无损压缩和透明度的图像格式。

  14. .gif - 图形交换格式:用于简单动画和网页图像的格式。

  15. .mp3 - 音频文件:广泛使用的音频压缩格式。

  16. .mp4 - 视频文件:常用的视频压缩和播放格式。

  17. .zip - 压缩文件:包含一个或多个文件或文件夹的压缩存档,用于节省空间和方便传输。

  18. .rar - 压缩文件:另一种压缩格式,由WinRAR软件创建和读取。

  19. .ini - 初始化文件:用于存储程序配置信息的文本文件。

  20. .log - 日志文件:记录程序或系统活动信息的文件,通常用于故障排查。

Windows操作系统我们经常使用,相信大家也就并不陌生了~

那么Linux是使用什么区分文件类型呢?

Linux区分文件类型,不是使用文件名后缀,而是用文件的属性列区分的!

说明:Linux系统在文件类型的区分上,与Windows系统有着本质的不同。Windows系统主要通过文件名后缀来识别文件类型,而Linux系统则更多地依赖于文件的属性列,通过【ls -l】/【ll】命令列出的文件信息中的第一个字符来表示(普通文件以"-"表示,是常见的文件类型;目录以"d"开头,代表文件夹;链接文件以"l"开头,指向其他文件或目录;字符设备文件"c"(比如显示器和键盘,不支持随机读取,按照字符为单位)和块设备文件"b"(比如硬盘)分别用于访问字符设备和块设备;"p"表示管道文件用于进程间通信;"s"表示套接口文件用于网络通信。)。尽管Linux不以文件后缀作为区分文件类型的主要依据,但用户仍然可以根据习惯或需要为文件添加后缀,以便更容易地识别文件的内容或用途。然而,在某些特定情况下,如使用某些工具或程序处理文件时,可能需要明确文件的类型(比如gcc编译)。这时,这些工具或程序可能会参考文件的后缀或实际内容来判断。因此,虽然Linux系统本身不依赖文件后缀来区分文件类型,但文件后缀在Linux中仍然具有一定的辅助作用,可以帮助用户更好地管理和识别文件。

补充:在 Linux 系统中,普通文件(Regular File)是指不具有特殊文件类型属性的文件,通常包含 文本、二进制数据、图像、音频、视频、可执行程序、库文件、源代码等各种用户数据。

Linux用户😎

用户类型

前面我们提到了Linux用户包括root用户和普通用户~

在 Linux 系统中,用户是访问和管理系统资源的基本实体。Linux 是一个多用户、多任务的操作系统,意味着它可以同时支持多个用户,并且每个用户可以同时执行多个任务。

简单介绍两个用户类型:

  • 超级用户(Superuser)------root
    • 定义:系统管理员账号,拥有最高权限,只有一个
    • 权限:可以访问和修改系统中的所有文件和资源,执行任何命令。
    • 用途:用于系统管理任务,如用户管理、软件安装、系统配置等。
    • 注意:由于权限极高,使用时需格外小心,避免误操作导致系统问题。
  • 普通用户(Regular User)
    • 定义:日常使用系统的普通账号。
    • 权限:对系统资源和文件的访问受限,只能访问和修改自己拥有的文件和目录,不能直接影响系统核心组件。
    • 用途:用于日常任务,如文档处理、编程、上网等。

接下来我们来细细讲解Linux操作系统的用户知识:

用户登录与切换

这一个话题在前面的博客中提到过,我们重新复盘一下:

创建用户

  • 使用adduser命令创建新用户(注意:使用root【管理员】账号进行)
  • 例如,adduser xiaodu会创建一个新用户,但不会自动创建用户的主目录。
  • 若要同时创建用户主目录,可以使用adduser -m username

设置密码

  • 使用passwd命令为用户设置密码。例如,passwd xiaodu会提示你输入并确认新密码。

修改用户信息

  • 使用usermod命令修改用户信息。例如,usermod -l newname oldname可以修改用户名。
  • usermod -aG groupname username可以将用户添加到附加组。

删除用户

  • 使用userdel命令删除用户。例如,userdel username会删除用户,但不会删除其主目录。
  • 若要同时删除用户主目录,可以使用【userdel -r username】,我们更加建议使用这一个,避免出现问题~

用户切换

小编这里已经创建了一个xiaodu/username这两个普通用户

接下来就是用户切换问题:

1、普通用户------>超级用户

操作:命令行输入【su root】,输入超级用户密码

效果如下:

回到普通用户:【Ctrl+d】


2、普通用户------>普通用户

这里有两种情况

①如果已经知道想登陆的普通用户密码

操作:命令行输入【su 登录用户名】,输入想登陆的普通用户密码

效果如下:

回到原来普通用户:【Ctrl+d】

②不知道想登陆的普通用户密码,但是知道超级用户密码

操作:命令行输入【su root】,输入超级用户密码,再【su 登录用户名】,不需要输入普通用户密码直接登录~

效果如下:

回到原来普通用户:两次【Ctrl+d】

3、超级用户------>普通用户

操作:命令行输入【su 登录用户名】,不需要输入普通用户密码直接登录~

回到超级用户:【Ctrl+d】

事实上,普通用户登录超级用户还有一种方法是命令行输入【su - root】,输入超级用户密码~

接下来,我们进行简单操作对比:

画表对比:

特性 su root su - rootsu -l root
工作目录 保持原目录不变 切换到 root 的主目录(/root
环境变量 继承原用户的环境变量 加载 root 的环境变量和配置文件
适用场景 临时执行命令,保留原环境 完全切换到 root 环境,执行系统级任务

有些知识比如环境变量后面会进行讲解~

普通用户权限提升

我们知道超级用户拥有最高权限,有些操作普通用户是无法进行的,比如下面尝试将当前目录中的 gol.tx 文件复制到 /usr/bin 目录,但是输出显示了一个错误信息:cp: cannot create regular file '/usr/bin/gol.tx': Permission denied,这意味着当前用户(普通用户)没有足够的权限将文件复制到 /usr/bin 目录。【通常,/usr/bin 目录需要超级用户权限(root 权限)才能写入】

那么怎么进行普通用户权限提升呢?

操作 :使用 sudo 命令来提升权限

我们发现sudo之后还是不能进行操作,这是因为用户 xiaodu 没有被添加到 sudoers 文件中,因此无法使用 sudo 命令来提升权限~

那么我们就需要把用户 xiaodu 没有被添加到**sudoers 文件(相当于Linux中的用户白名单)**中,怎么操作呢?

操作:找到管理员(超级用户root),将用户 xiaodu 添加到 sudoers 文件中~

这个时候普通用户xiaodu就可以使用sudo命令了~

总结 : 默认新增的用户,无法直接执行sudo,新用户不受系统信任!如果想让新用户使用sudo,我们需要找到管理员(超级用户root),将新增的用户添加到 sudoers 文件中~使用sudo也就是对普通用户的权限提升(以root的身份执行命令)~

权限的理论解释😊

我们知道什么是权限?首先来看看权限的本质~

权限的本质

  • 公式:权限 = 人(用户) + 事物属性(文件属性)
  • 含义:权限取决于「谁要操作」(用户身份)和「操作对象有什么属性」(文件自身的权限设置)。例如,只有文件所有者才能修改文件,而其他用户可能只能读取。

Linux的核心理念

  • 「一切皆文件」 :在Linux中,所有资源(如普通文件、目录、硬件设备等)都被抽象为文件。这意味着权限系统统一管理所有资源的访问,包括:
    • 普通文件(如文本、图片)
    • 目录(文件夹)
    • 设备(如硬盘、USB驱动器)
    • 网络接口等

文件权限的构成

  • 公式:文件权限 = 用户/角色(User) + 文件权限属性(rwx)
  • 用户/角色分类:
    • 所有者(Owner):文件的创建者,拥有最高权限。
    • 所属组(Group):与所有者同组的用户,权限通常次于所有者【有了所属组,可以给组内成员部分权限,而不给其他人(Others)权限】
    • 其他用户(Others):既不是所有者也不在所属组中的用户,权限最受限(Others可以是任何人)
  • 文件属性(权限类型):
    • r(读,Read):允许查看文件内容或列出目录内容。
    • w(写,Write):允许修改文件内容或在目录中创建/删除文件。
    • x(执行,Execute):允许运行文件作为程序,或进入目录。

重点解释x权限:

一个文件并不是有了x权限就可以执行,可执行文件 = 有可执行权限 + 本身可以执行【两者缺一不可】~也就是说可执行权限和能够执行是两码事~
注意点:

在进行角色/身份匹配的时候只会按拥有者,所属组,其他用户的顺序,匹配成功一次确定身份,也就确定了权限~

权限的符号表示

方法一(字母表示)

权限通过 rwx 字母组合表示(-表示没有该权限),例如:

  • rwxr-xr-- 表示(三个为一组):
    • 所有者:读、写、执行(rwx)
    • 所属组:读、执行(r-x)
    • 其他用户:只读(r--)

知道了这些,我们通过命令行输入【ll】显示的文件/目录的详细属性进行解析:

方法二(数字简写表示/八进制模式)

  • 数字简写:用数字表示权限(如 755 对应 rwxr-xr-x
  • 解释:核心原理是将读(r)、写(w)、执行(x) 三种权限分别映射为数字值,再通过三位八进制数字组合表示权限~

每个权限对应一个二进制位和八进制值:

  • 读权限(r)4(二进制 100
  • 写权限(w)2(二进制 010
  • 执行权限(x)1(二进制 001
  • 无权限(-)0(二进制 000

通过将权限值相加,可组合出任意权限:

  • rwx = 4 + 2 + 1 = 7
  • rw- = 4 + 2 + 0 = 6
  • r-x = 4 + 0 + 1 = 5
  • r-- = 4 + 0 + 0 = 4
  • 其他组合同理~

同样三个角色,那么就使用三个数字就可以表示它们的权限了~

例如: 755 对应 rwxr-xr-x

755 对应权限 rwxr-xr-x:首位 7(拥有者权限=读+写+执行),中间 5(所属组权限=读+执行),末位 5(其他用户=读+执行)

使用数字简写表示就较为方便,用3个数字替代复杂的符号组合~

权限的核心作用

  • 访问控制:权限决定了用户能否对文件执行操作(如读取、修改、执行)。
  • 安全基础:通过合理分配权限,可以保护系统免受未经授权的访问或恶意操作。

权限的实践操作😍

前面已经提到了权限的一些基础概念,接下来我们来对权限属性进行实践操作~

权限修改

进行权限属性的修改,我们需要使用相关的命令~首先来看看chmod

chmod

语法 :chmod [参数] 权限 文件名
功能 :设置文件的访问权限
常用选项

  • R:递归修改目录文件的权限

  • 说明:只有文件的拥有者和root才可以改变文件的权限
    修改权限格式

  • 用户表示符 +/-= 权限字符(rwx)

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

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

实际操作:

我们新创建一个testfile.txt来进行测试:

首先我们试一试给拥有者修改权限:

可以看到通过chmod可以给拥有者增加或者删除多个权限,那么再看看其他角色呢?

可以看到进行类似的操作,也可以修改所属组和其他用户的权限,同时如果需要同时修改多个角色权限,可以中间使用【,】进行隔开~

如果对所有的用户/角色进行一样的修改,可以使用用户表示符【a】,例:

除了使用rwx,我们还可以使用八进制模式进行权限修改~

八进制修改权限格式

chmod 【八进制值】 文件名

例【需要注意的是八进制模式会直接覆盖原有权限,而非增减操作(与符号模式的 +/- 不同)】

chown和chgrp

chown

功能 :修改文件的拥有者

语法格式 :chown [参数] 用户名 文件名
常用选项:-R 递归修改文件或目录的拥有者
chgrp

功能 :修改文件的所属组

语法格式 :chgrp [参数] 用户名 文件名

常用选项:-R 递归修改文件或目录的所属组

比如小编当前有username,xiaodu,root三个用户

如果我想把xiaodu账号的testfile.txt文件给username账号,也就相当于修改文件拥有者~

但是当我们操作的时候请求被拒绝~

这是因为就像平时我们给别人东西一样,也需要看对方是否接受,如果接受才可以给对方,还有一种解决办法就是进行权限提升,也就是以root权限强制给别人,我们也就可以使用前面的sudo进行普通用户权限提升~

同样可以进行权限提升修改文件所属组:

修改回去:

除了分别修改以外,还有一种方法可以同时修改拥有者和所属组:

命令行输入:chown 拥有者:所属组 文件名

目录的权限

前面我们都是对普通文件进行操作,那么对于目录这样比较特殊的文件应该怎么操作呢?

进入目录需要的权限

首先我们来看看,我们进入一个目录,需要什么权限呢?我们来实际操作一下:

1、进入一个目录,需要r权限吗?

所以进入一个目录不需要r权限,但是我们可以看到也无法查看目录里面的文件信息。这是因为【 r 权限决定是否允许用户查看执行目录下的文件信息!】

2、进入一个目录,需要w权限吗?

所以进入一个目录不需要w权限,但是我们可以看到不可以在当前目录下新建文件。这是因为【 w权限决定该用户是否可以修改(属性)或者删除/新建执行目录下的文件】

3、进入一个目录,需要x权限吗?

答案应该显而易见了,我们一样实际操作:

所以我们得到答案,进入目录需要x权限~

总结:

权限标识 权限名称 目录上的核心作用 典型场景说明
x 执行权限 进入目录的必选条件 (无x权限时,即使有r权限也无法使用cd命令进入目录) 必须同时拥有目录的x权限和文件的r权限才能执行文件
r 读权限 允许查看目录内文件列表(通过ls命令) 但无法进入目录或操作文件 可列出/etc目录下的文件,但无法进入该目录修改配置
w 写权限 允许在目录内执行以下操作: ✅ 新建文件 ✅ 删除文件 ✅ 重命名文件 ✅ 修改文件属性 可在/tmp目录自由创建/删除临时文件(需配合x权限)

默认权限

我们可以看到当我们新建一个文件/目录的时候都会有默认的权限,那么这个默认的权限是怎么得到的呢?

Linux文件/目录默认权限生成机制

  1. 核心规则
    • 普通文件 默认起始权限:666rw-rw-rw-
    • 目录文件 默认起始权限:777rwxrwxrwx
    • 最终权限 = 起始权限 & (~umask)
  2. umask的作用
    • 权限掩码:用于过滤掉不需要的默认权限
    • 示例:umask 0002
      • 转换为二进制:000 000 0010
      • 过滤规则:移除文件/目录的其他用户写权限
      • 最终权限计算:
        • 文件:666 & ~002 = 664rw-rw-r--
        • 目录:777 & ~002 = 775rwxrwxr-x
  3. 系统差异说明
    • 不同Linux发行版默认umask值可能不同,小编的Centos的umask值为0002
    • 用户可通过umask命令查看/修改当前权限掩码

接下来我们尝试修改权限掩码:

那么如何恢复默认权限掩码呢?

方法一:重新设置为002

方法二:关掉Xshell重新登录

普通用户文件共享😝

普通用户如果需要进行协作,那么有时候我们就需要进行普通文件共享~

这里给出一种方法:使用公共目录实现普通用户文件共享~

首先root账号在根目录下创建一个共享目录:

该目录拥有者和所属组都是root,现在为其他用户增加rwx权限:

那么其他用户就可以在该目录下进行操作,普通用户之间就实现了数据共享:

username为xiaodu.txt文件其他用户,具有r权限,可以读取文件内容,但是不可以写入~

接下来我们可以看一个神奇的现象:

username作为xiaodu.txt文件其他用户,只具有r权限,但是可以删除xiaodu.txt文件,这是因为在shared-dir目录下,xiaodu和username都是其他用户,root都给了它们w权限,都可以在该目录下进行文件的新建或者删除~

这样虽然实现了普通用户文件共享,但是也就会存在互删的情况,如果把该目录其他用户权限修改为r-x,那么就没有办法新建文件了,所以为了解决这个问题,就有了粘滞位的概念~

粘滞位

  1. 作用对象 :仅对目录生效,对文件设置依然可以删除
  2. 权限逻辑
    • 当目录设置粘滞位后,只有以下三类用户 可删除/重命名目录内文件:
      • 文件所有者
      • 目录所有者
      • root 用户
    • 即使其他用户对该目录拥有写权限(w),也无法删除非自身拥有的文件
  3. 典型案例
    • 系统临时目录 /tmp 默认权限为 1777
    • 公共共享目录(如多用户协作目录)

实际操作:

bash 复制代码
//设置方法一(符号设置)
chmod +t directory_name  # 启用粘滞位
chmod -t directory_name  # 禁用粘滞位

//设置方法二(数字设置)
chmod 1777 directory_name  # 设置粘滞位(1xxx)
# 权限解析:
# 第一个数字1表示粘滞位
# 后续777表示传统权限(rwxrwxrwx)

当目录对other有x权限时显示为t,否则显示为T

简单对比:

特性 传统权限(无粘滞位) 粘滞位生效时
目录写权限(w) 允许删除所有文件 仅允许删除自身文件
文件删除控制 依赖文件所有权 强制所有权验证
典型应用场景 私有目录 公共共享目录

file指令

file 命令是可以用于检测文件类型 ,它通过分析文件的内容特征(而非仅依赖文件扩展名)来判断文件的实际类型~

使用:


♥♥♥本篇博客内容结束,期待与各位优秀程序员交流,有什么问题请私信♥♥♥

♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥

✨✨✨✨✨✨个人主页✨✨✨✨✨✨


相关推荐
小狗爱吃黄桃罐头17 分钟前
正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-12.1 Linux内核启动流程简介
linux·arm开发·学习
Clownseven33 分钟前
SSH/RDP无法远程连接?腾讯云CVM及通用服务器连接失败原因与超全排查指南
服务器·ssh·腾讯云
ricky_fan34 分钟前
window下配置ssh免密登录服务器
运维·服务器·ssh
地衣君1 小时前
Ubuntu 配置使用 zsh + 插件配置 + oh-my-zsh 美化过程
linux·运维·ubuntu
2401_858286111 小时前
OS11.【Linux】vim文本编辑器
linux·运维·服务器·编辑器·vim
朱包林1 小时前
day27-shell编程(自动化)
linux·运维·服务器·网络·shell脚本
钢铁男儿1 小时前
一文掌握 Tombola 抽象基类的自动化子类测试策略
运维·自动化
layman05281 小时前
OpenEuler服务器警告邮件自动化发送:原理、配置与安全实践
服务器·鸿蒙系统·openeuler
kaede1 小时前
Linux实现线程同步的方式有哪些?
linux·运维·云计算
德先生&赛先生1 小时前
Linux编程:2、进程基础知识
linux