由于 FreeBSD是一个多用户系统,不同的用户对不同的文件就应该有不同的处理权力,通常创建文件的用户就拥有这个文件,成为这个文件的属主。同样,文件也有自己的属组,这是一个文件的两个重要属性。由于文件的属主和组涉及到对文件的访问控制,因此只有root能更改文件的这两个属性,更改文件属主的命令为chown,更改文件属组的命令为chgrp。
由于不可能为每个用户都单独提供完全独立、相互隔离的文件系统,多用户操作系统必须提供一种安全的访问控制机制,使得用户既能和其他用户共享某些文件,又能保证各个用户的文件不会被非法存取或破坏。 Unix分别针对属主、同组用户和其他用户共三种不同的用户,分别设置了存取控制权限,这个权限分别为:读、写和执行,使用英文字母r(Read)、w(Write)和x(eXecute)来表示。由于对属主、组和其他用户均有这三种权限设置,因此每个文件共有九个权限参数。使用 ls的 ” -l ” 参数就能看到文件的权限设置:
$ ls -l
drwx------ 4 user wheel 512 Nov 25 17:23 Mail
-rw-rw-r-- 1 user wheel 149 Dec 4 14:18 Makefile
-rwxr-xr-x 1 user wheel 3212 Dec 4 12:36 a.out
drwxr-xr-x 1 user wheel 512 Dec 14 17:03 bin
-rw-r--r-- 1 user wheel 143 Dec 4 12:36 hello.c
drwxr-xr-x 2 user wheel 1024 Oct 16 1997 public_html
drwxrwxrwx 2 user wheel 512 Jan 3 14:07 tmp
从上面的例子中,可以看到文件的权限设置在列出的数据的第一列中显示,例如文件 a.out的属性是-rwxr-xr-x,共显示了十个字母的位置。其中第一个位置是用于标识文件的种类,而非权限设置,其余九个位置分别表示三组的三种权限设置。第二个到第四个位置表示属主的权限分别设置为读、写和执行,第五个到第七个位置设置同组用户的权限,第八个到第十个位置设置其他用户的权限。当指定位置上没有显示对应的权限,而是 “ - ” ,则表示不允许对应的权限。
因此文件 a.out的权限设置为,对于属主user的权限为读写和执行,对于同组用户为读和执行权限,对于其他用户也是读和执行权限。对于目录来讲,拥有读权限意味着用户可以列出这个目录下的文件内容,写权限使用户可以在这个目录下增、删文件和更改文件名,执行权限保证用户可以使用cd进入这个目录。
ls输出结果的第一个位置表示类别,例如 “ d ” 表示目录, “ c ” 表示该文件为字符设备文件, “ b ” 表示为块设备文件, “ l ” 表示为一个符号连接。
Unix系统内部使用数值来表示这些属性,每一个属性与文件属性中的一个二进制位相对应,如果该存取权限设置了,对应的二进制位就是1,如果该存取权限没有设置,对应的二进制位是0。这样a.out的权限属性rwxr-xr-x用二进制来表示就是111101101,Unix下常使用八进制的形式表示,这样这个权限是755。
文件的属主和管理员可以使用命令 chmod来设置或改变文件的权限。chmod有几种不同的使用方法,可以直接使用八进制的权限表示方式设置属性,或者使用属性字母来设置或更改文件的属性,不同的使用方法要求不同的chmod参数,下面是使用chmod的一些例子:
chmod 750 a.out
改变 a.out的权限为750;
chmod a+x a.out
对所有用户增加 a.out的执行权限,a(All)表示所有用户;
chmod u=rwx a.out
设置属主的权限为读、写和执行, u(user)表示属主用户;
chmod g+rw a.out
增加同组用户的读写权限, g(group)表示同组用户;
chmod o-w a.out
减少其他用户的写权限, o(others)表示其他用户;
chmod go= a.out
清除同组和其他用户的所有权限;
chmod o=u-w a.out
设置其他用户的权限为减去写权限的属主权限;
权限 755是最常见的文件权限设置,这种属性的文件允许其他用户可以访问这个文件,但不可以更改,如果不打算让其他用户访问文件,文件的存取权限可以设置为700。文件在创建的时候,系统使用掩码来决定文件的权限,掩码的二进制对应位为1的,文件属性的对应位就设置为0,例如当掩码的八进制表示为022时(二进制为000010010),创建的文件权限就为755(111101101)。文件掩码使用umask命令来设置,例如使用 “ umask 027 ” 设置掩码为027,则创建的文件权限为750,其他用户将对这个文件没有任何权限。可以在启动资源文件或者在登录类别中设置中设置用户的掩码。
目录需要设置执行位,以允许用户能使用 cd命令进入这个目录中。
当一个文件的权限设置完毕之后,在一个进程试图访问这个文件时,系统就比较这个进程的属主和属组与文件的属主和属组,判断这个进程是否具备访问权限。由于每个进程的属主和属组标识是由启动这个进程的用户决定的,因此一个用户启动的进程就具备其本身对文件的访问权限。
提示:如果打算一次将包括其子目录下的所有文件的属性都加以改变,可以使用参数 ” -R ” ,例如 ” chmod – R +x dirname/* ” ,而 chgrp,chown也同样支持这个参数。
转载于:https://blog.51cto.com/liquang/723782