2008-05-03

Linux的文件和目录访问权限设置

一、文件类型
  Linux下的文件可以分为5种不同的类型:普通文件、目录文件、链接文件、设备文件和管道文件。

  1. 普通文件
      这是一类常见的文件,也是常使用的一类文件,其特点是不包含有文件系统的结构信息。通常所接触到的文件,包括图形文件、数据文件、文档文件、声音文件等都属于这种文件。这种类型的文件按其内部结构又可细分为文本文件和二进制文件。
  2. 目录文件
      目录文件是用于存放文件名及其相关信息的文件,是内核组织文件系统的基本节点。目录文件可以包含下一级目录文件或普通。对于习惯于使用Windows 的用户来说,这可能有些难于理解,目录怎么会是文件呢?的确,在Linux中,目录文件是一种文件。但Linux的目录文件和其它操作系统中的“目录”的 概念不同,它是Linux文件中的一种。当然,在实际使用中可以不仔细区分这两种说法。实际上,在很多Linux的书籍和资料中就是将目录文件简称为目录 的。不过,我们必需清楚此“目录”非彼“目录”。
  3. 链接文件
      链接文件是一种特殊的文件,实际上是指向一个真实存在的文件的链接。这有点类似于Windows下的快捷方式。根据链接文件的不同,它又可以细分为硬链接文件和符号链接文件。
  4. 设备文件
      设备文件是Linux中最特殊的文件。正是由于它的存在,使得Linux系统可以十分方便地访问外部设备。Linux系统为外部设备提供一种标准接 口,将外部设备视为一种特殊的文件。用户可以像访问普通文件一样访问外部设备,使Linux系统可以很方便地适应不断发展的外部设备。通常Linux系统 将设备文件放在/dev目录下,设备文件使用设备的主设备号和次设备号来指定某外部设备。根据访问数据方式的不同,设备文件又可以细分为块设备和字符设备 文件。
  5. 管道文件
      管道文件是一种很特殊的文件,主要用于不同进程间的信息传递。当两个进程间需要进行数据或信息传递时,可以通过管道文件。一个进程将需传递的数据或信息写入管道的一端,另一进程则从管道的另一端取得所需的数据或信息。通常管道是建立在调整缓存中。
二、文件的普通权限

  Linux系统是一个典型的多用户系统,不同的用户处于不同的地位。为了保护系统的安全性,Linux系统对不同用户访问同一文件的权限做了不同的规定。

  对于一个Linux系统中的文件来说,它的权限可以分为三种:读的权限、写的权限和执行的权限,分别用r、w和x表示。不同的用户具有不同的读、写和执行的权限。

  对于一个文件来说,它都有一个特定的所有者,也就是对文件具有所有权的用户。同时,由于在Linux系统中,用户是按组分类的,一个用户属于一个或多 个组。文件所有者以外的用户又可以分为文件所有者的同组用户和其它用户。因此,Linux系统按文件所有者、文件所有者同组用户和其它用户三类规定不同的 文件访问权限。

  权限设定分为三套,分别对应所有者、同组用户、其他。第一套权限控制访问自己的文件权限,即所有者权限。第二套权限控制用户组访问其中一个用户的文件的权限。第三套权限控制其他所有用户访问一个用户的文件的权限,这三套权限赋予用户不同类型(即所有者、用户组和其他用户)的读、写及执行权限就构成了一个有9种类型的权限组。

  Linux文件系统安全模型是通过给系统中的文件赋予两个属性来起作用的,这两个赋予每个文件的属性称为所有者(ownership)和访问权限(access rights)。Linux下的每一个文件必须严格地属于一个用户和一个组。

  查看用户权限
我们可以用ls -l。
drwxr-xr-x 3 root root 4096 2008-05-03 11:57 MultiGet
-rw-r--r-- 1
root root 375904 2008-04-27 13:00 multiget_1.1.2-0getdeb1_i386(2).deb
-rw-r--r-- 1
root root 200020 2008-04-27 12:57 multiget_1.1.2-0getdeb1_i386.deb
-rw-r--r-- 1
root root 355639 2008-04-25 22:06 UltraVnc-Viewer-101.zip

这里可以看到我的几个文件的用户权限,即最前面十个字符,其中
第一个字符表示一种特殊的文件类型。其中字符可为d(表示该文件是一个目录)、b(表示该文件是一个系统设备,使用块输入/输出与外界交互,通常为一个磁 盘)、c(表示该文件是一个系统设备,使用连续的字符输入/输出与外界交互,如串口和声音设备),“-”表示该文件是一个普通文件,没有特殊属性。

  第2~10个字符当中的每3个为一组,左边三个字符表示所有者权限,中间3个字符表示与所有者同一组的用户的权限,右边3个字符是其他用户的权限。这三个一组共9个字符,代表的意义如下:
  • r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。
  • w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
  • x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
在/home目录下用每个用户的文件夹起默认权限可能为rwx------。表示目录所有者本身具有所有权限,其他用户无法进入该目录。执行mkdir命令所创建的目录,其默认权限为rwxr-xr-x,用户可以根据需要修改目录 的权限。 此外,默认的权限可用umask命令修改,用法非常简单,只需执行umask 777 命令,便代表屏蔽所有的权限,因而之后建立的文件或目录,其权限都变成000,依次类推。通常root帐号搭配umask命令的数值为022、027和 077,普通用户则是采用002,这样所产生的权限依次为755、750、700、775。有关权限的数字表示法,后面将会详细说明。
用户登录系统时,用户环境就会自动执行rmask命令来决定文件、目录的默认权限。

三、特殊权限

  其实文件与目录设置不止这些,还有所谓的特殊权限。由于特殊权限会拥有一些“特权”,因而用户若无特殊需求,不应该启用这些权限,避免安全方面出现严重漏洞,造成黑客入侵,甚至摧毁系统!!!
  • s或S(SUID,Set UID):可执行的文件搭配这个权限,便能得到特权,任意存取该文件的所有者能使用的全部系统资源。请注意具备SUID权限的文件,黑客经常利用这种权 限,以SUID配上root帐号拥有者,无声无息地在系统中开扇后门,供日后进出使用。
  • s或S(SGID,Set GID):设置在文件上面,其效果与SUID相同,只不过将文件所有者换成用户组,该文件就可以任意存取整个用户组所能使用的系统资源。
  • T或T(Sticky):/tmp和 /var/tmp目录供所有用户暂时存取文件,亦即每位用户皆拥有完整的权限进入该目录,去浏览、删除和移动文件。 因为SUID、SGID、Sticky占用x的位置来表示,所以在表示上会有大小写之分。加入同时开启执行权限和SUID、SGID、Sticky,则权限表示字符是小写的:
-rwsr-sr-t 1 root root 4096 6月 23 08:17 conf

如果关闭执行权限,则表示字符会变成大写:
-rwSr-Sr-T 1 root root 4096 6月 23 08:17 conf

四、改变权限和所有权

命令:chmod [ugoa] +或者-或者= [rwx] [文件...]
例子:chmod 777 test.c
数字的意义:
r: 对应数值4
w: 对应数值2
x:对应数值1
-:对应数值0

 数字设定的关键是mode的取值,一开始许多初学者会被搞糊涂,其实很简单,我们将rwx看成二进制数,如果有则有1表示,没有则有0表示,那么rwx r-x r- -则可以表示成为:
  111 101 100
  再将其每三位转换成为一个十进制数,就是754。

  另外,要修改整个目录的权限可以使用 chmod -R 777 test.c

  文件与目录不仅可以改变权限,其所有权及所属用户组也能修改,和设置权限类似,用户可以通过图形界面来设置,或执行chown命令:
  chown test test.c
可将所有这变更为test
使用:chown :test test.c
可将所属组变更为test组
如许对整个目录使用同样加-R



---------------------
参考文章
http://www.linuxsir.org/main/?q=node/112

没有评论: