文章目录
- 总述
- Linux权限的概念
- Linux 权限管理
- Linux对文件访问者的分类
- 文件类型和访问权限
- a.文件类型
- b.基本权限
- 文件权限修改的相关方法
- 其他问题
- 在首次创建时文件的权限属性是固定的吗?
- 目录的权限
- 粘滞位
总述
本篇博客将主要讲解linux系统中权限的概念,权限的表示形式以及如何管理权限。
Linux权限的概念
Linux用户可以分为两种用户:超级用户(root),普通用户
- 超级用户:可以在linux系统下做任何事件,基本没有任何限制
- 普通用户:受到权限的限制
通过su
命令可以实现用户之间的切换。
命令: su [用户名]
假如从root账户转换为用户user只需要输入
su user
即可,而若要从普通用户切换到root账户只需要输入su
即可,不需要输入其他东西
这里大家会发现,从root转换为普通用户不需要输入密码,而从普通用户转换为root用户不需要输入密码。
(输入密码的过程不会回显,只需要全部输完按下回车即可)
Linux 权限管理
在Linux下,一切皆为文件,所以对文件操作的权限管理是非常重要的一部分。
那么什么是权限呢?
- 权限认证的是“身份”(也就是和此时要使用这个文件的人的身份)
- 权限也跟“事物的属性”有关
对于一个文件来说,权限有是否能被读,是否能被写(修改),是否能被执行
Linux对文件访问者的分类
- 该文件或者目录的创建者(所有者)u – (user)
- 该文件或目录的所属组 g – (group)
- 其他人 o – (other)
文件类型和访问权限
我们可以用指令ll
来看文件的属性,如下:
这里的每一类都代表了一种文件属性:
如上所示,第一行的第一个字母代表的是文件属性,也就是说在linux系统中后缀名对文件类型的意义不大,下面是一些常见的文件类型:
a.文件类型
d ~~文件夹
- ~~ 普通文件
l ~~ 软链接(类似于Windows的快捷方式)
b ~~ 块设备文件(例如键盘,光驱等)
p ~~管道文件
c ~~字符设备文件(例如屏幕等串口设备)
s ~~套接口文件
b.基本权限
读(r): 具有读取文件内容的权限
写(w) : 具有修改文件内容的权限
执行(x) : execute 具有执行文件的权限
- : 代表不具备该权限
也就是说,在文件类型之后的9个字符就是代表各种用户的权限,从左到右三三为一组,分别是对于所有者(u),所属组(g),其他人(o)对该文件所拥有的权限
例如:
-rw-rw-r--
就表示
- 对于所有者来说拥有对该文件的读和写权限
- 对于所属组来说具有对该文件的读和写权限
- 对于其他人来说只右对该文件的读权限
同时,文件权限值不仅可以用字符表示,也可以用八进制表示,也就是说一个八进制数代表对于一种用户是否有读,写和执行权限,同样举个例子:
例如:
drwxrwxr-x
这段权限,我们可以先用二进制位表示每个位置是否有对应权限,
所以上面的权限就相当与 111 111 101,三三为一组转换为八进制数字就是775
文件权限修改的相关方法
既然我们已经初步理解了文件权限,那么当然要知道如何修改文件权限了!
在Linux系统中,修改文件权限同样也是用指令进行的。
chmod
功能: 设置文件的访问属性
格式:chmod [参数] 权限 文件名
常用选项:
R : 递归修改目录文件的文件属性
注意:只有用户的所有者和root用户才有权利修改文件的权限
使用格式:
+: 对权限范围增加权限代号所表示的权限
-:对权限范围减去权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户分类:
- u:所有者用户
- g:所属组用户
- o:其他用户
示例:(同时处理多种用户对该文件的权限,需要用逗号隔开)
另外,我们刚才说了文件权限可以用八进制数字表示,因此我们也可以使用八进制数字来进行权限的数字。
例如: 662转换为权限表示就是:rw-rw–w-,因此用662去设置权限就可以成功修改。
可以看到,结果确实如我们所预测的那样。
当然,不仅可以修改文档权限,同时也可以修改文件的拥有者和所属组。
chown(修改文件所有者):
只能使用root超级用户来进行修改,这是系统的规定!
格式: chown [参数] 用户名 文件名
例如:chown user1 f1
chgrp(修改文件或目录的所属组)
chgrp [参数] 用户组名 文件名
-R 递归修改文件或目录的所属组
其他问题
关于权限的知识讲到这里就有一个大致了解了,但还剩下一些小细节,接下来的篇章将为大家讲述一下这些小细节。
在首次创建时文件的权限属性是固定的吗?
经过实际操作之后,答案是确实是固定的,在centos7.x下,根据我们刚才对权限的理解,默认新创建出来的文件权限属性是664,而默认新创建出来的目录属性是775,为什么呢?
这里就要首先说明一下,linux下默认给普通文件的起始权限是666,而给目录文件的起始权限是777。
那为什么实际创建出来的文件和目录,权限不是上面那个值呢?原因就是创建文件或目录的时候还要受到umask(权限掩码)的影响,假设默认权限是mask,则创建出来的文件权限是:mask&(~umask)
注意,这里的&和~是位操作
**权限掩码:**由三个八进制位组成,分别代表三个身份的权限掩码,凡是在umask中出现的权限,不会在最终生成的文件权限中出现。
一般,默认的权限掩码是 0002(这里第一个0可以看作是表示后面三个位是八进制位)
因此,666&( ~002 )就得到了664
777&(~002)就得到了775,这就是新创建的文件和目录默认权限产生的由来。
另外,权限掩码是可以进行修改的。
umask 权限值
即可修改权限掩码,例如nmask 755
,将权限掩码修改成755.
目录的权限
另外一个问题就是,普通文件的可读和可写,可执行功能我们很好理解,那目录的r,w,x又该如何理解呢?
下面我们进行解释:
- 可执行权限:如果目录没有可执行权限,则无法进入目录(无法cd)
- 可读权限:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容
- 可写权限: 如果目录没有可写权限,则无法在目录中创建目录,也无法在目录中删除目录
粘滞位
这里有一个场景,假设张三和李四共享了一个目录,而他们两个人都对目录具有写权限,那么如果李四想要删除张三 在这个文件夹内创建的文件,是否可行呢?
答案是可行!,这是由于文件夹内的文件是否能被删除是根据用户是否具有存放该文件的目录的写权限来决定的,就算该用户对这一文件没有写权限也可以,那么大家想想,这是不是非常的不合理呢?
那么,有没有办法做到在共享文件夹内各个用户只能删除自己创建的文件,而不能删除其他用户创建的文件呢?
这时,粘滞位就闪亮登场了!
通过使用 命令 chmod o+t 目录名
,就可以对该目录添加粘滞位,就可以完美满足上面的需求了。
创建粘滞位之后,会发现目录权限属性中的x变成了t,说明t是一种特殊的x权限。
对于被设置成粘滞位的目录,该目录下的文件只能由
- 超级管理员删除(root)
- 该文件的所有者删除
以上就是关于权限的全部内容啦!如果还有哪里有不懂的,或者对博主写的哪些地方有不同看法,觉得博主所写有误的化,欢迎大家提出哦,我们可以一起探讨!