4.3 默认权限(最终权限 = 起始权限 & (~umask) )
我们新创建出来的普通文件normal.txt和hello.txt的默认权限都是664,普通目录new_dir的默认权限是775
1.默认权限:– 你看到的
2.起始权限:– 系统设定的
a.普通文件起始权限:666开始的(没有可执行x权限,普通文件你要什么可执行啊?)
b.目录文件起始权限:777开始的(rwx,能显示,能进入,能创建)
3.最终权限: 系统为了更好的控制文件权限,会有默认的(权限掩码umask)的概念。centos7下默认的掩码为0002,但第一个数字以我们现在的水平不太好理解,那就暂时不管他,所以二进制序列就是000 000 010
4.权限掩码: 在起始权限中,去掉在umask中出现的权限,不能影响其他任何权限!
结论:最终权限 = 起始权限 & (~umask)
110 110 110 &
111 111 101 =
110 110 100 – 664
按位与的结果正好就把倒数第二位的权限搞没了。
和1按位与,并不会改变它原本的值,无论原来是1还是0都不会变。
和0按位与,管你是什么都给你搞成0,也就是让起始权限的二进制序列的第二个比特位的结果一定变为0
我们讲umask的改为0007,之后创建两个普通文件和一个普通目录,在之前命名的基础上都加了个1
000 000 111 取反111 111 000,所以起始权限中的前3个比特位都是0,文件的最终权限就是660,目录的最终权限就是770
4.4 粘滞位(共享目录背景+粘滞位(只能给共享目录添加 chmod +t)的引出+目录w权限的深入理解)
1.背景:在使用Linux的时候,未来很有可能会有一些共享目录,被所有的普通用户共享,用来保存普通用户产生的临时数据。这个文件可以只属于自己,也可以公开使用
我们的home目录就是由root管理员创建的
Linux下,作为一个正常用户,他的用户家目录是只对自己开放的,而不对任何人开放。
譬如下面的wyn和wyn1的用户家目录只有user拥有rwx的权限,所属组和other没有任何权限。
2.共享的目录通常都是由root来提供的,即使某个目录的拥有着和所属组都是root,但这也不影响,只要root将权限放开,其他普通用户均可以以other的身份来访问这个目录
如下面所示,作为普通用户wyn,即使目录bin的拥有者和所属组都是root,但root给other提供了r可查看,x可进入的权限,那我们作为other也是可以访问这个目录的
因为现在的根目录的拥有着和所属组都是root,而我们是一个wyn普通用户,所以对于根目录,我们就是一个other的角色,我们是没有w权限的,所以无法创建一个公共目录public,但我们可以切换成成root用户在下面创建一个public公共目录
这样我们就利用root的身份,在根目录下创建了一个public目录,这个目录的最终权限是755,111 101 101,这是因为在root身份下,umask掩码的值为0022,000 010 010
,所以起始权限777经过掩码的处理后,就变为了755.
我们现在将public目录的权限全部放开,那其实现在无论是什么用户,无论是谁,都可以在我们的public公共目录下,创建文件,对文件进行写入,查看public目录下的信息,什么的都可以进行了,因为root已经把public的权限给我们打开了,所以所有人都可以在public这个目录下,拥有对目录的rwx权限。
我们现在分别作为wyn和wyn1的身份在public这个公共目录下创建了两个普通文件,然后我作为wyn的身份想要看一下wyn1里面的内容,当然可以看到啦,因为wyn1文件的other是拥有可读r的权限的,但现在我想要以wyn的身份向wyn1文件中写入一些东西时,这就不允许了,因为wyn1这个文件对other这样的角色,只开放了r权限,没有开放w和x权限,所以wyn是不可以写入的,正如bash返回给我们的指令Permission denied权限拒绝。
但是wyn现在很不爽,喵的你个wyn1文件就给你自己和root所有权限开放,我作为wyn只能读取这个文件,凭什么?然后一气之下,wyn直接删除了用户wyn1的文件,为什么能删呢?因为public对所有角色的所有权限都开放了,只要对目录public有w权限,那么现在任何一个用户都可以随便删除public下的任何一个文件,因为public对三个角色都开放了w权限么,那无论什么身份的用户都可以在public目录下像删除谁就删除 谁,无论是删自己的文件,还是删别人的文件,没有任何权限约束,想怎么删就怎么删。
就像下面,我们就坏坏的把wyn1文件给删除掉了。
所以现在就有一个非常严重的问题摆在我们的面前,public目录下的文件被所有人共享的时候,受权限的约束,但是拦不住别人删我的文件!!!
这里起始有一个逻辑,就是为什么共享目录拦不住我们删除文件呢?因为目录的w权限本身就可以在目录下创建或删除文件,他是同时带有这两个权限的,而一个共享目录他是必须必须要拥有其他用户在里面创建文件的权限,所以他又必须带上w,带上w那也就意味着,其他用户可以随便删除文件了,这样无法化解的矛盾,就必须有人来解决,这个人就是+t,粘滞位的作用就引出来了。
我们现在利用root的身份对public的所有角色加上t粘滞位并且带上a选项,但可以看到只在public的other角色下的x位置变成了t,t就是该目录设置的粘滞位
指令:chmod +t public
加上我们的粘滞位之后,我们又想故技重施,但是这回我们删不了了,操作被拒绝了,因为我们的public共享目录是被设置了粘滞位的
设置粘滞位之后,共享目录public下的文件一般只能被两种人删除,一种是root,一种是文件的拥有者
起始也可以被目录的拥有者删除,但目录的拥有者一般就是root,所以我们上面才说,共享目录下的文件一般都是由root或文件的拥有者删除的。
5.权限的匹配规则(很重要!很重要!很重要!)
权限的匹配规则是:只能匹配一个人,并且优先匹配拥有者,然后才是所属组,最重要的是他只会匹配一次。
三、关于Linux指令和Linux下文件权限的总结
1.Linux发展史
2.云服务器环境的搭建
3.ls/cd/pwd/whoami/touch/mkdir/rm/rmdir/bc/cal/date/wc/grep/more/less/head/tail/zip/unzip/tar/ll/clear/cat/man/echo/tree/nano/which/whereis/find/file/cp/mv/chmod/chgrp/sort/uniq/gcc/su/sudo/top/stat/uname/alias/umask/history/useradd/userdel/passwd/usermod/chown
4.Linux目录结构、重定向、管道、~、-、家目录、文件类型、目录权限、umask、粘滞位
5.权限、概念、用户(具体的人,角色)、chmod ugo±rwx or 八进制,chown chgrp更改角色