Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1371075
  • 博文数量: 245
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3094
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 14:51
文章存档

2011年(2)

2009年(152)

2008年(91)

我的朋友

分类: LINUX

2009-01-10 12:38:36



现在我们知道了Linux系统内档案的三种身份(拥有者、群组与其他人),知道每种身份都有三种权限(rwx), 已知道能够使用chown, chgrp, chmod去修改这些权限与属性,当然,利用ls -l去观察档案也没问题。 前两小节也谈到了这些档案权限对于资料安全的重要性。那么,这些档案权限对于一般档案与目录档案有何不同呢? 有大大的不同啊!底下就让鸟哥来说清楚,讲明白!

* 权限对档案的重要性

档案是实际含有资料的地方,包括一般文字档、资料库内容档、二进位可执行档(binary program)等等。 因此,权限对于档案来说,他的意义是这样的:

* r (read):可读取此一档案的实际内容,如读取文字档的文字内容等;
* w (write):可以编辑、新增或者是修改该档案的内容(但不含删除该档案);
* x (eXecute):该档案具有可以被系统执行的权限

那个可读(r)代表读取档案内容是还好瞭解,那么可执行(x)呢?这里你就必须要小心啦! 因为在Windows底下一个档案是否具有执行的能力是藉由‘ 副档名 ’来判断的, 例如:.exe, .bat, .com 等等,但是在Linux底下,我们的档案是否能被执行,则是藉由是否具有‘x’这个权限来决定的!跟档名是没有绝对的关系的!

至于最后一个w这个权限呢?当你对一个档案具有w权限时,你可以具有写入/编辑/新增/修改档案的内容的权限, 但并不具备有删除该档案本身的权限!对于档案的rwx来说, 主要都是针对‘档案的内容’而言,与档案档名的存在与否没有关系喔!因为档案记录的是实际的资料嘛!

* 权限对目录的重要性

档案是存放实际资料的所在,那么目录主要是储存啥玩意啊?目录主要的内容在记录档名清单,档名与目录有强烈的关连啦! 所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?

* r (read contents in directory):

   表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的档名资料。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!

* w (modify contents of directory):

   这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有移动该目录结构清单的权限,也就是底下这些权限:

          o 建立新的档案与目录;
          o 删除已经存在的档案与目录(不论该档案的权限为何!)
          o 将已存在的档案或目录进行更名;
          o 搬移该目录内的档案、目录位置。

      总之,目录的w权限就与该目录底下的档名移动有关就对了啦!

* x (access directory):

      咦!目录的执行权限有啥用途啊?目录只是记录档名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的x代表的是使用者能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登入Linux时, 你所在的家目录就是你当下的工作目录。而变换目录的指令是‘cd’(change directory)啰!

目录的x权限决定用户是否可以进入该目录。

大致的目录权限概念是这样,底下我们来看几个范例,让你瞭解一下啥是目录的权限啰!

例题:
有个目录的权限如下所示:

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的权限,如上面的范例所示那样,那样的结果就是导致网站伺服器软体无法到该目录下读取档案(最多只能看到档名), 最终用户总是无法正确的查阅到档案的内容(显示权限不足啊!)。要注意:要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给! 为什么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 则具有相当重要的权限,因为他可以让使用者删除、更新、新建档案或目录, 是个很重要的参数啊!这样可以理解了吗?! ^_^


评论:当目录的others没有具备x的权限时,others是无法进入该目录的。

阅读(1859) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~