15 FreeBSD连载:文件的属性( 三 )


chmod o=u-w a.out :设置其他用户的权限为减去写权限的属主权限;
权限755是最常见的文件权限设置,这种属性的文件允许其他用户可以访问这个文件,但不可以更改,如果不打算让其他用户访问文件,文件的存取权限可以设置为700 。文件在创建的时候,系统使用掩码来决定文件的权限,掩码的二进制对应位为1的,文件属性的对应位就设置为0,例如当掩码的八进制表示为022时(二进制为000010010),创建的文件权限就为755(111101101) 。文件掩码使用umask命令来设置,例如使用 “umask 027” 设置掩码为027,则创建的文件权限为750,其他用户将对这个文件没有任何权限 。可以在启动资源文件或者在登录类别中设置中设置用户的掩码 。
目录需要设置执行位,以允许用户能使用cd命令进入这个目录中
当一个文件的权限设置完毕之后,在一个进程试图访问这个文件时,系统就比较这个进程的属主和属组与文件的属主和属组,判断这个进程是否具备访问权限 。由于每个进程的属主和属组标识是由启动这个进程的用户决定的,因此一个用户启动的进程就具备其本身对文件的访问权限 。
除了读、写和执行权限以外,对于可执行的程序还有另外两个非常重要的属性:设置属主身份(setuid, Set User ID)权限和设置组身份(setgid, Set Group ID)权限,这两个属性允许某个程序可以更改自己的进程标识为程序文件属主或组,因而就可以具备该程序文件属主或属组的访问权限,而不再仅仅是启动进程的用户的访问权限,这样就能完成特定的任务 。很多系统程序,例如su,就是通过这个特性来完成从执行进程时的普通用户身份到root用户身份的转化的,因此这两个属性对于系统安全至关重要 。不是必要的系统程序,不能具备这些属性 。
可以使用 “chmods file” 或 “chmod g s file” 来设置这两个属性,或者使用 “chmod 4755 file” 、 “chmod 2755 file” 八进制方式来设置setuid或setgid属性 。
文件的连接和符号连接
Unix中使用i节点(i node)来记录真实的物理文件及其位置,文件名只是指向i节点的一个连接 。因此每个文件可以有多个名字,每个名字就称为文件的一个连接,而同一个文件的所有连接所指向的i节点件完全相同 。但在删除时只有全部删除这个i节点的全部连接,才能删除i节点、即删除这个文件本身 。
$ ln l1 l2
$ ls -l l*
-rwxr-xr-x2 userwheel53212 Dec4 12:36 l1
-rwxr-xr-x2 userwheel53212 Dec4 12:36 l2
$
上面的例子使用ln创建了一个连接,然后在ls的结果中可以看到第二列的数字为2,这表示这个文件有两个连接 。这样的连接可以建立在不同的目录中,但所有连接所在的目录必须在同一个文件系统中,才能使用同样的i节点 。由于连接是直接指向标识物理文件的i节点,因此这种连接又称为硬连接 。
另一种更灵活的连接方式是符号连接,它没有指向物理文件的i节点,而是直接指向目录树上的另一个入口,那么当系统访问这个文件时,就沿着它指向的目录树的位置去查找具体文件 。这样就能对任何文件系统中的文件和目录建立连接,因此称为软连接 。符号连接可以跨越文件系统,灵活性很大,能够突破物理文件系统的限制维护目录树的一致性,对于系统管理和维护很有用 。但是这种连接方式需要对目录树进行多次查找,增加了文件操作的额外步骤,因此效率较低,因此不应该使用多级连接,及某个符号连接指向的目录还是一个符号连接,甚至发生符号连接的循环 。应该尽量少用符号连接,并避免多级符号连接及符号连接的循环 。

推荐阅读