- 权限对文件的重要性
文件是实际存储数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。因此,权限对于文件来说,他的意义是这样的:
- r (read):可读取此文件的实际内容,如读取文本文件的文字内容等;
- w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
- x (execute):该文件具有可以被系统执行的权限。
在Windows底下一个文件是否具有执行的能力是藉由『 扩展名 』来判断的,例如:.exe, .bat, .com 等等,但是在Linux底下,文件是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟档名是没有绝对的关系的!
对于文件的rwx来说,主要都是针对『文件的内容』而言,与文件档名的存在与否没有关系!因为文件记录的是实际的数据!
- 权限对目录的重要性
文件是存放实际数据的所在,目录主要的内容在记录文件名列表,文件名与目录有强烈的关连!
- r (read contents in directory):
表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
- w (modify contents of directory):
具有异动该目录结构列表的权限,也就是底下这些权限:
- 建立新的文件与目录;
- 删除已经存在的文件与目录(不论该文件的权限为何!)
- 将已存在的文件或目录进行更名;
- 搬移该目录内的文件、目录位置。
总之,目录的w权限就与该目录底下的文件名异动有关就对了!
- x (access directory):
目录不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途!所谓的工作目录(work directory)就是你目前所在的目录!举例来说,当你登入Linux时,你所在的家目录就是你当下的工作目录。而变换目录的指令是『cd』(change directory)!
例题:
有个目录的权限如下所示:
答:
drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh系统有个账号名称为vbird,这个账号并没有支持root群组,请问vbird对这个目录有何权限?是否可切换到此目录中?
vbird对此目录仅具有r的权限,因此vbird可以查询此目录下的文件名列表。因为vbird不具有x的权限,因此vbird并不能切换到此目录内!(相当重要的概念!)
|
上面这个例题中因为vbird具有r的权限,因为是r乍看之下好像就具有可以进入此目录的权限,其实那是错的。能不能进入某一个目录,只与该目录的x权限有关!此外,工作目录对于指令的执行是非常重要的,如果你在某目录下不具有x的权限,那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r的权限。
要注意:要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给!
例题:
假设有个账号名称为dmtsai,他的家目录在/home/dmtsai/,dmtsai对此目录具有[rwx]的权限。若在此目录下有个名为the_root.data的文件,该文件的权限如下:
答:
-rwx------ 1 root root 4365 Sep 19 23:20 the_root.data请问dmtsai对此文件的权限为何?可否删除此文件?
如上所示,由于dmtsai对此文件来说是『others』的身份,因此这个文件他无法读、无法编辑也无法执行,也就是说,他无法变动这个文件的内容就是了。
但是由于这个文件在他的家目录下,他在此目录下具有rwx的完整权限,因此对于the_root.data这个『档名』来说,他是能够『删除』的!结论就是,dmtsai这个用户能够删除the_root.data这个文件! |
- 先用root的身份建立所需要的文件与目录环境
我们用root的身份在所有人都可以工作的/tmp目录中建立一个名为testing的目录,该目录的权限为744且目录拥有者为root。另外,在testing目录下在建立一个空的文件,档名亦为testing。建立目录可用mkdir(make directory),建立空文件可用touch。所以过程如下所示:
[root@www ~]# cd /tmp <==切换工作目录到/tmp [root@www tmp]# mkdir testing <==建立新目录 [root@www tmp]# chmod 744 testing <==变更权限 [root@www tmp]# touch testing/testing <==建立空的文件 [root@www tmp]# chmod 600 testing/testing <==变更权限 [root@www tmp]# ls -ald testing testing/testing drwxr--r-- 2 root root 4096 Sep 19 16:01 testing -rw------- 1 root root 0 Sep 19 16:01 testing/testing # 仔细看一下,目录的权限是 744 ,且所属群组与使用者均是 root! # 那么在这样的情况底下,一般身份用户对这个目录/文件的权限为何? |
- 一般用户的读写权限为何?观察中
在上面的例子中,虽然目录是744的权限设定,一般用户应该能有 r 的权限,但这样的权限使用者能做啥事?假设鸟哥的系统中含有一个账号名为 vbird 的,我们可以透过『 su - vbird 』这个指令来变换身份!看看底下的操作先!
[root@www tmp]# su - vbird <==切换身份成为 vbird 啰! [vbird@www ~]$ cd /tmp <==看一下,身份变了!提示字符也变成 $ 了! [vbird@www tmp]$ ls -l testing/ ?--------- ? ? ? ? ? testing # 因为具有 r 的权限可以查询档名。不过权限不足(没有x),所以会有一堆问号。 [vbird@www tmp]$ cd testing/ -bash: cd: testing/: Permission denied # 因为不具有 x ,所以当然没有进入的权限!有没有呼应前面的权限说明! |
- 如果该目录属于用户本身,会有什么状况?
只有r确实可以让用户读取目录的文件名列表,不过详细的信息却还是读不到的,同时也不能将该目录变成工作目录(用 cd 进入该目录之意)。那如果我们让该目录变成用户的,那么用户在这个目录底下是否能够删除文件?底下的练习做看看:
[vbird@www tmp]$ exit <==让 vbird 变回原本的 root 身份! [root@www tmp]# chown vbird testing <==修改权限,让vbird拥有此目录 [root@www tmp]# su - vbird <==再次变成vbird来操作 [vbird@www ~]$ cd /tmp/testing <==可以进入目录了呢! [vbird@www testing]$ ls -l -rw------- 1 root root 0 Sep 19 16:01 testing <==文件不是vbird的! [vbird@www testing]$ rm testing <==尝试刪除这个文件看看! rm: remove write-protected regular empty file `testing'? y # 竟然可以删除!这样理解了吗?! |
透过上面这个简单的步骤,你就可以清楚的知道, x 在目录当中是与『能否进入该目录』有关,至于那个 w 则具有相当重要的权限,因为他可以让使用者删除、更新、新建文件或目录!