👦个人主页:Weraphael
✍🏻作者简介:目前正在学习c++和算法
✈️专栏:Linux
🐋 希望大家多多支持,咱一起进步!😁
如果文章有啥瑕疵,希望大佬指点一二
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍
目录
- 一、Linux下用户的分类
- 1.1 用户切换
- 二、用户和用户组
- 2.1 文件拥有者(概念)
- 2.2 用户组(概念)
- 2.3 其他人(概念)
- 三、文件权限
- 3.1 文件属性
- 3.2 修改文件权限
- 3.2.1 数字类型修改文件权限
- 3.2.2 符号类型修改文件权限
- 3.3 修改文件所属组
- 3.4 修改文件拥有者
- 3.5 默认权限
- 3.5.1 权限掩码
- 四、目录权限
- 五、粘滞位
- 5.1 引入
- 5.2 如何设置粘滞位
一、Linux下用户的分类
Linux
下有两种用户:超级用户(root
)、普通用户
- 超级用户:基本不权限的约束。命令提示符是
#
- 普通用户:受权限的约束。命令提示符是
$
1.1 用户切换
- 普通用户 ->超级用户
【命令】
su / su -
【说明】
- 输入的密码是超级用户的密码
- 退回普通用户
exit
or 热键Ctrl + d
- 超级用户 -> 普通用户
【命令】
su 普通用户名
【说明】 不要密码,从这可以看出超级用户基本不权限的约束
- 普通用户 -> 另一个用户
【命令】
su 另一个用户名
【说明】 密码需要输入另一个用户的密码
这里就不为大家演示了
- 对某条指令提权(不用转化
root
)
【命令】
sudo 某条指令
【说明】输入的是普通用户的密码
大家可能会有疑问,我们对指令进行提权,为什么输入的是普通用户的密码?
大家可以先在自己的命令行解释器输入sudo 随便一个指令
,其实目前我们普通用户没办法执行sudo
,因为系统默认不信任你。除非未来将普通用户添加到系统的信任名单里。由于目前知识有限,后期带领大家配置。
二、用户和用户组
2.1 文件拥有者(概念)
初次接触Linux
的同学会觉得很怪异,为什么Linux
会有这么多用户,还分什么用户组?
其实这个“用户与用户组”的功能可是相当健全并且好用的一个安全防护措施。这是因为Linux
是一个多人多任务的系统,因此可能有很多人同时使用同一个服务器来进行开发,这就涉及到每个人的隐私权,有的人不喜欢把自己写的代码给别人看(因为自己写的代码时常会有bug
,就像每个人的内裤一样,有漏洞就不喜欢给别人看),因此文件拥有者的角色就显得相当重要。
2.2 用户组(概念)
用户组是最有用的功能之一,就是当你在团队进行协同开发的时候。举例来说,假设你和你的舍友一起进入到腾讯实习。你在项目A
组,而你的舍友在项目B
组。这两个组的项目是王者荣耀,哪个组写的好就采用哪个组。假设某一天,你的老板要检查你们组的代码写的怎么样,但不能让项目B
组看到你们组的文件内容,此时该如何是好?
因此,是不是可以将老板拉入你们组(用户组),这样老板能看到整个组的开发进度,而别的组看不到,很方便吧!
这样说可能还不容易理解。再举一个例子,假设有一家人,爸爸叫张三,家里有三兄弟,三个人都有自己的房间,并且拥有一个客厅。
- 用户的意义:由于三兄弟都有自己各自的房间。所以他们不能闯入别人的房间窥视他人的隐私。
- 用户组的概念:由于客厅是共用的,三兄弟可以在客厅做任何事情,因为大家都是一家人。
这样说大家应该有点了解了吧!张三家就是所谓的用户组,至于三兄弟就是用户,而这三个用户是在同一个用户组里。而三个用户虽然在同一个用户组内,但是有各自的私人空间,而设置用户组共享,则可让大家共同分享。
2.3 其他人(概念)
有一个叫李逵,它是三兄弟中张飞的同班同学,那么李逵就可以通过张飞进入张三的家,也可以通过张飞的同意进入他的房间。因此,李逵就是所谓的其他人(Others
)
因此,我们可以知道,在Linux
里面,任何一个文件都具有用户(User
)、所属组(Group
)以及其他人(Other
)三种身份,我们可以将以上的说明用下面的图来解释
不过,这里有一个特殊的人物要介绍,那就是神父。神父具有神力,它想干嘛就可以干嘛。不打哑谜了,这个人其实在Linux
中担任root
。所以要小心,这个root
可是神父!
三、文件权限
3.1 文件属性
在上篇博客讲过,查看文件属性的指令是ls -al
或者是ll
现在我们来拆分,以上字符串到底是什么意思
第一栏代表文件的类型和权限。这个地方最需要注意,仔细看的话,你应该可以发现这一栏其实有十个字符。
-
第一个字符代表这个文件是目录或文件等。其中
a.out
的第一个字符是-
,因此是文件。
-
接下来的字符中,以三个位一组,且均为
[rwx]
的三个参数的组合。其中,[r]
代表可读、[w]
代表可写、[x]
代表可执行。要注意的是这三个权限的位置不会改变,如果没有权限,就会出现减号[-]
而已。
- 实际例子
以下我在普通用户wj
中创建普通文件test.c
并往里头写你好 testUser
,并且文件的拥有者和所属组都是wj
,那么另一个普通用户testUser
能否看文件呢?
答案是可以的,首先testUser
不是拥有者,也不是所属组,那就是其他人,而文件test.c
对于其他人的权限只有r--
,因此是可以读的,但是不能写
那么现在还有一个问题,超级用户root
可以读和写吗?
通过以上实验我们发现,超级用户可以既可以查看、也可以修改(其实也可以执行,这里就不演示了)。那有的人就很奇怪,root
既不是拥有者,也不是所属组,怎么可能可以做得到?
别忘了,超级用户root
可是神父,具有神力,可以掌握一切!
3.2 修改文件权限
文权限修改使用的命令是chmod(change mode)
。但是,权限的设置方法有两种,分别可以使用数字或者符号来进行权限修改。
3.2.1 数字类型修改文件权限
Linux文件的基本权限就只有9
个,分别是拥有者(owne
r)、所属组(group
)、其他人(others
)三种身份各有自己的读(read
)、写(write
)、执行(execute
)权限。假设现在有一个文件权限字符是[rwxrwxrwx]
,这9
个权限是三个三个一组。其中,我们可以使用数字来代表各个权限,各权限的数组对照表如下:
r:4 (2^2)
w:2 (2^1)
x:1 (2^0)
每种身份(owner
、group
、others
)各自的三个权限(r
、w
、x
)数字是需要累加的,例如当权限为[rwxrwx---]
,数字则是:
owner = rwx = 4 + 2 + 1 = 7
group = rwx = 4 + 2 + 1 = 7
others = --- = 0 + 0 + 0 = 0
所以等下我们设置权限时,该文件的权限数字就是770
,修改权限的命令chmod
的语法是:
chmod [权限数字] [文件或目录]
举个例子:假设现在有一个普通文件的权限是[rw-rw-r--]
,现在我要让每种身份的人都可以执行此文件[rwxrwxr-x]
,那么权限数字就是775
3.2.2 符号类型修改文件权限
因为九个权限分别是user
、group
、others
三种身份,那么我们就可以借u
、g
、o
来代表三种身份的权限。此外,a
则代表all
,也就是全部人的身份。那么读写的权限就可以写成r
、w
、x
。因此,符号类型修改文件权限的语法如下:
chmod [身份] [设置符号] [权限] [文件或目录]
// 身份选项:u、g、o
// 设置符号:+(加入)、-(移除)
// 权限:r、w、x
我们可以来实践一下,假设有一个文件test.txt
的权限为[-rwx---r-x]
,那我现在我想让所属组和其他人都具有r
、w
、x
权限,那么命令应该为chmod g+rwx,o+rwx test.txt
接下来我再假设所有人(包括拥有者)都不许对test.txt
有读、写和可执行权限
3.3 修改文件所属组
修改文件拥有者的基本指令是chgrp(change group)
。注意,要被修改的组名必须在/etc/group
文件中存在才行
假现将text.txt
文件的所属组改为tempuser
(此用户我已经创建好了)
奇怪,为什么提示说“操作不被允许”?我们知道:你拿一个东西需要征得别人的允许,同样的,你给别人一个东西也需要征得别人的允许。因此,现在有一个暴力的方法,将自己提升为神父root
,别人不要也得要
3.4 修改文件拥有者
修改文件拥有者的基本指令是chown(change owner)
,要注意的是,用户必须是已经存在系统中的账号,也就是在/etc/passwd
这个文件中有记录的用户名称才能被修改
假设你已经是root
身份了,现将text.txt
文件的拥有者改为tempuser
(此用户我已经创建好了)
那么现在我要将拥有者和所属组全部改回wj
,又该怎么做呢?难道要分别使用两个指令来更改?会不会麻烦了些?
3.5 默认权限
无论是创建文件还是创建目录,系统都会分配默认权限
首先给出结论
- 系统默认给普通文件的起始权限是
666
,即[rw-rw-rw-]
- 默认给目录的起始权限是
777
,即[rwxrwxrwx]
奇怪?那么为什么创建出来的默认权限和我们说的不一样?
3.5.1 权限掩码
这是因为Linux
存在权限掩码umask
在CentOS 7.6
中,默认的权限掩码为0002
,平台不同,权限掩码可能存在差异
- 需要注意的是:
umask
的数字指的是该默认值需要减掉的权限
什么意思呢?以文件为例:在上面我们说过了,系统默认给普通文件的起始权限是666
,转换为二进制1010011010
,默认的权限掩码转换为二进制0000000010
。由于umask
的数字指的是该默认值需要减掉的权限,因此666
的二进制从右向左的第二个1
需要去掉,因此最后的结果是110110100
,转换为权限rw-rw-r--
,这下刚刚好也解释完了
但是默认权限的计算方式是以下这样的:
- 默认权限的计算方式:
默认权限 = 起始权限 & (~umask)
目录默认权限的计算也是一样的这里就不为大家演示了
四、目录权限
目录的基础权限也是:r(读)
、 w(写)
、 x(可执行)
r
:是否允许查看该目录中的内容
w
:是否允许当前目录进行创建、更改、删除
x
:是否允许用户进入当前目录
五、粘滞位
5.1 引入
大家想想:有多个人在一个共享目录里分享文件,那么里头的人是否能删除你的文件呢?
竟然可以删除!!那这就很可怕了。
假设一个公司有一个共享目录,供多个员工存储和共享文件。如果没有粘滞位,某个员工误删了其他员工的文件,那么对于其他员工来说,他们将无法恢复自己的文件,也无法确定是谁删除了自己的文件,这会导致很大的不便和困扰。
因此才有了粘滞位:一般是给共享目录设置,当一个目录被设置粘滞位了后,只有文件所有者和超级用户root
才能够删除或重命名该目录下的文件,其他用户则不能进行这些操作。
5.2 如何设置粘滞位
使用chmod
命令可以设置和取消目录的粘滞位。对于一个目录,设置粘滞位的命令为:
chmod +t [共享目录]
取消粘滞位的命令为:
chmod -t [共享目录]
以后在这种共享目录中,别的用户就无法删除里头的文件。