一个用户、一个组
我们来看一看 Linux 权限和所有权模型。我们已经看到每个文件属于一个用户和一个组。这正是 Linux 中权限模型的核心。您可以在 ls -l 清单中查看用户和组:
$ ls -l /bin/bash
 
    
在这个特殊的示例中,/bin/bash 可执行文件属于 root 用户,并且在 wheel 组中。Linux 权限模型通过允许给每个文件系统对象设置三种独立的权限级别来工作 — 它们为文件的所有者、文件的组以及所有其他用户。
理解“ls -l”
我们来看一看我们的 ls -l 输出,检查一下这个清单的第一栏:
 
    
 
    第一个字段 -rwxr-xr-x 包含该特殊文件的权限的符号表示。该字段中的首字符(-)指定该文件的类型,本例中它是一个常规文件。其它可能的首字符还有:  
    
 
    
 
    
 
    
 
    
 
    
 
    

 
    
 
    该字段的其余部分由三个三元组字符组成。第一个三元字符组代表文件所有者的权限,第二个代表文件的组的权限,第三个代表所有其他用户的权限:  
    
 
    
 
    
 
    上面,r 表示允许读(查看文件中的数据),w 表示允许写(修改文件以及删除),x 表示允许“执行”(运行程序)。将所有这些信息放在一起,我们可以发现每个人都能够读该文件的内容和执行该文件,但是只允许文件所有者(root 用户)可以以任何方式修改该文件。因此,虽然一般用户可以复制该文件,但是只允许 root 用户更新或删除它。  
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    在上面的示例中,我是 drobbinswheel 和 audio 组的成员。如果您想看看其他用户在什么组,指定他们的用户名作为参数:  
    
 
    
 
    
 
    

为了改变文件或其它文件系统对象的所有者或组,分别使用 chownchgrp。这两个命令都要一个用户名或组名作参数,后面跟上一个或多个文件名。
 
    
 
    您还可以用 chown 命令的另一种形式同时设置所有者和组:  
    
 
    除非您是超级用户,否则您不可以使用 chown,然而任何人都可以使用 chgrp 来将文件的组所有权改为他们所属的组。  
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    

 
    
 
    
 
    
 
    
 
    
 
    
 
    

 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    

 
    
 
    
 
    
 
    
 
    

 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
 
    
权限和目
到此为止,我们从常规文件的角度来看权限。当从目录的角度看权限时,情况有一点不同。目录使
用同样的权限标志,但是它们被解释为表示略微不同的含义。
对于一个目录,如果设置了“read”标志,您可以列出目录的内容;“write”表示您可以在目
录中创建文件,“execute”表示您可以进入该目录并访问内部的任何子目录。没有“execute”
标志,目录内的文件系统对象是不可访问的。没有“read”标志,目录内的文件系统对象是不可
查看的,但是只要有人知道磁盘上对象的完整路径,就仍然可以访问目录内的对象。
目录和 sgid
如果启用了目录的“sgid”标志,在目录内创建的任何文件系统对象将继承目录
的组。当您需要创建一个属于同一组的一组人使用的目录树时,这种特殊的功能
很管用。只需要这样做:
 
    
 
    
 
    
现在,mygroup 组中的所有用户都可以在 /home/groupspace 内创建文件或目录,同样,他
们也将自动地分配到 mygroup 的组所有权。根据用户的 umask 设置,新文件系统对象对于
mygroup 组的其他成员来说,可以或不可以是可读、可写或可执行的。
目录和删除
缺省情况下,Linux 目录以一种不是在所有情况下都很理想的方式表现。一般来说,只要对一个
目录有访问权,任何人都可以重命名或删除该目录中的文件。对于个别用户使用的目录,这种行
为是很合理的。
但是,对于很多用户使用的目录来说,尤其是 /tmp/var/tmp,这种行为可能会产生麻烦。
因为任何人都可以写这些目录,任何人都可以删除或重命名任何其他人的文件 — 即使是不属于
他们的!显然,当任何其他用户在任何时候都可以输入“rm -rf /tmp/*”并损坏每个人的文
件时,很难把 /tmp 用于任何有意义的文件。
所幸,Linux 有叫做“粘滞位”(sticky bit)的东西。当给 /tmp 设置了粘滞位(用
chmod +t),唯一能够删除或重命名 /tmp 中文件的是该目录的所有者(通常是 root 用户
、文件的所有者或 root 用户。事实上,所有 Linux 分发包都缺省地启用了 /tmp 的粘滞位,
而您还可以发现粘滞位在其它情况下也很管用。
难以理解的第一位
总结本章,我们最后来看一看数字模式的难以理解的第一位数。您可以看到,这个第一位数
用来设置 sticky、suid 和 sgid 位:
suid sgid sticky 模式数字
on on on 7
on on off 6
on off on 5
on off off 4
off on on 3
off on off 2
off off on 1
off off off 0
这里有一个怎样用 4 位数字模式来设置一个目录的权限的示例,该目录将由一个工作组使用:
# chmod 1775 /home/groupfiles
请想一想 1755 数字模式权限设置的含义。