文章目录
- 前言
- 一、用户的认识
- 二、权限的概念
- 1.什么是权限
- 1.chmod
- 2.chown
- 3.chgrp
- 4. umask
- 总结
前言
权限是我们学习Linux非常重要的一环,因此要学好Linux,首先要认识什么是权限。权限在我们生活中无处不在,而Linux中的权限也是基于现实演变而来的。下面让我们一起来认识一下权限吧。
一、用户的认识
在学习Linux权限之前,首先我们要对Linux中的用户有一个基本的认识。
Linux中的用户分为两种:
- root用户—超级管理员
- 普通用户—受权限约束的用户
普通用户相信大家都能理解,我们在Linux系统中自己创建的用户就是普通用户,那什么是root用户呢?
root用户是Linux自带的一个用户,是Linux操作系统的超级管理员,如何体现root用户是Linux系统中的超级管理员呢?那就是root用户不受权限限制 。
什么是不受权限限制?
我来打一个简单的比方:
比如我们QQ中的会员功能,在QQ中会员和非会员就拥有不同权限。但是QQ中的会员这种权限,限制的只是我们这些使用者。那你们说老马受会员的限制吗?当然是不受限制。root用户也是如此。因此root用户在Linux系统中可以干任何事,包括可以干掉Linux系统本身。
Linux操作系统有一个重要的特性—一切皆文件
在Linux系统中,系统本身也是一个或者多个文件,要干掉Linux系统很简单,删除那些文件就可以。
到这里我们会发现,root用户无比强大,连系统都可以干掉,还有什么事是root用户不能干的。但是root用户能干所有事,就以为着root用户也十分危险。因此如果大家有一个Linux操作系统,一定要保管好root用户的密码,并且千万注意root用户的密码不要设置成和普通用户的密码一样。建议在平常使用Linux操作系统时,使用普通用户就好。那这里就有人提问了,如果有些操作是普通用户不能执行的怎么办?(因为普通用户受权限约束)
这里我们有两种解决方案:
- 更改普通用户为root用户(不建议使用)
普通用户->root用户 — su / su -(需要输入root用户的密码)
su : 切换时不更改所处路径
su - : 切换时更改到根目录,也就是root用户的家目录
root用户->普通用户 — su + 用户名(不需要输入密码) - 使用sudo命令提权(建议使用)
使用sudo命令提权不是简单使用就可以,因为sudo这个命令提权可以执行所有命令,也就是说普通用户执行命令时使用sudo提权,就相当于使用root用户。因此sudo这个命令也十分危险,那么我们要使用sudo这个命令就需要让系统相信我们是可以信任的,这里要进行的操作是配置/etc/sudoers 这个文件,将我们的普通用户添加到/etc/sudoers 这个文件里,配置文件需要我们使用vim这个工具,目前我们还没有学习,之后学习了vim这个工具后统一进行讲解。
注:第一次使用sudo命令提权的使用需要输入密码,这个密码是普通用户的密码。很多人会觉得奇怪,为什么要使用普通用户的密码呢?我们不是将我们的命令提权为root执行吗?为什么不是root用户的密码?这里是因为我们所使用的普通用户已经是被系统所信任的了,既然是受信任的人,那就要提供一定程度的方便,因此输入自己的密码就可以。
二、权限的概念
1.什么是权限
字面上理解,权限就是对权力的限制。简单来说,权限就是限制人的一种方式,也就是说,权限是对人的一种约束。
权限还可以理解为,你可以干某事,不可以干某事。
这里就有两个主体。
- 你,也就是人
- 某事
那这里就有一个问题,首先我们来看一下这句话:我在腾讯视频上玩游戏,又或者我在QQ音乐上P图。我们会发现这两句话读起来很怪,很别扭,这是为什么呢?因为腾讯视频上不能玩游戏,QQ音乐上不能P图,这就有一个问题,当我们所处的环境,或者所面向的对象不存在或不拥有某项属性时,我们就不能做对应的事。换言之,也就不存在权限这一概念。本来就没有,从何来谈权限。
下面我们正式来认识一下Linux操作系统中的权限。前面我说过一句话:Linux中一切皆文件,所以Linux中的权限就是指文件权限。这里我给大家一个概念就是 文件权限=人+文件属性。文件属性很好理解,就是可读(r)、可写(w)和可执行(x)。那如何来理解这个“人”呢?
这里的人其实说的不是人本身,而是人所处的角色。我们每个人在不同的地方都有不同的角色
当你在家里是,你是父母的孩子,当你在学校是,你是学校的学生等等,这都是我们的角色。而在Linux中,人也有不同的角色。Linux中不同的用户就是不同的人。
Linux中人的角色分为三种:
- 拥有者(owner)
- 所属组(grouper)
- 其他人(other)
当我们创建一个文件时,我们就是这个文件的拥有者。那所属组是什么呢?其他人又是什么呢?
这里首先要提出一个问题,为什么要有所属组这个角色,只有拥有者和其他人不行吗?答案是不行的。
我们来看下面的一个场景。
以公司中开发一个软件举例。假如我们在腾讯中,现在腾讯要开发微信这个软件,公司中有两个团队,团队A和团队B要竞争开发。但是公司又只有一台Linux机器。假如Linux只有拥有者和其他人这两种角色。张三是团队A的一员,李四是团队B中的一员。张三写了一段代码放到一个文件里。李四不可以看这个文件,团队A的其他成员可以看这个文件。在只有两种角色的前提下,我们发现是不能做到的。因为张三是文件的拥有者,而除了拥有者以外的人都是其他人。因此就有了所属组这个角色。张三属于团队A,我们只需要让拥有者和所属组的权限都是可读可写,让其他人的权限是不可读不可写就可以了。
了解了以上内容,我们就可以来看看文件权限了。
[root@VM-8-7-centos 2022_9_28]# ll
total 0
-rw-r--r-- 1 root root 0 Sep 30 22:03 fail.txt
当我们用查看文件的详细信息时,我们看到文件名前面有一大堆内容。其中有些我们是能认识的,比如时间,有些我们不认识。文件=内容+属性,文件名前面的都是文件属性。在这里我们重点看第一部分的内容,也就是那十个字符。
我们把十个字符单独拿出来
- rw-r--r--
这十个字符分为两个部分,第一部分是第一个字符,第二部分是后九个字符
每一部分分别表示什么意思呢?
第一部分也就是第一个字符表示文件类型,Linux下一切皆文件,因此文件也有许多不同的类型,Linux和windows区分文件类型有很大差别。
Linux系统不按照后缀名区分文件,而是以那十个字符中的第一个字符进行区分
- :普通文件(源代码、库文件、可执行程序、压缩包等等)
d :目录文件
c :字符设备文件(键盘、显示器)
b :块文件(磁盘)
l :链接文件(快捷方式)
p :管道文件
s :socket文件 ps:认识就好
第二部分以三个字符为一组可分为三组,前三个字符表示拥有者的权限,中间三个字符表示所属组的权限,最后三个字符表示其他人的权限。
以前三个字符为例
r/- :可读/不可读
w/- :可写/不可写
x/- :可执行/不可执行
每一个字符都有两种状态 r 表示有 - 表示没有
现在我们单独来看拥有者的权限
权限的表示方法有两种:
- 字符表示
- 八进制表示
- 以上就是权限的所有表示方法。认识了权限后,接下来我们来看看如何修改权限
1.chmod
功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令使用的格式
① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:所属组
o:其他人
a:所有用户
# chmod u+w fali.txt
# chmod o-x fail.txt
②三位8进制数字
# chmod 664 fail.txt
# chmod 640 fail.txt
前面我们说过文件权限=人+文件属性,既然文件属性可以修改,那人可不可以修改呢?可以!
2.chown
功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名
# chown user1 fail.txt //修改fail.txt文件的拥有者为user1
3.chgrp
功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
常用选项: -R 递归修改文件或目录的所属组
# chgrp user1 fail.txt //修改fail.txt文件的所属组为user1
这里有一个问题,修改文件的拥有者或者所属组,就相当于将一个东西送给了其他人。张三是一个文件的拥有者,现在要将文件的拥有者改为李四,就相当于将文件送给了李四,那么送东西给别人需不需要别人同意呢?答案是需要的。在Linux中,我们不能随便将一个文件送给别人,而不经过别人的同意。我们要修改文件的拥有者或者所属组,只有一种方式,使用root用户,强制将文件给别人。因此修改文件的拥有者或者所属组时,需要使用sudo提权
最后还有一个知识需要大家了解。我们创建一个文件时,为什么文件的权限就是那个样子的?我们可以修改文件的默认权限吗?
在Linux系统中,新建的文件都有默认权限,这个默认权限我们不可以直接修改,但在Linux中有一个文件掩码,实际上显示出来的文件是由默认权限和文件掩码共同决定的。
4. umask
功能:
查看或修改文件掩码
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
格式: umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
注:这里的数字是以八进制划分的,只需要关注后三位即可
实例:
# umask 755
# umask //查看
# umask 044//设置
总结
以上就是关于Linux权限的基本内容,希望对大家有所帮助。谢谢!