鸟哥Linux私房菜读书笔记5:Linux文件的权限及管理

     Linux和Windows比起来一个显著的特点就是多用户、多任务,在这样一个相对较复杂的使用环境中,保护好自己的文件就显得尤其重要了,这时就需要了解怎么控制一个文件的读、写、执行的权限啦。

用户/用户组:

     要了解如何分配权限,首先要知道Linux怎样区分用户。在Linux中,有个较基础的“用户/用户组”的概念,这里用我们的工作环境来做说明:有员工ABCD四人,其中A是BCD的manager,A要求B和C合作完成项目project1,而D单独负责项目project2,这时,A和B从属于用户组project1,D从属于组project2,且各项目之间不得相互交流,那么从属于project2的D是无法进入project1组的,更不可能查看任何关于project1的代码和文件了,而同属于project1组的A和B之间能相互交流,查看彼此的代码、文档等,当然,前提是对方同意释放这样的权限。而对于manager A而言,只要他愿意,可以查看任意关于project1和project2的文件,这便是root用户了。

  这里引入owner/group/other的概念就比较易于理解了,如上图,假设作为用户B登入系统并创建文件file1,那么对于file1来说,owner自然就是B了,而B和C是同一个group(project1),那么D对于B来说就是other(group)了。

      关于用户/用户组还有个需要注意的是相关信息的存储位置:用户相关的信息都记录在/etc/passwd中,密码记录在/etc/shadow中,而组名都是记录在/etc/group中。

文件的类型与权限:

  这里需要用借助命令语句ls去帮助理解,我们在命令终端的任意文件夹下输入ls可得到如下图结果:

  如图所示,ls -l 命令共显示出7列数据,这里我们只关注第一、三、四列,其余列和文件权限没什么关系,会另外写篇随笔记录。

  第一列:文件类型和权限信息

    我们知道,Linux中一切皆文件,包括打印机啊、鼠标啊之类的在Linux中也是以文件形式显示的。以反白的这行为例:

    我们可以发现,第一列中绝大多数行都是以d或者-开头,其中d表示目录,-表示文件,另外还有|、b、c等所表示的其他文件类型:

文件类型 首字符 介绍
普通文件 - 普通文件又分为纯文本文件(ASCII)、二进制文件(binary)和数据格式文件(data)。可通过命令file来查看文件类型
目录 d  
链接文件 l 像Windows中的快捷方式一样的存在
设备/设备文件  c 字符设备文件 ,也就是一些串行端口的接口设备,如键盘。
 b 块设备文件,也就是一些并行端口的接口设备,如硬盘。
管道  p pipe
套接字  s socket 

    文件名后面紧跟的就是三组r,w,x,-组成的序列,其中-表示什么权限都没有,而r,w,x的权限分别可简述成读、写和执行,但是对于文件和文件夹,他们表示的意义其实不同,特别是目录的写权限,需要格外注意:

  文件 目录
Read 可打开文件阅读 可用ls查看文件夹中的内容,但由于没有x权限,则ls命令输出结果为乱码
Write 可对文件进行修改,仅限内容的修改 可对目录的结构进行修改,包括增删改,如重命名文件,删除文件
eXecute 若为可执行文件,则有权限执行该文件 可通过cd命令进入文件夹

    如果我们想重命名文件,并是不需要获取该文件的写权限,而是要获取其目录的写权限,这就告诉我们在赋予目录权限的时候要格外注意,如果将写权限赋给其他用户,则对方就拥有了任意改变该目录结构的权限,这时很危险的。以下是几个小例子,还是针对上面反白显示的permissionTest目录来说的,     我们可以看到permissionTest对other组的用户r-x,比对上表,也就是可以用cd进入该目录并且ls显示目录内容,但是不可以修改目录结构,如用touch命令     生成一个新的文件fileOfJane:

    而对于permissionTest目录中的文件file1来说,用户jane对于file1来说属于other组用户,拥有权限为r--,也就是file1对于jane来说是个只读文件,所以可以用less来查看文件内容,但是当尝试修改文件的时候,会被告知permission denied。

    倘若我们修改permissionTest的属性使other组的用户只有读权限会怎样呢?这时jane用户连cd进该目录的权限都没有了,ls显示内容也只能看到一连串的问号……

    下面尝试给other组r、w、x全部权限,那么用户jane就可以顺顺利利的对目录结构进行修改了,这其中会有很大的隐患,如:

    用户jane不仅自己创建出文件file4,并且将属于root用户的file1也删除了,也就是不管里头的文件是谁的、有多重要,只要我有对该目录的写权限,我就可以统统删掉! 当然,还是可以通过设置隐藏属性去避免这样的行为发生,但是,在给予一个用户对于目录的写权限的时候,还是要格外小心。

  第三列:owner,文件的所属者

  第四列:group,文件所属者的所属组。默认在我们创建用户的时候,会生成一个与用户同名的组,里面只有该用户一人。

修改文件权限(chgrp[change group]/chown[change owner]/chmod[change modes]):

  前面已经介绍了文件的权限,当我们创建一个新文件或者从别处copy一个文件的时候,常常想更改某些权限,这时就要用到chgrp/chown/chmod啦,这三个命令分别是用来修改文件或目录的group、owner和权限的。语法很相似,chgrp/chown/chmod [参数选项] newGroup/newOwner/newMod file/directory

  需要提一提的是,在使用chmod的时候,权限有两种表现方法。一种使用数字表示,还有一种是字母表示,通过加减号来增减对应权限。用数字表示时,r->4, w->2, x->1, 所以想要将权限改成rwx时,用数字表示就是r+w+x=7,别的可以此类推。而用符号表示就相对比较好理解,比如我要给other组增加写权限,那么就是o+w,也可以用o=rwx(假设原先的权限是r-x)。我们用u表示user, g表示group, o表示other。

  还有一个要提到的是参数[-R],man中是这么说的:

  -R Change the modes of the file hierarchies rooted in the files instead of just the files them-selves.[其实就是递归修改这个目录中的文件的对应权限,这里截取的是chmod中的解释,chgrp和chown同样支持这个参数]

  下面是chgrp/chown/chmod的实例截图:

posted @ 2013-07-07 18:22  geeky_jane  Views(608)  Comments(0Edit  收藏  举报