Unix文件权限

Unix/Linux系统中,对文件(包括目录)的权限有一套完整的管理机制。这样的机制保证了系统的安全性。本文主要对Unix/Linux系统中的权限管理进行介绍。

一:文件类型

Unix系统中主要有7种文件类型,分别是普通文件(regular file,包括文本文件和二进制文件,在Unix中文本文件和二进制文件没有本质的区别,可执行文件就是二进制文件,二进制文件需要满足一定的格式才可以被内核解析执行),目录文件,块特殊文件和字符特殊文件(块特殊文件提供对设备带缓冲的访问,字符特殊文件提供对设备不带缓冲的访问),FIFO(用于进程间通信,也称为命名管道),套接字(用于进程间网络通信),符号链接(指向另一个文件的文件)。

二:读取文件信息

Unix系统在<sys/stat.h>文件中提供访问文件信息的函数,主要包括stat,lstat,fstat,fstatat四个函数,stat函数利用文件名获取文件相关信息,将获取的信息放入stat结构中。stat结构也在<sys/stat.h>中定义。同时头文件中定义了一系列宏可以用来验证文件的类型,stat结构中的st_mode字段可以用来判断文件类型。其原理是将st_mode与屏蔽字做按位与操作,然后与特定的表示文件类型的屏蔽字做对比,相等则表明是相关的文件类型。

三:文件访问权限

Unix文件中标识文件权限的位有12位,从低位到高位的前9位为普通的权限位,分别表示其他用户,组用户,文件所有者用户的rwx权限。对所有类型的文件而言,rwx权限都是有效的。除了这9位之外,还有3位,分别是设置用户ID位,设置组ID位,粘着位。(粘着位是较老的概念,一些较常使用的程序的文本副本可以保存在交换区,这样下次可以较快的将程序读入内存,粘着位是标识是否将副本放置到交换区的位。)同时还有设置用户ID位和设置组ID位,一个可执行的文件可能可以被非文件所有者的用户执行,此时,程序可能需要文件所有者的权限才可以访问程序中需要用到的资源,这时如果设置了设置用户ID位则可以将程序(进程)的有效用户ID设置为程序所有者的ID,如果设置了设置用户组ID位,则可以将进程的有效用户组ID设置为程序的用户组ID。使用ls –al命令时,只会显示一个十位的文件信息,第一个位为标识文件类型的位。其余9位位为标识文件所有者,组用户,其他用户权限的位。标识设置用户ID位是通过在文件所有者权限位的x位显示的,当x位为s时,x和设置用户ID 位被设置,为S时,x位未被设置,设置用户ID位被设置。设置用户组ID位是通过组用户权限的标识为x标识的,其中同时设置了设置用户组ID 和用户组执行位则为s,只设置了用户组ID为S。

原文地址:https://www.cnblogs.com/libs5510/p/4793193.html