博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #21FUSE
阅读量:5030 次
发布时间:2019-06-12

本文共 2700 字,大约阅读时间需要 9 分钟。

HACK #21FUSE

本节将介绍使用用户进程的文件系统框架—FUSE。

FUSE概要
FUSE(Filesystem in Userspace,用户空间文件系统),是用来生成用户空间的一般进程的框架。使用FUSE,就可以以一般应用程序进程的形式生成独特的文件系统,与已有的文件系统同样进行挂载。从Linux 2.6.14开始实际安装FUSE。
例如,在最近的Linux发布版中,有一些标准配置用于挂载Windows的文件系统NTFS的ntfs-3g(Ubuntu等)。当连接到存在NTFS格式文件系统的分区表所在的磁盘时,经由gvfs挂载。此时,使用FUSE安装到用户空间的ntfs-3g开始将NTFS文件系统挂载到用户的目录树。
此外还有ZFS on FUSE。ZFS适用的是CDDL这个与GPL没有互换性的许可证。因此它不能整合到拥有GPL许可证的Linux内核中。在这种情况下,使用FUSE安装ZFS,从而能够使用ZFS文件系统,就是ZFS on FUSE。一旦启动zfs-fuse守护进程(demon),就可以使用zfs或zpool命令进行ZFS的操作。
安装FUSE文件系统
libfuse就是用于简单安装使用FUSE的独特文件系统的标准库。例如,安装并读入专用的文件系统时,只需要生成下列4个功能。
getattr 获取文件属性
readdir 获取目录条目
open 打开文件
read 读入文件
卸载
使用FUSE挂载的文件系统,可以使用fusermount命令来卸载。

$ fusermount -u 挂载点

使用FUSE的文件系统

这里将介绍使用从普通发布版中可以获取的FUSE的文件系统。
sshfs
将可以把SSH远程登录的机器的目录挂载到本地机器上,在与远程服务器频繁进行文件交换时非常便利。例如,将remote主机的admin用户的foo目录挂载到本地的~/remote-foo时,命令行如下。类似一般的SSH,同样要求输入密码。

$ sshfs hshimamoto@remote:foo ~/remote-foo

在此之后,对本地机器的~/remote的foo目录进行的处理就是对远程机器remote的foo目录的处理。

fuseiso
挂载ISO映像文件。一般挂载ISO映像时是使用loopback设备进行挂载的,但有时普通用户权限是无法操作loopback设备的。另外loopback设备还存在可利用次数的限制。
使用fuseiso,就可以很简单地将ISO映像挂载到自己的文件系统,并参照其内容。

# fuseiso foo.iso ~/isoencfs

加密文件系统。用户将特定目录加密,然后挂载将该目录解密后的文件系统。

已加密的文件(目录)名和内容通过文件系统生成时指定的算法加密,但需要注意的是,目录中的文件数或文件大小、属性等不会因为加密而修改。
命令示例如下。创建目录enc-foo,并挂载为dec-foo。

$ mkdir ~/enc-foo$ mkdir ~/dec-foo$ encfs ~/enc-foo ~/dec-foo

首次挂载加密目录时,将进行加密的初始设置。将显示如下信息,输出用来进行加密设置的提示符。

生成新的加密卷标。

Please choose from one of the following options: enter "x" for expert configuration mode, enter "p" for pre-configured paranoia mode, anything else, or an empty line will select standard mode. ?>

针对详细的设置这里不作介绍。直接按【Enter】键,使用默认设置。

Standard configuration selected.

设置已完成。生成下列属性的文件系统:

文件系统加密算法:"ssl/aes",版本3:0:2
Filename encoding: "nameio/block", version 3:0:1
键大小:192位
Block Size: 1024 bytes
Each file contains 8 byte header with unique IV data.
Filenames encoded using IV chaining mode.
File holes passed through to ciphertext.

Now you will need to enter a password for your filesystem.

You will need to remember this password, as there is absolutely
no recovery mechanism. However, the password can be changed
later using encfsctl.

新的Encfs密码:

确认Encfs密码:
再设置用来加密、解密的密码就完成了。尝试在dec-foo目录下创建文件。

$ vi ~/dec-foo/bar.txt$ cat ~/dec-foo/bar.txt

Hello Encfs!!

卸载dec-foo后,就难以用普通的方法来参照这个加密目录。

$ fusermount -u ~/dec-foo

看一下enc-foo目录,可以发现由于已经加密,因此内容不是文本,而是二进制数据。

$ ls enc-foo/QQJqAaAW-hx1QiWGH8fRHplZ$ file enc-foo/QQJqAaAW-hx1QiWGH8fRHplZenc-foo/QQJqAaAW-hx1QiWGH8fRHplZ: data

再次使用encfs命令进行挂载时,这次只要求输入密码。

$ encfs ~/enc-foo ~/dec-foo

EncFS密码:

$ ls dec-foo/bar.txt$ cat dec-foo/bar.txtHello Encfs!!

小结

本节介绍了FUSE,还介绍了一些使用FUSE的便捷文件系统。此外可能还有其他使用FUSE的文件系统。
参考文献
Documentation/filesystems/fuse.txt
FUSE(
—Hiroshi Shimamoto

转载于:https://www.cnblogs.com/tcicy/p/8552824.html

你可能感兴趣的文章
c#扩展出MapReduce方法
查看>>
Cookie工具类 - CookieUtil.java
查看>>
[转载]linux下各文件夹的结构说明及用途介绍
查看>>
HDUOJ----4502吉哥系列故事——临时工计划
查看>>
form action中get \post传递参数的问题
查看>>
CloudStack4.4安装 ubuntu14.04
查看>>
java.io.tmpdir在哪里?
查看>>
php session_unset与session_destroy的区别
查看>>
最近学习任务和安排
查看>>
每日一句(2014-9-17)
查看>>
初学Hadoop之单机模式环境搭建
查看>>
[Ubuntu] 关于使用 root 账号登录
查看>>
不要做沙和尚
查看>>
二维数组指针作为函数参数传递
查看>>
Mobile里实现Linear Rendering
查看>>
[PKU1679 The Unique MST]
查看>>
JavaScript 变量提升
查看>>
python 装饰器
查看>>
STM8 中I2C读写函数。
查看>>
微信收藏导出到PC端的方法,不要再傻傻的用网页版转换了!
查看>>