当前位置: 首页 > news >正文

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 rootsu - 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
      • 公共共享目录(如多用户协作目录)

    实际操作:

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

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

    简单对比:

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

    file指令

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

    使用:


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

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

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


    相关文章:

  • 主流嵌入式Shell工具性能对比
  • 视频音频去掉开头结尾 视频去掉前n秒后n秒 电视剧去掉开头歌曲
  • 2025-04-22-X86 架构与 Arm 架构异同及应用
  • 【LeetCode】算法详解#6 ---除自身以外数组的乘积
  • python之可视化图形生成
  • AI短视频创富营
  • MCP(Model Context Protocol)与提示词撰写
  • 打卡第48天
  • 基于 llama-factory进行模型微调
  • android 模拟器如何进行单模块更新
  • SpringSecurity+vue通用权限系统2
  • 【设计模式】2.策略模式
  • Python Selenium登录网易邮箱
  • springboot启动mapper找不到方法对应的xml
  • 分形几何在医学可视化中的应用:从理论到Python实战
  • 支持selenium的chrome driver更新到137.0.7151.68
  • 【CSS-8】深入理解CSS选择器权重:掌握样式优先级的关键
  • LLMs 系列科普文(11)
  • U盘安装ubuntu系统
  • HNCTF 2025 Just Ping Write-up
  • 彩票网站建设平台/推广文章的推广渠道
  • 安徽建工招采平台/英文外链seo兼职
  • 做网站优化的好处/淘宝关键词指数
  • 晋城做网站的公司/东莞哪种网站推广好
  • 企业网站制作报价/百度搜索广告
  • 网站恶意刷/外包网络推广营销