Unix操作系统中用户权限机制是如何实现的?

来源:百度知道 编辑:UC知道 时间:2024/05/17 03:06:10

我的理解。

每一个文件,无论何种类型,都拥有一个独一无二的inode,这个inode存在于每一个文件系统的inode list区。这个inode list 是一组inode array,每个元素,也就是每个inode的属性,或者说结构中,包含了这些信息: ownership, type, permissions, accessed time, size and disk addresses.其中的ownership规定了其属主。权限属性就permissions这块, 当然就是众所周知的对于拥有者,组,和其他用户的读写执行权限的限定。

我还是举个例子来解你的惑。

比如我想运行可执行文件a.out, 其绝对路径为:
/usr/os/bin/a.out
那么系统第一步会搜索它,那就涉及到你是否有搜索某个目录的权限了, 比如你不是目录sample的属主与组属主,而sample的权限属性为drwxrwxr--,那么你就不可以搜索sample目录,也就是说执行权限x对于目录来说意味着所有目录的权限。
那回到例子中来。要执行它显然需要先加载它的内存中,我们看能否打开a.out, 比如这个函数是:
open("/usr/os/bin/a.out");
先看根目录"/",如果有搜索权限,则在其下搜索目录usr,否则报错。那么搜索usr目录是如何进行的呢?每个目录都含有一个目录项,它包含当前目录下的文件名和对应的inode号。比如目录os存在且也有搜索目录的权限。。。同理。假如路径正确,最后找到a.out, 比如a.out对应的inode号是123456,于是系统把这个inode号进行换算,确定inode在磁盘上的位置,查看perms, 看是否有执行权限, 如果有则根据disk addresses加载数据到内存中,然后执行。
当然我这样回答过于粗糙并且都是自己的话,其中涉及别的如buffer cache,inode cache, hash queue之类的,就算了。这样本来就扯远了,hoho,你好好看本书就好。