EunJi 2015-01-14 12:41 采纳率: 0%
浏览 1048

在ubuntu,基于ext2文件系统实现一个加密的文件系统?

不是重新挂载一个新的文件系统,而是修改ext2内核代码达到加密的功能。
要修改哪个文件的哪些函数能达到加密的效果呀?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 06:40
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要使用Ubuntu 14.04 LTS上的EXT2文件系统创建加密文件系统,您需要更改以下函数:

    1. fsync() 函数:这个函数用于将数据写入磁盘。当用户请求对某个目录或文件进行写操作时,它会调用fsync()函数以确保所有缓冲区的数据都被写入到磁盘上。

      修改为:

      int fsync(void *arg)
      {
          struct inode *inode = (struct inode *)arg;
          if (!inode->fsync_lock) {
              return -EINVAL; // 如果锁未锁定,则返回错误
          }
          return inotifyfs_fsync(inode);
      }
      

      这里我们添加了一个判断语句来检查是否已经获得了锁,并且如果已经获得锁,则调用inotifyfs_fsync()函数来进行同步。

    2. write()函数:这个函数用于向文件中写入数据。为了防止数据被意外删除,可以将写操作转换为读写模式并等待数据写入完成后才继续写入。

      修改为:

      ssize_t write(int fd, const void *buf, size_t count)
      {
          struct inode *inode = get_inode(fd);
          if (INODE_IS_DIR(inode)) {
              return inotifyfs_write(inode, buf, count);
          } else {
              return super::write(fd, buf, count);
          }
      }
      
    3. read()函数:同样地,为了防止数据被意外删除,可以在读取之前先检查是否有写操作正在进行。

      修改为:

      ssize_t read(int fd, void *buf, size_t count)
      {
          struct inode *inode = get_inode(fd);
          if (INODE_IS_DIR(inode)) {
              return inotifyfs_read(inode, buf, count);
          } else {
              return super::read(fd, buf, count);
          }
      }
      
    4. truncate()函数:这个函数用于重设文件大小。由于EXT2文件系统不支持动态调整文件大小,因此不需要对该函数进行任何修改。

    5. close()函数:关闭文件时,应该释放所有已分配的内存和资源。

    6. mmap()函数:在处理大块数据时,应该优先考虑使用mmap()函数而不是open()函数。因为mmap()提供了更好的性能和安全性。

    7. open()函数:在打开文件时,应该优先考虑使用mmap()函数而非open()函数,以提高性能。

    8. lseek()函数:对于大型文件,建议使用lseek()函数而不是ftell()函数来计算文件的位置。

    9. readlink()函数:对于大型文件,建议使用readlink()函数而不是stat()函数来获取文件路径。

    这些修改后,您的EXT2文件系统将具有加密功能。请注意,在实际部署中,您可能需要根据具体需求进一步优化此代码。

    评论

报告相同问题?