目录
一.用户在使用Linux系统时的权限
1.概念
Linux下可以同时存在多个用户,Linux是一个多用户的操作系统
root:只有一个,具有linux下的最高权限(一般不受权限约束)
普通用户:可以有多个,受权限约束
2.用户权限切换(角色切换)
切换用户,本质就是切换权限
1.普通用户切换root
指令:su -,回车然后输入root密码
2.root切换普通用户
指令:su 指定用户,回车且不需要密码
或者 ctrl+d 或者 logout 或者 exit
二.用户在使用文件或目录时的权限
0.如何区分是文件还是目录?
Linux下,不以文件后缀来区分文件类型
那么,想要区分一个文件是文件还是目录,看下图
但是需要注意一点,如果我们用linux下的gcc编译器,编译一个后缀不是.c的文件就会报错!
为什么呢?
原因就是:gcc是linux环境下的一款软件,linux不以文件后缀区分文件类型,但是没有说软件不可以!其实gcc这款linux下的软件,需要文件后缀来确定链接哪一个静/动态库
1.拥有文件或目录权限的三个身份
2.文件或目录的权限
3.如何修改权限
(1)修改权限
第一种形式:chmod [u/g/o] [+/-] [r/w/x] [文件名]
第二种形式:chmod [三个八进制为] [文件名]
(2)修改人
普通用户没有权限修改人
要么在命令前使用sudo,要么切换成root,使用sudo超级命令时,需要输入用户自己的密码
4.权限常见问题(面试题)
(1)目录权限
进入一个目录的权限:x(执行)
在目录中创建或删除目录/文件:w(写)
查看目录下的目录/文件:r(读)
目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目,即使目录仍然有-r读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限。所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档
没有x权限,只能ls查看该目录下的文件名,ls -l无法查看具体文件属性,tree显示为空!!
(2)权限掩码 - umask
一般的,创建一个目录系统的默认权限是777
创建一个文件系统的默认权限是666
可是实际我们看到的却是,创建目录:775,创建文件:664
为什么?以及是如何实现出来的?
答:一般的,other权限没有对文件/目录的w权限,这是为了保护文件/目录。其余权限默认为rwx。(说明一下,不管对于谁,都没有必要对文件有x权限,因为文件本身就没有执行属性)
以文件举例:刚开始创建好系统生成的默认权限就是777,而为了保护文件安全,需要去掉other的w权限,于是默认权限777会&一个~umask,umask是权限掩码,默认值为0002,而我们至于要关注后三位,且后三位是八进制位。
777&(~002) ---》775,就形成了最终我们所看到的默认权限775
也就是说,只要出现在umask上的权限,我们就不应该让文件/目录有这样的权限
注意,不是减法,而是 最终权限 = 起始权限 & (~umask),因为减法有进位问题。
umask是可以修改的,比如把umask修改为0777指令就是:umask 0777
(3)粘滞位
现在假设有这样一个场景:
一个公司,领导是root,员工是普通用户。此时为了便于多名员工协作开发一个项目,root创建了一个目录,这个目录的own和grp都是root,员工们是other。
目录的w权限:在目录中创建或删除目录/文件
此时思考一个问题:root是否要将此目录的other权限中的w权限打开呢?
员工在工作时,一定是需要自己能够自由的创建和删除目录下的文件(这个需求other需要w权限)
但是,仅仅只是能删除属于自己的文件(这个需求other不能拥有w权限)
这样就会产生矛盾,员工们既需要能够在目录下创建和删除文件,需要w权限。但一但w权限面对other开启,就意味着所有员工都可以自由的随意删除里面的任何文件。
如果才能做到:自己只能创建或删除属于自己的文件呢?
答:我们引入一个新的权限:粘滞位
指令:chmod +t [目录名]
此指令只能是目录的拥有者 或者 root才能执行 或者 sudo+指令
粘滞位只能给目录设置。
所以,这也说明了,虽然我的文件对外不开放rwx权限,但是如果拥有我这个文件所在目录的w权限,他虽然看不了改不了我的文件,但是可以删除我的文件!而粘滞位就很好的解决了这个问题!让他依然有这个目录的w权限,但是只能创建和删除属于自己的文件!