文件权限

出自Linux Wiki

在2008年9月10日 (三) 13:00由Chenxing (讨论 | 贡献)所做的修订版本
(差异) ←上一修订 | 最新修订 (差异) | 下一修订→ (差异)

出于安全的考虑,多用户操作系统需要具备保障个人隐私和系统安全的机制。在Linux中,这一机制主要表现为对文件访问权限的控制。[1][2][3]

Hint.gif
提示:
除了本文所讨论的内容之外,SELinux(Security-Enhanced Linux)是另一种著名的安全机制,它是美国国家安全局(NAS)对于强制访问控制的实现,是一种更为可靠,也明显更为复杂的安全机制。在FedoraRed Hat Enterprise Linux上默认安装了这一机制。

目录

权限的定义

基础权限

要确定一个用户对某个文件或目录是否具有相应的权限,先要明确该用户与文件或目录之间的关系。在Linux系统中,定义了如下三种关系:

文件所有者(owner)
拥有文件的用户,通常是创建文件的用户。
组(group)
文件所属的,通常是创建文件的用户所属的组。
其他人(other)
既不是文件所有者,也不是文件所属的组的成员的其他用户。

根据用户对文件或目录操作种类的不同,又定义了三种操作权限:

权限 简写 对普通文件的作用 对文件夹的作用
读取 r 查看文件内容 列出目录中的文件(ls)
写入 w 修改文件内容 在目录中删除或添加文件
执行 x 文件可以作为程序执行 进入到此目录(cd)

上面的三种关系与三种操作权限的组合,构成了一个含有9个二进制位的权限标识。

特殊权限

还有三种与用户身份无关的三个文件权限属性。即SUID、SGID和Sticky。

SUID(Set User ID)
该属性只对有执行权限的文件有效,对目录无效。执行具有SUID权限的程序时,引发的进程的所有者是程序文件的所有者,而不是启动程序的用户(除非二者是同一个人)。比如,如果一个程序的所有者是root且具有SUID属性,一个普通用户执行此程序时,如同root执行此程序一样。[4]请注意该属性对Shell脚本程序无效。该属性为一些特殊程序(如lpr)的启动带来了方便。但有时也带来了安全隐患:比如一个具有SUID属性的程序如果在执行时运行了一个shell,那么用户可以籍此得到系统的最高权限。SUID可用s表示。
Hint.gif
提示:
consolehelper是一个更高级的用于提供用户权限的解决方案,见使用consolehelper获得root权限
SGID(Set Group ID)
对于可执行文件,SGID与SUID类似,引发的进程的所有组是程序文件所属的组。对于目录,SGID属性会使目录中新建文件的所属组与该目录相同。SGID也可以用s表示。
Sticky
仅对目录有效。带sticky属性的目录下的文件或目录可以被其拥有者删除或改名。常利用sticky属性创建这样的目录:组用户可以在此目录中创建新文件、修改文件内容,但只有文件所有者才能对自己的文件进行删除或改名。如系统中的/tmp文件夹。在属性字符串中,通常用t表示。
Hint.gif
提示:
最初sticky属性只可执行文件有效。正如其字面意思,它让具有sticky属性的可执行文件在执行结束后将程序代码仍滞留于内存中,以加快需要反复执行的大程序的装载速度。由于虚拟内存技术的引入,该功能已经没有意义。

权限的表示

一个文件的权限可以用字符串直观的表示,使用ls -l命令可以看到表示权限的字符串。

下面来看几个例子:

-rw-r--r--  1 gnixnehc gnixnehc    131 08-12 13:22 normal_text
-rwxr-xr-x  1 gnixnehc gnixnehc   6809 08-12 13:22 normal_exe
drwxr-xr-x  2 gnixnehc gnixnehc   4096 07-03 01:13 normal_dir
-rwsr-sr-x  1 gnixnehc gnixnehc   6809 08-12 13:22 suid_exe
drwxrwxrwt 12     root     root  16384 08-12 21:07 tmp

蓝色的部分就是权限字符串,权限表示三个为一组,依次是所有者权限、所有组权限、其他人权限。每组的顺序均为rwx,如果有相应权限,则表示成相应字母,如果不具有相应权限,则用-表示。

上面的例子中,第一行是一个普通文本文件,第二行是个普通的可执行程序,第三行是个普通的文件夹。第四行是带SUID、SGID的程序,最后一行则是/tmp的权限。

修改权限

文件所有者或超级用户可以修改一个文件的权限。

可以使用chmod修改文件或目录的权限,也可以使用桌面环境的文件管理程序修改权限。

参考资料

  1. http://linux.chinaitlab.com/administer/38992.html
  2. http://doc.linuxpk.com/40848.html
  3. http://blog.chinaunix.net/u2/71216/showart_734757.html
  4. http://heather.cs.ucdavis.edu/~matloff/UnixAndC/CLanguage/SetUserID.html
个人工具
简体繁体转换