linux 文件夹权限及umask

先创建一个目录,看看权限:

$ ll
总用量 20
drwxrwxr-x   3 huangxm huangxm  4096  2月 16 16:35 ./
drwxr-xr-x 128 huangxm huangxm 12288  2月 16 16:35 ../
drwxrwxr-x   2 huangxm huangxm  4096  2月 16 16:35 test/

然后我们将权限更改为444, 即所有都是r权限

$ ll
总用量 20
drwxrwxr-x   3 huangxm huangxm  4096  2月 16 16:35 ./
drwxr-xr-x 128 huangxm huangxm 12288  2月 16 16:35 ../
dr--r--r--   2 huangxm huangxm  4096  2月 16 16:35 test/

进入目录试一下

$ whoami
huangxm
$ cd test
bash: cd: test: 权限不够
huangxm@huanghao-Virtual-M

没有权限进入目录,看来只有r权限是不行的,那我们再加上w权限

$ ll
总用量 20
drwxrwxr-x   3 huangxm huangxm  4096  2月 16 16:35 ./
drwxr-xr-x 128 huangxm huangxm 12288  2月 16 16:35 ../
drw-rw-r--   2 huangxm huangxm  4096  2月 16 16:35 test/

再cd进入目录试一下

$ cd test
bash: cd: test: 权限不够

看来还是不行。那我们就加上X权限 吧

 

$ ll
总用量 20
drwxrwxr-x   3 huangxm huangxm  4096  2月 16 16:35 ./
drwxr-xr-x 128 huangxm huangxm 12288  2月 16 16:35 ../
dr-xr-xr--   2 huangxm huangxm  4096  2月 16 16:35 test/

再cd进入目录:

$ cd test
$ pwd
/home/huangxm/测试目录/test

看来只有读权限是没有办法进入目录的,只有rw权限也是不能进入目录的,所以一定要x权限都有才可以。

所以一般情况下,系统里的文件夹都是755权限,允许所有用户进入文件夹。

 

那我们在test目录下新建一个文件a.txt,并将test目录权限改为766,使所有用户都有rw权限。

复制代码
$ ll
总用量 20
drwxrwxr-x   3 huangxm huangxm  4096  2月 16 16:35 ./
drwxr-xr-x 128 huangxm huangxm 12288  2月 16 16:35 ../
drwxrw-rw-   2 huangxm huangxm  4096  2月 16 16:53 test/

$ ll
总用量 8
drwxrw-rw- 2 huangxm huangxm 4096  2月 16 16:53 ./
drwxrwxr-x 3 huangxm huangxm 4096  2月 16 16:35 ../
-rw-r--r-- 1 root    root       0  2月 16 16:53 a.txt
复制代码

可以看到test文件夹所有用户都有w权限 , a.txt文件除root之外都只有r权限,现在我们以其它用户尝试修改一下

复制代码
d
fd
fd
f
ffffffffff
E45: 已设定选项 'readonly' (请加 ! 强制执行)
复制代码

强制保存一下,发现保存成功了。再打开文件看看

复制代码
$ cat a.txt
ijfeihifh
f
e
f
ef
e
fe
f
ef
复制代码

内容已经保存了。。明明文件是没有写入权限的,但是可以强制写入,而且可以删除文件,所以文件夹给w权限是相当危险的事情。

总结一下:

权限 操作
r cd
rx cd ls
wx cd touch rm(self,other) vi(self,other)
wxt cd touch  rm(self)  vi(self)

 

理一下思路:

1. 使用root用户创建目录test , 并给others  wx权限,并创建a,b,c三个文件

# mkdir test
#chmod o=wx test
# touch test/{a,b,c}

查看一下, a,b,c是属于root的

-rw-r--r-- 1 root    root       0  2月 16 18:00 a
-rw-r--r-- 1 root    root       0  2月 16 18:00 b
-rw-r--r-- 1 root    root       0  2月 16 18:00 c

2. 切换到普通用户身份,尝试删除a

$ rm -f a

到root用户下ll看一下,普通用户wx没有ls权限

复制代码
# ll
总用量 8
drwxr-x-wx 2 root    root    4096  2月 16 18:01 ./
drwxrwxr-x 3 huangxm huangxm 4096  2月 16 17:56 ../
-rw-r--r-- 1 root    root       0  2月 16 18:00 b
-rw-r--r-- 1 root    root       0  2月 16 18:00 c
复制代码

a已经被删掉了

3. 以普通用户vi b,修改后强制保存,也是可以的。

4. 到root用户下,给test目录加个o=t权限

# chmod o+t test
# ls -l
总用量 4
drwxr-x-wt 2 root root 4096  2月 16 18:02 test

到普通用户下,尝试删除b

$ rm -f b
rm: 无法删除"b": 不允许的操作

加了t权限后已经无法删除别人的文件了。再尝试vi一下

"b" E212: 无法打开并写入文件
请按 ENTER 或其它命令继续

即使加!强制保存也不行了。

 

那么用数字形式怎么加t权限呢,比如tmp目录,这是个临时目录,所有人都需要往里放东西,所以它是777的权限,但是想一下,如果root放进去的东西,那别的用户是不是也可以修改,那就不合理了。所以tmp目录需要有个t权限,不允许其它用户修改,使用数字形式就是:

#chmod 1777 /tmp

 

umask:

每个用户在创建文件和文件夹的时候,都会给予文件和文件夹一个默认权限 ; 默认权限就是根据各用户的umask值来确定的。我们用root和普通用户创建文件和文件夹看看权限:

drwxr-xr-x 2 root    root    4096  2月 17 11:15 rootdir
-rw-r--r-- 1 root    root       0  2月 17 11:15 rootfile
drwxrwxr-x 2 huangxm huangxm 4096  2月 17 11:15 userdir
-rw-rw-r-- 1 huangxm huangxm    0  2月 17 11:15 usertouch

可以看出root用户创建的文件夹权限是755 ,创建的文件权限是644;普通用户创建的文件夹权限是775,创建的文件权限是664

分别查看一下root和普通用户的umask值

# umask
0022
$ umask
0002

root的umask是022  , 普通用户的是002

文件夹的权限 777 – 022 = 755 , 文件权限 666 – 022 = 644

我们可以这么理解,文件夹权限就是777 – umask     文件权限就是666 – umask

但并不是真的是减法,实际上是掩码,尝试一下将umask值设为777 (在当前用户下umask 777可以设置),那么文件权限是000,并不是-1

posted @ 2017-08-21 07:56  专注it  阅读(2430)  评论(0编辑  收藏  举报