写点什么

Java 培训 | 详解 Linux 中的权限,这一篇就够了

作者:@零度
  • 2022 年 7 月 01 日
  • 本文字数:2106 字

    阅读完需:约 7 分钟

 用户

在 linux 中不同的用户对应不同的权限,默认有两类用户:root 用户和普通用户

  • root(超级用户): 在 Linux 系统下可以做任何事,几乎不受限制

  • 普通用户: 只能做权限内的事,所以我们时常会 permission denied,就是因为权限不够,需要 sudo 短暂提升权限

普通用户执行 su 指令可以切换为 root 用户,执行 sudo 指令则短暂提升权限,以 root 的身份执行 sudo 后的指令



linux 中的命令提示符:



权限管理

文件本身具有天然的权限属性,读权限、写权限、执行权限

文件按访问者可分为三类:

  1. 拥有者:文件的拥有者 user

  2. 所属组:文件时属于哪个组的 group

  3. 其他用户:other

这里的拥有者,所属组,其他用户是一种角色,而 root 用户、普通用户则是具体的人,就像程序员是一种角色而我们是具体的人

拥有者和其他用户好理解,关于所属组,常用于组内协同,组与组之间互不干扰。拿腾讯的天美和光子来说,这两组是属于竞争关系的,而要在一台服务器上工作开发,就需要两组互不干扰,只能操作组内的文件_java培训



点击并拖拽以移动

​编辑

 

访问权限



点击并拖拽以移动

​编辑

 

以 class 文件为例:这里 king 用户自成一组



点击并拖拽以移动

​编辑

 

linux 中第一位标识文件类型

  • d:目录文件(文件夹)

  • -:普通文件

  • l:软链接(类似 Windows 的快捷方式)

  • b:块设备文件(例如硬盘、光驱等)

  • p:管道文件

  • c:字符设备文件(例如屏幕等串口设备)

  • s:套接口文

第 2-10 位的权限

  • 读:Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限

  • 写:Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限

  • 执行:execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限



点击并拖拽以移动

​编辑

 

字符表示:



点击并拖拽以移动

​编辑

 

八进制表示:



点击并拖拽以移动

​编辑

 

文件权限的设置

chmod 指令

  • 功能:设置文件的访问权限

  • 用法:chmod [参数] [权限] [文件]

只有文件的拥有者和 root 用户才能改变文件的权限

  • u:拥有者

  • g:所属组

  • o:其他用户

  • a:所有用户



点击并拖拽以移动

​编辑

 

chmod u-rwx 文件名 #去掉文件拥有者的所有权限

chmod g-rwx 文件名 #去掉文件所属组的所有权限

chmod o-rwx 文件名 #去掉文件其他用户的所有权限

chmod a+r 文件名 #增加所有用户的读权限

chmod a+rwx 文件名 #增加所有用户的读写执行权限

chmod u-x,g+x 文件名 #去掉拥有者的执行权限,增加所属组的读权限

增加 class 文件拥有者 u 的执行权限,去掉所属组 g 的写权限



点击并拖拽以移动

​编辑

 

同时可以用八进制也可以更改相应的权限,将 class 文件全都改为可读可写不可执行



点击并拖拽以移动

​编辑

 

我们也可以更改文件的拥有者和所属组,这里不需要更改其他用户,因为文件拥有者和所属组的改变就会改变其他用户

chown 指令

  • 功能:更改文件拥有者

  • 用法:chown [用户名] [文件名]



点击并拖拽以移动

​编辑

 

chgrp 指令

  • 功能:更改文件所属组

  • 用法:chgrp [所属组名] [文件名]

这里同样需要 sudo



点击并拖拽以移动

​编辑

 

拥有者和所属组一起修改,中间加冒号:



点击并拖拽以移动

​编辑

 

默认权限

我们可以发现,两个普通文件访问权限都是一样的,两个目录文件的访问权限也是一样的



点击并拖拽以移动

​编辑

 

在 linux 中,文件的起始权限:

  • 普通文件:0666(起始权限)

  • 目录文件:0777(起始权限)

但实际上我们上面看到的文件权限不是这个值,普通文件的权限是 0664,目录文件的权限是 0775,这是因为创建文件或目录时还要受 umask 的影响

umask 指令

功能:查看或修改文件的掩码

[king@VM-12-11-centos class]$ umask #普通用户的权限掩码为 0002

0002

权限掩码为 1 对应的起始权限就要变为 0



点击并拖拽以移动

​编辑

 

umask 还可以更改掩码

[king@VM-12-11-centos ~]$ umask 0003

[king@VM-12-11-centos ~]$ umask #设置后仅本次登录有效

0003

目录的权限

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

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

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

这里的可执行权限也是常见的考点,进入目录需要的是可执行权限



点击并拖拽以移动

​编辑

 

粘滞位

那么问题来了,对一个目录的拥有者而言,允许其他用户在目录内创建修改文件,就需要该目录具有写权限 ,而一旦其他用户具有目录的写权限,就可以随意删除目录内的文件,不论该用户是否具有文件的写权限



点击并拖拽以移动

​编辑

 

针对这样的问题 linux 引入了粘滞位

chmod o+t [目录]

允许 other 在目录下创建文件,所以目录对 other 要有 w 权限,但不允许 other 删除其他目录,所以需要对目录增加限制,加粘滞位



点击并拖拽以移动

​编辑

 

当一个目录被设置粘滞位后该目录下的文件只能由:

  • root 用户删除

  • 该文件的拥有者删除

  • 目录的拥有者删除

例如我们 linux 系统下,/目录下的 tmp 目录就设置了粘滞位,用来存放多用户的临时文件,用户可以更改自己的临时文件,而无法更改其他用户的临时文件



点击并拖拽以移动

​编辑

 

权限总结

1、目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目录, 即使目录仍然有-r 读权限。

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

2、对于一个目录:读权限:查看目录,写权限:在目录下创建删除文件,执行权限:进入目录

3、权限约束的是人,决定一件事是否允许被特定的人做

4、在设置粘滞位的目录下,其他用户可以创建文件,但不能删除别人的文件

文章来源于 Java 知音

用户头像

@零度

关注

关注尚硅谷,轻松学IT 2021.11.23 加入

IT培训 www.atguigu.com

评论

发布
暂无评论
Java培训 | 详解 Linux 中的权限,这一篇就够了_Linux_@零度_InfoQ写作社区