Linux权限解析
目录
shell命令以及运行原理
Linux权限概念
切换用户
Linux权限管理
文件访问者分类
文件类型和访问权限
Linux下的文件后缀
文件权限值的表示方法
文件访问权限的相关设置方法
文件掩码
目录权限
粘滞位
目录权限总结
关于权限的总结
shell命令以及运行原理
帮助理解:如果说你是一个闷骚且害羞的程序员,那 shell 就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM 小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash 。
简而言之,外壳就是我们与内核进行交互的媒介;就好像我们通过代码语言和计算机进行交互;
Linux权限概念
Linux 下有两种用户:超级用户( root )、普通用户。超级用户:可以在 linux 系统下做任何事情,不受限制;普通用户:在 linux 下做有限的事情。超级用户的命令提示符是 “#” ,普通用户的命令提示符是 “$”;
1.超级用户可以随意的操作系统,可以制造规则,但可以不遵守规则;
2.普通用户需要严格的遵守使用规则,有些指令是没有权限使用的,比如"yum"命令安装软件,但是必要时普通用户可以向超级用户申请对应对的权限;
3.Linux下的每个用户都要有自己的密码,尽量不要重复;
切换用户
命令 : su [ 用户名 ]功能 :切换用户。例如,要从 root 用户切换到普通用户 user ,则使用 su user 。 要从普通用户 user 切换到 root 用户则使用 su root( root 可以省略),此时系统会提示输入 root 用户的口令注意:超级用户切换到普通用户是不需要密码的,但是普通用户切换到超级用户需要输入超级用户的密码;
Linux权限管理
文件访问者分类
文件和文件目录的所有者: u---User(拥有者) (中国平民 法律问题)文件和文件目录的所有者所在的组的用户: g---Group(所属组) (不多说)其它用户: o---Others (其他人) (外国人)
这里的权限大小关系是:拥有者>所属组>其他用户;我们使用的普通用户属于其他用户.而拥有者和所属组是同伙,而其他用户是另一伙;
拥有者和其他用户都能够理解,但是为什么会出现所属组分类呢?
在我们的工作中呢,为了提高工作的效率,通常是以小组为单位进行的,所以小组内的成员都是自己人,也需要对系统进行操作,但是不能算是其他人,所以出现了权限大小在拥有者和其他人之间的角色;
这样就既可以做到防止其他小组的抄袭,又可以让自己小组的成员看到内容;这样的权限分类有利于公司各个小组之间相互竞争,又可以维持秩序;
文件类型和访问权限
d :文件夹- :普通文件l :软链接(类似 Windows 的快捷方式)b :块设备文件(例如硬盘、光驱等)p :管道文件c :字符设备文件(例如屏幕等串口设备)s :套接口文件
Linux下的文件后缀
在Linux下的文件的后缀是没有意义的,但是是需要的,什么意思呢?
将文件编译好之后,无论将a.out改成什么名字,都可以正常执行;
但并不是所有的文件都可以像这样无视后缀的,就比如使用zip打包解压和使用unzip解包,他们只能识别后缀为zip的文件;其他后缀的文件是无法识别的;总之,具体情况具体分析即可;
文件权限值的表示方法
1.字符表示法
2.八进制表示法
因为一位角色的权限占3位,每位有和没有,可以使用0和1表示;所以最大的权限也就是111=7;因此我们可以将其转换为八进制数来表示权限;
i. 读( r/4 ): Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限ii. 写( w/2 ): Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限iii. 执行( x/1 ): execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限iv.“—” 表示不具有该项权限
具体使用哪种方法,看使用者的习惯和喜好;
文件访问权限的相关设置方法
功能: 设置文件的访问权限格式: chmod [ 参数 ] 权限 文件名常用选项:R -> 递归修改目录文件的权限说明:只有文件的拥有者和 root 才可以改变文件的权限,
如果是普通用户,可以通过提权进行修改权限;
用户修改文件权限的格式
① 用户表示符 +/-= 权限字符+: 向权限范围增加权限代号所表示的权限-: 向权限范围取消权限代号所表示的权限=: 向权限范围赋予权限代号所表示的权限用户符号:u :拥有者g :拥有者同组用o :其它用户a :所有用户例子:# chmod u+w /home/abc.txt# chmod o-x /home/abc.txt
②三位8进制数字
2.chown
功能 :修改文件的拥有者格式 : chown [ 参数 ] 用户名 文件名
直接使用指令chown修改拥有者给别人是不被允许的,必要时得使用sudo强制提权转移拥有者身份,转移身份之后我们就不在是拥有者了(通常会变成是所属组),也就无法在使用chown了;
3.chgrp
功能 :修改文件或目录的所属组格式 : chgrp [ 参数 ] 用户组名 文件名常用选项 : -R 递归修改文件或目录的所属组;
文件掩码
假设默认权限是 mask ,则实际创建的出来的文件权限是 : mask & (~umask)
超级用户默认掩码值为0022,普通用户默认为0002。
为什么我们普通用户的目录是775,普通文件是664?
对于目录:(777)111 111 111 &( 111 111 101)=111 111 101=775;
对于普通文件:(666) 110 110 110 & (111 111 101 )=110 110 100=664;
目录权限
r(可读):是否可以看到目录下的所有文件(也就是是否可以使用指令ls);
w(可写):是否可以对当前目录进行新建(mkdir,touch)/修改(mv,mano...)/删除(rm)等操作;
x(可执行):这个权限很重要,如果没有这个权限那么我们甚至都进不去目录中,更不用说看见目录下的文件了;
如果我们拥有一个目录的写权限,那么我们是可以对目录下的文件进行删除的;那么问题来了;
其他人有写的权限不也是可以把我们新建的文件删除吗;那这不就乱套了吗?
验证:
[root@localhost ~]# chmod 0777 /home/
[root@localhost ~]# ls /home/ -ld
drwxrwxrwx. 3 root root 4096 9月 19 15:58 /home/
[root@localhost ~]# touch /home/root.c
[root@localhost ~]# ls -l /home/
总用量 4
-rw-r--r--. 1 root root 0 9月 19 15:58 abc.c
drwxr-xr-x. 27 litao litao 4096 9月 19 15:53 litao
-rw-r--r--. 1 root root 0 9月 19 15:59 root.c
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/root.c #litao可以删除root创建的文件
rm:是否删除有写保护的普通空文件 "/home/root.c"?y
[litao@localhost ~]$ exit
logout
为了解决这个问题Linux下引入了粘滞位,
粘滞位
1.我们在自己家的目录下创建的新文件一般权限都是700(drwx------),别人是看不到的,所以如果我们想要创建一个共享文件那就需要在根目录下创建;
2.在根目录下创建的共享文件肯定对其他人要将权限放开的,但是这时候如果有人恶意删除共享文件,就会造成很大的损失,所以粘滞位的作用就是防止用户删除文件;只有目录的拥有者和超级用户才可以删除该文件;
3.一个文件是否可以被删除关键不在文件本身,关键在于文件的目录,也就是他的上司;如果目录对用户有写权限,那么就可以删除该目录下的文件;
4.在根目录下就有一个共享文件tmp;我们可以在这里里面进行文件的增删改查,但是不可以删除这个目录;
功能:防止其他用户删除文件,确保只有文件拥有者和超级用户才有删除的权利;
命令:chmod +t 文件 ;
t是一种特殊的x权限,一般用于共享文件,
目录权限总结
当一个目录被设置为 " 粘滞位 "( 用 chmod +t), 则该目录下的文件只能由一、超级管理员删除二、该目录的所有者删除三、该文件的所有者删除
关于权限的总结
目录的可执行权限是表示你可否在目录下执行命令。如果目录没有 -x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目 , 即使目录仍然有 -r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有 -x 权限,但没有 -r 权限,则用户可以执行命令,可以 cd 进入目录。但由于没有目录的读权限;所以ls命令也就无效了;注意,每次只能确定一个身份,如果我已经是拥有者了,即便所属组也是我,仍然无法使用所属组的权限;