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

Linux的权限和一些shell原理

 

 

 

目录

shell的原理

Linux权限

sudo命令提权

权限

文件的属性

⽂件类型:

基本权限:

chmod改权限

umask

chown 该拥有者

chgrp 改所属组

最后:

目录权限

粘滞位


 

 

shell的原理

 

我们广义上的Linux系统= Linux内核+Linux外壳

Linux严格意义上说的是⼀个操作系统,我们称之为“核⼼(kernel)“,但我们⼀般⽤⼾,不能直接 使⽤kernel。⽽是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。

为什么要有一个外壳呢?

首先我们的用户不擅长和我们的内核进行访问,并且我们的内核也不会同意让用户直接和它进行访问

所以我们的外壳会将我们的指令翻译交给我们的内核,我们外壳在将我们的内核的处理的结果翻译给我们的用户。

从技术⻆度,

Shell的最简单定义:命令⾏解释器(commandInterpreter)

主要包含:

  • 将使⽤者的命令翻译给核⼼(kernel)处理。

  • 同时,将核⼼的处理结果翻译给使⽤者

在我们的Windows系统中,我们的外壳程序就是我们的图形化界面,我们通过单击或者双击我们的图形从完成我们的操作。

为了保证我们的外壳程序的稳定性,我们可以创建一个子进程来帮我们 进行命令行解释,在我们的xshell中我们的具体外壳程序是我们的bash。

Linux权限

Linux的用户分为两种:

超级用户和普通用户

  • 超级用户:可以再linux系统下做任何事情,不受限制

  • 普通用户:在linux下做有限的事情。

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

命令:su [⽤⼾名]

功能:切换⽤⼾。

例如,要从root⽤⼾切换到普通⽤⼾user,则使⽤suuser,不用输入密码。 要从普通⽤⼾user切换到root⽤⼾则使⽤suroot(root可以省略),此时系统会提⽰输⼊root⽤⼾的 ⼝令。

sudo命令提权

普通用户如果我们不想进行身份切换,而对一条命令进行身份提权。就是用我们的sudo 命令

这个时候我们还是要我们输入密码,但是使用自己的密码。而不是我们的root的密码

但是我们的sudo不一定能用,是因为我们系统中存在一个类似于白名单的东西,在文件/etc/sudoer中的配置文件中。

你将我们自己的用户添加在这个配置文件中,再去执行我们sudo就可以一超级用户的权限去执行了

sudo 命令

权限

权限=人+事物属性。

我们Linux当中的权限是指文件的权限。

对于文件来说:

  • 拥有者

  • other

  • 所属组

但我们的用户不是拥有者也不是所属组就是other。

我们Linux为了进行更加细粒度的权限管理,就有我们的所属组。

文件的属性

我们自己想做一件事情,一方面取决于我们的是谁,另一方面取决于我们的文件的属性

比如我们不能在我们的爱奇艺中进行编程,不能再我们的leedcode进行看电影。

⽂件类型:

  1. d:⽂件夹

  2. -:普通⽂件 ◦

  3. l:软链接(类似Windows的快捷⽅式)

  4. b:块设备⽂件(例如硬盘、光驱等)

  5. p:管道⽂件

  6. c:字符设备⽂件(例如屏幕等串⼝设备)

  7. s:套接⼝⽂件

基本权限:

  • 读(r/4):Read对⽂件⽽⾔,具有读取⽂件内容的权限;对⽬录来说,具有浏览该⽬录信息 的权

  • 限 ◦ 写(w/2):Write对⽂件⽽⾔,具有修改⽂件内容的权限;对⽬录来说具有删除移动⽬录内 ⽂件的权限

  • 执⾏(x/1):execute对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录来说,具有进⼊⽬录的权 限 ◦ “—”表⽰不具有该项权限

 

我们如何第一个人进行身份认证呢?

我们先将我们一个具体的人属于什么身份判定清楚,之后他是什么身份,就拥有什么权限。

我们在确定身份的时候只能确定一次,顺序为 拥有者、所属组、other。

chmod改权限

功能:设置⽂件的访问权限

格式:chmod[参数]权限⽂件名

常⽤选项

  • R->递归修改⽬录⽂件的权限

只有⽂件的拥有者和root才可以改变⽂件的权限

chmod命令权限值的格式

• ⽤⼾表⽰符+/-=权限字符

  • +:向权限范围增加权限代号所表⽰的权限

  • -:向权限范围取消权限代号所表⽰的权限

  • =:向权限范围赋予权限代号所表⽰的权限

⽤⼾符号

  • u:拥有者

  • g:拥有者同组⽤

  • o:其它⽤⼾

  • a:所有⽤⼾

例子:chmod u+w /home/abc.txt

chmod o-x /home/abc.txt

chmod a=x /home/abc.txt

注意:我们给我们的文件加上我们的可执行权限,我们的文件不一定能够可执行。

因为我们的文件可执行,需要文件本身就可以执行,并且具有可执行权限。

我们的权限是说是否有读/写/可执行具有两面性,我们转化为二进制就可以用1/0来表示。

例子: rw-就是110。

我们的110转化为八进制就是我们的6

我们可以用三个八进制数字来代表所有用户的权限。

三位8进制数字

实例: chmod 664 /home/abc.txt

chmod 640 /home/abc.txt

umask

功能: 查看或修改⽂件掩码

新建⽂件夹默认权限=0666

新建⽬录默认权限=0777

但实际上你所创建的⽂件和⽬录,看到的权限往往不是上⾯这个值。原因就是创建⽂件或⽬录的 时候还要受到umask的影响。

假设默认权限是mask,则实际创建的出来的⽂件权限是:

mask& ~umask

格式:umask 权限值

说明:将现有的存取权限减去权限掩码后,即可产⽣建⽴⽂件时预设权限。超级⽤⼾默认掩码值为 0022,普通⽤⼾默认为0002。

实例: • umask 755 • umask //查看 • umask 044//设置

我们不仅能够改权限,还可以改我们的拥有者

chown 该拥有者

功能:修改⽂件的拥有者

格式:chown[参数]⽤⼾名⽂件名

例子:chown user1 f1

chown -R user1 filegroup1

chgrp 改所属组

功能:修改⽂件或⽬录的所属组

格式:chgrp[参数]⽤⼾组名⽂件名

常⽤选项:

  • -R递归修改⽂件或⽬录的所属组

实例: chgrp users /abc/f2

最后:

我们把文件给别人,需要得到别人的允许,草鸡用户不需要,可以直接给,但是去询问不方便,我们一般直接sudo权限提权去进行。

目录权限

  • 可执⾏权限:如果⽬录没有可执⾏权限,则⽆法cd到⽬录中.

  • 可读权限:如果⽬录没有可读权限,则⽆法⽤ls等命令查看⽬录中的⽂件内容.

  • 可写权限:如果⽬录没有可写权限,则⽆法在⽬录中创建⽂件,也⽆法在⽬录中删除⽂件.

于是,问题来了~~换句话来讲,就是只要⽤⼾具有⽬录的写权限,⽤⼾就可以删除⽬录中的⽂件,⽽不论 这个⽤⼾是否有这个⽂件的写权限. 这好像不太科学啊,我张三创建的⼀个⽂件,凭什么被你李四可以删掉?

所以我们的Linux中引出了粘滞位的概念

粘滞位

粘滞位 是类Linux系统(如Linux、macOS)中的一个特殊文件权限标志,通常用于控制文件或目录的访问权限,特别是在公共目录中。它通常用来限制用户对文件的删除或重命名权限,即使该用户对该目录有写权限。

作用:

当一个目录设置了粘滞位时,即使目录中的文件的所有者具有删除或修改该文件的权限,其他用户只能删除自己创建的文件或目录,而不能删除其他用户的文件。这样可以避免用户误删或恶意删除其他用户的文件。

设置粘滞位的常见用途

  • 公共目录:对于共享的公共目录(例如 /tmp),粘滞位防止了非所有者的用户删除或重命名其他人的文件。

  • 安全性:通过使用粘滞位,可以确保其他用户不会干扰你在公共目录中的文件,即使他们也有写权限。

在文件或目录的权限部分,粘滞位通常以 t 表示。如果你使用 ls -l 命令查看一个目录的权限并看到 t,就表示该目录设置了粘滞位。

你可以使用 chmod 命令来设置粘滞位。

设置粘滞位:

chmod +t /path/to/directory

总结

  • 粘滞位 用于控制用户在公共目录中的删除权限。

  • 设置了粘滞位的目录,用户只能删除自己创建的文件,而无法删除其他人的文件,即使他们对该目录有写权限。

  • 通常用于如 /tmp 这样的临时目录中,防止用户误删或恶意删除其他人的文件。


http://www.kler.cn/a/518374.html

相关文章:

  • 人工智能:从基础到前沿
  • 在小红书挖掘信息的实践之旅(第一部分)
  • Mono里运行C#脚本36—加载C#类定义的成员变量和方法的数量
  • FastExcel的使用
  • unity学习20:time相关基础 Time.time 和 Time.deltaTime
  • SpringCloud两种注册中心
  • 7-Zip高危漏洞CVE-2025-0411:解析与修复
  • ASP.NET——MVC编程
  • docker配置mysql并使用mysql connector cpp编程
  • Redis产品:深度解析与选择指南
  • GaussDB高级压缩,破解业务数据激增难
  • OpenCV2D 特征框架 (10)一种特征检测和描述算法类cv::SIFT的使用
  • NAS功能分享
  • 优化性能:高性能云计算的虚拟化技术
  • K8S知识点
  • php代码审计2 piwigo CMS in_array()函数漏洞
  • OpenAI的工具革命: 当Operator撕开中国AI「内卷式创新」的遮羞布
  • Vue.js组件开发-如何实现全选反选
  • 14 常用的负载均衡算法
  • Rust:高性能与安全并行的编程语言
  • 【C++模板】:如何判断自定义类型是否实现某个函数
  • Java异常方面的面试试题及答案解析
  • 操作系统-I/O多路复用
  • 算法基础 -- 快速幂算法详解
  • 2025美赛C题完整代码+建模过程
  • Flink把kafa数据写入Doris的N种方法及对比。