UNIX环境高级编程复习——文件和目录(2)

设置用户ID和设置组ID

与一个进程相关联的ID有6个或更多,它们如下所示:

实际用户(组)ID ——我们实际上是谁

有效用户(组)ID、附加组ID——用于文件访问权限的检查

保存的设置用户(组)ID——有exec函数保存

UNIX的文件访问权限是一个比较难理解的问题,我在这里用一个例子来说明。passwd程序是用于修改用户密码的,当然它的所有者是root的,但是为什么我们能用它来修改自己的密码哪?原因很简单。root程序设置了用户(组)ID,这样使得每个执行root程序的用户都暂时变成了root。实际上我们还是远来的用户,只是因为设置用户I(组)ID使得我们能够用文件所有者的权限来执行程序。而有效用户(组)ID是我们正在用什么身份执行程序,这是一个随具体情况二改变的ID。附加组ID则是文件可能属于多个组造成的。

有效用户(组)ID、附加组ID可用S_ISUID,S_ISGID来进行测试。

文件访问权限

文件访问权限一共有9种:

  st_mode屏蔽字     意义


  S_IRUSR              用户——读

  S_IWUSR             用户——写

  S_IXUSR              用户——执行

  

  S_IRGRP              组——读 

  S_IWGRP             组——写

  S_IXGRP              组——执行

 

  S_IROTH              其他——读

  S_IWOTH             其他——写

  S_IXOTH              其他——执行


特别注意:但我们操作文件时隐藏着我们对包含该文件的所有目录的执行权限。也就是说如果我们对某个目录没有执行权限,则我们就可能不能做相应的操作。

新文件的用户ID设置为进程的有效用户ID。关于组ID允许有两种选择:

(1)进程的有效组ID      (2)文件所在目录的组ID

access函数

access函数式按实际用户ID和实际组ID进行访问权的测试的。

#include
int access(const char *pathname,int mode);
返回值:若成功则返回0,否则出错则返回-1.
mode是以下所列常量的按位或。
mode      说明
R_OK      测试读权限
W_OK      测试写权限
X_OK      测试执行权限
F_OK      测试文件是否存在

umask函数

umask函数为进程设置文件模式屏蔽字,并返回以前的值。(这是少数几个没有出错返回的函数)

#include
mode_t umask(mode_t cmask);
返回值:以前的文件模式创建屏蔽字




你可能感兴趣的:(UNIX环境高级编程复习——文件和目录(2))