对进程校验文件访问权限包括两个部分,一是确定进程的角色(属于哪个用户或者组),二是确定对应的角色是否具有该操作的权限。
首先看第一部分。默认情况下,进程的有效角色就是当前执行这个进程的用户及其所在组。但是,文件具有设置用户ID位和设置组ID位(stat.st_mode的S_ISUID和S_ISGID),用于改变这种默认的行为,将进程的有效角色设置为文件所属的用户和组。这主要用于解决执行进程的用户或组不具备修改这个文件的权限,但却不得不对文件进行修改的情况。比如,/etc/passwd就是用了设置用户ID位,因为passwd允许任意用户修改其密码,而只有超级用户才具有对该文件的写权限,所以在普通用户执行passwd修改密码时,必须将设置用户ID位置位。这里只要记住,进程的角色只能是执行它的用户或者是它要操作的文件的用户。
文件的权限包括用户、组和其他角色的r(读)、w(写)和x(执行)。在根据进程角色检验权限时,可以分为两种:文件权限校验和目录权限校验。文件权限校验比较简单,在open文件时执行了要对文件进行的操作(O_RDONLY、O_WRONLY和O_RDWR),或者是执