目录
权限是什么?
权限一定是用来限制人的,简单来说就是你能不能(有权限)做某个事情。
权限要有对应的操作对象,一定要有对应的满足人的需求的属性。你在Leetcode看电影,哪怕你会员冲到爆,也没有电影给你看,也即是没有对应的属性给你。所以权限要有对应满足人的需求的属性
文件访问者的分类
文件或者文件目录的拥有者:u -> user
文件或者文件目录的所属组:g ->group
文件或者文件目录的其他用户:o ->other
Linux下有两种用户:超级用户、普通用户
超级用户:在Linux系统,可以做任何事情,没有权限的限制
普通用户:在Linux下,做有限的事情,受到权限的限制
超级用户的命令提示符是 # 普通用户的命令提示符是 $
Linux下的文件
-rwxrwxrwx 1 hhh hhh 12 Nov 21 10:12 file.txt
Linux系统文件权限
文件权限属性->对应操作属性:r w x
注意:一个文件是否可执行,这个文件一定是有x权限&这个文件是可执行程序
i.读r:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写w:Write对文件而言,具有修改文件内容的权限、写入文件内容;对目录来说具有删除移动目录内文件的权限
iii.执行x:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限
注意:只有 文件拥有者 或者 root 用户才可以修改文件的权限
以这个文件为例子,我现在是文件的拥有者和所属组,第一个 ‘ - ’ 说明这个文件是普通文件类型
-rwxrwxrwx 1 hhh hhh 12 Nov 21 10:12 file.txt
现在向这个文件写入 hello Linux
echo "hello linux" > file.txt
此时文件的内容就是“ hello Linux”
因为我是文件拥有者,只需要看拥有者(u->user)的权限,前三个字符,u减r就是去掉权限
把读r权限去掉:
chmod u-r file.txt
此时我们在读取文件的内容
系统就会告诉你权限被拒绝,也就是说你没有这个文件的读r权限,是不能访问文件的内容的,哪怕你是文件的拥有者,也访问不了
可能你会疑惑,我虽然拥有者的权限没有读r权限,但是我同时也是所属组啊,所属组有读r的权限,我为什么不能访问呢?
这是因为Linux下,当用户访问文件的时候,会先判断你是不是文件的拥有者,是的话就不在判断你是不是别的组别了,只看拥有者的权限。如果不是,则按顺序判断下一个组别,就是group所属组,如果是,那么就不在判断别的组别了,就只看所属组的权限,如果以上的都不是,那就是other组了,就只看other组别的权限
此时我们在把读r权限加回来,在读取里边的内容
chmod u+r file.txt
有了读r权限就能读取文件里边的内容了
此时我们在向文件写入一个Hello Linux
把写w权限去掉,
chmod u-w file.txt
现在这个文件的拥有者没有写w的权限了,此时我们在往文件里写入 Leetcode
系统会提示你说权限被拒绝,也就是说你没有这个文件的写w的权限,你是不能对文件写入或者修改内容的
此时我们把写w权限加回来 , 把里边所以的内容清空,然后在把 Leetcode 写入文件中
chmod u+w file.txt
所以一个文件具有w权限,是可以对文件写入内容和修改文件内容的
最后还剩下一个执行x权限了,那么是否能执行这个文件呢?
结论是不执行的,为什么具有x权限却不能执行这个文件呢?这是因为
一个文件是否能执行取决于
1、这个文件必须有x权限
2、这个文件真的是可执行程序
接下来演示一下other的权限
su 用户名 输入用户密码 就会切换用户并且保持当前的工作目录
还是以这个文件为例
此时zzz用户,不是拥有者,也不是所属组,那么zzz用户就是other组别
从上图可以知道,此时的other组别有rwx权限
上图可以验证看到other组确实是具有 读 和 写 和 x 都有权限的
此时我们 切换到文件拥有者的用户把other组别的 rw权限去掉
注意:只有 文件拥有者 或者 root 用户才可以修改文件的权限
把other组别的rw权限去掉后,在切换成zzz用户读取和写入
可以发现,此时用户zzz作为other身份确实读取不了和没有修改这个文件的权限了
接下来用root超级用户演示
此时root也是other组别,那么它是否能够对文件进行读取和写入或者修改内容呢?甚至把它删除了可以吗?
结论是可以的,我root不仅可以读取、写入、修改,我甚至还能把你删除了。就是这么霸道
root用户下,没有权限,对root用户来说没有任何隐私,权限是限制普通用户的,所以也体现处root用户的重要性,在公司一般只有组长,或者更高级别的人才具有root账户密码,所以root用户的密码安全性也尤其重要
接下来演示的是
目录的权限
目录的权限跟文件的权限本质是一样的,只是有个别权限有差异
以这个目录为例
此时发现进不了这个 目录
思考一下:一个目录能否打开,取决于它有rwx 中的哪个权限?
结论是一个目录具有x执行权限才可以打开进入这个目录
现在我们能打开进入目录了,那么能否看到(读取)这个目录下的内容呢?
结果是不可以的,因为该目录没有读r权限
现在把目录的读权限加上
chmod u+r test
所以一个目录下的内容,能否查看读取取决于这个目录的读权限
此时我想在这个目录下创建一个文件一个file.txt的文件
对不起,你不可以在这个目录创建文件,因为在这个目录你没有w权限
现在把w权限加上
chmod u+w test
所以一个目录下,能不能创建文件或者删除文件,取决于用户有没有w权限
现在切换成root用户,并且在这个目录下创建root.txt文件
然后把这个root.txt文件的权限全部去掉,
chmod a-rwx root.txt
a是所有,这里表示所有组别
然后再切换到hhh普通用户,并且读取root.txt 和写入内容
hhh用户没有这个文件的读r权限和写w权限,不能做对应的操作,hhh用户就想:我既然读取不了你也写入不了内容,那我不如把它给删除了
可以看到,这个文件被删除了,所以,一个文件是否可以被删除,并不取决于文件本身,而是取决于它所在的目录,用户是否具有w权限,哪怕你是root创建的文件我也可以删除。
切换用户 zzz
可以看到,此时zzz用户也具有这个目录的w权限,那么我们是不是也可以删除文件呢?
结论是可以的,虽然这个文件不是zzz用户创建的,但是只要具有目录的w权限就可以对这个目录下的文件进行删除
于是, 问题来了~~ 换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写 权限. 这好像不太科学啊, 我张三创建的一个文件, 凭什么被你李四可以删掉?
为了解决这个不科学的问题,Linux引入了粘滞位的概念
粘滞位
给目录中的other设置的一个权限位,具有x权限的意义,同时也具有进一步对目录权限进行特殊限定
该目录的里的文件,只有root或者或者文件拥有者才有进行权力删除,其他人一概不允许
我现在是这个目录的拥有者,现在我要加上粘滞位 chmod +t test
此时我们切换用户 zzz
此时zzz用户不是文件的拥有者,但是zzz用户具有目录的w权限,那么还能不能像之前那样把这个文件删除呢?
结论是不可以的,系统直接提示你不允许执行操作。哪怕你再这个目录下拥有W权限也不能删除。原因是这个目录设置了粘滞位,该目录下的文件只有文件的拥有者或者root的用户才可以删除。