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

Linux 权限的概念及shell命令运行原理

Linux权限的概念

Linux下一切皆文件 , 对于每个文件 , 就划分为了三种属性 :

  • 1. 可读(r)
  • 2. 可写(w)
  • 3.可执行(x)

Linux用户的概念

Linux下有两种用户 : 超级用户 , 普通用户

超级用户root  :  不受权限约束 ,可以在linux系统下做任何事情,不受限制 , 但是只能有一个

普通用户 :  在linux下做有限的事情 , 可以创建多个普通用户

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

超级用户和普通用户账号的切换:

直接 su 也可以:

超级用户与普通用户切换:通过 su 用户名 命令实现,如从root(超级用户,命令提示符为 # )切换到普通用户cxj,提示符变为 $ ;从普通用户切换回root时需要输入root密码。直接输入 su 也可切换到root。root用户拥有系统的最高权限,可执行所有操作;普通用户权限受限,通过切换可在不同权限级别下完成任务,保障系统安全。

普通用户多账号之间的切换:

在Linux系统中,多个普通用户账号之间切换,需要输入对方账号的密码,使用的命令格式为  su 目标普通用户名 。例如,有普通用户 user1 和 user2 ,当前在 user1 账号下,执行  su user2 ,然后输入 user2 的密码,即可切换到 user2 账号。

第二种方法就是可以通过 root 间接切换为其他的普通用户 不需要密码

su 和 su - 的区别:

在 Linux 系统中, su  和  su - 是有区别的,主要体现在环境变量和用户家目录的切换上:

命令作用环境变量家目录
 su cxj 切换到  cxj  用户,但保留当前用户(如 root)的环境变量继承原用户(如 root)的环境变量仍在原用户(如 root)的家目录( /root )
 su - cxj 切换到  cxj  用户,同时完全加载  cxj  用户的环境变量加载  cxj  用户的环境变量切换到  cxj  的家目录( /home/cxj ) 

简单来说, su - cxj  是“彻底切换”用户环境,而  su cxj  是“仅切换用户身份,保留原环境”。通常建议用  su - 用户名  来确保切换到完整的用户环境~

提权指令 : sudo指令

在Linux系统中, sudo 指令是“superuser do”的缩写,用于让普通用户以超级用户(root)或其他指定用户的身份执行命令,无需切换到root账号,能更精细地控制权限。提高普通用户账号的权限 

利用 sudo 指令对普通账号进行短暂提权的命令 , 当然也可以切换为 root 账号

普通账号默认执行不了 sudo 指令 ! 这是因为 Linux 系统的权限设计机制 导致的。在 Linux 中, sudo  命令的权限是通过  /etc/sudoers  文件来控制的——只有被明确列入这个文件(可以理解为白名单)的用户,才能使用  sudo  临时获取 root 权限。普通用户(如  cxj )默认不在  sudoers  文件的授权列表里,所以执行  sudo  时会被拒绝,提示“用户不在 sudoers 文件中”。这种设计是为了保障系统安全,避免普通用户随意执行高权限操作(如修改系统配置、删除关键文件等),只有管理员明确授权的用户才能通过  sudo  执行敏感操作~

Linux角色概念

权限依附于角色!

角色 :

1. 拥有者角色  (user)

2. 所属组角色  (group)

3. other角色  (other)

以  test.txt  文件为例,其权限信息是  drwxr-xr-x 2 root root 4096 Oct  2 16:52 test.txt ,这里第一个  root  是拥有者角色,第二个  root  是所属组角色,表示该文件的所属组是  root  组


再看  hello.txt  文件,权限信息是  -rw-rw-r-- 1 cxj cxj 0 Oct  2 16:08 hello.txt ,第一个  cxj  是拥有者,第二个  cxj  是所属组,即该文件的所属组是  cxj  组。

Linux 没有专门显示 other 角色的属性 , 不是拥有者和所属组角色 , 那就是 other 角色

所属组是什么? 为什么要有所属组?

对权限进行组级别的管理 , 所属组的作用是对权限进行组级别的管理:比如一个组内的多个用户,可通过所属组权限来共享或协作访问文件。不属于文件拥有者、也不属于所属组的用户,就属于 other  角色,其权限由文件的 other  权限段来控制。

可以理解为group存在的意义是保证项目安全的前提,方便组内协作

Linux文件权限属性概念

  • r(只读)
  • w(只写)
  • x(可执行)

在文件的权限那一个区域中,一个有9个字符,该9个字符三三一组,第一组对应的是user,第二组对应得是group,第三组对应的是other

修改文件权限操作

权限 = 人 + 属性

改变权限 , 要么改变人 , 要么改变权限

修改权限 : chmod指令

用于修改文件权限

权限修改规则说明

  • 角色标识: u 代表文件拥有者, g 代表所属组, o 代表其他用户(other), a 代表所有角色(u+g+o)。
  • 权限操作: + 表示添加权限, - 表示移除权限, = 表示设置限; r(读)、w (写)、x (执行)是三种基本权限。

上图展示了移除权限

上图展示了添加权限

连续改变权限时 , 还可以通过 a+ a- 来进行批量化处理

注意:超级用户不受权限限制,当root用户既不是文件的拥有者也不是所属组,是other时,即使other只有读权限,它也可以随便进行读写执行操作

修改权限还有一种方法:

修改权限—八进制法

因为我们的权限顺序是不变的,都是rwx这样的顺序,并且权限是两种状态,要么拥有要么不拥有,那么就可以这样表示:

111 —表示rwx都拥有

110 —表示rw拥有,x不拥有

000 —表示rwx都不拥有

三位二进制数可以表示为八进制

假设一个文件的权限是:rwx rw- ---,它们分别用二进制表示为:111 110 000

111 110 000 分别用八进制可以表示为7 6 0

那么就有了这样的一种改权限的方法

chmod 111 file.txt

相当于 001 001 001 ;也相当于–x--x–x

这两种方法任选其一

修改拥有者和所属组

chown指令

在Linux系统中, chown 命令用于修改文件或目录的拥有者(user)和所属组(group)。

如果想把一个文件的拥有者给别人:

我们把 hello.txt 的拥有者给root,发现此操作不被允许,在现实生活中,我们给别人一个东西是不是需要得到别人的允许呢?故我们需要:

sudo chown root hello.txt

sudo是权限提升,执行chown命令时,我们以root用户进行执行

如果想把一个文件的所属组给别人 , 就要用到另一个指令---chgrp,但是这个指令仅能修改所属组。

chgrp root hello.txt

同样的道理上述操作这样也是不允许的

sudo chgrp root hello.txt

我们也可以通过下面的方式将拥有者和所属组改回来:

sudo chown cxj:cxj hello.txt

用户访问文件的时候,确定自己相对于文件的身份角色,只会验证一次!!换句话说:权限只会验证一次!!!

三个重要问题:

问题1. 目录权限问题 : 如果进入一个目录需要哪些权限?

r : 我们用户是否有权利查看指定目录下的文件属性 , 访问目录权限和该目录下的文件权限是两回事

w : 决定了特权用户是否有权利在该目录下 , 能否新增,删除,和修改文件名

所以 , 能否进入一个目录需要的权限与 r 和 w 无关 , 与 x 权限有关

可以看出当我们移除 u-x 后 , 想 cd 进入 lesson7 这个文件中 , 是进不去的!


问题2. 为什么我们新建的目录和普通文件的权限是我们所看到的样子? 

对于普通文件,默认权限是从 : 666开始 , 称为起始权限

对于目录文件,默认权限是从 : 777开始 , 也称为起始权限

下图是我们新建的目录和文件 : 我们可以观察到 dir 目录是 775 , 另外两个文件的权限是 664 , 为什么和我们前面提到的两个起始权限不一样呢? 这就涉及到下一个知识---权限掩码了

Linux权限掩码

Linux系统中 , 为了对权限进行细粒度控制 , 就出现了---Linux权限掩码

凡是从权限掩码中出现的权限 , 最终都应该从起始权限中去掉

最终权限 = 起始权限 "去掉" uamsk中的权限 

去掉, 不能理解为减法 , 实质是位操作 即最终权限 = 起始权限 & (~umask)   

当然也可以通过修改 uamsk 后的权限掩码对目录和文件中的权限进行修改 


问题3 : --- , 可以删除吗? 粘滞位问题

指定目录下 , 一个其他人新建的文件(即便是root) , 不让读写,但是我们普通用户可以删掉该文件 ! 在谁的目录下谁就有删除的权利!

如果我们今天想让多用户之间 , 共享文件 , 可以吗?

可以通过 root 系统级别的路径下进行共享 , 但是一定不会在任意用户的家目录下共享!

粘滞位 

在多用户的Linux系统中,存在“公共共享目录”(比如  /tmp ,所有用户都能在里面创建文件)。如果没有粘滞位:

  • 用户A在共享目录里创建了文件 fileA ;
  • 用户B对该共享目录有写权限( w ),就可以直接删除 fileA ——这会导致“用户A的文件被其他用户随意删除”,破坏数据安全。

粘滞位就是为了解决这个问题而设计的:它能限制“文件删除权限”,确保“只有特定角色才能删除文件”。

  • 没有粘滞位时,最后一位是普通权限(如 x 或 - );
  • 设置粘滞位后,最后一位会变成 t (如果其他用户原本有执行权限 x )或 T (如果其他用户原本没有执行权限 - )。

当目录设置粘滞位后,只有三类角色能删除该目录下的文件:

  • 1. 超级管理员(root):系统最高权限用户,能删除任何文件。
  • 2. 该目录的所有者:比如目录 /tmp 的所有者是 root ,所以 root 能删除 /tmp 下的所有文件。
  • 3. 文件的所有者:比如用户A创建了文件 fileA ,只有用户A自己能删除 fileA ;其他用户(即使对目录有写权限)也无法删除。

shell命令以及运行原理

什么是shell外壳?

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。

 - 对比windows GUI,我们操作windows不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
- shell对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。


shell外壳的作用?

1. 交互作用

  • 指令解析与传递:Shell 能将用户输入的命令(如  cp  复制文件、 grep  查找内容等)解析成内核可识别的系统调用,传递给 Linux 内核执行。
  • 结果格式化呈现:内核执行指令后返回的原始数据,由 Shell 进行格式化、整理,以人类易读的形式展示给用户。

2. 保护作用

  • 权限校验:在用户执行指令前,Shell 会检查用户是否具备对应权限。若用户试图执行超出自身权限的操作(如普通用户修改系统核心配置文件),Shell 会拦截并提示权限不足,防止用户误操作破坏系统。
  • 隔离用户与内核:用户不直接操作内核,所有交互都通过 Shell 中转,避免用户因操作失误(如错误的系统调用)直接导致内核崩溃,保障了系统的稳定性和安全性。

bash 与 shell 的关系

  • Shell 是一类程序的统称:它是用户与 Linux 内核之间的命令解释器,负责解析用户命令并与内核交互。
  • bash 是 Shell 的一种具体实现:全称“Bourne-Again SHell”,是目前 Linux 系统中最常用的 Shell 之一(比如 CentOS、Ubuntu 等系统默认使用 bash)。

简单来说,Shell 是“概念/类别”,bash 是“具体的 Shell 程序”,就像“动物”和“猫”的关系——bash 属于 Shell 家族的一员,具备 Shell 的所有核心功能(命令解析、与内核交互等),同时还拓展了很多实用特性(如命令历史、管道、脚本编程等)。

总结:

本文介绍了Linux系统中的权限管理和用户切换机制。主要内容包括:1) Linux文件权限分为可读、可写、可执行三种属性;2) 用户类型分为超级用户(root)和普通用户,通过su命令可切换用户身份;3) 权限与角色(拥有者、所属组、其他用户)相关联;4) 使用chmod、chown等命令修改权限和所有者;5) 目录权限和粘滞位的特殊作用;6) shell作为用户与内核交互的中介,提供指令解析和安全保护功能。文章详细说明了Linux权限系统的设计原理和操作方法,帮助理解多用户环境下的权限控制机制。

http://www.dtcms.com/a/439343.html

相关文章:

  • 58网站开发要多少钱怎么在百度上发布信息
  • 网站联系方式模板企业网站做seo
  • Day89 基本情报技术者 单词表25 システム監視と運用
  • 建行的一些记录2
  • 好的网站设计培训班阿里巴巴网站的建设内容
  • 潍坊 公司 网站网站推广无锡
  • 美发店收银系统多店铺管理
  • IPV4首部
  • 个人网站网址有哪些做网站要什么
  • 在网站上做播放视频广告是否违法优设网页
  • 虚拟机扩容硬盘后,系统磁盘空间仍不够?
  • C语言:字符统计
  • 龙岩做网站怎么做论坛网站
  • 【完整源码+数据集+部署教程】 白血球图像分割系统: yolov8-seg-repvit
  • 厦门市建设局电工报名网站服务号微网站怎么做
  • socketpair深度解析:Linux中的“对讲机“创建器
  • 室内设计者联盟网站photoshop在线制作
  • wordpress 相关文章 插件温州seo网站推广
  • Claude Code v2.0 使用感悟
  • CrewAI + Bright Data MCP 打造“点评情报智能体”:从抓取到洞察
  • 腾讯建站平台官网天津百度快照优化公司
  • 长春建设网站公司吗门户网站 销售
  • 潍坊企业网站建设河南一情况
  • 10.3作业
  • Cocos做网站wordpress多张页面左右滑动
  • 个人网站设计作业在家来料加工
  • AI如何提升数据科学效率?
  • 湘潭网站建设网站推广做网站搞活动
  • Spring进阶 - Spring AOP实现原理(一)AOP切面实现原理
  • 整体设计 逻辑系统程序 之9 三种逻辑表述形式、形式化体系构建及关联规则(正则 / 三区逻辑)之2