文章目录
- 🎪 Linux权限的理解
- 🚀1.shell命令及其运行原理
- 🚀2.Linux权限概念
- ⭐2.1 用户与root身份切换
- ⭐2.2 用户与用户身份切换
- ⭐2.3 单条指令提权
- 🚀3.Linux文件权限
- ⭐3.1 文件属性(第一个字符)
- ⭐3.2 文件角色划分与文件属性
- ⭐3.3 文件权限值的表示方法
- ⭐3.4 修改文件或目录读写执行权限
- 🚀4.粘滞位
- 🚀5.默认权限
🎪 Linux权限的理解
Linux权限是一个很重要的概念。如果没有权限的约束,那么一些重要的文件将可能会受到威胁。
🚀1.shell命令及其运行原理
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)
“ ,但我们一般用户,不能直接使用kernel。而是通过kernel
的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel
从技术角度, Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
- 将使用者的命令翻译给核心(kernel)处理。
- 同时,将核心的处理结果翻译给使用者。
Windows GUI:即为图形化接口,我们通过图形化界面来操作Windows内核,这里的GUI就是Windows的shell程序
Linux Bash: 即为命令行接口,我们通过命令行来操作Linux内核,这里的Bash就是Linux的shell程序
如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。
🚀2.Linux权限概念
Linux下有两种用户:超级用户(root)、普通用户
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
这里用于账户切换的命令如下:
命令:
su
[用户名]
功能:切换账户
⭐2.1 用户与root身份切换
- 输入
su
:接着再输入管理员密码
此种情况下,相当于仅仅进行的身份切换,原先处在的家目录不变 - 输入
su-
:接着再输入管理员密码
此种情况相当于直接进行了账户切换,切换后root1会出于自己的家目录
除此之外,切换为root,使用su + 用户名
可以再将身份切换为任意普通用户
⭐2.2 用户与用户身份切换
如果是用户,想要切到另外一个用户也可以用 su + 用户名
,但没有密码的话将为失败
此时如果知道root账号密码,那么就可以先切换为root,然后root切换账户将会畅通无阻
⭐2.3 单条指令提权
对单条指令提权的指令如下:
语法:
sudo
[任意指令]
功能:对该指令以root的权限执行
对于我们刚刚的用户之间切换,我们就可以使用sudo su msr
,然后输入自己的账户密码就可以完成对该条指令进行root提权。那岂不是root形同虚设?我们随便对一条指令进行sudo提权不就可以干任何事啦,但遗憾的是:
提权失败,这是由于我们当前用户未在linux系统的信任列表里面,即便你用了sudo提权并输入正确的用户密码(注意这里输的是自己的账户密码)也无法进行提权
关于注册用户进信任列表我们后续博客中说明。
🚀3.Linux文件权限
我们用以下展示的界面进行:权限 = 人 + 事务属性(文件 + rwx)
⭐3.1 文件属性(第一个字符)
上图中第一个字符表示文件属性:
- d:表示目录
- -:表示文本文件,可执行文件,归档文件等
- b:块设备,例如硬盘、光驱等
- c:字符设备,例如键盘、显示器
- p:管道文件
- s:网络socket文件
- l:链接文件
⭐3.2 文件角色划分与文件属性
Linux中一个文件有三种角色划分:
- 文件拥有者
- 文件所属组
- 文件other
Linux中一个文件有三种权限:
- r:读
- w:写
- x:执行
上述图片中文件属性(第一个字符之后),有9个字符,每三个分别代表:文件拥有者,文件所属组,文件other权限,然后紧跟的两个用户名分别代表文件拥有者和文件所属组的名字,其他用户默认是other
还可以用以下图片来描述:
⭐3.3 文件权限值的表示方法
- 字符表示方法
- 进制数值表示方法
⭐3.4 修改文件或目录读写执行权限
我们可以用以下命令来修改:
语法:
chmod
u/g/o
+/-
r/w/x
文件/目录
功能:修改文件或目录的读写执行权限(注意中间无空格,如:chmod u+r test.c)
对于以下目录:
我们先来看看没有读写执行权限会怎样,此时除了root外,任何用户都不能对test.c进行读写执行:
1. 修改文件读写执行权限
-
对test.c授予拥有者的读写执行权限
命令:chmod u+rwx test.c
-
对test.c授予所属组的读写权限
命令:chmod g+rw test.c
-
对test.c收回拥有者的读权限,收回所属组读写权限,授予other可执行权限
命令:chmod u-r,g-rw,o+x test.c
-
以八进制形式收回所有权限,并再次完成以上操作
命令1:chmod 000 test.c
命令2:chmod 700 test.c
命令3:chmod 760 test.c
命令4:chmod 301 test.c
-
收回所有权限,并给所有人添加执行权限
命令1:chmod 000 test.c
命令2:chmod a+x test.c / chmod 111 test.c
注意:可以执行授予或者收回文件的用户只能是root或者文件拥有者
2. 修改文件读写执行权限
目录的权限跟文件有很大的差别,我们可以把目录当成可执行程序,然后打开目录就相当于执行这个程序。
- 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
- 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
- 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件
我们来验证一下:
3. 修改文件或目录拥有者及所属组
语法:
chown
用户名
文件
功能:修改文件或目录的拥有者,也支持一起修改
语法:
chgrp
用户名
文件
功能:修改文件或目录的所属组
注意: root可以支持任意修改,但拥有者只可以将所属组名改成自己的,但不支持将拥有者和所属组改成其他用户.
所以修改操作我们在root下进行:
- 修改test.c的拥有者为msr
命令:chown msr test.c
- 修改test.c的所属组为msr
命令:chgrp msr test.c
- 修改test.c的拥有者和所属组为msr
命令:chown ljk:ljk test.c
🚀4.粘滞位
背景:在使用linux的时候,未来可能有一些共享目录,被所有的普通用户共享,用来保存普通用户产生的临时数据。因为是共享目录,要保存临时数据,那么这个目录肯定要对所有用户开放写权限,既然开放了写权限,那么用户删除目录的权限也就开放了,这就存在这一些问题,即便用户对他存放的文件添加了权限限制,但是其它用户依然有权限删除其它用户的数据,于是,粘滞位就在这样的时代背景下产生了。
添加粘滞位的方法:
语法:
chmod
+t
目录名
功能:添加粘滞位
添加了粘滞位的目录,这个目录下的文件只能被以下用户删除:
- 超级管理员
- 目录所有者
- 文件所有者
🚀5.默认权限
我们为什么一创建文件或目录,它的默认权限就已经是确定了的呢?如下:
其实在linux中存在权限掩码这一概念,即umask.
语法:
umask
功能:查看当前用户权限掩码
一般未做人为修改的话,root的权限掩码是0022,而普通用户的权限掩码是0002
第一位是特殊权限位,而后三位是用户权限位,真正对默认权限产生影响的是后三位。这里我们给三个概念:
- 起始权限
- 最终权限(默认权限)
作为一个文件,最初应该被赋予的权限应该是666(rw_rw_rw),作为一个目录,最初被赋予的权限应该是777(rwxrwxrwx),权限掩码:在起始权限中,去掉在umask中出现的权限,不能影响其它的任何权限
故我们得出结论:默认权限 = 起始权限 & (~umask)
我们来做一下验证:
对于普通用户定义的目录,起始权限:777 默认权限:775 umask:002
对于普通用户定义的文件,起始权限:666 默认权限:664 umask:002
我们也可以修改当前用户的umask,直接umask + 修改后的权限掩码即可,但是这次修改仅为临时修改,下次登录权限掩码会默认初始化一遍。如果想做到永久修改,得修改对应的配置文件才行。