Linux 文件权限
linux文件是基于角色的访问控制策略。每个文件对应三种角色,即所有者(user)、用户组(group)、其他用户(others)。针对这三种角色的不同,其设置了三种访问控制策略读R、写W、执行X。
目录和文件访问控制标记意义不同
Linux文件可以被分为许多种不同的类型,如普通文件、目录、字符设备、块设备、符号链接、管道、套接字等等。但是对于访问控制来说,其只有两种目录、普通文件(除了目录以外的其他文件类型)。
普通文件
R : 读取文件的内容
W : 可以修改、截断文件内容(但不代表可以删除文件)
X : 文件可以被运行
目录权限
R : 可以获取当前目录下包含的所有文件列表
W : 可以对当前目录下的文件进行添加或删除
X : 可以对当前目录下的文件进行搜索
对于上述访问控制关系图,建议从存储结构出发进行理解,更易理解。
文件系统树是由一个个节点组成的,这些节点由以下特点
- 叶子节点:为文件节点,其表示一个可被访问的实体
- 非叶节点:为目录节点,其内部保存对其他节点的索引
所以对于目录节点来说其内部的数据可以抽象化为如下的文件形式
<file_name> <physical_location>
<file_name> <physical_location>
<file_name> <physical_location>
<file_name> <physical_location>
文件内容为文件名和文件的物理位置(磁盘位置)
因此我们想要获取某个目录下所有文件列表实质上就是访问一个这样的文件内容。
同理如果想要删除、添加文件在此目录,就是修改这个文件列表的内容。
而执行权限,又称为可搜索权限,在我们执行读写文件时,都是由内核搜索文件系统树来获取具体文件访问节点的。其获取过程中需要依次通过目录节点,能否通过此目录节点移动到下一个节点由X
权限位指定。
对于文件节点,其包含以下信息
<file_attribute>
<file_content>
文件节点包含文件属性和文件内容。
对于文件内容我们需要获取到文件的必要权限时才能够进行例如读、写操作
而文件属性,其读取不进行任何访问控制操作,任何用户都可以获取文件的属性。
特殊文件访问位
-
s 设置用户标志位
执行此程序时,设置进程为当前文件的user ID或者group ID。
-
t 黏着位(sticky bit), 限制删除符
只有目录的所有者才能删除目录中的文件(不可以删除但是可以添加)