【Linux】——权限详解

Linux权限的概念

        在学习Linux权限之前,我们需要首先了解一下关于用户的知识。在Linux下有两种用户,分别是root用户普通用户。root用户就好比充钱的VIP一样,可以在Linux下做任何事情,几乎不受限制,我们也称其为超级用户。而普通用户一般只能在自己的工作目录下(/home/xxx)工作,以及在系统上做有限的工作。

小提示:

         换言之,所有的权限的概念都是用来限制普通用户的,而root用户几乎不受限制。因此,接下来所将的有关权限的知识主要是针对普通用户的。这时候你可能会说,那么我一直都用root用户的话,不就不需要学习权限方面的知识了吗?答案显而易见是错误的。

        因为root用户基本不受权限的限制,这样在使用的阶段就很容易出错。很有可能误删系统文件导致linux无法使用,或者破坏文件导致写好的程序影响用户的正常使用。总之,无论如何我们都应该了解Linux权限,平常也要使用普通用户操作,方便更好地掌握Linux。

 那么应该怎么切换用户呢?只需要su指令就可以了。

【Linux】——权限详解_第1张图片

        Linux权限的概念也很简单,通俗来说权限就是: 某一件事情是否允许被某个人做。其中,某一件事情就对应Linux中的各种文件,而人就是指使用Linux的用户。权限就是用来约束一个人或者一个群体的。接下来我就讲从用户属性文件属性两方面谈一谈Linux权限。

Linux权限管理

文件访问者的分类

正如上文所说,权限是用来约束用户对文件的操作。那么肯定不能一下子约束所有人,或者一个人一个人地约束,因此就需要将用户分成下面三类:

  • 文件和文件目录的所有者: u---owner
  • 文件和文件目录的所有者所在的组的用户: g---Group
  • 其它用户: o---Others (除去u和g的其他人都算其他用户)

文件类型(事物属性)

文件可以分为下面几种类型:

  • d:目录
  • -:普通文件
  • l:软链接(类似Windows的快捷方式)
  • b:块设备文件(例如硬盘、光驱等)
  • p:管道文件
  • c:字符设备文件(例如屏幕等串口设备)
  • s:套接口文件

其中最常见的就是目录和普通文件。

基本权限

  • 读(r): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  • 写(w): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
  • 执行(x):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  • “—”表示不具有该项权限

现在我们就可以读懂ls查看文件时显示的信息了。

【Linux】——权限详解_第2张图片

同时注意权限的具体到每个成员:

【Linux】——权限详解_第3张图片

文件权限值的表示方法 

a.字符表示法

【Linux】——权限详解_第4张图片

b.8进制表示法

因为对于权限来说只存在有和没有两种状态,所以可以用二进制表示是否有某一个权限。有该权限用1表示,无该权限用0表示,因此三个权限合在一个就可以用八进制表示了。

【Linux】——权限详解_第5张图片

文件访问权限的相关设置方法

在了解权限是什么之后,接下来我开始讲解权限是怎么使用的。

如何改变文件的访问权限

语法: chmod 选项 权限 文件名或目录名
功能: 设置文件的访问权限。
常用选项: -R 递归修改目录文件的权限。

chmod指令权限值的格式:
格式一: 用户符号 +/-/= 权限字符
1)+:向权限范围增加权限代号所表示的权限。
2)-:向权限范围取消权限代号所表示的权限。
3)=:向权限范围赋予权限代号所表示的权限。
用户符号:
1)u:拥有者。
2)g:所属组。
3)o:other。
4)a:所有用户。

【Linux】——权限详解_第6张图片

可以同时设置不同类用户的访问权限,只需要用逗号隔开。 

【Linux】——权限详解_第7张图片

如何改变文件的拥有者

语法: chown 选项 用户名 文件名或目录名
功能: 修改文件的拥有者。
常用选项: -R 递归修改目录文件的拥有者。 

注意: 修改文件的拥有者需要root用户进行操作,若是普通用户则需要进行权限提升。

也可以使用chown指令同时修改文件的拥有者和所属组,将拥有者和所属组的用户名用冒号隔开即可。

【Linux】——权限详解_第8张图片

如何改变文件的所属组

语法: chgrp 选项 用户名 文件名或目录名
功能: 修改文件的所属组。
常用选项: -R 递归修改目录文件的所属组。

如何修改文件的掩码

我们查看新建的文件和目录,它们都有自己默认的权限。

【Linux】——权限详解_第9张图片

实际上,新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,我们这里不必深究,而后面三位就是权限的八进制数值表示方法,我们将其翻译为字符表示方法。

但实际上你会发现,你所创建出来的文件和目录的权限值往往不是我们所翻译出来的值,原因就是创建文件和目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限是:mask&(~umask) 

语法: umask 权限值
功能: 查看或修改文件掩码。

我们可以通过指令umask查看文件默认掩码。

因此我们实际创建出来的文件和目录的权限值还需要进行进一步换算才能得出。首先我们将掩码的的后三位八进制换算为二进制,然后对其进行按位取反。然后将之前的新建文件的默认权限值和新建目录的默认权限值分别与其进行按位与操作,得到的就是我们创建出来的文件和目录的权限值。

【Linux】——权限详解_第10张图片

粘滞位

粘滞位的引入

现在我已经讲解完了Linux权限的基本知识,于是我们开始运用权限来管理系统了。首先,root用户创建了一个tmp目录,提供给其他的普通用户创建临时文件,但使用了一段时间之后却出现了一些问题,Linux权限似乎存在一些不合理的地方:

【Linux】——权限详解_第11张图片

【Linux】——权限详解_第12张图片

【Linux】——权限详解_第13张图片  是什么原因导致的以上情况呢?

因为hrimkn起初创建的两个文件都是在My_tmp目录中,用户Dcccn虽然没有这两个文件的写和执行权限,但是却有My_tmp目录文件的所有权限,因此Dcccn可以随意删除hrimkn的文件。这种情况不就违反了Linux权限的初衷了吗?因此,便有了粘滞位的概念。

 粘滞位的使用

语法: chmod +t 目录名
功能: 给目录加上粘滞位。

当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符“t”。

【Linux】——权限详解_第14张图片

【Linux】——权限详解_第15张图片 注意:因为矛盾是由目录文件权限产生的,所有粘滞位只能加给目录文件,与普通文件没有关系。

当一个目录被设置为粘滞位,则该目录下的文件只能由:
1)超级用户删除。
2)该目录的拥有者删除。
3)该文件的拥有者删除。

注意: 虽然目录被加上了粘滞位,但如果用户有该目录的可写权限,则不影响其在该目录下创建文件

你可能感兴趣的:(Linux,linux,学习,c++)