Linux 权限理解和学习
阿里云国际版折扣https://www.yundadi.com |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
✨个人主页 Yohifo
🎉所属专栏 Linux学习之旅
🎊每篇一句 图片来源
🎃操作环境 CentOS 7.6 阿里云远程服务器
- Don’t argue with the people of strong determination, because they may change the fact.
- 别和意志坚决的人争论因为他们可能将改变现实。
文章目录
📘前言
权限是生活中必不可缺的一部分比如某某小区的门禁制度、某某影视平台的VIP、某扣空间的黄钻等等这些都是权限是区分用户群体的重要方式。Linux
中也需要权限否则这么大的一个平台就无法规范管理Linux
中的权限主要是针对文件比如文件权限
与目录权限
下面跟着我一起来进行权限的相关学习吧。
📘正文
要想理解Linux
中的权限就得先认识认识什么叫shell
📖理解 shell
shell
是包裹在 Linux
内核 kernel
之外的外壳层因此又称 shell外壳
平常我们输入的命令行操作都是在 shell
外壳上进行的因为 kernel
内核是不能直接访问的需要借助 shell
这个中间件图示如下
上面是 shell
的理性理解比较真实也比较晦涩下面来说说 shell
的感性理解
- 假设小明是村长家的儿子喜欢隔壁的小美
- 小美是小明家的邻居从小跟小明一起长大
- 小王是小明的同学同时也是小明的竞争对手
- 王婆是村子里有名的媒婆有很多实习生跟着王婆学习
场景一、小明托王婆帮他去说媒王婆派出实习生A去干事小美同意指令执行成功皆大欢喜
场景二、小明托王婆帮他去说媒但是此时小美已经和小王在一起了王婆知道事不能成于是指令执行失败并反馈 Permission denied
权限拒绝
场景三、小明非常喜欢小美但是现在别人已经有对象了于是他打算求助他的村长爸爸在村长的要求下王婆不得不派出实习生A去办事
- 情况一小美恰好和小王吵架分手于是小美接受了小明指令执行成功
- 情况二实习生A被别人暴打一顿指令执行失败但王婆并不受影响
- 情况三在“超能力”的作用下小王和小美被拆散但小美很伤心整个村子被闹糟糕指令执行成功但是环境遭到破坏可能产生意想不到的后果
上面这个故事中小明代表用户他的需求就是输入的指令村长是超级用户 root
小美是操作系统是用户的操作对象小王是可能存在的权限限制王婆则是shell
外壳她的实习生是 Linux
中的子进程。而几种场景分别对应着以下几种情况
- 权限足够
- 权限不足
- 超级用户(root) 下畅通无阻
总结在Linux
中用户是通过 shell
外壳来与操作系统打交道的 shell
会帮忙进行命令行床传递和返回结果同时 shell
会创建子进程来执行操作。在 CentOS
中命令行解释器是 bash
归属于 shell
📃shell的作用
- 帮忙进行命令行传递和返回结果
- 保护操作系统
- 执行命令时创建子进程来进行执行
基于shell
的交互辅助之下产生了各种各样的权限概念
📖权限
权限是用来限制人的因为事物可能天然缺失某种属性所以权限存在的前提是有人进行相关操作
结论权限 = 人 + 事物属性
📃用户分类
Linux
中存在两种用户一种是权限非常高的超级用户root
另一种是由超级用户创建的普通用户
- 超级用户
root
是最根本的用户本质上是整个系统的直接管理员权限很高 - 普通用户 除了超级用户外的用户普通用户能进行大部分系统操作但在涉及核心部分时是没有权限的
注意 超级用户几乎能在系统中畅通无助因此在进行操作时需要特别注意
📃用户切换
Linux
支持在不同的用户之间进行切换当然也支持切换到超级用户
语法
su [选项] [用户名]
su - root
切换至超级用户的家目录中并显示最近登录信息功能切换至指定用户
说明su
在不加用户名的情况下默认切换为超级用户
📖文件权限
Linux
中一切皆文件对文件进行相关设置就能实现权限划分的效果
📃文件分类
Linux
中有各种各样的文件当我们选择查看文件详细信息时第一行就表示此文件的类型比如上图中的 -
表示这是一个普通文件
部分文件分类如下
-
普通文件比如文本文件、可执行文件、归档文件(压缩包)等等d
目录b
块设备(block)比如磁盘文件c
字符设备比如键盘和显示器p
管道文件s
网络(socket)文件l
链接文件(link)
现在我们最常见的就是普通文件和目录文件其他类型的文件需要到后期才会接触
注意 对于 Linux
来说文件分类是由其详细信息中的第一个字符决定的与文件后缀没有关系。比如创建文件为 test 一样可以往里面写入文本信息
文件后缀存在的意义
- 可以给用户看更符合使用习惯Windows判断文件类型靠的是后缀
- 部分运行在
Linux
中的软件需要借助文件后缀判断类型比如gcc
📃权限设置
Linux
中共有三种权限读 r
、写 w
、执行 x
r
读权限能够查看文件相关信息w
写权限能够对文件进行信息写入改变文件内容x
执行权限能够进入目录执行生成的程序等-
表示此处无权限
比如上图中的 a.out
文件权限依次为读写执行、读写执行、读无执行三组权限对应者不同的角色
三种权限各司如果在缺失权限的情况下进行操作那么就会 Permission denied
权限拒绝
📃角色划分
在Linux
中除了对用户分类还对各种角色进行分类
文件拥有者
文件的创造者理应拥有所有权限文件所属组
文件所属组群一般来说文件所属组与文件拥有者是同一个人当然可改变权限也都有Other
其它人除了上面两类人外的所有人都可以看作Other
相当于访客权限是比较少的一般只有读 r
权限
显然之前在权限设置时出现的三组权限分别对应这三个角色
用户与角色并不冲突普通用户可以有很多个不同的用户可以对应扮演不同的角色
注意 超级用户不受这些角色权限的限制默认拥有所有权限由此可见root is God
在执行某些操作时如果权限不够可以通过 sudo
指令进行提权相当于单次授权完成此操作sudo
指令需要提前进行配置
📃权限更改
普通用户在自己家中几乎是不受限制的毕竟是自己家Linux
默认不支持普通用户相互访问其空间因此用户可以对指定文件进行权限设置需要借助指令 chmod
语法
chmod u/g/o/a +/- r/w/x [文件]
功能给指定文件进行权限设置
说明u
为拥有者g
为所属组o
为Othera
表示所有角色而+和-
表示添加或减少权限可通过,
号进行多组设置
注意 除了直接 + - 权限外还可以通过八进制数字改变权限比如 chmod 000 test.txt
可以将 test 文件中所有角色的权限清零
下图中1表示有权限0表示无权限
📃文件查看
有个命令可以查看文件的类型及更多信息使我们能够更清楚文件类型
语法
file [文件]
功能查看文件类型信息
说明当输入指令后会输出对应类型的英文说明
📖目录权限
目录也有权限不过与文件略有差异因为目录和文件有区别
📃基础权限
目录的基础权限也是 读 r
、写 w
、执行 x
r
读权限查看当前目录下的文件名和文件属性w
写权限在当前目录下创建新文件x
执行权限能够进入目录-
表示此处无权限
示例
📃默认权限
无论是创建文件还是创建目录系统都会分配默认权限
文件
- 文件的默认权限为
664
即rw-rw-r--
- 因为一般文件都是不需要执行的所以所有角色都没有分配可执行权限而且为了保证文件的安全性没有给
Other
改变(写入)文件的权限
目录
- 目录默认权限为
775
即rwxrwxr-x
- 前面说过没有可执行权限是无法进入目录的因此此时系统只是没有给
Other
写入文件的权限
📃权限掩码
其实所有文件一开始权限都是放开的即 666
而目录文件起始权限为 777
。这时称为起始文件为了更好的控制文件权限系统通过 权限掩码(umask)
来取消部分角色的权限比如 Other
的写入权限取消后就是默认权限
在CentOS 7.6
中权限掩码为 0002
平台不同权限掩码可能存在差异
默认权限的计算方式
- 默认权限 = 起始权限 & (~
umask
)
目录默认权限的计算也是如此
注意 可以直接通过 umask
指令查看当前系统的默认掩码值默认权限的计算并不是单纯起始权限 - 权限掩码
这么简单需要特别注意是先将掩码按位取反后与上起始权限
📖粘滞位
粘滞位是一个比较特殊的存在它是为了在某些特定场景下设置的权限
📃诞生背景
在某讯中有种制度叫 赛马制度
就是让组A和组B开发同一个功能然后择优选取
假设没有设置粘滞位
当组A的小王完成功能设计后组B的小张虽然不能查看小王的工作内容(因为没有读写权限)但是他可以直接删除小王的工作文件这很不合理
于是就有了粘滞位
简单来说可以限制目录使当前目录下的文件只允许拥有者和超级用户删除
📃使用方式
很简单创建一个共享目录后借助超级用户的身份通过 chmod +t [目录]
的方式为这个共享目录添加粘滞位就行了粘滞位添加成功后该共享目录的Other
可执行权限变为 t
如果想在设有粘滞位的共享目录中删除别人的文件会发生这样的事
📘总结
以上就是Linux
中权限的相关内容了我们从shell
引出权限问题再到最后的粘滞位
保护权限中间还介绍了如何更改权限及各种角色划分相信你在看完本文后一定能收获很多知识
如果你觉得本文写的还不错的话期待留下一个小小的赞👍你的支持是我分享的最大动力
如果本文有不足或错误的地方随时欢迎指出我会在第一时间改正
…
相关文章推荐
听说Linux基础指令很多这里都帮你总结好了
![]()