Внеядерные файловые системы Linux

Сосуществование разных по своей сути файловых систем в едином дереве файлов и каталогов позволяет использовать для работы с его файлами «обычные» программы, ничего не знающие ни о местоположении, ни о свойствах самих источников информации этих файлов.

Таким же «файловым» образом можно организовать доступ к файлам внутри GZ/ZIP/…-архивов, файлам внутри ISO-образов CD/DVD-дисков, файлам зашифрованных каталогов, файлам других узлов сети, медиафайлам на медиаустройствах (плееры, смартфоны) и т. п.

Файловая абстракция в определенных случаях оказывается удобной даже для осуществления доступа к информации, организованной совершенно «нефайловым» образом — к данным таблиц и представлений внутри реляционных баз данных, к элементам и атрибутам внутри XML-файлов и пр.

Для реализации такого «файлового» доступа к произвольным источникам информации используются так называемые «внеядерные» файловые системы W: [FUSE] (Filesystem in USErspace), реализуемые не ядерными модулями файловых систем (как ext4, nfs, proc и пр.), а обычными программами, запущенными в обычных процессах и работающими вне ядра (для чего в ядре все-таки требуется один универсальный модуль fuse).

В примере из листинга ниже показано, как можно без распаковки смонтировать сжатый архив исходных текстов ядра linux-4.2.3.tar.xz и прочитать отдельный i файл fuse.txt.

Внеядерная файловая система «fuse.archivemount»

john@ubuntu:~$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.2.3.tar.xz

. . .                                 . . .                                   . . .

john@ubuntu:~$ file linux-4.2.3.tar.xz

linux-4.2.3.tar.xz:   XZ compressed data

john@ubuntu:~$ archivemount linux-4.2.3.tar.xz ~/mnt/archive

john@ubuntu:~$ mount

. . .                                 . . .                                   . . .

archivemount on /home/john/mnt/archive type fuse.archivemount (rw.nosuid,…,user=john)

john@ubuntu:~$ cd ~/mnt/archive

john@ubuntu:~/mnt/archive$ ls -l 

итого 0

drwxrwxr-x 0  root  root 0  ноя.       3    14:52 linux-4.2.3

john@ubuntu:~/mnt/archive$ cd linux-4.2.3/Documentation/filesystems

john@ubuntu:~/mnt/archive/linux-4.2.3/Docunentatlon/filesystems$ less fuse.txt

john@ubuntu: ~/mnt/archive/linux-4.2.3/Docunentation/filesystems$ cd ~

john@ubuntu:~ $ fuse mount -u ~/mnt/archive

В примере из листинга ниже показано, как при помощи сетевого протокола SSH можно смонтировать часть дерева каталогов (домашний каталог пользователя mike) с удаленного узла mike@grex.org в каталог ~/mnt/net локального дерева каталогов.

Внеядерная файловая система «fuse.sshfs»

john@ubuntu:~$- sshfs mike@grex.org: ~/mnt/net

mike@grex.org’s password: P@s$wQrd

john@ubuntu:~$ mount

. . .                              . . .                              . . .

mike@grex.org: on /home/john/mnt/net  type fuse.sshfs (rw,nosuid,…,user=john)

john@ubuntu:~$ cd ~/mnt/net

john@ubuntu:~/mnt/net$ ls -l

итого 488

-rw-rw-r— 1   156620 131077 495604 ноя.      10 20:28 OPENME.txz

-rw-r—г—  1   156620 131077        106 ноя.       10 20:31 README.gz

john@ubuntu:~/nnt/net$ zless README.gz

john@ubuntu:~/nnt/net$ cd ~

john@ubuntu:~ $ fusermount -u ~/mnt/netw

В примере из листинга ниже показано, как можно смонтировать зашифровываемый каталог /media/flash/secret USB-flash-накопителя (уже смонтированного в каталог /media/flash при помощи дисковой файловой системы vfat) в каталог ~/mnt/exposed и скопировать туда файлы, подлежащие зашифровыванию.

Теперь при утере накопителя можно не беспокоиться об информации, попавшей третьим лицам.

Внеядерная файловая система «fuse.encfs»

john@ubuntu:~ $ mount

. . .                              . . .                              . . .

/dev/sdc1 on /nedta/flash type vfat (rw)

. . .                              . . .                              . . .

john@ubuntu:~ $ encfs /media/flash/secret ~/mnt/exposed

Директория «/media/flash/secret» не существует. Создать ее? (у,n) у

Директория «/home/john/mnt/exposed» не существует. Создать ее? (у,n) у

Создание нового зашифрованого раздела.
Выберите одну из следующих букв:

введите «х» для режима эксперта,

введите «р» для режима максимальной секретности,

любой другая буква для выбора стандартного режима.
?>↵
Выбрана стандартная конфигурация.

Конфигурация завершена. Создана файловая система

с следующими свойствами:
Шифр файловой системы: «ssl/aes», версия 3:0:2

Шифр файла: «nameio/block», версия 3:0:1

Размер ключа: 192 бит

Размер блока: 1024 байт

Каждый файл содержит 8-ми байтный заголовок с уникальными IV данными.

Файловые имена зашифрованя с использованием IV цепочек.

File holes passed through to ciphertext.

Введите пароль для доступа к файловой системе.

Запомните пароль, так как в случае утери его,

будет невозможно восстановить данные. Тем не менее

этот пароль можно изменить с помощью утилиты encfsctl.

Новый пароль EncFS: $ecr6t ↵

Повторите пароль EncFS: $ecr6t ↵

john@ubuntu:~$ mount

encfs on /home/john/mnt/exposed type fuse.encfs (rw,nosuid,nodev,…, user=john)

john@ubuntu:~$ cp ~/ИзображенияIMG_20170802*.jpg ~/mnt/exposed

john@ubuntu:~$ ls -l ~/mnt/exposed/

. . .                              . . .                              . . .
-rw-r—r— 1  john john  1014408 ноя. 10 19:06 IMG_20170802_123522.jpg

. . .                              . . .                              . . .
-rw-r—r— 1  john john  1728838 ноя. 10 19:06 IMG_20170802_124215.jpg

john@ubuntu:~$ ls -l /media/flash/secret

. . .                              . . .                              . . .
-rv/-r—r— 1  john john  1014416 ноя. 10 19:06 9WgX2m6hiNNz8,ii7UIlAIPetU3qGuLbRNyww9eHTiNNl-

. . .                              . . .                              . . .
-rw-r—r— 1   john john  1728846 ноя. 10 19:06 aavAA80-WGYg5O42x2A0I5VZacpZfK-4tEzP3SCX8bk5y-
john@ubuntu:~$ file ~/mnt/exposed/IMG_20140801_123522.jpg

IMG_20140801_123522.jpg: JPEG image data, EXIF standard

john@ubuntu:~$ file /media/flash/secret/9MgX2nбhi^в4z8Лl7lSlA[PetUЗq(klU>RNyww9eOT’iNNl-9WgX2m6htN^lz8 ,117UIlAIPetU3qGuLbRNyww9eHTiNNl-: data

john@ubuntu:~$ fusermount -u /media/flash/secret

В примере из листинга ниже показано, как можно монтировать файловые системы fuse друг поверх друга в стек — смонтировать содержимое дерева каталогов FTP-сервера mirror.yandex.ru, далее смонтировать содержимое ISO-образа FreeBSD-9.з-RELEASE-ia64-disc1.iso, а затем смонтировать архив исходных текстов src.txz.

При чтении файла страницы руководства ls.1 файловые системы будут прозрачно и на лету  извлекать файл из архива, архив из образа и образ с сервера без предварительных скачиваний и распаковываний.

Внеядерные файловые системы «ftise.curlftpfs», «fuse.fuseiso» и стекирование файловых систем

john@ubuntu:~$ curlftpfs ntrror.yandex.ru ~/mnt/net
john@ubuntu:~$ fuseiso ~/mnt/net/freebsd/releases/ISO-IMAGES/9.3/FreeBSD-9.3-RELEASE-ia64-disc1.iso ~/mnt/cd

john@ubuntu:~$ archivemount ~/mnt/cd/usr/freebsd-dist/src.txz ~/mnt/arctve

john@ubuntu:~$ mount
curlftpfs#ftp: //mirror. yandex. ru/ on /home/john/mnt/net type fuse (rw,… ,user=john)

fuseiso on /home/john/mnt/cd type fuse.fuseiso (rw,nosuid,nodev,user=john)

archivemount on /home/john/mnt/archive type fuse. archivemount (rw, nosuid,nodev, user=john)
john@ubuntu:~$ man ~/mnt/archve/usr/src/bin/ls/ls.1

. . .                              . . .                              . . .
LS                                                        BSD General Commands Manual

NAME

ls — list directory contents

. . .                              . . .                              . . .

john@ubuntu:~$ fusermount -u -/mnt/archive

john@ubuntu:~$ fusermount -u ~/mnt/cd 

ohn@ubuntu:~$ fusermount -u ~/mnt/net

Добавить комментарий