这里有你不知道的关于linux中权限的知识(代码片段)

做1个快乐的程序员 做1个快乐的程序员     2022-12-26     734

关键词:

  ☀️我们在平常玩电脑的时候,经常会遇到这样的情况,系统报错:您无权限访问该资源。☀️

  这就是因为权限的原因而导致的问题,不仅在windows系统中会遇到这样的问题,在我们Linux系统中我们也会遇到这样的情况。
  通过对本篇文章的阅读,小编会将Linux中权限的知识掰碎了给大家说明一下,希望这篇文章可以对大家对Linux的学习有所帮助。

Linux权限的概念

1.1 Linux用户分类
  各位应该都听说过,Linux是一个多用户操作系统,但许多同学并不知道这个多用户是什么意思,这里的多用户指得是普通用户,我们的Linux下有两种用户:超级用户(root)、普通用户。
    ☀️超级用户:可以在Linux系统下做任何事情,几乎不受限制。
    🌔普通用户:在自己的工作目录下,做有限的事情。
  总结:即我们所有的权限是用来限制普通用户的,而我们的超级用户几乎不受限制。在Linux系统中,默认会有一个root,这个用户是必须存在的,安装系统的时候就自动存在了。此外,还需要注意的是:超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

图1 普通用户
图2 超级用户

1.2 Linux用户切换
  我们知道了Linux中的用户分为普通用户和超级用户,那么两个用户之间应该如何进行切换呢?下面小编来带各位了解这部分内容。
    su - 回车 :输入root密码,会从普通用户切换到超级用户
    ctrl + d :从超级用户返回普通用户,或者是logout、exit也可以完成
  如果开始进入的是root用户,想切换到普通用户:
    su - 普通用户名 : 即可切换到普通用户
  总结: root切换普通用户,不需要输密码,不需要别人同意,但是普通用户切换到root需要输密码。

1.3 补充
  a:当我们想要给普通用户修改密码时,在普通用户下进行passwd操作是不行的,像更改密码这种操作必须是root用户才具备的权限,所以我们有两种方法:
    a-1:su - 切换到root用户,再修改密码
    a-2:sudo passwd 普通用户名,就可以改普通用户的密码了
  b:如果我们想单独提升某一条指令的权限,可以给指令带上sudo
  c:所以到底什么是权限呢?
    权限本质就是一件事情是否允许别人做。
    比如:一个file文件,是否允许xd或者root查看,这就是是否允许别人做,其次,这个文件本身
       是否具有具有rwx的各种属性。

Linux权限管理

1、文件访问者的分类

  文件的访问者有三种分类:
    a:文件拥有者(u-User)
    b:文件所属组(g-Group)
    c:其他人(o-Other)

2、文件权限属性

  r:读取权限;w:写入权限;x:可执行;-:无权限
  r-Read:对文件来说,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
  w-Write:对文件来说,具有修改文件内容的权限;对目录来说,具有删除移动目录内文件的权限。
  x-Execute:对文件来说,具有执行文件的权限;对目录来说,具有进入目录的权限。

3、文件类型

-:普通文件–>文本、可执行程序、库等等
d:目录
c:字符文件–>显示器、键盘等
b:块设备–>磁盘等
l:链接文件
p:管道文件

4、文件属性(事务属性)

  在我们进入一个目录的时候,我们使用ll命令,来显示该目录下文件的详细信息,如图:
  我们通过ll指令,来获得文件的详细信息,包括文件的属性、拥有者、所属组、文件大小、创建时间、文件名等,在上图中我们可以观察到这些信息。总结来说上面图中总共有9列信息,第一列总共具有10个字符,表示文件的属性;第二列表示该文件的标识码;第三列表示该文件的拥有者;第四列表示该文件的所属组;第五列表示该文件的大小;第六七八列表示该文件创建的时间;第九列表示该文件的文件名。

  下面我们分别来讲解文件的属性信息。

4.1 文件类型
  在第一列中的10个字符中,第一个字符表示的是文件的类型,关于文件类型的知识我们在第3节中已经给出,所以上图中的文件中,除了第二个文件属于目录文件,其余皆为普通文件。
  为什么Linux中要以第一列中的第一个字符来区分文件类型呢?
  答:对Linux操作系统来说,文件类型和后缀无关,只跟第一列字符有关(比如生成一个a.out可执行程序,将其mv为a.txt、a.exe仍可正常运行)。但是对Linux上的软件来说,不是的,比如gcc a.out可以编译通过,gcc a.exe就无法正常通过,显示文件格式不认识。所以我们在创建文件的时候,还是希望大家把文件后缀名带上,这是为什么呢?因为符合我们的windows使用习惯,并且直观上容易识别,方便阅读。

4.2 文件权限

  还是参考上图数据,除了第一列是文件的类型之外,剩下的9个字符是跟权限有关,剩下的9个字符,3个为一组,依次对应拥有者、所属组、other。

r:读取权限;w:写入权限;x:可执行;-:没有对应权限

  那么如何阐述一个文件的权限?对于file2.txt文件来说,拥有者所有的权限是可读可写没有可执行,所属组所有的权限是可读可写没有可执行,other所有的权限是只读
  -:没有对应权限,怎么理解对应这两个字呢?
  - - - 三个字符对应的权限也是对应的,第一个-是表示:是否有读权限,如果有就是r,如果没有就是-;第二个-是表示:是否有写权限,如果有就是w,如果没有就是-;第三个-是表示:是否有执行权限,如果有就是x,如果没有就是-。所以对应是读写可执行中的其中一个。

4.3 三种角色和两个用户之间的关系
  A:我们有文件访问者三种分类:拥有者、所属组、其它;同时Linux具有普通用户和超级用户两种类型的用户,他们中间存在什么关系呢?
  答:拥有者、所属组、other相当于角色,而我们的root、普通用户是人,要扮演某种角色,即root和普通用户可以充当拥有者,也可能充当所属组,也可能充当other。

  其中,拥有者和other是好区分的,一个文件不是属于拥有者就是other。

  B:为什么要有组的存在?
  答:比如有组A和组B同时开发一款软件,组A中的小王写的代码肯定不想让组B中的小李看到,如果只有拥有者和other的话,小王只能看到自己的代码,其他任何人包括同组中的人,谁也看不到。组A的组长想审阅代码,也是没有权限的,如果放开了,那么组B的小李也是可以看到的,所以我们一定需要权限,让other看不到,让同组的人能看到,包括自己。想让谁看到,添加到组内就可以。 这样一个文件,除了other,自己和组内的所有人都有权限查看。
  结论:为什么要有所属组:更灵活的进行权限配置,满足团队协作。

5、修改文件权限(chmod)

  修改文件权限需要的指令是chmod。对于指令的修改,我们分单个人单权限和多个人多权限给大家举例说明,其它情况依次推测规律即可。
   A:单个人单权限操作:
    chmod u-r file.txt = 更改file.txt中user(拥有者)的权限,-r去除其可读权限,变为不可读,即第一个位置从r变为-

    chmod u+x file.txt = 更改file.txt中user(拥有者)的权限,+x给其增加可执行权限,变为可执行,即第三个位置从-变为x

    chmod u-rwx file.txt = 去掉file.txt中user(拥有者)的权限,-rwx去掉其所有权限

  这里需要注意的是,具备可执行权限,并不代表这个文件可执行,因为一个文件可执行,代表这个文件内部必须得有二进制或者脚本程序。
  另外:更改所属组的权限,是g;更改other的权限,是o

  B:多个人多权限操作:
  chmod u-r,g+wx file.txt = 更改file.txt中user(拥有者)和group(所属组)的权限,-r去除user的可读权限,+wx给group增加可写可执行权限

   C:默认情况为所有人:
  如果没有指明给那个角色加权限,默认给所有人都加权限。
  chmod +x file.txt = 给file.txt的所有角色加上可执行权限
  chmod a+x file.txt = 也是给所有角色加可执行权限

6、文件权限的数值表示法及修改

  上面所说的文件权限r、w、x,以及修改权限使用的u、g、o是字符表示法,对于文件权限的表示,我们还有数值表示法。
  在显示更多文件属性的第一栏,除了第一列表示文件类型之外,剩下的9个字符3个为一组分别表示拥有者、所属组和other的权限,每3个里面对应位置按顺序分别代表:是否可读、是否可写、是否可执行。那么我们能否将这三个—位置看作三个比特位,其中比特位具体的位置仍代表该位置所具有的权限,比特位为0或者1,代表是否具有此权限。比如:111代表可读可写可执行,110代表可读可写不可执行。 3个比特位具有8种状态,把其看作8进制(0-7;000-111),把三个组都看成8进制后,可以根据三种角色得到3个8进制数字,此时更改权限的操作就可以用数字代替。

  chmod 000 file.txt = 将file.txt文件的拥有者权限改为000,所属组权限改为000,other权限改为000,每一组中的每一位对应的0和1代表是否具有对应权限

  chmod 656 file.txt = 将file.txt文件的拥有者权限改为110,所属组权限改为101,other权限改为110,每一组中的每一位对应的0和1代表是否具有对应权限

7、修改文件所属角色

  对于三种角色修改文件和目录的权限,以及单角色多角色修改已经掌握,那么能不能修改文件三种角色对应的人呢?答:a:chown = 修改拥有者
  chown root file.txt = 将file.txt的拥有者从xd改为root(目前只有xd和root两个人),但是会报错,显示操作不允许
  sudo chown root file.txt = 输入root密码后,操作完成

b:chgrp = 修改所属组
也是需要+sudo的,sudo后输入密码,一段时间内sudo是不需要再输入的

c:没有更改other的命令

d:同时修改多个角色
  chown xd:xd file.txt = 将file.txt的拥有者和所属组改为xd

8、粘滞位

  root拥有者的文件,对于xd来说是other,我们设置other权限为- - -,即不可读不可写不可执行,但是我们可以删除,如何避免呢?

  法一:我们将root的这个文件所在的目录,这个目录还是xd属于拥有者,更改其拥有者权限,-w设置为不可写,那么xd就不能作为other删除root拥有者的文件了。

  法二:设置粘滞位
    粘滞位是对目录进行设置的!!!粘滞位是对other进行设置的!!!!
    chmod +t 目录 = 给目录加上了粘滞位,作为other就不能删除目录里面属于所属组和拥有者的文件

  比如目录test是root,test目录下对拥有者、所属组、other都是rwx,然后在xd用户下进入test目录下创建xd拥有者的文件,利用sudo 创建root拥有者的文件,然后此时xd对于test目录来说是other,但是因为test目录对于other是rwx,所以xd可以在该目录下创建,删除所有拥有者的文件,但是当我们给test目录添加粘滞位后,xd用户进入test目录,就不能删除拥有者的文件了,当然可以读写,但是没有权限进行删除了。

当一个目录被设置为粘滞位,则该目录下的文件只能由:
a:超级管理员删除
b:该目录的所有者删除
c:该文件的所有者删除

💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛💛
💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙
❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️
  本篇文章就讲到这里,不知道亲爱的小伙伴有没有对Linux权限的理解更深了,如果你有收获,记得给我点个赞,小编会继续努力写更好的文章,让我们大家一起进步。

关于指针数组字符串的恩怨,这里有你想知道的一切(代码片段)

关于指针、数组、字符串的恩怨,这里有你想知道的一切内存组成、字符串定义、一/二维数组结构、数组中的指针等价关系、数组结构中对“指针常量”的理解、指针vs数组内存结构一图流、OneMoreThing:当二维数组遇见qsort()库... 查看详情

推荐10个java学习神器网站分享给大家肯定有你不知道的哦(代码片段)

...找大厂出来的同学同事觉得好用的网站分享给大家,如果这里有你没收藏还不知道觉得还蛮有用的网站可以给我点个赞,大家一起进步,一起学习,同时也可以分享你觉得好用实用的网站,分享快乐0.0好了,废话不多说,咋们上... 查看详情

关于ip,这里有你想知道的一切!

关于IP,这里有你想知道的一切!原创:同盾反欺诈研究院先知安全技术社区2017-07-13       今日,就来跟大家聊聊关于IP地址方方面面的研究,其实可以归到三个问题上:1、这个IP在哪儿?2、这个IP是什... 查看详情

java和c#中的接口对比(有你不知道的东西)

1.与Java不同,C#中的接口不能包含字段(Field)。在java中,接口中可以包含字段,但是这些字段隐式地是static和final的。而C#不允许接口中有字段,编译器在编译时就会提示错误(如下代码所示)。interfaceIInterface{inta;//编译器错误... 查看详情

用winscp连接linux时,拒绝访问!

...用户名,不是密码 参考技术B一般在ssh_configsshd_config里面有你看看关于键盘认证等注释掉就行了.这个在ssh_configsshd_config用VI打开就可以看到 参考技术C一般在ssh_configsshd_config里面有你看看关于键盘认证等注释掉就行了 查看详情

推荐10个java学习神器网站分享给大家肯定有你不知道的哦

...找大厂出来的同学同事觉得好用的网站分享给大家,如果这里有你没收藏还不知道觉得还蛮有用的网站可以给我点个赞,大家一起进步,一起学习,同时也可以分享你觉得好用实用的网站,分享快乐0.0好了,废话不多说,咋们上... 查看详情

ios10个实用小技巧(总有你不知道的和你会用到的)

...#xff0c;以及我的解决方法。比较普遍的我就不再提了,这里主要讲一些你可能不知道的(当然,也有可能你都知道,大神就不必往下看了)1、控件的局部圆角问题你是不是也遇到过这样的问题&#x 查看详情

关于linux之父,你不知道的6件事(代码片段)

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇如果让你现在说出三个程序员的名字,Linus很可能就在其中。作为世界上最著名的电脑程序员、黑客之一,LinusBenedictTorvalds写出了Linux内核1.0版&... 查看详情

vue3你不知道的按钮与菜单权限

...获取到了菜单。下面我们就从菜单中提取按钮权限utils.js这里按钮的数据我们已经获取到了,下面我们就是使用了2、使用按钮权限在util下创建permission.js在mian.js文件中调用3、使用 查看详情

推荐10个java学习神器网站分享给大家肯定有你不知道的哦

...找大厂出来的同学同事觉得好用的网站分享给大家,如果这里有你没收藏还不知道觉得还蛮有用的网站可以给我点个赞,大家一起进步,一起学习,同时也可以分享你觉得好用实用的网站,分享快乐0.0好了,废话不多说,咱们上... 查看详情

说说关于servlet你不知道的知识(代码片段)

    什么是Servlet?    JavaWeb技术是当今主流的互联网Web应用技术之一,而Servlet是JavaWeb技术的核心基础。那么什么是Servlet,什么是Servlet容器呢?    最简单的介绍,Servlet是Sun公司提供的一门用于开发动... 查看详情

对,飞哥就是做安全建设的,内网安全有你不知道的事儿

...务基础,在网络安全层面,传统防护则是侧重的是外网,这里说的外网就是通常大家 查看详情

springboot基础篇之@value中哪些你不知道的知识点(代码片段)

SpringBoot基础篇@Value中哪些你不知道的知识点看到这个标题,有点夸张了啊,@Value这个谁不知道啊,不就是绑定配置么,还能有什么特殊的玩法不成?(如果下面列出的这些问题,已经熟练掌握,那确实没啥往下面看的必要了)@Value... 查看详情

这里有你想知道的es2020中javascript10个新特性(代码片段)

ES2020中Javascript10个新特性1、BigIntBigInt,Javascript中最期待的新功能终于落地。它允许开发者在JS中使用更大的整数进行数据处理。之前,Javascript中最大的整数是pow(2,53)-1。但是,BigInt不受此限制。然而,就如你在上... 查看详情

这里有你想知道的es2020中javascript10个新特性(代码片段)

ES2020中Javascript10个新特性1、BigIntBigInt,Javascript中最期待的新功能终于落地。它允许开发者在JS中使用更大的整数进行数据处理。之前,Javascript中最大的整数是pow(2,53)-1。但是,BigInt不受此限制。然而,就如你在上... 查看详情

记录-关于console你不知道的那些事

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 了解console● 什么是console?console其实是JavaScript内的一个原生对象内部存储的方法大部分都是在浏览器控制台输出一些内容并且还提供了很多的辅助方法... 查看详情

js中你不知道的一些概念知识(代码片段)

DOM元素e的e.getAttribute(propName)和e.propName有什么区别和联系e.getAttribute(),是标准DOM操作文档元素属性的方法,具有通用性可在任意文档上使用,返回元素在源文件中设置的属性e.propName通常是在HTML文档中访问特定元素的... 查看详情

关于linux的权限系统知识点(drwxr-xr-x)

 在Linux系统中使用ll命令可以看到文件的权限信息,如图:接下来主要解释一下这些权限的含义:可以看到总的十个字符:1、第一个字符表示文件类型:d表示是目录-表示是文件l表示是链接文件b表示为设备文件里面的可供存... 查看详情