【Linux】一文带你彻底搞懂权限
🦄个人主页:修修修也
🎏所属专栏:Linux
⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位)
编辑
目录
📌Linux权限概念
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
Linux下有两种用户: 超级用户(root), 普通用户
• 超级用户:可以在Linux系统下做任何事情,不受限制
编辑
• 普通用户:在linux下做有限的事情。编辑( 注: 超级用户的命令提示符是 " # ",普通用户的命令提示符是 " $ ")
📌Linux权限相关操作
🎏使用root创建普通用户
添加新的用户账户使用adduser命令,其语法如下:
adduser 选项 用户名
参数说明:
• 选项:
o -c comment 指定一段注释性描述。
o -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
o -g 用户组 指定用户所属的用户组。
o -G 用户组,用户组 指定用户所属的附加组。
o -s Shell文件 指定用户的登录Shell。
o -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
• 用户名: 指定新账号的登录名。
使用示例:
如下图,我们使用root账户为系统添加一位普通用户zhangsan, 然后使用passwd为其设置密码 (注意,Linux中输入密码是不回显的,要注意适应):
编辑
当系统提示"passwd: All authentication tokens updated successfully.即passwd:所有身份验证令牌都已成功更新。"后,我们就可以使用这个新建的用户身份及其密码登录了:
编辑
其他相关指令拓展:
指令名称 |
指令功能 |
指令语法 |
|
adduser/useradd |
创建用户 |
adduser 用户名 |
|
passwd |
设置用户密码 |
passwd 用户名 |
|
groupadd |
创建用户组 |
groupadd 用户组名 |
|
usermod |
修改用户账号设定 |
由具体功能决定 |
|
userdel |
删除用户 |
userdel 用户名 |
🎏使用su命令切换用户
命令:
su 用户名
功能:切换用户。
使用示例:
我们从root用户切换到普通用户user,使用 su user。(从root切换到普通用户不需要输入普通用户的密码)
编辑
然后我们从普通用户zhangsan切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码, 输入正确密码后就可以切换为root用户.如下三种方式都可以从普通用户切换为root用户:
编辑
📌Linux权限管理
首先我们要知道的是,Linux下一切皆文件,即无论是普通的文件,目录、字符设备、块设备、 套接字等在Linux中均是以文件被对待的.
🎏文件访问者的分类
理解了上面那一点,我们再来看看文件访问者的分类:
• 文件和文件目录的所有者:u——User
• 文件和文件目录的所有者所在的组的用户:g——Group
• 其它用户:o——Others
画个图帮助大家理解:
编辑
注意,这里千万不能和前面root和普通用户的概念搞混了,我们画图区分一下这两个概念:
编辑
🎏文件类型和访问权限
我们在前面学习基本指令时曾经学学习过ls指令:
编辑
可以看到,其中ls -l指令的作用是列出文件的详细信息,那么这些详细信息都包括什么?我们来一一探究一下:
如下,我们在Linux_study目录下敲入ll(ls -l指令的缩写),此时目录下的所有文件及其信息就会显示出来了:
编辑
我们先来解析一下这三条文件的各个位置的字符都代表文件的什么信息:
编辑
下面我们详细解析一下各个字符都是什么含义:
第1位 文件类型:
• d:文件夹
• - :普通文件
• l :软链接(类似Windows的快捷方式)
• b:块设备文件(例如硬盘、光驱等)
• p:管道文件
• c:字符设备文件(例如屏幕等串口设备)
• s:套接口文件
第2-10位 基本权限:
• 读(r / 4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览查看该目录文件信息的权限
• 写(w / 2):Write对文件而言,具有修改文件内容的权限;对目录来说具有创建删除移动目录内文件的权限
• 执行(x / 1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
• "—"表示不具有该项权限
🎏文件权限值的表示方法
🅰️字符表示法
Linux表示 |
说明 |
|
r - - |
仅可读 |
|
- w - |
仅可写 |
|
- - x |
仅可执行 |
|
r w - |
可读可写 |
|
- w x |
可写可执行 |
|
r - x |
可读可执行 |
|
r w x |
可读可写可执行 |
|
- - - |
无任何权限 |
8️⃣8进制数值表示法
权限符号 |
r - - |
- w - |
- - x |
r w - |
r - x |
- w x |
r w x |
- - - |
二级制 |
1 0 0 |
0 1 0 |
0 0 1 |
1 1 0 |
1 0 1 |
0 1 1 |
1 1 1 |
0 0 0 |
八进制 |
4 |
2 |
1 |
6 |
5 |
3 |
7 |
0 |
说明 |
仅可读 |
仅可写 |
仅可执行 |
可读可写 |
可读可执行 |
可写可执行 |
可读可写可执行 |
无权限 |
🎏文件访问权限的相关设置方法
🕹️chmod指令
格式:chmod [参数] 权限 文件名
功能:设置文件的访问权限
常用选项:
• R -> 递归修改目录文件的权限
chmod命令权限值的两种方法:
1.chmod 用户表示符 + / - / =权限字符(注:权限字符即r,w,x)
用户表示符 |
含义 |
操作符号 |
含义 |
|
u |
拥有者 |
+ |
向权限范围增加权限代号所表示的权限 |
|
g |
拥有者所属组 |
- |
向权限范围取消权限代号所表示的权限 |
|
o |
其他用户 |
= |
向权限范围赋予权限代号所表示的权限 |
|
a |
所有用户 |
|
|
使用示例:
我们将dir1的拥有者的r,w,x权限全部取消:
编辑
我们给dir1的拥有者加上r,w权限:
编辑
我们给study.txt的所有用户加上r,w,x权限:
编辑
2.chmod 三位8进制数字
使用三位8进制数字来表示权限的原理如下图:
编辑
使用示例:
我们将study.txt文件所有人的所有权限都取消:
编辑
我们给study.txt文件拥有者和其所属组赋予读和写的权限,给其他用户赋予读的权限:
编辑
🕹️chown指令
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
使用示例:
我们将study.txt的拥有者从mfc改为zhangsan:
编辑
🕹️chgrp指令
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
使用示例:
我们将study.txt的所属组从mfc改为zhangsan:
编辑
🕹️umask指令
功能:查看或修改文件掩码。
格式:umask 权限值
说明:新建文件夹默认权限 = 0666(rw-,rw-,rw-,), 新建目录默认权限 = 0777(rwx,rwx,rwx)
但实际上我们所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask。将现有的存取权限减去权限掩码后,即可产生建立文件时预设限。超级用户默认掩码值为0022,普通用户默认为0002。
这个地方可能第一次接触的朋友不太理解,画图帮助大家理解一下:
先举例说明一下他们三个的关系:
编辑
再画图帮助大家理解其中的逻辑关系:
编辑
最后演示一遍这其中的数学演算过程:
编辑
使用示例:
查看当前umask值(上图为root账号,下图为普通用户):
编辑
编辑
我们按照上面的情况先分别在两种用户下创建一个新的目录和文件,看看他们的权限(上图为root账号,下图为普通用户):
编辑
编辑
我们分别将root的umask值改为123,将普通用户的umask改为222,再创建目录和文件查看他们的权限(上图为root账号,下图为普通用户):
编辑
编辑
🕹️file指令
功能说明:辨识文件类型。
语法:file [选项] 文件或目录...
常用选项:
• -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
• -z 尝试去解读压缩文件的内容。
注意,在Linux系统中并不是依靠文件的后缀来判断文件类型的,而是通过分析文件内部结构来判断文件类型,这样是比较可靠的方式.
使用示例:
编辑
🕹️sudo指令
功能说明: sudo 命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
使用权限:在 /etc/sudoers 中有出现的使用者。
语法: sudo [选项] 用户名 命令
注意, 当使用sudo的用户不是root白名单用户时, 是无权执行sudo的, 下面我们学习一下如何将用户账户添加到root白名单中:
首先我们登录root账号, 在根目录下用Vim打开[ /etc/sudoers ]文件:
编辑
然后, 按下[ 100 ] + [ Shift ] + [ g ], 使光标定位到100行:
编辑
我们按下[ y ] + [ y ]键将这行复制下来, 然后按[ p ]将这行粘贴到文件中:
编辑
粘贴好后我们按[ i ]键进入Vim的插入模式,然后将root改为要添加的白名单用户名:
编辑
改好之后我们按[ Esc ]键退出插入模式,再按[ Shift ] + [ ; ]进入底行模式,在底行模式输入" wq! ":
编辑
按下回车,成功保存修改并退出Vim, 然后我们进行下面的操作:
编辑
输入mfc用户密码后,就可以看到成功以root权限创建了文件test.txt :
编辑
📌目录的权限
我们上面介绍过,目录的r,w,x三种权限分别是:
• r可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
• w可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件
• x可执行权限: 如果目录没有可执行权限, 则无法cd(进入)到目录中
🎏目录写权限与文件写权限的矛盾
现在我们构造一个场景,假设现在用户mfc和zhangsan在同一个共享目录Linux_study下创作文件,该目录对所有人的权限都是可读可写可执行:
编辑
这时候,mfc在Linux_study目录中创建了一个study.txt文件,这个文件对于zhangsan的权限是只可读:编辑
创建好文件后,mfc向其中输入了一些内容:
编辑
zhangsan这时候查看了这个文件,是可以查看的:
编辑
zhangsan也想向文件中写入内容,但是显示他没有写入的权限:
编辑
zhangsan气不过,直接删除了study.txt文件:
编辑
然后他竟然成功删除了mfc的文件:
编辑
复盘整个事件,问题就在于zhangsan明明没有study.txt文件的写权限,但是因为他有Linux_study目录的写权限,因此就可以直接将别人的文件删除掉了.但是如果不给zhangsan目录的写权限,那他自己也没法在目录里创建文件,如果给的话,又怕他把别人的文件删掉了.
为了解决这个矛盾的问题,Linux引入了粘滞位的概念.
🎏粘滞位
粘滞位的概念:
当一个目录被设置为"粘滞位",则该目录下的文件只能由
• 超级管理员(root)删除
• 该目录的所有者(User)删除
• 该文件的所有者(User)删除
粘滞位的设置方法:
格式: chmod +t 文件名
粘滞位的特性展示:
首先给Linux_study目录设置粘滞位:编辑
然后我们让mfc在Linux_study目录下创建一个文件, 并向其中输入一些内容:
编辑
然后再让张三试着查看,写入,删除操作:
编辑
可以看到,设有粘滞位的目录里面的文件确实不会再被非(root和user)的用户删除了.
小tips:
• 目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
• 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限。所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
结语
希望这篇关于 Linux权限 的博客能对大家有所帮助,欢迎大佬们留言或私信与我交流.
学海漫浩浩,我亦苦作舟!关注我,大家一起学习,一起进步!
相关文章推荐
编辑
- 点赞
- 收藏
- 关注作者
评论(0)