Linux 权限的理解
用户的概念
Linux下有两种用户:普通用户 和 超级用户(root)
- 超级用户:不受文件权限的限制,可以做任何事情
- 普通用户:在Linux下做有限的事情
超级用户命令提示符是“#” ,普通用户的命令提示符是“$”
如何快速切换用户? 命令: su 用户名 如果切换成root用户还可以写成: su - 然后会让你输入用户的密码,这里输入的密码是不会显示的 ,输入完按一下回车就行了
权限的决定因素
文件的权限由两个决定因素: 角色 和 文件属性
文件访问者的分类(角色)
- 文件和目录的拥有者: u – user
- 文件和目录所属的组: g – group
- 其他用户:o – other
由于Linux是一个多人多任务的环境,所以一个项目是由多个人共同完成,所以这里的group就起到至关重要的作用。例如:你和你的组在共同完成一个任务,你希望你完成的文件被组员看到,而不被非组员的任何人看到,那你只需要对g 和 o设置权限即可。
文件的属性
- r:代表文件可读
- w:代表文件可修改
- x:代表文件可执行
- -:代表没有相应权限位上的权限
对于每一个角色都要规定文件的属性:所以我们把【rwx】作为一组,如果没有相应的权限就用 - 代替 例如:该文件只可以读 就表示为:【r–】 由于一个文件要面向三个角色,所以就有三组!
文件类型和访问权限
首先创建一个文件: 然后我们用 指令 ls -al 查看一下这个文件的详细信息 这里的每一个符号都代表一个意义
- 文件类型:
d:文件夹 -:普通文件 l:软连接 b:块设备文件 p: 管道文件 c: 字符设备文件 s: 套接口文件 - 接下来就是user,group,other的权限,三组一共九位
- 链接数:表示有多少个文件名连接到此节点,
- 文件的拥有者:也就是哪个用户创建的这个文件
- 文件所在的用户组:也就是文件所属的用户组
- 文件的大小:单位:bytes(字节)
- 文件创建或最近修改的时间:也可以用
ls -l --full-time 文件名 来查看 - 最后一个是文件名
文件权限的表示方法
符号类型
符号类型也就是前面所讲的 【rwx】表示方法:
表示 | 说明 |
---|
r w x | 可 读、写、执行 | - - - | 不可读、不可写、不可执行 | -wx | 可写、可执行 | r-x | 可读、可执行 | rw- | 可读、可写 | - - x | 可执行 | r- - | 可读 | -w- | 可写 |
数字类型
我们用二进制位来表示,如果在该位上有权限则为1,否则为0 例如:rwx 就为 111
表示 | 二进制 | 八进制 | 说明 |
---|
r w x | 111 | 7 | 可 读、写、执行 | - - - | 000 | 0 | 不可读、不可写、不可执行 | -wx | 011 | 3 | 可写、可执行 | r-x | 101 | 5 | 可读、可执行 | rw- | 110 | 6 | 可读、可写 | - - x | 001 | 1 | 可执行 | r- - | 100 | 4 | 可读 | -w- | 010 | 2 | 可写 |
文件权限的修改方法
修改文件属性:chmod
数字类型修改
指令:chmod 八进制 文件名
例如我们想要把 一个文件名为 test 的文件 的权限修改成 rwx rwx rwx 就需要输入:chmod 777 test
符号类型修改
例如: 如果想要把所有角色的权限修改成 rwx,则需要输入指令:chmod a=rwx test
修改文件的所属组:chgrp
指令: chgrp 新的用户组 老的用户组 但是注意: 要修改成的用户组一定要存在!
修改文件的所属者:chown
指令:chown 新用户名 文件名 但是注意: 要修改成的用户一定要存在!
目录的权限
目录权限也十分重要,前面讲过ls -al打印出来的文件信息的第一位是文件的类型,那么目录文件的开头第一个字母一定是d
那我们就要重新认识一下在目录文件下的文件的属性:
- r:表示具有读取目录结构列表的权限,所以当你拥有r权限时,你可以用指令ls查看目录里面文件的信息
- w:可以改动目录里面的文件,包括以下操作:
- 建立新的文件和目录 - 删除已经存在的文件和目录(不论文件的权限是什么) - 将目录中的文件改名 - 移动该目录中的文件的位置 - x:代表用户是否能进入目录
这里要重点理解x权限,如果每有x权限,就无法进入目录,也就无法读取、修改目录里面的内容,也就是每有x权限即使拥有rw权限也没有什么用
还有一个重点就是关于文件删除的问题: 不知道大家有没有发现,一个文件是否可以被删除,不是取决于文件的权限,而是取决于该文件所在目录对用户的权限,如果目录有w权限(当然肯定要有x权限),该用户就可以删除该目录里面的任何文件,所以目录的权限一般设置为r-x
但是root用户想删谁删谁,想进哪个目录进哪个目录,不管权限啥的😅😅😅😅😅😅
这种连用户自己创建的文件都进不去的,root照样能进去😅😅😅😅😅😅,还能写入读取
注意这里还有一种特殊的目录权限设置 -wx
这里虽然无法读取目录里文件名,但是可以对文件进行操作,就像一个盲盒一样虽然你看不见,但是你知道里面的东西,并可以对立面的东西修改
粘滞位
那如何让用户拥有目录w、x权限但是又不允许删除特点文件呢? 这里就要用到粘滞位: 指令:chmod +t 目录的路径
我们用root用户创建了一个目录dir 并在目录里创建了两个文件 对kksk使用粘滞位: 这是设置粘滞位之后,我们发现kksk的other权限的x的位置变成t 这里我们切成普通用户: 并执行删除命令,结果发现无法删除: 那么kksk只能由
- root超级用户删除
- kksk文件的拥有者删除
- 该目录的所有者删除
总结
以后再Linux操作系统下如果再遇到“permission denied ”的报错大概率是文件的权限出了问题,检查的时候可以从两个方面出发:文件的权限 和 文件所在目录的权限 其次 一定要注意目录的x权限所代表的意义!
|