Linux的权限概念
Linux的权限概念
一:Linux下的用户
1. 用户分类:
在Linux下存在两种用户:超级用户(root)和普通用户(user)。
- 超级用户(root):可以在Linux下做任意事情,基本不受限制。
- 普通用户(user):在Linux下做有限的事情,会受到很多限制。
- 在Linux中超级用户的命令提示符是“
#
”,普通用户的命令提示符是“$
”。
2. 用户切换:
在Linux中通过 su
命令来实现用户的切换。
原则:若想要从超级用户切换到普通用户,直接 su + user
就行,但是若想要从普通用户切换到超级用户还需要超级用户的密码。
注:但是这里我在学习的时候,直接 su
的话,在切换用户的时候,工作路径有时候会切换不过来,在通过大模型的查询之后,建议在切换用户的时候 加上 -
来确保更新工作路径。
二:Linux权限管理
前置认识:
在学习权限之前,我们先对Linux下的权限有一个刻板认识:
权限 = 人(用户) + 文件属性(事物属性)
1. 文件访问者的分类(人)
- 文件和文件目录的所有者:u-User(拥有者)
- 文件和文件目录的所有者所在的组的用户:g-Group(小组)
- 其它用户:o—Others(其他人)
2. 文件类型和访问权限(事物属性):
(1)文件类型:
d
:文件夹。-
:普通文件。l
:软链接。(类似Windows的快捷方式)b
:块设备文件。(例如硬盘、光驱等)p
:管道文件。c
:字符设备文件。(例如屏幕等串口设备)s
:套接口文件。
(2) 基本权限:
- 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限。
- 写 (w/2):Write对文件而言,具有修改文件内容的权限;对目录来说,具有新增、删除、修改目录下文件名的权限。
- 执行 (x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入到该目录的权限。
- – :表明不具有该项权限。
(3)文件权限值的表示方法:
a. 字符表示方法:
符号表示法的组成规则:
- 第 1 个字符:文件类型(-、d、l等)。
- 第 2-4 字符:所有者(user)权限。
- 第 5-7 字符:组用户(group)权限。
- 第 8-10 字符:其他用户(others)权限。
b. 八进制数值表示法:
八进制权限计算规则:
每位数字由 r(4)、w(2)、x(1)相加:
0
:—(无权限)1
:–x(仅执行)2
:-w-(仅写)3
:-wx(写 + 执行)4
:r–(仅读)5
:r-x(读 + 执行)6
:rw-(读 + 写)7
:rwx(读 + 写 + 执行)
(4)文件访问权限的相关设置方法:
1. chmod
:
a. 功能:
修改配置文件的访问权限
b. 格式:
chmod + 参数 + 针对用户 + 文件名
用户表示符+/-=
权限字符
+
:向权限范围增加权限代号所表示的权限-
:向权限范围取消权限代号所表示的权限=
:向权限范围赋予权限代号所表示的权限u
:拥有者g
:同组用户o
:其它用户a
:所有用户
c. 实例:
chmod u+x hello.txt
:为所有者(User)添加执行权限
chmod g-w hello.txt
:移除组用户(Group)的写权限
chmod o=r hello.txt
:为其他用户(Others)设置只读权限
chmod 644 hello.txt
6(所有者):rw-(读 + 写)
4(组用户):r–(只读)
4(其他用户):r–(只读)
chmod 755 hello.txt
7(所有者):rwx(读 + 写 + 执行)
5(组用户):r-x(读 + 执行)
5(其他用户):r-x(读 + 执行)
2. chown
a. 功能:
修改文件的拥有者。
b. 格式:
chown + 用户名 + 文件名
c. 实例:
sudo chown newuser hello.txt
:将 hello.txt
的所有者改为 newuser
,所属组不变。
sudo chown :newgroup hello.txt
:将 hello.txt
的所属组改为 newgroup
,所有者不变。
sudo chown newuser:newgroup hello.txt
:将 hello.txt
的所有者改为 newuser
,所属组改为 newgroup
。
3. chgrp
a. 功能:
更改文件的所属组。
b. 格式:
chgrp + 用户组名 + 文件名
c. 实例:
sudo chgrp developers hello.txt
:将 hello.txt
的所属组改为 developers
(所有者不变)。
sudo chgrp admins file1.txt file2.log
:将 file1.txt
和 file2.log
的组均改为 admins
。
4. umask
a. 功能:
- 查看或修改文件掩码
- 新建文件夹默认权限=0666
- 新建目录默认权限=0777
- 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建⽂件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是:mask&(~umask)
- 超级用户的默认掩码值为:0022
- 普通用户的默认掩码值为:0002
b. 格式:
umask + 权限值
c. 实例:
umask
:查看Linux下的默认掩码值
umask 666
(权限值):设置默认掩码值为666
注:不用担心自己设置的umask有什么不妥,下次登陆的时候Linux的umask值还会回到初始值,因此我们自己设置的掩码值是暂时性的。
三:目录的权限:
- 可执行权限:如果目录没有可执行权限,则无法
cd
到目录中。 - 可读权限:如果目录没有可读权限,则无法用
ls
等命令查看目录中的文件内容。 - 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件以及在目录中修改文件名。
关于目录权限的小总结:
- 目录的可执行权限是表示你可否在目录下执行命令。
- 如果目录没有
-x
权限,则无法对目录执行任何命令,甚至无法cd
进入目录,即使目录仍然有-r
读权限(这个地方很容易犯错,认为有读权限就可以进⼊目录读取目录下的文件)
(其实可以这样理解:你有某个小区房子的钥匙,你是可以进入这个房子的,但是小区保安连小区们都不让你进,因此你也就进不去这个房子了) - 而如果目录具有
-x
权限,但没有-r
权限,则用户可以执行命令,可以cd
进入目录。但由于没有目录的读权限 - 所以在目录下,即使可以执行
ls
命令,但仍然没有权限读出目录下的文档。
四:粘滞位
先来思考一个问题?假如我们想实现不同用户之间的文件共享,要怎么做呢?
首先肯定不可能在某一个用户的家目录下,因为对于不同普通用户之前是不能进去其家目录的,只有超级用户才能进入,因此该方法行不通。
其次有人会想到在超级用户的系统路径下弄一个共享目录,那我们来看一下这样行不行得通。
首先我们在root的系统路径中建立了一个share的共享目录,
然后我们又增加了w
权限来让其他普通用户可以在目录里面增加新的文件,以此实现文件共享。
接着让两个用户来进行文件共享操作:
在该共享目录中实现了不同用户创建的文件共享,但若此时有第三者进入,并且恶意删除你的文件呢?
请问这合理吗?你和其他一个用户共享的文件被第三者恶意删除了,在技术层面是合理的,因为在创建share目录的时候是让other都对该目录有w的权限,因此就可以对该目录下的文件进行删除操作,但是在逻辑层面上不合理的,换句话说这跟我们想要达到的效果相悖,因为我们是想要实现不同用户间的文件共享,但是此时出现了恶意删除共享文件的情况,因此Linux就推出了粘滞位这一概念来解决这一问题。
当一个目录被设置为"粘滞位"(用chmod +t ),则该目录下的文件只能由
- 超级管理员删除
- 该目录的所有者删除
- 该⽂件的所有者删除
可以看到在root的系统路径下其实就存在着这样一个目录,它具有t属性,可以用来实现文件共享。
在引入粘滞位之后就避免了第三者恶意删除共享文件的情况。