Linux 目录与文件权限分析,linux目录权限分析


  如果说在Java世界中,万物皆对象,那么在Linux世界中,可以说万物皆文件。Linux文件一般分为两种,一般文件和目录文件。文件权限对于数据安全至关重要,有必要清楚的知道一般文件权限和目录文件权限的意义。

  • 权限对文件的重要性

  文件是实际含有数据的地方,包括一般文本文件、数据库内容档、二进制可可执行文件(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):

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

    • 创建新的文件与目录;
    • 删除已经存在的文件与目录(不论该文件的权限为何!)
    • 将已存在的文件或目录进行更名;
    • 搬移该目录内的文件、目录位置。 总之,目录的w权限就与该目录下面的文件名异动有关就对了啦!

     x (access directory):

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

  现在假设“文件是一堆文件数据夹”,所以你可能可以在上面写/改一些数据。而“目录是一堆抽屉”,因此你可以将数据夹分类放置到不同的抽屉去。 因此抽屉最大的目的是拿出/放入数据夹喔!现在让我们汇整一下数据:

元件 内容       叠代物件 r w x
文件 详细数据data 文件数据夹 读取文件内容 修改文件内容 执行文件内容
目录 文件名 可分类抽屉 读到文件名 修改文件名 进入该目录的权限(key)

    

 

 

  

  根据上面的分析,可以看到,对一般文件来说,rwx 主要是针对“文件的内容”来设计权限,对目录来说,rwx则是针对“目录内的文件名列表”来设计权限。 其中最有趣的大概就属目录的x 权限了!“文件名怎么执行”?没道理嘛!其实,这个 x 权限设计,就相当于“该目录,也就是该抽屉的 "钥匙" ”啦! 没有钥匙你怎么能够打开抽屉呢?对吧!

  • 具体实例

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

  drwxr--r-- 3 root root 4096 Jun 25 08:35 test

  系统有个帐号名称为hah,这个帐号并没有支持root群组,请问hah对这个目录有何权限?是否可切换到此目录中?答:hah对此目录仅具有r的权限,因此hah可以查询此目录下的文件名列表。因为hah不具有x的权限,亦即 hah没有这个抽屉的钥匙啦! 因此hah并不能切换到此目录内! 

  上面这个例题中因为hah具有r的权限,因为是r乍看之下好像就具有可以进入此目录的权限,其实那是错的。 能不能进入某一个目录,只与该目录的x权限有关啦!此外, 工作目录对于指令的执行是非常重要的,如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r或w的权限。

  例2:假设有个帐号名称为xixi,他的主文件夹在/home/xixi/,xixi对此目录具有[rwx]的权限。 若在此目录下有个名为the_root.data的文件,该文件的权限如下:

  -rwx------ 1 root root 4365 Sep 19 23:20 the_root.data

  请问xixi对此文件的权限为何?可否删除此文件?答:如上所示,由于xixi对此文件来说是“others”的身份,因此这个文件他无法读、无法编辑也无法执行, 也就是说,他无法变动这个文件的内容就是了。但是由于这个文件在他的主文件夹下, 他在此目录下具有rwx的完整权限,因此对于the_root.data这个“文件名”来说,他是能够“删除”的! 结论就是,xixi这个用户能够删除the_root.data这个文件! 

  上述的例子解释是这样的,假设有个莫名其妙的人,拿着一个完全密封的数据夹放到你的办公室抽屉中,因为完全密封你也打不开、看不到这个数据夹的内部数据(对文件来说,你没有权限)。 但是因为这个数据夹是放在你的抽屉中,你当然可以拿出/放入任何数据在这个抽屉中(对目录来说,你具有所有权限)。 所以,情况就是:你打开抽屉、拿出这个没办法看到的数据夹、将他丢到走廊上的垃圾桶!搞定了 (顺利删除!)!

相关内容