从0开始的linux(4)——权限

embedded/2024/9/23 9:59:33/

欢迎来到博主的专栏:从0开始的linux
博主ID:代码小豪

文章目录

    • 用户和用户组
    • 文件权限
      • 更改文件权限
      • 目录文件的权限意义
      • 普通文件的权限意义
    • sudo命令

linux具有多用户的任务环境,为了让每个用户保护各自文件数据(防止别的用户对其他用户进行修改,删除的操作),因此对文件的权限设置就非常重要了。当然了,root账号则拥有最高的权限,可以不受文件权限的限制。

用户和用户组

每个文件对于不同用户的开放度是不同的,linux将用户群分为三种,分别是文件的拥有者(owner),文件的所属的用户组(group),以及其他(other)。我们以root账号为例,使用ls -l指令,查看/root的文件属性。

在这里插入图片描述
之所以要做出这种设计也非常好理解。已现实为例,假如文件就是你自己的房间,对你来说,在这个房间当中做什么事都可以,而对于你信任的人来说(用户组),她们可以在你的房间做你允许做的事,而对于除此之外的其他人(other),可能连进你房间的权限都没有,一旦进了可能你就报警了。

对于linux来说,将一个文件对于“用户和用户组”的权限具有不同的开放度是一个相当健全的安全防护措施。因为linux是一个多人多任务的系统,因此会出现多个人同时使用一台主机的情况(比如服务器),考虑到每个人的权限,对文件的所属者,以及所属用户组,还有其他用户做出不同的权限开放是一个非常不错的设计。

而所谓的用户组,可以理解为和你一起工作的小组,作为一个小组,会需要共享数据,因此对于同属一个用户组的用户设置比other更高的权限是合理的。

文件权限

前面讲了那么多关于文件权限与不同用户的关系,但是好像博主还没有说到文件对于不同的用户到底有什么权限,以及如何分辨,如何设置。

还是以上面的root文件为例吧,通过ls -al可以查看当前目录下的所有文件的文件属性。我们还是以上面的root文件为例。这个root文件的属性是一堆字符段。
在这里插入图片描述
别的都好理解。但是文件权限是一堆编码,那么我们该如何分辨出文件权限的意思呢?
第一个字母表示的是文件的类型,[d]是目录,[-]则是普通文件,[l]是链接文件,[b]和[c]则是设备文件,这一点后面在了解。我们当前最多使用的还是[d]开头的目录文件和[-]开头的普通文件。

接下来的字符中,每三个为1组,而且都是[r]代表有读权限,[w]代表有写权限,[x]代表有可执行文件。如果不具有对应权限则会出现[-],比如[rwx]则代表该文件具有可读可写可执行的权限。这里只谈到了文件的权限,但是前面不是说了吗?linux系统对于不同的用户具有不同的权限。那么这个权限是针对谁的呢?

除去第一个字母表示文件属性外。其余编码每三个字符为一组。仔细数数上面的编码,除去第一个字母外,还剩下9个编码,也就是三组,正好对应文件拥有者[owner],所属用户组[group],其他人[other]三种不同用户的权限。

第一组为文件拥有者具备的权限,比如root文件对于root用户来说,具有可读可执行的权限
第二组为所属用户组具备的权限,比如root文件对于root用户组来说,具有可读可执行的权限
第三组为其他人具备的权限,root文件对于其他人来说,不可读,不可写,也不可执行

另外,不同属性的文件的权限具有不同的意义,我们现已目录文件来说

更改文件权限

命令1 chmod
功能:修改文件的权限
格式:chmod [参数] [文件名]

前面提到了,文件的用户分为三种分别是文件创建者(owner),这里用u(user)表示,接着是所属用户组(group)用g表示,还有其他人(other),用o表示。我们在root目录下创建一个test4目录,以test4目录为例。
在这里插入图片描述
test4对于所属用户(root),而言拥有的权限为rwx,如果我们要让root的权限变得不可读,则输入指令

chmod u-w test4

u代表user,表示文件的所属用户,减号(-)表示对应用户减少相应的权限,w,表示可写权限,组合在一起的意思是“让user失去test4文件的可写权限”

因此test4的权限变为:

在这里插入图片描述
test4对于所属用户组(root)而言,拥有的权限为r-x,现在我们想要让root用户组获得test4的可写权限,则输入指令:

chmod g+w test4

g代表group,表示文件的所属用户组,加号(+)表示对应用户增加相应的权限,w,表示可写权限,组合在一起的意思是“让group获得test4文件的可写权限”
在这里插入图片描述

如果我们想让test4文件对于其他人不公开,即不可读不可写不可执行(---),则输入指令

chmod o=--- test4

o代表other,表示文件的所属用户组,等号(=)表示对应用户修改成对应的权限,—,表示不可读不可写不可执行,组合在一起的意思是“让other的test4文件的权限变为不可读不可写不可执行(—)”
在这里插入图片描述

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限
    用户符号:
  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:所有用户

一个文件的权限由文件拥有者控制,那么一个文件有时候会需要修改所属用户和所属用户组,文件所属用户和所属用户组也是文件权限的组成之一。因此我们需要掌握修改这些权限的指令:

chgrp #修改文件所属用户组
chown #修改文件拥有者
chmod #修改文件权限

chgrp是change group的缩写,格式为chgrp [用户组] [文件名]
chown是change owner的缩写,格式为chown[用户][文件名]

要注意,修改所属用户和所属用户组只有root用户才能操作。

目录文件的权限意义

对于目录文件来说,如果目录文件不可写,那么用户则无法在该目录文件下创建或删除文件,但是问题来了,root文件对于root来说,没有可写的权限(r-x)
在这里插入图片描述
但是我们却在root目录当中创建了一个test4文件,这是因为root账号无视任何文件的权限,所有文件对于root来说都是可读,可写,可执行(rwx),因此权限对于root来说是不能限制的。

因此在展示文件权限的意义时,我们切换到普通用户(普通用户需要我们用root用户去创建),切换用户的命令为
su [用户名]
如果我们使用普通用户切换到其他用户(包括root),需要输入密码,而使用root用户切换到其他用户,则不需要输入密码。博主这里将root切换至普通用户lysb666(这是博主创建的普通用户之一)

su lysb666

现在由lysb666在/home/cds路径下创建一个目录test4,并且将可执行权限关闭

chmod u-x test4

在这里插入图片描述

现在test4目录对于lysb666来说,lysb666属于是user那部分,此时lysb666(后面简称ly)对test4的权限为可读,可写,不可执行。如果文件对于用户来说不可执行,那么我们就无法进入test4文件。我们可以尝试进入test4文件
在这里插入图片描述
可以发现,如果目录文件对用户没有可执行的权限,那么用户就无法进入该文件

如果test4文件对ly没有可读权限呢?

chmod u-r u+x test4

在这里插入图片描述

此时如果进入test4,可以发现可以成功进入test4目录文件。但是如果我们想要查看test4目录中的文件,会因没有可读权限而被拒绝
在这里插入图片描述
可以发现,如果用户对于目录文件没有读权限,那么无法查看目录文件。

如果test4对于ly没有写权限(r-x)

chmod u-w,u+r test4

那么ly则无法在test4文件当中创建或删除文件
在这里插入图片描述
可以发现,如果用户对于目录文件没有可写权限,那么无法在目录文件中进行删除或创建文件

普通文件的权限意义

现在,我们将test4对ly的权限改为可读可写可执行,并且在test4当中创建一个普通文件test,
在这里插入图片描述
对于这个普通文件来说,有没有可执行权限都非决定因素,因为普通文件是否可执行取决于文件本身是否可以执行,如果文件不可执行,那么即使有可执行权限也无法执行。

如果普通文件对于用户没有写权限,那么我们就无法对该文件进行修改。
在这里插入图片描述
即使使用nano或者vim等编辑器也无法修改test文件的内容
在这里插入图片描述

因此,如果用户对普通文件没有写权限,就无法修改文件的内容

如果test对ly没有可读权限呢?
在这里插入图片描述
我们可以向test文件写入数据
在这里插入图片描述
但是无法读取test当中的数据,即使使用nano或者vim等编辑器也无法查看内容。
在这里插入图片描述
在这里插入图片描述
此时我们切换到root账号,可以发现test的数据为helloworld
在这里插入图片描述
这说明如果普通文件对用户没有可读权限,那么用户则无法对普通文件的数据进行读取

sudo命令

sudo允许以其他身份执行命令,比如我们本身就拥有root用户,只是使用普通用户来模拟某种环境下的linux操作,那么当我们使用普通用户时,又需要做一些root才有权限的事时,我们就需要用到sudo命令。

通常情况下,一个普通用户是无法使用sudo命令的。
在这里插入图片描述
如果想要一个普通用户可以使用sudo命令来执行root才有权限的操作,就要去/etc/sudoers配置文件进行修改,而这个文件只有root才有权限进行读写。

所以我们先切换回root用户。然后用vim打开/etc/sudoers。(如果不会使用vim就先别操作了,整错了还挺麻烦的)

跳转到第100行。
在这里插入图片描述
将第一百行的一整行复制粘贴到下一行当中。
在这里插入图片描述
然后将下一行的root,改成可以获得sudo权限的普通用户的名字即可。
在这里插入图片描述
此时,lysb666这个用户就能使用sudo指令了

比如lysb666不具备查看/root文件的权限,如果在命令之前输入sudo,就能获得root的权限,查看/root文件的信息。
在这里插入图片描述


http://www.ppmy.cn/embedded/115535.html

相关文章

如何使用下拉字段创建WordPress表单(简单方法)

许多网站所有者在收集用户输入时,都会因为表单过长而让用户感到压迫。 下拉列表字段通过提供一个简洁的选项列表,使表单变得更简单。这意味着它们可以提高表单完成率,并改善用户体验。 在本文中,我们将向您展示如何创建带有下拉…

STM32系统时钟

时钟为单片机提供了稳定的机器周期,从而使我们的系统能够正常的运行 时钟就像我们人的心脏,一旦有问题就整个都会崩溃 stm32有很多外设,但不是所有的外设都使用同一种时钟频率工作,比如我们的内部看门狗和RTC 只要30几k的频率就…

FewShotChatMessagePromptTemplate 和 FewShotPromptTemplate区别

FewShotChatMessagePromptTemplate 和 FewShotPromptTemplate 都是 LangChain 框架中用于少样本学习的提示模板(Prompt Template),但它们在设计和用途上存在一些区别。 FewShotChatMessagePromptTemplate 用途:主要用于聊天场景…

python新手的五个练习题

代码 # 1. 定义一个变量my_Number,将其设置为你的学号,然后输出到终端。 my_Number "20240001" # 假设你的学号是20240001 print("学号:", my_Number) # 2. 计算并输出到终端:两个数(例如3和5)的和、差、乘积和商。 num1 3 num2 5 print(&…

[数据集][目标检测]中国交通标志TT100K检测数据集VOC+YOLO格式7962张45类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):7962 标注数量(xml文件个数):7962 标注数量(txt文件个数):7962 标注…

ansible部署二进制mysql 8

1、配置文件 ll /ansible -rw-r--r-- 1 root root 836 Sep 22 12:09 my.cnf -rw-r--r-- 1 root root 810 Sep 22 07:21 mysql.service -rw-r--r-- 1 root root 2731 Sep 22 12:32 mysql.yam2、my.cnf内容 rootbole:/ansible# cat my.cnf [mysql] #设置m…

NLP-transformer学习:(7)evaluate实践

NLP-transformer学习:(7)evaluate 使用方法 打好基础,为了后面学习走得更远。 本章节是单独的 NLP-transformer学习 章节,主要实践了evaluate。同时,最近将学习代码传到:https://github.com/Mex…

速盾:高防 CDN 怎么屏蔽恶意访问?

在当今网络环境中,恶意访问是网站和应用面临的一个严重问题。高防 CDN(Content Delivery Network,内容分发网络)作为一种强大的防护工具,可以有效地屏蔽恶意访问,保护网站和应用的安全。那么,高…