权限管理
用户概念
概念
我们知道Linux下有两种用户**:超级用户(root)、普通用户。**
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
用户切换
su root (root可以省略) # 切换root用户,没有开放root用户,则sudo -i
su username # 切换普通用户,username为对应用户名
新建及删除用户
新建用户的命令是:
useradd username
删除用户的命令是:
userdel -r username
为新用户设新密码的命令是:
passwd username
权限概念
文件访问者的分类(人)
在Linux中,文件访问者分成3种:
- 文件和文件目录的所有者:u---User
- 文件和文件目录的所有者所在的组的用户:g---Group
- 其它用户:o---Others
文件类型和访问权限(事物属性)
我们创建一个文件demo1.file和一个目录demo1。
建立一个目录的默认权限是:drwxr-xr-x
建立一个普通文件的默认权限是 :-rw-r--r--
这里的r
,w
,x
分别代表什么意思呢?
r:读(r),Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限 w:写(w),Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限 x:执行(x),execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限 -:表示不具有该项权限
这里我们再普及一下文件有哪些类型:
- d:文件夹
- -:普通文件
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
有了上面的了解后,假如我们想修改文件的权限那应该怎么办呢?这个时候就需要 chmod 这个指令了。
权限操作之chmod
功能: 设置文件的访问权限 格式: chmod [ 参数 ] 权限 文件名
常用选项:
- R -> 递归修改目录文件的权限
- 说明:只有文件的拥有者和root才可以改变文件的权限
chmod 命令权限值的格式:
1. 通过符号修改
chmod [ u / g / o / a ] [ + / - / = ] [ r / w / x ] file
其中 :u表示User,是文件的所有者;g表示跟User同Group的用户;o表示Other,即其他用户;a表示ALL,所有用户。 +表示增加权限;-表示取消权限;=表示取消之前的权限,并给予唯一的权限。 r表示Read,即读文件;w表示Write,即写文件;x表示运行文件。 file表示文件的路径,
用户表示符 +/-= 权限字符
- +: 向权限范围增加权限代号所表示的权限
- -: 向权限范围取消权限代号所表示的权限
- =: 向权限范围赋予权限代号所表示的权限
用户符号
- u :拥有者
- g :拥有者同组用
- o :其它用户
- a :所有用户
添加权限示例:
这样我就修改了该文件拥有者的权限了,至于减去相应的权限就用 - ,组合用的话可以加一个' ,'例如:
2. 通过8进制修改
chmod [xyz] file
通过八进制数字修改权限,其中,x,y,z分别表示数字(最大不超过7),并分别对应User、Group、Other。x,y,z的值由r(r=4),w ( w=2 ),x ( x=1 )来确定。
![image-20240906172614891](/Users/dllcnx/Library/Application Support/typora-user-images/image-20240906172614891.png)
注意: 可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果对符号连接修改权限,其改变会作用在被连接的原始文件。
拥有者之chown与chgrp
chown: 修改文件或目录拥有者或者所属组
chown [user] text.c # 修改text文件拥有者
chown [user:group] text.c #修改text文件拥有者及所属组
chown -R [user:group] [目录] # 递归修改目录及其子目录子文件所有的拥有者及所属组
功能 :修改文件的拥有者 格式 : chown [ 参数 ] 用户名 文件名 常用选项 : -R 递归修改文件或目录的所属组
**chgrp: ** 修改文件或目录所属组
chgrp -R guest /var/tmp/f.txt
功能 :修改文件或目录的所属组 格式 : chgrp [ 参数 ] 用户组名 文件名 常用选项 : -R 递归修改文件或目录的所属组
总结
chown
和chgrp
都是Linux系统中用于管理文件和目录权限的重要命令。chown
能够同时修改文件的所有者和所属组,而chgrp
仅限于修改文件的所属组。
权限扩展
文件掩码
通过上面我们知道:
超级用户建立一个普通文件(不包括可执行文件)的默认权限是 :rw- r-- r-- (644)
而建立一个目录的默认权限是:rwx r-x r-x (755)
那么为什么是这样子的呢?
系统新建文件夹起始权限 =0666 ,新建目录起始权限 =0777 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask 的影响。 而umask就是文件掩码。那最终权限(也就是系统的默认权限)与起始权限和文件掩码有啥关系呢?
最终权限=mask & ~umask
(mask是文件起始权限)
umask
功能:
查看或修改文件掩码
格式: umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022 ,普通用户默认为 0002 。
在超级用户下建立
文件:
110 110 110 (666)
111 101 101 &
------------
110 100 100 (644)
目录:
111 111 111 (777)
111 101 101 &
------------
111 101 101 (755)
假如我们想修改系统默认的文件掩码呢?
可以使用命令:
umask XXX
我们不妨跳转到普通用户下来使用一下:
[grm@VM-8-12-centos ~]$ umask 012
[grm@VM-8-12-centos ~]$ touch tmp.txt
[grm@VM-8-12-centos ~]$ mkdir -p dir
[grm@VM-8-12-centos ~]$ ll
total 4
drwxrw-r-x 2 grm grm 4096 Dec 18 13:24 dir
-rw-rw-r-- 1 grm grm 0 Dec 2 22:30 grmfile
-rw-rw-r-- 1 grm grm 0 Dec 18 13:23 tmp.txt
通过计算我们也能很快速的得到上面的结果。
目录的权限
- 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中。
- 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容。
- 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
其中比较容易出错的就是这个可执行权限了,进入一个目录首先需要的就是可执行权限,这点大家务必要牢记。
粘滞位
于是 , 问题来了? 换句话来讲 , 就是只要用户具有目录的写权限 , 用户就可以删除目录中的文件 , 而不论这个用户是否有这个文件的写权限 . 这好像不太科学啊 , 我张三创建的一个文件 , 凭什么被你李四可以删掉 ? 我们用下面的过程印证一下: 我们用root用户创建一个共享目录(也就是其他用户都能够在里面建立文件的目录)将其权限都打开
然后其他用户以及root就可以往里面添加自己创建的文件了
但是问题来了,如果有一天grm把bxz惹毛了,bxz一气之下就把grm所创建的文件给干掉了,操作系统会同意这样做的吗?
我们发现好像还真的就删除了,这合理吗?还是一个bug?
所以我们就引出了粘滞位的概念:
当一个目录被设置为 " 粘滞位 "( 用chmod +t
), 则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
我们为share目录增加一个粘滞位
我们发现other的最后一位权限由x
变成了t
接下来我们再删除来试试:
很明显该操作现在已经不被允许了。
权限的总结
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
- 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
参考链接:https://blog.csdn.net/m0_68872612/article/details/128150459