Linux的权限和一些shell原理

目录

shell的原理

Linux权限

sudo命令提权

权限

文件的属性

⽂件类型:

基本权限:

chmod改权限

umask

[chown 该拥有者](#chown 该拥有者)

[chgrp 改所属组](#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 这样的临时目录中,防止用户误删或恶意删除其他人的文件。

相关推荐
烛.照1032 小时前
Nginx部署的前端项目刷新404问题
运维·前端·nginx
安静的做,安静的学2 小时前
网络仿真工具Core环境搭建
linux·网络·网络协议
m0_742155433 小时前
linux ——waitpid介绍及示例
linux·c++·学习方法
华纳云IDC服务商3 小时前
超融合服务器怎么优化数据管理?
运维·服务器
会飞的土拨鼠呀3 小时前
Prometheus监控minio对象存储
运维·prometheus
hy____1234 小时前
动态内存管理
linux·运维·算法
ks胤墨4 小时前
Docker快速部署高效照片管理系统LibrePhotos搭建私有云相册
运维·docker·容器
小度爱学习4 小时前
数据链路层协议
运维·服务器·网络·网络协议·网络安全
龙之叶4 小时前
Android13源码下载和编译过程详解
android·linux·ubuntu
hhzz4 小时前
Ansible自动化运维实战--通过role远程部署nginx并配置(8/8)
运维·自动化·ansible