Linux 权限理解和学习

简介: 权限,是生活中必不可缺的一部分,比如某某小区的门禁制度、某某影视平台的VIP、某扣空间的黄钻等等,这些都是权限,是区分用户群体的重要方式。Linux 中也需要权限,否则这么大的一个平台就无法规范管理,Linux 中的权限主要是针对文件,比如文件权限与目录权限,下面跟着我一起来进行权限的相关学习吧。

✨个人主页: Yohifo

🎉所属专栏: Linux学习之旅

🎊每篇一句: 图片来源

🎃操作环境: CentOS 7.6 阿里云远程服务器

Don’t argue with the people of strong determination, because they may change the fact.

别和意志坚决的人争论,因为他们可能将改变现实。


📘前言


权限,是生活中必不可缺的一部分,比如某某小区的门禁制度、某某影视平台的VIP、某扣空间的黄钻等等,这些都是权限,是区分用户群体的重要方式。Linux 中也需要权限,否则这么大的一个平台就无法规范管理,Linux 中的权限主要是针对文件,比如文件权限与目录权限,下面跟着我一起来进行权限的相关学习吧。


1777e537deaf4e53abedb01524205df.png


📘正文


要想理解Linux中的权限,就得先认识认识什么叫shell


📖理解 shell


shell 是包裹在 Linux 内核 kernel 之外的外壳层,因此又称 shell外壳 ,平常我们输入的命令行操作,都是在 shell 外壳上进行的,因为 kernel 内核是不能直接访问的,需要借助 shell 这个中间件,图示如下:

3fb7a3e62455cb41ae7649c857f211b.png

上面是 shell 的理性理解,比较真实,也比较晦涩,下面来说说 shell 的感性理解


假设小明是村长家的儿子,喜欢隔壁的小美

小美是小明家的邻居,从小跟小明一起长大

小王是小明的同学,同时也是小明的竞争对手

王婆是村子里有名的媒婆,有很多实习生跟着王婆学习

8c379cd628d90a73b4f92e7bac92de6.png

场景一、小明托王婆帮他去说媒,王婆派出实习生A去干事,小美同意,指令执行成功,皆大欢喜


场景二、小明托王婆帮他去说媒,但是此时小美已经和小王在一起了,王婆知道事不能成,于是指令执行失败,并反馈 Permission denied(权限拒绝)


场景三、小明非常喜欢小美,但是现在别人已经有对象了,于是他打算求助他的村长爸爸,在村长的要求下,王婆不得不派出实习生A去办事


情况一:小美恰好和小王吵架分手,于是小美接受了小明,指令执行成功

情况二:实习生A被别人暴打一顿,指令执行失败,但王婆并不受影响

情况三:在“超能力”的作用下,小王和小美被拆散,但小美很伤心,整个村子被闹糟糕,指令执行成功,但是环境遭到破坏,可能产生意想不到的后果

上面这个故事中,小明代表用户,他的需求就是输入的指令;村长是超级用户 root ;小美是操作系统,是用户的操作对象;小王是可能存在的权限限制;王婆则是shell外壳,她的实习生是 Linux 中的子进程。而几种场景分别对应着以下几种情况:


权限足够

权限不足

超级用户(root) 下畅通无阻

总结:在Linux中,用户是通过 shell 外壳来与操作系统打交道的, shell 会帮忙进行命令行床传递和返回结果,同时 shell 会创建子进程来执行操作。在 CentOS 中,命令行解释器是 bash ,归属于 shell


📃shell的作用


帮忙进行命令行传递和返回结果

保护操作系统

执行命令时,创建子进程来进行执行

基于shell的交互辅助之下,产生了各种各样的权限概念


📖权限


权限是用来限制人的,因为事物可能天然缺失某种属性,所以权限存在的前提是有人进行相关操作


结论:权限 = 人 + 事物属性


📃用户分类


Linux 中存在两种用户,一种是权限非常高的超级用户(root),另一种是由超级用户创建的普通用户


超级用户(root) 是最根本的用户,本质上是整个系统的直接管理员,权限很高

普通用户 除了超级用户外的用户,普通用户能进行大部分系统操作,但在涉及核心部分时,是没有权限的


d2282ed82b987cf2bfb6a55a58aff11.png

注意: 超级用户几乎能在系统中畅通无助,因此在进行操作时需要特别注意


📃用户切换


Linux 支持在不同的用户之间进行切换,当然也支持切换到超级用户


语法:su [选项] [用户名]


su - root 切换至超级用户的家目录中,并显示最近登录信息

功能:切换至指定用户

说明:su 在不加用户名的情况下,默认切换为超级用户


5b22b741e2cd4759a779c499b3ccb52b.gif


📖文件权限


Linux 中一切皆文件,对文件进行相关设置,就能实现权限划分的效果

aebe511b4551fa38c2d1c9ec75b5e38.png



📃文件分类


Linux中有各种各样的文件,当我们选择查看文件详细信息时,第一行就表示此文件的类型,比如上图中的 - 表示这是一个普通文件

部分文件分类如下:


- 普通文件,比如文本文件、可执行文件、归档文件(压缩包)等等

d 目录

b 块设备(block),比如磁盘文件

c 字符设备,比如键盘和显示器

p 管道文件

s 网络(socket)文件

l 链接文件(link)

现在我们最常见的就是普通文件和目录文件,其他类型的文件需要到后期才会接触


注意: 对于 Linux 来说,文件分类是由其详细信息中的第一个字符决定的,与文件后缀没有关系。比如创建文件为 test ,一样可以往里面写入文本信息


文件后缀存在的意义


可以给用户看,更符合使用习惯,Windows判断文件类型靠的是后缀

部分运行在Linux中的软件,需要借助文件后缀判断类型,比如 gcc

488c9d6e2f9960568b9d48393cd712c.png


📃权限设置


Linux 中共有三种权限:读 r、写 w、执行 x


r 读权限,能够查看文件相关信息

w 写权限,能够对文件进行信息写入,改变文件内容

x 执行权限,能够进入目录,执行生成的程序等

- 表示此处无权限

比如上图中的 a.out 文件,权限依次为:读写执行、读写执行、读无执行,三组权限对应者不同的角色


三种权限各司,如果在缺失权限的情况下进行操作,那么就会 Permission denied(权限拒绝)

67b46d75caadec811e1025bf0eb7285.png


📃角色划分


在Linux 中,除了对用户分类,还对各种角色进行分类


文件拥有者 文件的创造者,理应拥有所有权限

文件所属组 文件所属组群,一般来说,文件所属组与文件拥有者是同一个人,当然可改变,权限也都有

Other 其它人,除了上面两类人外的所有人都可以看作 Other ,相当于访客,权限是比较少的一般只有 读 r 权限

95d149226e8e52d52f25cce7e7f5ee8.png

显然,之前在权限设置时出现的三组权限,分别对应这三个角色


用户与角色并不冲突,普通用户可以有很多个,不同的用户可以对应扮演不同的角色


注意: 超级用户不受这些角色权限的限制,默认拥有所有权限,由此可见,root is God,在执行某些操作时,如果权限不够,可以通过 sudo 指令进行提权,相当于单次授权完成此操作(sudo 指令需要提前进行配置)


📃权限更改


普通用户在自己家中几乎是不受限制的,毕竟是自己家(Linux 默认不支持普通用户相互访问其空间),因此用户可以对指定文件进行权限设置,需要借助指令 chmod


语法:chmod u/g/o/a +/- r/w/x [文件]

功能:给指定文件进行权限设置

说明:u 为拥有者,g 为所属组,o 为Other,a 表示所有角色,而 +和- 表示添加或减少权限,可通过 , 号进行多组设置

c9bb46c65b9a4955b2edb04651343225.gif


注意: 除了直接 + - 权限外,还可以通过八进制数字改变权限,比如 chmod 000 test.txt 可以将 test 文件中所有角色的权限清零


下图中,1表示有权限,0表示无权限

6d1136819537ff8dac39fd49a2b28f9.png


📃文件查看


有个命令可以查看文件的类型及更多信息,使我们能够更清楚文件类型


语法:file [文件]

功能:查看文件类型信息

说明:当输入指令后,会输出对应类型的英文说明


38548355b9e84cecbbd1f7139d8774e2.gif


📖目录权限


目录也有权限,不过与文件略有差异,因为目录和文件有区别


📃基础权限


目录的基础权限也是 读 r、写 w、执行 x


r 读权限,查看当前目录下的文件名和文件属性

w 写权限,在当前目录下创建新文件

x 执行权限,能够进入目录

- 表示此处无权限

示例:

e0ba24e56ec14a69278c3d838aea59c.png


📃默认权限


无论是创建文件还是创建目录,系统都会分配默认权限


文件


文件的默认权限为 664 即 rw-rw-r--

因为一般文件都是不需要执行的,所以所有角色都没有分配可执行权限,而且为了保证文件的安全性,没有给 Other 改变(写入)文件的权限

目录


目录默认权限为 775 即 rwxrwxr-x

前面说过,没有可执行权限是无法进入目录的,因此此时系统只是没有给 Other 写入文件的权限

📃权限掩码


其实所有文件一开始权限都是放开的,即 666 ,而目录文件起始权限为 777 。这时称为起始文件,为了更好的控制文件权限,系统通过 权限掩码(umask) 来取消部分角色的权限,比如 Other 的写入权限,取消后就是默认权限


在CentOS 7.6中,权限掩码为 0002 ,平台不同,权限掩码可能存在差异


默认权限的计算方式


默认权限 = 起始权限 & (~umask)

7962af9c5756042ed7fd8ee1ae0e607.png

目录默认权限的计算也是如此


注意: 可以直接通过 umask 指令查看当前系统的默认掩码值;默认权限的计算,并不是单纯起始权限 - 权限掩码这么简单,需要特别注意是先将掩码按位取反后与上起始权限


📖粘滞位


粘滞位是一个比较特殊的存在,它是为了在某些特定场景下设置的权限


📃诞生背景


在某讯中,有种制度叫 赛马制度 ,就是让组A和组B开发同一个功能,然后择优选取


假设没有设置粘滞位,当组A的小王完成功能设计后,组B的小张虽然不能查看小王的工作内容(因为没有读写权限),但是他可以直接删除小王的工作文件,这很不合理

19684f903fb1a314fb66464b1d856f4.png



于是就有了粘滞位,简单来说可以限制目录,使当前目录下的文件只允许拥有者和超级用户删除


📃使用方式

很简单,创建一个共享目录后,借助超级用户的身份,通过 chmod +t [目录] 的方式,为这个共享目录添加粘滞位就行了,粘滞位添加成功后,该共享目录的Other 可执行权限变为 t


06bb697c6b1624bf743ba69ef7758c3.png

如果想在设有粘滞位的共享目录中删除别人的文件,会发生这样的事:


512c53f554bc8382ae241c3e03d81ee.png

📘总结


以上就是Linux中权限的相关内容了,我们从shell引出权限问题,再到最后的粘滞位保护权限,中间还介绍了如何更改权限及各种角色划分,相信你在看完本文后,一定能收获很多知识


如果你觉得本文写的还不错的话,期待留下一个小小的赞👍,你的支持是我分享的最大动力!


如果本文有不足或错误的地方,随时欢迎指出,我会在第一时间改正


目录
相关文章
|
14天前
|
存储 安全 Linux
|
1月前
|
Linux Shell
Linux系统文件默认权限
Linux系统文件默认权限
|
15天前
|
Linux 数据安全/隐私保护
linux特殊权限!!
本文介绍了Linux系统中的特殊权限,包括suid、sgid和sbit。suid使普通用户在执行特定命令时获得root权限;sgid使用户在创建文件时继承目录的用户组权限;sbit确保用户只能删除自己在共享目录中创建的文件。此外,文章还讲解了chattr和lsattr命令,用于更改和查看文件的扩展属性,以及umask的概念和计算方法,帮助理解文件和目录的默认权限。
32 1
linux特殊权限!!
|
16天前
|
Linux Shell 数据安全/隐私保护
|
1月前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
1月前
|
运维 监控 安全
Linux_权限理解(详细PLUS)
【10月更文挑战第3天】本文介绍了Linux系统中的权限管理基础,包括文件系统对象与权限关联、权限的继承性、字符与数字表示法的解读,以及用户、组与权限的动态交互。详细解析了`chmod`命令的高级用法和权限修改的风险,探讨了SUID、SGID和Sticky Bit等特殊权限的作用机制,并提出了基于角色的权限分配和定期权限审计的最佳实践。
60 11
|
1月前
|
网络协议 Linux
linux学习之套接字通信
Linux中的套接字通信是网络编程的核心,允许多个进程通过网络交换数据。套接字提供跨网络通信能力,涵盖本地进程间通信及远程通信。主要基于TCP和UDP两种模型:TCP面向连接且可靠,适用于文件传输等高可靠性需求;UDP无连接且速度快,适合实时音视频通信等低延迟场景。通过创建、绑定、监听及读写操作,可以在Linux环境下轻松实现这两种通信模型。
35 1
|
1月前
|
Linux 开发工具
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
|
1月前
|
Linux 应用服务中间件 nginx
Linux下权限设置之suid、sgid、sticky
Linux下权限设置之suid、sgid、sticky
|
1月前
|
Linux 数据安全/隐私保护 Windows
Linux_权限理解(详细PLUS
Linux_权限理解(详细PLUS