nix下除了一般储存数据、可执行命令和目录的文件外,它还将计算机设备当作文件来处理。这些设备I/O和文件I/O仅在最底层区分开来。即使绝大部分进程间的通信,也是通过类似于文件的实体来完成的。和其他的现在操作系统相同,Unix有层级(树状)的目录组织,总称为文件系统(Filesystem)。树的根叫做根目录(root directory),根目录有一个专门的名称“/”(正斜线符号)。在Unix系统上,所有用户可用的磁盘空间都被透明地归并到根目录晓的某个目录中,文件所在的某个目录中,文件所在的物理磁盘并不是Unix文件规范的一部分。Unix系统中的文件权限管理比其他一些操作系统要复杂一些,本文将通过文件拥有者的角度来看待类Unix系统文件权限管理:
UNIX的文件有两个所有者:用户所有者和组所有者,其权限的独特之处在于这两种所有者彼此分离,即文件的组所有者独立于拥有该文件的用户。尽管文件的组经常是文件所有者所在的组,但是这并不是必须的,实际上,文件的用户所有者并不一定是拥有该文件的组的成员,这两者之间并没有必然联系。在这种情形下,如果为某个文件的组所有者设置访问权限,则该权限将被应用到该组的成员上,但不是被应到其他的用户所有者所在组的成员上(也不包括用户所有者)。需要说明一点组所有者拥有的权限是可以通过文件拥有者进行更改的。
UNIX的文件除了用户所有者和组所有者之外,还定义了除这两者以外的其他用户权限。
更改文件所有权:在UNIX系统中,通过使用chown和chgrp命令,能分别更改用户的所有者和组所有者。非root用户要使用chgrp和 chown更改文件的所有者就必须是该文件的所有者,同时还必须是新组的成员。
# chown userid filenames #更改文件所有者
# chgrp groupid filenames #更改文件组拥有者
# chgrp -R groupid filedirs #更改文件目录组拥有者
# chown -R userid filedirs #更改文件目录即目录项下所有文件的所有者
# chown userid:groupid filenames #更改文件的所有者和组拥有者
# chown -R userid:groupid filedirs #更改文件目录的所有者和组拥有者
UNIX支持三种文件访问类型:读取(r)、写入(w)和执行(x)。
访问类型 对文件的含义 对目录的含义
r 查看文件内容 搜索目录内容(例如用ls命令,ls -l 会隐藏更改目录信息)
w 更改文件内容 更改目录内容(例如删除或重命名文件)
x 运行可执行文件 使其成为当前目录(即 cd 到该目录)
下面显示文件保护示例图:
命令 文件自身最小访问权限 文件的目录所需最下访问权限
cd /home/xjzhao N/A x
ls /home/xjzhao/*.* (无) r
ls -l /home/xjzhao/*.* (无) rx
cat myfile r x
cat >>myfile w x
runme(exectable) x x
cleanup.sh(script) rx
注意,删除文件并不需要该文件的写入权限,只需对该文件所在目录享有写入权限就足够了(尽管在这种情况下,系统会提示是否覆盖该文件的写保护设置)。因为删除文件实际上是从目录文件中删除相关项目(从其他项目中),这是一种更改目录文件的形式,只需要享有该目录的写入权限。这也说明对目录的写入权限是非常强大的,授予写入权限时应该非常慎重。