分类: LINUX
2011-07-01 15:37:31
第一个字符表示类型,接下来的rwx是文件的所有者root读该文件的操作权限,rwx即指拥有读写和执行的权限,如果为‘-’那么就没有该权限,接下来的-xr指root用户组中的其他用户对该文件的权限,最后的r-x指root用户组外的用户对该文件的操作权限。
当执行ls -l 或 ls -al 命令后显示的结果中,最前面的第2~10个字符是用来表示权限。第一个字符一般用来区分文件和目录:
d:表示是一个目录,事实上在ext2fs中,目录是一个特殊的文件。
-:表示这是一个普通的文件。
l: 表示这是一个符号链接文件,实际上它指向另一个文件。
b、c:分别表示区块设备和其他的外围设备,是特殊类型的文件。
s、p:这些文件关系到系统的数据结构和管道,通常很少见到。
第2~10个字符当中的每3个为一组,左边三个字符表示所有者权限,中间3个字符表示与所有者同一组的用户的权限,右边3个字符是其他用户的权限。这三个一组共9个字符,代表的意义如下:
r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
-:表示不具有该项权限。
下面举例说明:
-rwx------: 文件所有者对文件具有读取、写入和执行的权限。
-rwxr―r--: 文件所有者具有读、写与执行的权限,其他用户则具有读取的权限。
-rw-rw-r-x: 文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。
drwx--x--x: 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。
Drwx------: 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。
对于linux文件权限的更详细的文档参考:i.baidu.com/skyforum/blog/item/4219b72699f160168a82a1db.html
我们再看一下/proc下的文件:
显然,它们并没有特别之处。
在用户空间使用open类似的函数时,参数提供的权限模式为以下标志O_RDONLY 以只读方式打开文件;O_WRONLY 以只写方式打开文件;O_RDWR 以可读写方式打开文件。等。但只内核空间使用的是旗标,注意它们均为8进制表示。
它们位于stat.h (include/linux)中:
它们之间可以任意相或运算,以实现权限的叠加。比如:
// SUID是特权位,可执行的文件搭配这个权限,便能得到特权,任意存取该文件的所有者能使用的全部系统资源。SGID是组特权位,设置在文件上面,其效果与SUID相同,只不过将文件所有者换成用户组,该文件就可以任意存取整个用户组所能使用的系统资源。
一些相关的宏定义解释如下,由于这些宏均是描述文件状态的,所以开头S指Stat之意。
#define S_IFMT 00170000 // IF:Identity Flag. MT: Type Mask , 也即第16-19bits指示文件类型,通过与运算S_IFMT可以得到文件类型:
所有文件的权限位均保存在对应的inode中的i_mode里,通常它被定义为unsigned short ,sizeof(i_mode)为2。16位的作用分别为:
了解这些旗标将有利于我们在创建内核文件/设备节点等的时候给予适当的操作权限,提高系统的安全性。特别是在使用proc,sys等内核虚拟文件与用户空间交互的时候。