一、Linux权限的概念
1.1 什么是权限
在现实生活中,我们随处可见权限的影子,比如:你最近想看一部电影,但是却需要vip;你要进入小区的大门就需要刷门禁等等。总结起来就是通过一定的条件,拦住一部分人,给另一部分人权力,来访问某种资源。 权限就像一把钥匙,不同的钥匙可以打开不同的门。在计算机里,权限就是确定谁能做什么的规则。比如,有些人可以读取文件但不能修改,有些人可以修改文件但不能删除。通过权限设置,可以控制谁可以进入哪些房间,谁可以做什么事情,从而保护系统的安全和隐私。
1.2 权限的本质
通过权限的概念我们知道了权限一定和**人**有关。 那我今天想去爱奇艺上刷会儿题,还想去LeetCode上看会儿电影,却发现既刷不了题也看不了电影,你很不理解,我可是超级vip啊,为什么干不了这些事。这时爱奇艺和LeetCode也懵了,爱奇艺说我只有看电影的功能,没有刷题的功能;LeetCode也说我只有刷题的功能,没有看电影的功能,你小子不会是走错片场了吧。所以说,权限还和**事物的属性**有关。 我们在仔细想一下,你能去爱奇艺上看电影,是因为你叫小明还是因为你是vip用户啊;你能进去一家公司,是因为你叫小李吗?当然不是,是因为你是这家公司的员工你才能进去啊。所以,在“**人**”这个概念中我们又可以提出**角色**的概念。 总结起来就是,权限 = 人(角色) + 事物的属性。
1.3 Linux中的用户
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以再linux系统下做任何事情,不受权限的限制。
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令: su [用户名]。
功能:切换用户。
**例如,要从root用户切换到普通用户user,则使用 su user 或 su - user。**
**要从普通用户user切换到root用户则使用 su root(root可以省略)或 su -,此时系统会提示输入root用户的口令。**
- su:
su
命令用于切换到其他用户的身份,但不改变环境变量。当使用su
命令时,只切换用户身份,当前用户的环境变量、工作目录等信息都会保持不变。- **su -**:
su -
命令也用于切换到其他用户的身份,但会同时切换到目标用户的环境变量。使用su -
命令时,会将目标用户的环境变量、工作目录等信息全部加载,使得当前用户完全切换到目标用户的环境中。
二、Linux权限管理
2.1 文件访问者的分类(人)
- 文件和文件目录的拥有者:** u---User**
- 文件和文件目录的拥有者所在的组的用户:** g---Group**
- 其它用户: **o---Others **
Linux中具有组的概念,主要是在多人协作的时候更好的进行权限管理。
2.2 文件类型和访问权限(事物属性)
- 权限的前3位:文件拥有者的权限。
- 权限的中间3位:文件所属组的权限。
- 权限的后3位:其他用户的权限。
2.2.1 文件类型
- d:目录文件
- -:普通文件(文本文件、可执行程序、库等)
- l:链接文件(类似Windows的快捷方式)
- s:套接口文件
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
2.2.2 基本权限
- 读(r): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
- 写(w): Write对文件而言,具有修改文件内容的权限;对目录来说,具有删除移动目录内文件的权限。
- 执行(x): execute对文件而言,具有执行文件的权限(能执行 = 具有可执行权限 + 本身就是一个可执行文件);对目录来说,具有进入目录的权限。
- “—”:表示不具有该项权限。
2.3 文件权限值的表示方法、
2.3.1 字符表示方法
2.3.2 8进制数值表示方法
2.4 文件访问权限的相关设置方法
2.4.1 chmod
功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名(chmod u+-rwx,g+-rwx,o+-rwx,a+-rwx filename)
常用选项:
- R -> 递归修改目录文件的权限
- 说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式:
🌴用户表示符 +/-/= 权限字符
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
用户符号:
- u:拥有者
- g:所属组
- o:其它用户
- a:所有用户
实例:
🌴三位8进制数字
实例:
2.4.2 chown
功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名
实例:
2.4.3 chgrp
功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名常用选项:
- -R 递归修改文件或目录的所属组
实例:
🌵如果想同时修改文件或目录的拥有者与所属组:****chown name1:name2 filename
2.4.4 umask
功能:
- 查看或修改文件掩码。
- 创建的普通文件,起始权限是:0666,去掉x的。
- 创建的目录文件,起始权限是:0777,包含x的。
- 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: *mask & ~umask(***最终权限 = 起始权限 & (~umask)**)
格式: umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
实例:
2.4.5 file指令
功能:辨识文件类型。
语法: file [选项] 文件或目录...
常用选项:
- -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
- -z 尝试去解读压缩文件的内容。
使用 sudo分配权限
- 修改/etc/sudoers 文件分配文件
# chmod 740 /etc/sudoers # vi /etc/sudoer
格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令
- 使用 sudo 调用授权的命令
$ sudo –u 用户名 命令
例:
$ sudo -u root /usr/sbin/useradd u2
2.5 对比权限的有无表现
🌻对于普通用户,自身要受到对应权限的约束,即便这个文件是自己的。
🌻对于root,不受权限的约束。
总结:
- 权限存在的意义:保证普通用户文件的安全性。
- Linux进行权限匹配时,对用户身份进行识别 ,只识别一次。
三、目录的权限
- 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中。
- 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容。
- 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件,、修改文件,也无法在目录中删除文件。
于是, 问题来了~~
换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。
这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉? 我们用下面的过程印证一下:
为了解决这个不科学的问题, Linux引入了粘滞位的概念:
粘滞位
当一个目录被设置为"粘滞位"(chmod +t),则该目录下的文件只能由:
- 超级管理员删除
- 该目录的所有者删除
- 该文件的所有者删除
四、权限总结
- 目录的可执行权限表示你是否可以在目录下执行命令。
- 如果目录没有 -x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目录,即使目录仍然有 -r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)。
- 而如果目录具有 -x 权限,但没有 -r 权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
版权归原作者 南风与鱼 所有, 如有侵权,请联系我们删除。