Linux下目录的权限和对应的效用


=Start=

缘由:

最近在通过看一些面试题来测试自己对Linux系统的了解程度,其中有一道是关于Linux下目录权限的问题的。虽然之前(对该问题)有过一定了解,但时间久了现在记得不太清楚了,所以这次刚好就温习一遍,还挺有意思的。

正文:

先说结论:在Linux中,文件的可执行权限(x)表示该文件可以被系统解释并执行;目录的可执行权限(x)表示允许用户通过cd命令将工作目录改到该目录(反过来说,如果你对目录没有可执行权限,你将无法`cd`进入该目录,且最多只能知道该目录下有哪些文件(最多知道文件名,无法知道文件的其它信息),但是无法查看/修改文件内容(即便你有该文件的读写权限))。

下面看看具体的实验过程:

##测试目录的可执行权限(x)##
结论:如果你对目录没有可执行权限,则你无法`cd`进入该目录,且最多只能知道该目录下有哪些文件(仅限于文件名,无法知道文件的其它信息),但是无法查看/修改文件内容(即便你有该文件的读写权限)。

[user@crazyof]~/test_s$ mkdir dir_without_x
[user@crazyof]~/test_s$ ll
drwxr-xr-x 2 user users 4.0K 6月  11 19:34 dir_without_x     #新建目录的默认权限为`755`

[user@crazyof]~/test_s$ echo "hi" > dir_without_x/a.txt
[user@crazyof]~/test_s$ echo "hey" > dir_without_x/b.txt

[user@crazyof]~/test_s$ ll dir_without_x
总用量 8.0K
-rw-r--r-- 1 user users 3 6月  11 19:35 a.txt
-rw-r--r-- 1 user users 4 6月  11 19:35 b.txt

[user@crazyof]~/test_s$ ls -alt
drwx------ 20 user users 4096 6月  11 19:35 ..
drwxr-xr-x  2 user users 4096 6月  11 19:35 dir_without_x
drwxr-xr-x  4 user users 4096 6月  11 19:34 .

[user@crazyof]~/test_s$ chmod a-x dir_without_x     #去掉所有人(除root外)对目录的可执行权限
[user@crazyof]~/test_s$ ll
drw-r--r-- 2 user users 4.0K 6月  11 19:35 dir_without_x  #目录的权限变为`644`

[user@crazyof]~/test_s$ cd dir_without_x  #无法`cd`至该目录
cd: 权限不够: dir_without_x

[user@crazyof]~/test_s$ ll dir_without_x  #只能列出该目录下对该用户可见的文件/目录名
ls: 无法访问dir_without_x/b.txt: 权限不够
ls: 无法访问dir_without_x/a.txt: 权限不够
总用量 0
-????????? ? ? ? ?            ? a.txt
-????????? ? ? ? ?            ? b.txt

[user@crazyof]~/test_s$ echo `date` >> dir_without_x/a.txt  #无法修改该目录下的文件
bash: 权限不够: dir_without_x/a.txt

[user@crazyof]~/test_s$ cat dir_without_x/a.txt     #无法读取该目录下的文件
cat: dir_without_x/a.txt: 权限不够


##测试目录的可读权限(r)##
结论:如果你对目录没有可读权限,则你无法知道该目录下有哪些文件,不过你可以通过暴力猜解来获取该目录下(对你开放了读/写权限的)文件名列表(如果某个文件对你开放了读/写权限,你还可以查看/修改该文件)。

[user@crazyof]~/test_s$ chmod a+x dir_without_x  #恢复对该目录的可执行权限
[user@crazyof]~/test_s$ ll dir_without_x
总用量 8.0K
-rw-r--r-- 1 user users 82 6月  11 19:38 a.txt
-rw-r--r-- 1 user users  4 6月  11 19:35 b.txt
[user@crazyof]~/test_s$ cat dir_without_x/a.txt
hi
[user@crazyof]~/test_s$ chmod a-r dir_without_x  #去掉所有人(除root外)对该目录的可读权限
[user@crazyof]~/test_s$ ll dir_without_x
ls: 无法打开目录dir_without_x: 权限不够

[user@crazyof]~/test_s$ cd dir_without_x  #可以通过`cd`命令切换到该目录下
[user@crazyof]~/test_s/dir_without_x$ pwd
/home/user/test_s/dir_without_x
[user@crazyof]~/test_s/dir_without_x$ ll  #但无法查看该目录下的文件/子目录
ls: 无法打开目录.: 权限不够
[user@crazyof]~/test_s/dir_without_x$ cat a.txt  #如果知道具体文件名的话,可以直接指定
hi
[user@crazyof]~/test_s/dir_without_x$ echo `date +%F` >> a.txt
[user@crazyof]~/test_s/dir_without_x$ cat a.txt
hi
2016-06-11


##测试目录的可写权限(w)##
结论:如果你对目录没有可写权限,则你无法在该目录下新建/删除文件。

[user@crazyof]~/test_s$ chmod a+r,a-w dir_without_x  #恢复对该目录的读权限,删除对该目录的写权限
[user@crazyof]~/test_s$ cd dir_without_x
[user@crazyof]~/test_s/dir_without_x$ ll  #可以查看该目录下有哪些文件/子目录
总用量 8.0K
-rw-r--r-- 1 user users 82 6月  11 19:38 a.txt
-rw-r--r-- 1 user users  4 6月  11 19:35 b.txt
[user@crazyof]~/test_s/dir_without_x$ cat a.txt  #可以查看该目录下有读权限的文件内容
hi
[user@crazyof]~/test_s/dir_without_x$ echo "xyz" >> a.txt    #可以修改该目录下有写权限的文件内容
[user@crazyof]~/test_s/dir_without_x$ ll
总用量 8.0K
-rw-r--r-- 1 user users 86 6月  11 19:55 a.txt
-rw-r--r-- 1 user users  4 6月  11 19:35 b.txt
[user@crazyof]~/test_s/dir_without_x$ cat a.txt
hi
xyz
[user@crazyof]~/test_s/dir_without_x$ echo "xyz" >c.txt    #无法在该目录下新建文件(也无法删除已有文件)
bash: 权限不够: c.txt

通过上面的命令可知,对于一个目录来说,可执行权限可是相当重要!

参考链接:

=END=

,

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注