您的位置:首页 > 运维架构 > Linux

Linux 权限管理之一:文件夹的 rwx 权限

2015-05-30 00:50 801 查看
转载请注明来源 /article/7734840.html

文件夹的权限管理理应不是个复杂的东西,但我总是弄混,今天整理出来加深一下自己印象。

文件夹也像普通文件那样有3种基本的权限:r(Read)、w(Write)、x(eXecutable),但却有一些微妙的区别。

r(Read)和 x(eXecutable)

某一用户拥有对文件夹的 r 权限以后,并不意味着该用户该用户可以进入该目录读取该目录的内容,r 权限让用户能够读取该目录的内容,但不能进入该目录,测试如下:

[admin@localhost test]$ mkdir dir
[admin@localhost test]$ ll
total 4
drwxrwxr-x. 2 admin admin 4096 May 30 00:10 dir
[admin@localhost test]$ touch dir/doc
[admin@localhost test]$ chmod 400 dir
[admin@localhost test]$ ll
total 4
dr--------. 2 admin admin 4096 May 30 00:10 dir
[admin@localhost test]$ cd dir
bash: cd: dir: Permission denied
[admin@localhost test]$ ll dir/
ls: cannot access dir/doc: Permission denied
total 0
-????????? ? ? ? ?            ? doc


可见,用户被拿掉目录的 x 权限后,仅仅可以在目录外读取该目录的文件列表,而不能进入该目录,甚至无法得知该目录下文件的权限、所有者、日期的内容。

关于 x 权限,我们继续上面的操作:

[admin@localhost test]$ chmod 700 dir/
[admin@localhost test]$ echo "echo 'I can execute'" > dir/doc
[admin@localhost test]$ chmod 700 dir/doc
[admin@localhost test]$ ll dir/
total 4
-rwx------. 1 admin admin 21 May 30 00:15 doc #拥有对该文件的 rwx 权限
[admin@localhost test]$ chmod 400 dir/
[admin@localhost test]$ ll
total 4
dr--------. 2 admin admin 4096 May 30 00:10 dir #此时只对文件夹有 r 权限
[admin@localhost test]$ cat dir/doc
cat: dir/doc: Permission denied #虽然对文件夹和文件有 r 权限,但我无法读取该文件
[admin@localhost test]$ ./dir/doc
bash: ./dir/doc: Permission denied #虽然对文件有 x 权限,但我无法执行该文件


由上可见,对一个文件夹没有 x 权限时,你是无法读或者执行该文件夹下的文件的。

继续上面的操作:

[admin@localhost test]$ chmod 500 dir/
[admin@localhost test]$ ll
total 4
dr-x------. 2 admin admin 4096 May 30 00:10 dir #得到了 x 权限
[admin@localhost test]$ cat dir/doc
echo 'I can execute' #可以读取文件
[admin@localhost test]$ ./dir/doc
I can execute #可以执行文件


可以看出,当我拥有文件夹的 x 权限时,我才能得到该文件夹下文件的 rx 权限。

事实上,我虽然对文件夹还没有 w 权限,但我是可以修改文件夹下文件的内容的:

[admin@localhost test]$ echo "I can wirte!" > dir/doc
[admin@localhost test]$ cat dir/doc
I can wirte!


如果我把文件夹的 r 权限去掉,只保留 x 权限呢?

[admin@localhost test]$ chmod 100 dir/
[admin@localhost test]$ cd dir/
[admin@localhost dir]$ ll
ls: cannot open directory .: Permission denied
[admin@localhost dir]$ cat doc
I can wirte!


此时我们可以进入该文件夹,但却无法获取文件列表,但我们仍然可以通过文件名来读取文件(很神奇的样子)。

w(Write)

当我们对文件夹有 w 权限时,我们可以在该文件夹下新建,删除文件(即使要删除的文件的所有者为 root,但此处不再验证),当没有 w 权限时,则无法进行这样的操作:

[admin@localhost test]$ chmod 700 dir/ #赋予 w 权限
[admin@localhost test]$ ll
total 4
drwx------. 2 admin admin 4096 May 30 00:10 dir
[admin@localhost test]$ mkdir dir/subdir
[admin@localhost test]$ touch dir/newdoc
[admin@localhost test]$ rm dir/doc
[admin@localhost test]$ ll dir/
total 4
-rw-rw-r--. 1 admin admin    0 May 30 00:25 newdoc
drwxrwxr-x. 2 admin admin 4096 May 30 00:25 subdir
[admin@localhost test]$ chmod 500 dir/ #拿掉 w 权限
[admin@localhost test]$ ll
total 4
dr-x------. 3 admin admin 4096 May 30 00:25 dir
[admin@localhost test]$ touch dir/doc
touch: cannot touch ‘dir/doc’: Permission denied
[admin@localhost test]$ rm dir/newdoc
rm: cannot remove ‘dir/newdoc’: Permission denied


但是我们仍然可以修改该文件夹下文件的权限信息:

[admin@localhost test]$ ll dir/
total 4
-rw-rw-r--. 1 admin admin    0 May 30 00:25 newdoc
drwxrwxr-x. 2 admin admin 4096 May 30 00:25 subdir
[admin@localhost test]$ chmod 777 dir/newdoc
[admin@localhost test]$ ll dir/
total 4
-rwxrwxrwx. 1 admin admin    0 May 30 00:25 newdoc
drwxrwxr-x. 2 admin admin 4096 May 30 00:25 subdir


以及上面证明的,我们可以修改文件内容。

由于删除文件夹需要递归的删除,所以如果我们对子文件夹没有 w 权限,并且该子文件夹不为空,那么我们将无法删除该子文件夹下的内容,我们也无法删除该子文件夹:

[admin@localhost test]$ chmod 700 dir/ #赋予 w 权限
[admin@localhost test]$ ll
total 4
drwx------. 3 admin admin 4096 May 30 00:25 dir
[admin@localhost test]$ touch dir/subdir/foo
[admin@localhost test]$ chmod 500 dir/subdir
[admin@localhost test]$ ll dir/
total 4
-rwxrwxrwx. 1 admin admin    0 May 30 00:25 newdoc
dr-x------. 2 admin admin 4096 May 30 00:34 subdir #对子文件夹没有 w 权限
[admin@localhost test]$ rm -rf dir/subdir
rm: cannot remove ‘dir/subdir/foo’: Permission denied
[admin@localhost test]$ ll dir/
total 4
-rwxrwxrwx. 1 admin admin    0 May 30 00:25 newdoc
dr-x------. 2 admin admin 4096 May 30 00:34 subdir #没有删除成功


最后我们可以验证,对文件夹没有 w 权限,对子文件夹有 w 权限,我们是可以对子文件夹下的内容进行新建删除操作的:

[admin@localhost test]$ chmod 500 dir/
[admin@localhost test]$ ll
total 4
dr-x------. 3 admin admin 4096 May 30 00:25 dir
[admin@localhost test]$ chmod 700 dir/subdir/
[admin@localhost test]$ ll dir/
total 4
-rwxrwxrwx. 1 admin admin    0 May 30 00:25 newdoc
drwx------. 2 admin admin 4096 May 30 00:34 subdir
[admin@localhost test]$ mkdir dir/subdir/subsubdir
[admin@localhost test]$ ll dir/subdir/
total 4
-rw-rw-r--. 1 admin admin    0 May 30 00:34 foo
drwxrwxr-x. 2 admin admin 4096 May 30 00:43 subsubdir
[admin@localhost test]$ rm dir/subdir/foo
[admin@localhost test]$ ll dir/subdir/
total 4
drwxrwxr-x. 2 admin admin 4096 May 30 00:43 subsubdir


(还有就是,复制一个文档所需要的权限是对该文档的 r 权限和对父文件夹的 x 权限)

以上,就是我对 linux 下文件夹 rwx 权限的理解与验证。

转载请注明来源 /article/7734840.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: