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 这样的临时目录中,防止用户误删或恶意删除其他人的文件。

相关推荐
Jooolin4 小时前
【Linux】虚拟机、服务器、双系统,谁才是 Ubuntu 的最佳方案?
linux·ubuntu·ai编程
K·Herbert9 小时前
最新CentOS 7 yum源失效的解决方案(2025年6月)
linux·运维·centos
别骂我h10 小时前
部署KVM虚拟化平台
linux·运维·服务器
繢鴻10 小时前
紧急救援!Ubuntu崩溃修复大赛
linux·服务器·ubuntu
showmethetime10 小时前
优化nginx参数(基本通用参数)
运维·nginx
老六ip加速器11 小时前
获取ip地址安全吗?如何获取静态ip地址隔离ip
运维·网络·智能路由器
净心净意19 小时前
浅谈DaemonSet
运维·jenkins
Apex Predator1 天前
jenkins流水线打包vue无权限
运维·jenkins
hujun86101 天前
Ubuntu安装无线网卡
linux
Johny_Zhao1 天前
CentOS Stream 8 高可用 Kuboard 部署方案
linux·网络·python·网络安全·docker·信息安全·kubernetes·云计算·shell·yum源·系统运维·kuboard