目录
❤️前言
正文
Linux下的不同用户
Linux的权限管理
文件访问者的分类
文件类型和访问权限
文件访问权限的修改方法
默认权限
目录权限
粘滞位
🍀结语
❤️前言
大家好!今天这篇文章主要是关于Linux操作系统下对于各种权限的理解问题,从这篇文章开始,小狮子算是正式进入关于Linux操作系统的学习啦!
正文
Linux下的不同用户
首先,让我们一起来了解Linux下的不同用户和他们对应的特征。
Linux下共有两种不同的用户,分别是超级用户(root)和普通用户。超级用户在Linux操作系统下几乎可以做任何的事情,不受大部分约束;而普通用户在Linux下只能做一些有限的事。除此之外,超级用户的命令提示符是'#',普通用户的命令提示符是‘$’。
在这两个用户之间有一条相关的指令 su 可以实现用户之间的相互切换。su的用法是 su 用户名,只要我们有对应的口令(密码),我们就能由root用户变成普通用户,由普通用户变成root用户,或是由一个普通用户登录到不同的普通用户。
除此之外,如果我们要以普通用户的身份对某条指令进行权限提高的话,也可以使用sudo指令,具体的使用方式就是 sudo command ,这种方式需要我们将这个普通用户加入到系统的信任白名单中。
Linux的权限管理
在日常生活中,我们也会使用权限这个词来表示某个访问者能做某件事情的程度大小。我们以一个人来代表这个访问者,这个人的权限会与很多东西有关,例如权限会与这个人的具体属性有关,他是谁?他的身份地位是怎样的?
在Linux中就是这样,如果我们要对Linux下的各种文件目录进行不同的操作,就需要各种不同类型和级别的权限。
而首先我们对访问者的属性与权限的关系进行研究,在Linux中区分一个具体的人主要是与这个人的用户名有关,也许他是root用户,也或许他是一个普通用户。之前我们就有说过,普通用户与root用户天生具有不同级别的权限。普通用户受到各种权限问题的限制,而root用户几乎不受到限制。
文件访问者的分类
除了用户的基础属性之外,权限还与他的身份角色有关。举个例子,在现实生活中,我是一名学生,这代表了我的身份能做与学习相关的事情,这层身份下,我不能去代替教师对其他学生进行授课,而我们的老师作为教师有这样的权限和能力去做上课相关的事情。
那么在Linux中,用户的身份角色则是主要区分于此用户与某个具体文件的关系,分别是 owner(拥有者)、group(所属组)、other(其他人),不同的身份具有不同的权限。(当然,root用户是可以无视身份带来的不同权限的)
文件类型和访问权限
我们如何使用某种东西不仅与人的属性有关,也与事物本身的性质有关,映射到权限管理中就是说权限也与文件类型和文件规定的访问权限有关。
在Linux中,我们可以使用 ls 指令对文件进行查看,其中查看文件的具体属性需要用 ls 指令的 -l 选项。如果我们用ls指令显示出文件属性将会是如下的形式:
对应的信息类型是这样的:
现在我们对文件的各个属性进行分别介绍:
文件类型:
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
在Linux操作系统中文件类型没有直接的意义,而是看用户有何需求,从而将文件分为各种不同的文件类型,并让它们拥有对应的功能。
基本权限:
- 读(r):read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
- 写(w):write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限。
- 执行(x):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。
- - 表示不具有该项权限。
在执行 ls -l 指令后所展示的文件信息中,2-10位表示权限,每三位表示一种访问者的权限,由左到右分别代表所有者(owner)、所属组(group)、其他人(other)拥有的权限。三位权限的表示方式相同,从左到右分别关于读、写、执行三个权限,可以标上对应的字母,也可以使用 - 表示没有这种权限。(例如: rwx 表示拥有全部的权限,r-x表示有读和执行的权限,没有写的权限)
除此之外,文件权限值还可以用数字进行表示,对应读、写、执行的顺序,二进制以 0 表示无此权限,以 1 表示有此权限。(例如:111 表示拥有所有权限,000 表示没有权限) 八进制以一个数字表示对应的权限,其值就是以二进制转换而来,7 表示拥有所有权限,6 表示有读写权限。
如果我们想要对文件进行某种操作却没有对应的权限时,会发生如下的现象(例如我没有读文件的权限却想要读此文件):
文件访问权限的修改方法
作为一个文件的拥有者,我们有时需要根据我们的意愿对文件的访问权限进行管理,这时我们就需要使用到一些指令来完成这个目的。(只有文件的的拥有者和root用户才可以改变文件的权限)
1.chmod:
chmod 可以设置文件的访问权限,使用方式是 chmod (选项参数) 权限 文件名 ,其中权限有两种表示方法:
(1)用户表示符+ - =权限字符
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
- u:拥有者
- g:拥有者同组用户
- o:其它用户
- a:所有用户
具体的使用方式例如:
chmod a+r test.txt // 给所有用户加上读权限
chmod u+x test.txt // 给拥有者加上执行权限
(2)三位8进制数字
使用三位8进制数字对权限进行设置,三位数字分别指向拥有者、所属组以及其他人,直接覆盖原有的权限,具体的使用方式如下:
chmod 777 test.txt // 给所有类型的访问者设置为全权限
除此之外,我们还可以改变文件的拥有者身份和所属组,分别使用的是 chown 和 chgrp 这两个指令。(需要root权限)
默认权限
那么当我们知道了关于权限设置的一些知识,也许你会有这样的疑问:当我们刚刚创建出一个文件时,它们的默认权限为什么会是我们所看到的那样?(为什么普通文件的默认权限是664,而目录文件的默认权限是775?)
我们可以输入一个 umask 指令,这个指令能告诉我们当前的权限掩码,也可以在其后面加上权限值以改变当前的权限掩码(超级用户默认掩码值为022,普通用 户默认为002)。
默认权限的生成与umask有关,当我们创建一个文件时,如果是普通文件,它的初始权限是666,而如果它是目录文件,那么它的初始权限是777,这时会发生一次运算,也就是:默认权限 = 初始权限 & (~umask) 。
目录权限
现在我们了解了关于普通文件的权限问题,但是目录文件的各种权限意义似乎不太一样,因为我们无法在目录中直接写入具体的信息或是改变一些内容,而是通过创建、改变目录中的文件来完成对于目录的改动。那么目录中的读、写、执行权限分别代表着什么呢?
r 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容。
w 可写权限: 如果目录没有可写权限, 则无法在目录中对文件进行创建、删除、重命名。
x 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中。
我们可以对其进行理解记忆,例如文件的读权限代表我们是否能够读取文件的各种信息,那么对于目录来说,就相当于是否能够读取目录所含文件的信息。而写权限则是代表我们不能改变目录本身包含的关于目录中文件的信息。
那么也就是说,如果我们拥有一个目录文件的写权限,那么我们就可以不论这个文件的归属就将这个文件删除,这是否有些不合理呢?
粘滞位
在Linux默认的根目录下会存在一个 tmp文件,这个目录是设置出来给所有用户共享的目录,而它的 other 位置上的访问权限似乎与正常情况不太一样,是一个 t 的符号,这个符号表示这个目录被设置了粘滞位,设置了粘滞位的目录中,相对于文件的 other 和 group 访问者不能删除这个文件。
也就是说:当一个目录设置了粘滞位,那么该目录下的文件只能由root用户和该文件所有者才能删除。
粘滞位的设置方式是: chmod +t 目录名
🍀结语
谢谢大家的阅读,同时希望大家阅读了这篇文章之后能有所收获。