admin 管理员组

文章数量: 1184232

构建思想

透明加密一直是安全领域比较热门的领域,了解了下linux内核自带的ecryptfs。首先作者为了实现透明加密,构造了一个ecryptfs的文件系统。这个文件系统并没有对, 磁盘文件的直接组织,而是依附在已有的文件系统上,通过构建的文件系统对已有的文件系统做了重新组织实现。

文件系统架构


正如常见的文件系统构成一样,ecrypt构建了自己的文件系统节点管理逻辑。

之后是磁盘管理和虚拟文件系统管理。这些都是依附与一个叫lowe_path的核心逻辑,就是未加密文件夹。通过对未加密文件夹重新组织,实现对未加密文件页缓存加密。

剩余的就是挂载节点的管理如下图:

文件系统构建起点

为了构造一个完整的加密文件系统,不可能自己实现inode dentry的管理,因为需要劫持底层ext4等文件的页缓存。那么就要依赖现有的文件inode管理。

研究struct file_system_type 的mount实现,可以观察到:

整个文件系统围绕 dev_name构造的lower_path lower_sb进行。这个节点就是真实文件系统的节点管理的核心,也就是加密前的文件系统。这样借助现有文件系统,可以更方便的虚拟处一个文件系统,但实际数据全部还是在真是的文件系统上。

文件节点创建

static struct inode *
ecryptfs_do_create(struct inode *directory_inode,
		   struct dentry *ecryptfs_dentry, umode_t mode)
{
   
   
	int rc;
	struct dentry *lower_dentry;
	struct dentry *lower_dir_dentry;
	struct inode *inode;

	lower_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry);
	lower_dir_dentry = lock_parent(lower_dentry);
	rc = vfs_create(d_inode(lower_dir_dentry), lower_dentry, mode, true);
	if (rc) {
   
   
		printk(KERN_ERR "%s: Failure to create dentry in lower fs; "
		       "rc = [%d]\n", __func__, rc);
		inode = ERR_PTR(rc)

本文标签: 透明 ecryptfs