打印

LINUX系统的文件,用户与权限略解

[复制链接]
1334|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangvictor|  楼主 | 2010-7-1 16:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
linux系统中,所有的资料,设备等都以文件的形式来管理。整个系统有七种文件类型,他们分别是普通文件,目录文件,块特殊文件,字符特殊文件,FIFO,套接字,与符号链接。
普通文件最常用,包含了某种形式的数据,至于这种数据是文本数据还是二进制数据,对系统是没有区别的。
目录文件包含了其他文件的名字以及指向与这些文件有关的信息的指针,对一个目录文件来说,具有读权限的任一进程都可以读该文件的内容,但只有内核才能直接写目录文件。进程必须使用相关函数才能更改目录,这是因为函数也是通过系统调用让内核来处理,所以与内核处理目录文件的道理是一样的。
块特殊文件提供对设备带缓冲的访问,每次访问都以固定长度的单位进行
字符特殊文件提供对设备不带缓冲的访问,访问的长度可变,所以设备在系统中是块特殊文件或者字符特殊文件的一种。
FIFO用于进程间的通信。
套接字用于进程间的网络通信。
符号链接指向另一个文件。

与进程相关的有六种ID。包括实际组ID, 实际用户ID,有效用户ID,有效组ID,附加组ID,保存的设置用户ID,保存的设置组ID
实际组ID和实际用户ID是文件本身的性质,标识了这个文件的所有者。它们保存在口令文件的登录项。超级用户可以改变他们
有效用户ID,有效组ID,附加组ID是进程的性质,她们通常和实际组ID,与实际用户ID相等。
设置用户ID与设置组ID主要和别的用户的进程对该文件的执行有关系。如果在文件模式字中设置了特殊标志,就能表示进程执行此文件时,进程的有效ID设置为该文件的用户ID,组ID也是相同的道理。这样进程就拥有了这个文件的用户的特权,如果这个文件归超级用户所有,那么别的进程执行此文件是,就拥有了超级用户的特权。

ID表示文件归谁所有,那么权限则标识了用户可以干什么,是可读,可写,还是可执行。每个文件都有9中访问权限,分别规定了组(上级),用户(自己),其他(别人)可以对该文件做什么。
当进程对一个文件访问时,内核进行文件访问权限的测试,首先检查进程的用户是否与文件用户匹配或者是否是超级用户,然后根据文件的权限设置来操作。也就是说会首先检查这个文件是不是你的,如果是你的,才能干你能干的事情,如果不是你的,你也只能干允许你干的事情。当然,如果检查到你是超级用户,就认为你是boss,想干什么随您便了,您尽兴。

如果在进程中新建了一个文件,那么这个文件的用户ID是什么呢?这时候就会复制这个进程的有效用户ID为这个文件的用户ID,关于组IDlinux取决于所在目录的设置组ID是否设置,如果设置了,则新闻间的组ID为目录的组ID,如果没有设置,新文件的组ID为进程的有效组ID
那么新建文件的权限是如何呢?系统中有一个常量,umask,这个常量通过在shell中输入umask可以打印出来,这个常量叫做屏蔽字,新创建的文件的权限是默认值111111111与这个常量的与非值,结果是这个常量里设置了哪一位,权限就关闭了哪一位,所以把这个常量叫做屏蔽位,用umask(2)函数可以暂时在程序中修改屏蔽位。更改的屏蔽位不影响其父进程。由于shell在执行可执行文件时,实际上是创建了一个子进程,所以在程序中用umask函数改变的umask的值,在推出程序后,shell中不会受到影响。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

7

帖子

1

粉丝