为什么仅仅知道文件的inode,就无法访问该文件,而不必搜索连接到该inode的文件呢?硬链接只包含名称和一个数字,告诉您在哪里找到具有有关文件所有真实信息的inode。当我被告知没有用户模式的方法可以直接使用inode号码打开文件时,我感到惊讶。
这似乎是系统提供的一项无害且有用的功能。为什么不提供呢?
这似乎是系统提供的一项无害且有用的功能。为什么不提供呢?
安全性考虑 -- 要访问文件,您需要对文件本身以及从根目录到该文件所需的所有目录具有访问权限。如果您可以通过inode访问文件,则可以绕过包含目录上的检查。
这使您可以创建一个只能被一组用户(或一组组)访问而不是其他人的文件 -- 创建仅可由用户访问的目录(每个用户一个目录),然后将文件硬链接到所有这些目录中 -- 文件本身可以被任何人访问,但只有在它链接到的其中一个目录具有搜索权限的人才能实际访问它。
debugfs
。当然,在任何UNIX系统上,您都可以通过命令行使用find -inum
来执行此操作,但无法通过inode访问文件的真正原因是它并不特别有用。它确实绕过了文件权限,因为如果在一个您无法读取或执行的文件夹中有一个您可以读取的文件,那么打开inode就可以发现它。*stat()
调用找到一个inode号码,而此时您已经拥有文件名(或打开的文件描述符)…或者您需要猜测inode号码。针对您的评论:要“传递文件”,您可以通过使用SCM_RIGHTS
在AF_LOCAL套接字上传递fd(请参见man 7 unix
)。
如果您已经通过路径查找过文件,那么您就不需要一遍又一遍地重复这个过程了吧?
此内容涉及IT技术。stat(f,&s); i=open(f,O_MODE);