文件权限
出自Linux Wiki
出于安全的考虑,多用户操作系统需要具备保障个人隐私和系统安全的机制。在Linux中,无论是文档还是硬件设备都以文件的形式存在,相应地,安全机制也主要表现为对文件访问权限的控制。[1][2][3]
提示:
除了本文所讨论的内容之外,SELinux(Security-Enhanced Linux)是另一种著名的安全机制,它是美国国家安全局(NAS)对于强制访问控制的实现,是一种更为可靠,也明显更为复杂的安全机制。在Fedora和Red Hat Enterprise Linux上默认安装了这一机制。
除了本文所讨论的内容之外,SELinux(Security-Enhanced Linux)是另一种著名的安全机制,它是美国国家安全局(NAS)对于强制访问控制的实现,是一种更为可靠,也明显更为复杂的安全机制。在Fedora和Red Hat Enterprise Linux上默认安装了这一机制。
目录 |
权限的定义
基础权限
要确定一个用户对某个文件或目录是否具有相应的权限,先要明确该用户与文件或目录之间的关系。在Linux系统中,定义了如下三种关系:
- 文件所有者(owner)
- 拥有文件的用户,通常是创建文件的用户。
- 组(group)
- 文件所属的组,通常是创建文件的用户所属的组。
- 其他人(other)
- 既不是文件所有者,也不是文件所属的组的成员的其他用户。
根据用户对文件或目录操作种类的不同,又定义了三种操作权限,并为每种权限赋予一个简写形式和数值(数值的用途后面讨论):
权限 | 简 | 值 | 对普通文件的作用 | 对文件夹的作用 |
---|---|---|---|---|
读取 | r | 4 | 查看文件内容 | 列出目录中的文件(ls) |
写入 | w | 2 | 修改文件内容 | 在目录中删除或添加文件 |
执行 | x | 1 | 文件可以作为程序执行 | 进入到此目录(cd) |
上面的三种关系与三种操作权限的组合,构成了一个含有9个二进制位的权限标识。
特殊权限
还有三种与用户身份无关的三个文件权限属性。即SUID、SGID和Sticky。
- SUID(Set User ID, 4)
- 该属性只对有执行权限的文件有效,对目录无效。执行具有SUID权限的程序时,引发的进程的所有者是程序文件的所有者,而不是启动程序的用户(除非二者是同一个人)。比如,如果一个程序的所有者是root且具有SUID属性,一个普通用户执行此程序时,如同root执行此程序一样。[4]请注意该属性对Shell脚本程序无效。该属性为一些特殊程序(如lpr)的启动带来了方便。但有时也带来了安全隐患:比如一个具有SUID属性的程序如果在执行时运行了一个shell,那么用户可以籍此得到系统的最高权限。SUID可用s表示。
- SGID(Set Group ID, 2)
- 对于可执行文件,SGID与SUID类似,引发的进程的所有组是程序文件所属的组。对于目录,SGID属性会使目录中新建文件的所属组与该目录相同。SGID也可以用s表示。
- Sticky, 1
- 仅对目录有效。带sticky属性的目录下的文件或目录可以被其拥有者删除或改名。常利用sticky属性创建这样的目录:组用户可以在此目录中创建新文件、修改文件内容,但只有文件所有者才能对自己的文件进行删除或改名。如系统中的/tmp文件夹。在属性字符串中,通常用t表示。
提示:
最初sticky属性只可执行文件有效。正如其字面意思,它让具有sticky属性的可执行文件在执行结束后将程序代码仍滞留于内存中,以加快需要反复执行的大程序的装载速度。由于虚拟内存技术的引入,该功能已经没有意义。
最初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的权限。
数值表示
为了简化表述,也可使用八进制数来表示权限。即用一个四位八进制数来表示,其中最高位表示特殊权限,随后的三位依次是所有者权限、组权限和其他人权限。每一个八进制位的权限数值是文件具有的相应权限所对应的数值之后,如:
0755=rwxr-xr-x
而
rw---x-w-=0(4+2)(1)(2)=0612
修改权限
文件所有者或超级用户可以修改一个文件的权限。
可以使用chmod修改文件或目录的权限,也可以使用桌面环境的文件管理程序修改权限。