从0到1,深刻理解Linux权限

从0到1,深刻理解Linux权限

Linux权限的概念

Linux下有两种用户:超级用户(root)、普通用户

  1. 超级用户:可以再linux系统下做任何事情,不受限制。

  2. 普通用户:在linux下做有限的事情。

  3. 超级用户的命令提示符是“#”,普通用户的命令提示符是"$";

命令:su 或 su -

用来切换超级用户或者普通用户,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令

image-20230522094143705

Linux权限管理

Linux文件访问者

通常来讲,我们将Linux文件的访问者分为三类:

  1. 文件和文件目录的拥有者:u – user
  2. 文件和文件目录的拥有者所在组的用户:g – group
  3. 其他用户:o – others

image-20230522123010509

如果普通用户想要使用root的权限才能做的一些事情,就需要sudo命令,在此之前则需要将普通用户添加到信任白名单里,路径为/etc/sudoers

文件类型和访问权限

文件类型

常见文件类型有以下几种:

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

见一见常见的文件类型:

image-20230522125239517

访问权限

文件权限有三种,

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

表示法通常有两种:

一种是字符直接表示:

image-20230522125812289

另一种是八进制数值来表示:

image-20230522125853087

文件访问权限设置

修改文件权限

chmod

功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:

-R -> 递归修改目录文件的权限

说明:只有文件的拥有者和root才可以改变文件的权限

既然权限的表示法有两种,修改权限的方法也就有两种:

  • 通过字符表示法直接修改:

image-20230522130921444

同时也可以看到,普通文件即使给了可执行权限,你去执行也是没有什么用处的。

  • 通过八进制数值修改

image-20230522131547299

总结:

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

修改文件拥有者

chown

功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名

image-20230522132005465

可以看到,文件修改拥有者必须要root权限才行。

修改所属组

chgrp

功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组

image-20230522132556497

umask掩码

现在文件的权限我们已经明白了,那么现在的问题是,我们创建一个文件,默认的权限是多少,为什么?

image-20230522133002567

创建一个目录和一个普通文件,可以看到,目录文件的默认权限是775,而普通文件是664,为什么呢?

这就是因为umask掩码的存在,

image-20230522133444762

umask默认值是0002,第一个0并不需要注意,只代表是八进制。需要注意的是后面的002,

image-20230522134300449

这就是原因默认权限的由来,通常情况下,我们也不需要改,但是umask是可以改的,而且很简单:

image-20230522134437610

可以看到,将umask值改完后,创建的文件默认权限确实是改变了。

目录权限

目录权限问题

上面已经理解了普通文件的权限,我们还需要将目录的权限单独拎出来理解清楚,两者还是有些区别的:

  1. 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.

  2. 可读权限:如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.

  3. 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.

于是问题来了,如果一个人仅仅是有了目录的写权限,就能将文件随便删除,显然是不合理的,我们也可以验证一下:

image-20230522135605976

可以看到,用户lzb创建的文件竟然被dsb删掉了,我只是想要给你写的权限,但是你不能随便删我的文件吧。为了解决这个不科学的问题,就又引入了粘滞位

粘滞位

chmod+t,就可以给目录加上粘滞位,此时其他人即使有写权限,但是删不掉我的文件。这时候才是科学的现象。

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由:

一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除

image-20230522140150585

权限总结:

对普通文件的就不必多说了,读写可执行,都很好理解,要重点注意的是对目录权限的问题:

  1. 目录的可执行权限是表示你可否在目录下执行命令。

  2. 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)

  3. 如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

猜你喜欢

转载自blog.csdn.net/weixin_73223794/article/details/130806070