Сегодня пользователю персонального компьютера приходится сталкиваться со многими технологиями, на их изучение требуется время, а навыки работы полученные ранее или привычные инструменты могут не пригодиться или показаться неудобными. Синтетические файловые системы работающие в пространстве пользователя, позволяют сгладить это различие и использовать для различных задач одни и те же инструменты.
Все является файлами — ключевая концепция Unix-систем. Файлами является даже периферийное оборудование компьютера, разделы жесткого диска, при этом для приложений доступ к файлу устройства или посылка данных другому процессу практически не отличается от доступа к обычному текстовому файлу, что позволяет пользователю применять одни и те же команды для копирования, печати и пр. Аналогичный подход реализуют и синтетические файловые системы работающие в пространстве пользователя. Файлами является все, с чем приходится иметь дело пользователю в такой файловой системе — почтовые ящики, web-страницы и ftp-серверы, защищенные SSH-соединения, архивы и другие локальные данные… Работа вне ядра упрощает установку и использование приложений, позволяет минимизировать последствия краха, использовать для программирования языки отличные от С, отлаживать такие приложения легче, появляется возможность вынести часть кода во внешние библиотеки, нет необходимости в переписывании кода для новых ядер, теперь можно создавать инструменты для самых разнообразных задач.
Проект FUSE
Первоначально разработанный для поддержки проекта AVFS (http://www.inf.bme.hu/~mszeredi/avfs/) FUSE
Библиотеки FUSE используют и другие проекты, задача которой создание виртуальной файловой системы. Это SULF — Stackable User-Level Filesystem
К сожалению, еще подобный проект LUFS — Linux Userland FileSystem
На сайте проекта FUSE можно найти только небольшую программу — пример демонстрирующую возможности, основной же интерес представляют собой сторонние разработки, список которых можно найти на http://fuse.sourceforge.net/wiki/index.php/FileSystems. На момент написания статьи список насчитывал более 100 проектов. Хотя большая часть проектов еще не достигла состояния релиза и стабильная работа не гарантируется, в том числе и самими разработчиками, к тому же не все компилируются без проблем. Поэтому весь список перечислять не буду, остановлюсь только на самых интересных из них.
Шифрование информации
EncFS- Encrypted Filesystem
Но програма резервирования естетсвенно не может их расшифровать, таким образом, резервные копии можно сделать без расшифровки. Работать с такой файловой системой можно как с локального, так и удаленного узла, а также сменных носителей вроде CD-ROM. Проверяем в работе.
Первым делом требуется установить fuse. Здесь ничего сложного. В репозитарии Kubuntu есть уже encfs поэтому установить его проще простого «sudo apt-get install encfs«, заодно будут загружены библиотеки и модули fuse. Для порядка проверим загружен ли необходимый для работы модуль.
$ /sbin/lsmod lsmod | grep fuse
fuse 38412 0
Новая файловая система должна быть в списке известных ФС.
$ cat /proc/filesystems | grep fuse
nodev fuse
После установки encfs будут доступны три исполняемых файла — еncfs, encfssh и encfsctl. С помощью первой, можно создать или смонтировать зашифрованную файловую систему. Создаем.
$ encfs ~/.crypt ~/crypt
По ходу будут заданы вопросы о создании всех необходимых для работы каталогов, при создании новой файловой системы доступно два предустановленых режима standard и paranoia (шифр AES, размер ключа 256, размер блока — 512), а также режим expert при использовании которого можно выбрать все параметры самому.
В последнем случае алгоритм шифрования, необходимость шифрования имени файла, и прочие параметры придется указывать самостоятельно. По окончании файловая система будет смонтирована, а пользователю будет выдан итог.
Конфигурация завершена. Создана файловая система
со следующими свойствами:
Шифр файловой системы: «ssl/blowfish», версия 2:1:1
Шифр файла: «nameio/block», версия 3:0:1
Размер ключа: 160 бит
Размер блока: 512 байт, включая 11 байт MAC заголовок
Каждый файл содержит 8-ми байтный заголовок с уникальными IV данными.
Файловые имена зашифруются с использованием IV цепочек.
Данные файла IV связаны с именем файла IV.
Проверяем как смонтирована новая файловая система.
$ mount | grep fuse
encfs on /home/grinder/crypt type fuse (rw,nosuid,nodev,default_permissions)
Теперь можно проверить работу вновь созданной ФС.
$ cd crypt/
$ echo «Это зашифрованное сообщение» > testfile
$ cat testfile
Это зашифрованное сообщение
$ cd
Теперь размонтируем и смотрим, что в каталоге.
$ fusermount -u ~/crypt
$ ls ./.crypt/
4bR5Ihisjfaa,5fdX40bTqgU
Невозможно прочитать и содержимое файлов.
Кроме того можно задать дополнительные параметры, которые позволяют автоматически размонтировать файловую систему в случае не активности в течении какого то промежутка времени, организовать доступ нескольким пользователям и некоторые другие. Используя утилиту encfsctl можно проверить параметры файловой системы или сменить пароль. Например:
$ encfsctl ./.crypt
Шифр файловой системы: «ssl/blowfish», версия 2:1:1
Шифр файла: «nameio/block», версия 3:0:1
Размер ключа: 160 бит
Размер блока: 512 байт, включая 11 байт MAC заголовок
Каждый файл содержит 8-ми байтный заголовок с уникальными IV данными.
Файловые имена зашифрованы с использованием IV цепочек.
Данные файла IV связаны с именем файла IV.
Относительно недавно появившаяся encfssh дает возможность смонтировать зашифрованный каталог в общедоступный к которому можно подключиться зная пароль.
Для использования в военных, правительственных и других организациях в которых уделяется особое внимание режиму секретности разработана Phonebook
Монтирования удаленных ресурсов
Следующая интересная файловая система sshfs доступная для закачки с сайта проекта fuse или через репозитарий Kubuntu «sudo apt-get install sshfs«. Эта утилита позволяет монтировать удаленные системы, используя зашифрованные ssh-соединения и работать с ними как с обычной локальной файловой системой. При этом от пользователя не требуется знаний особенностей работы и утилит. Команда для монтирования проста.
$ sshfs grinder@grinder.com:/tmp /media/other
После чего потребуется ввести пароль для доступа к удаленной системе. Проверить можно так.
$ mount | grep shfs
grinder@grinder.com: on /media/other type shfs (version=2,mnt=/mnt/local,fd=5)
Если теперь посмотреть в /media/other, то в нем обнаружите файлы расположенные на удаленном компьютере.
Подобным образом можно смонтировать и SMB-ресурсы Windows машин. Проект SMB for Fuse
$ sudo crontab -e
*/30 * * * * fusesmbcache &> /dev/null
И теперь монитуем ресурсы.
$ mkdir ~/net
$ sudo fusermount ~/net fusesmb &
Теперь в указанном каталоге появится дерево каталогов соответствующих рабочим группам, входящим в них компьютерам и доступным ресурсам.
Контроль версий файлов
Wayback (User-level Versioning File System for Linux,
$ mount.wayback ~/wayback/ /media/disk
$ mount | grep fuse
/proc/fs/fuse/dev on /media/disk type fuse (rw,nosuid,nodev)
$ echo «test» > /media/disk/test
$ ls /media/disk/test
Смотрим что в
$ ls ~/wayback/
test test~. versionfs! version test. versionfs! version
$ echo «test2» >> /media/disk/test
$ echo «test3» >> /media/disk/test
$ ls ~/wayback/
test ~test ~test. versionfs! version test~. versionfs! version test. versionfs! version
Отмечается более быстрая работа с файлами по сравнению с CVS. Но если все-таки необходим доступ именно к системе CVS, то некоторые, возможно, предпочтут использовать довольно удобную cvsfs
Доступ к Gmail
Для пользователей почтового сервиса Gmail доступна файловая система GmailFS — Gmail Filesystem
$ sudo mount.gmailfs none /media/gmail -o username=gmail_user, password=gmail_password
Для удобства проще занести регистрационные данные в файл /etc/gmailfs/gmailfs.conf в поле username и password.
Работа с устройствами
Не менее интересны файловые системы позволяющие получить доступ к различным устройствам. Среди них btfs — Bluetooth FileSystemMapping (http://www.mulliner.org/bluetooth/btfs.php) используя, которую можно узнать обо всех доступных Bluetooth устройствах просто использовав команду ls.
$ ls -la /OPUSH
/OPUSH/SE_T630
А также переслать файлы обычным образом.
$cp file.txt /OPUSH/SE_T630
Хотя в данный момент получить файлы от устройств таким образом невозможно, да и проект уже три года как не обновлял версии.
Для доступа к памяти в мобильных телефонах Siemens разработана файловая система SieFS
В статье показаны только некоторые проекты, но как видите при шифровании разделов, при доступе к файлам по сети, обращаясь к устройствам, используются одни и те же утилиты. Это делает работу более прозрачной, так как не приходится вникать в особенности. Linux forever!
//
Отличная статья! Огромное спасибо за такой подробный обзор файловых систем, использующих FUSE.
//
что то у меня не получается,помогите разобраться, выдает следующее:kalebas@kalebas:~$ sudo mount.gmailfs none /media/gmail -p
Gmail password:
HTTP Error 400: Bad Request
fuse: bad mount point `/media/gmail’: No such file or directory
Traceback (most recent call last):
File “/usr/bin/mount.gmailfs”, line 166, in
main(mountpoint, namedOptions, useEncfs)
File “/usr/bin/mount.gmailfs”, line 92, in main
gmailfs.main(mountpoint, namedOptions)
File “/usr/lib/python2.5/site-packages/gmailfs.py”, line 1180, in main
server.main()
File “/usr/lib/python2.5/site-packages/fuse.py”, line 713, in main
main(**d)
fuse.FuseError: filesystem initialization failed
Error in sys.excepthook:
Traceback (most recent call last):
File “/var/lib/python-support/python2.5/apport_python_hook.py”, line 42, in apport_excepthook
binary = os.path.realpath(os.path.join(os.getcwdu(), sys.argv[0]))
IndexError: list index out of range
Original exception was:
Traceback (most recent call last):
File “/usr/bin/mount.gmailfs”, line 166, in
main(mountpoint, namedOptions, useEncfs)
File “/usr/bin/mount.gmailfs”, line 92, in main
gmailfs.main(mountpoint, namedOptions)
File “/usr/lib/python2.5/site-packages/gmailfs.py”, line 1180, in main
server.main()
File “/usr/lib/python2.5/site-packages/fuse.py”, line 713, in main
main(**d)
fuse.FuseError: filesystem initialization failed
//
Пишет что нет каталога
/media/gmail
//
Занимательная статья, кстати автору хочу предложить установить от яндекс.денег полезную фишку на сайт «Дай рубль». Я бы дал, так сказать на поддержание. 😉