Linux学习-目录权限

来源:互联网 发布:活动目录 知乎 编辑:程序博客网 时间:2024/06/07 03:07

目录权限

目录的主要内容是记录文件名列表,针对目录:

r 表示具有读取目录结构列表的权限,具有读取一个目录的全显示,表示可以使用ls命令查询该目录下的文件名数据。

w 表示具有更改该目录结构列表的权限:包括新建文件与目录,删除已存在的文件与目录(不论该文件权限为何),将与存在的文件或目录重命名,转移该目录内文件或目录位置。

x 表示用户能否进入该目录进入工作目录,以及能否访问该目录下的文件和子目录。如果在某目录下不具有x权限,就无法切换到该目录下,也无法执行该目录下的任何命令,即使具备w权限。

我们看一下x权限如何影响用户对目录的操作:

现在当前用户对test目录不具备x权限,但具备r和w权限

drw-rw-r--  2 shawn shawn   4096 Mar 30 05:35 test/
使用ls命令查看目录下的目录列表:

shawn@ubuntu:~$ ls -al test/ls: cannot access test/deadloop: Permission deniedls: cannot access test/deadloop.c: Permission deniedls: cannot access test/..: Permission deniedls: cannot access test/.: Permission deniedtotal 0d????????? ? ? ? ?            ? .d????????? ? ? ? ?            ? ..-????????? ? ? ? ?            ? deadloop-????????? ? ? ? ?            ? deadloop.c
此时能够看到该目录下的所有文件列表,但所有文件的详细信息都是问号。这是因为当前用户具备r权限,查看目录下的文件列表,但是不具备x权限,无法获取该目录下所有文件的属性和内容。

然后尝试删除该目录下的文件:

shawn@ubuntu:~$ rm test/deadlooprm: cannot remove ‘test/deadloop’: Permission denied
可以看到,虽然具有w权限,但由于不具备x权限,无法访问该目录下的任何内容

另外,Linux的文件还有一种称为stick bit的权限。stick bit是为了阻止一般用户删除被其他用户所拥有的文件。常见的用法是为目录设置stick bit,这样对于该目录下的文件,只有目录的所有者、文件的所有者或root用户才有权限删除或移动该目录。如果对目录不设置stick bit,一个用户只要他对该目录具有w和x权限,他就能删除该目录下的文件,即使这些文件的所有者不是他。

Linux中最常见的做法是为/tmp目录添加stick bit,添加stick bit的方法可以是:

chmod +t /tmp
也可以用八进制数设置权限,权限最前面增加一个1即可:

chmod 1777 /tmp

drwxrwxrwt   5 root root  4096 May 13 21:55 tmp/
此时,可以看到tmp目录的权限最后一位是t,表明已经添加stick bit。

目前/tmp目录下存在一个test_file文件,用户所有者是root。由于设置了stick bit,尽管当前用户对/tmp目录具备w和x权限,但仍无法删除test_file文件:

shawn@ubuntu:~$ ll /tmp/test_file -rw-r--r-- 1 root root 0 May 13 21:55 /tmp/test_fileshawn@ubuntu:~$ rm /tmp/test_file rm: remove write-protected regular empty file ‘/tmp/test_file’? yrm: cannot remove ‘/tmp/test_file’: Operation not permitted
如果给tmp目录去掉stick bit:

chmod -t /tmp 或 chmod 0777 /tmp
则当前用户就可以删除/tmp/test_file文件。

综上所述,stick bit可以有效地保护目录下的文件不会被其他一般用户误删。





0 0
原创粉丝点击