Жизнь в пространстве пользователя

 | 13.14

Мой Компьютер, №01-02 (432-433), 01.01.2007

«Все является файлами» — ключевая концепция Unix-систем. Файлами является даже периферийное оборудование компьютера, разделы жесткого диска, при этом для приложений доступ к файлу устройства или посылка данных другому процессу практически не отличается от доступа к обычному текстовому файлу, что позволяет пользователю применять одни и те же команды для копирования, печати и проч. Аналогичный подход реализуют и синтетические файловые системы, работающие в пространстве пользователя. Файлами является все, с чем приходится иметь дело пользователю в такой файловой системе — почтовые ящики, web-страницы и FTP-серверы, защищенные SSH-соединения, архивы и другие локальные данные… Работа вне ядра упрощает установку и использование приложений, позволяет минимизировать последствия краха, использовать для программирования языки, отличные от С, вдобавок отлаживать такие приложения легче, появляется возможность вынести часть кода во внешние библиотеки, нет необходимости в переписывании кода для новых ядер. Таким образом можно создавать инструменты для самых разнообразных задач.

Проект FUSE

Первоначально разработанный для поддержки проекта AVFS (www.inf.bme.hu/~mszeredi/avfs/), FUSE (fuse.sourceforge.net) скоро стал отдельным проектом и на сегодня имеет приличный список файловых систем, использующих его наработки. Код FUSE первоначально был включен в дерево ядра Эндрю Мортона (Andrew Morton), тем же, кто использовал vanilla-ядра, приходилось устанавливать патч. Новая версия FUSE 2 уже по умолчанию включена в ядро Linux. Принцип работы такой системы прост. Модуль ядра перехватывает запросы к VFS и создает для пользователя иллюзию работы с обычной файловой системой, на которой эмулируется специальное дерево каталогов, отвечающее семантике хранимых в ней данных. Теперь для работы с этими файлами можно применять привычные утилиты — например, для копирования файлов через защищенное SSH-соединение достаточно воспользоваться командой cp. Модуль ядра и библиотека связываются через дескриптор специального файла /proc/fs/fuse/dev, через который и происходит взаимодействие.

Библиотеки FUSE используют и другие проекты, задача которых — создание виртуальных файловых систем. Это SULF — Stackable User-Level Filesystem (pobox.com/~vgough/fuse-csharp.html) и FUSE‑J (sourceforge.net/projects/fuse‑j). Первый позволяет воспользоваться C#, второй — Java.

К сожалению, еще один подобный проект — LUFS, Linux Userland FileSystem. Хотя на сайте проекта lufs.sourceforge.net/lufs написано «Actively maintained», обновлялся в последний раз в конце 2003 года, поэтому уже смело можно говорить о прекращении работ.

На сайте проекта FUSE можно найти только небольшую программу-пример, демонстрирующую возможности, основной же интерес представляют собой сторонние разработки, список которых можно найти на fuse.sourceforge.net/wiki/index.php/FileSystems. На момент написания статьи список насчитывал 71 проект (рис. 1), еще 30 проектов найдете, перейдя по ссылке NetworkFileSystems. Бо[ударение!!!]льшая часть проектов, впрочем, еще не достигла состояния «релиза», и стабильная работа их не гарантируется (в том числе и самими разработчиками), к тому же не все они компилируются без проблем. Поэтому весь список перечислять не буду, остановлюсь только на самых интересных из них.

Шифрование информации

EncFS — Encrypted Filesystem (pobox.com/~vgough/encfs.html) реализует шифрованную файловую систему. Как и другие подобные файловые системы, основное назначение EncFs — защита персональных данных и резервных копий. Работает она иначе, чем «loopback-системы», функционирующие в режиме ядра. При этом в EncFs размер файловой системы может динамично изменяться. Некоторые метаданные остаются видимыми, что позволяет программе резервирования определить количество файлов, их размер, приблизительно количество знаков в имени (само имя шифруется) — то есть, узнать изменившиеся файлы. Программа резервирования, естественно, не может их расшифровать — она просто резервирует то, что видит. Работать с такой файловой системой можно как с локального, так и удаленного узла, а также сменных носителей вроде 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

Версия 5; создана EncFS 1.2.5 (ревизия 20040813)

Шифр файловой системы: «ssl/blowfish», версия 2:1:1

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

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

Размер блока: 512 байт, включая 11 байт MAC заголовок

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

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

Данные файла IV связаны с именем файла IV.

Относительно недавно появившаяся encfssh дает возможность смонтировать зашифрованный каталог в общедоступный, к которому можно подключиться, зная пароль.

Для использования в военных, правительственных и других организациях, в которых уделяется особое внимание режиму секретности, разработана Phonebook (www.freenet.org.nz/phonebook) — файловая система, использующая технологию, получившую название Deniable Encryption technology. Ее разработчики пытаются учесть «человеческий фактор», оказывающийся основной причиной многих казусов, возникающих при защите информации. Кратко суть этой технологии заключается в использовании нескольких слоев кодирования, каждый со своим паролем, поэтому для того чтобы получить доступ, необходимо знать уже два параметра: название слоя и пароль. В случае ошибки набора будет создан новый слой, при этом никакого сообщения об ошибке выведено не будет. Есть возможность создать несколько слоев с одним именем, но с разными паролями, в случае взлома будет раскрыта информация только в одном из них. Все файлы шифруются индивидуально (256‑бит Blowfish, CFB‑режим плюс SHA1‑хеш), в случайном порядке изменяется и время доступа к файлу. Файлы могут быть записаны на CD‑ROM, также доступ к ним можно получить через сеть (например, NFS).

Монтирование удаленных ресурсов

На очереди еще одна интересная файловая система — sshfs, доступна для закачки с сайта проекта fuse или через репозитарий Kubuntu:

sudo apt-get install sshfs

Эта утилита позволяет монтировать удаленные системы, используя зашифрованные SSH‑соединения, и работать с ними как с обычной локальной файловой системой. При этом от пользователя не требуется знаний особенностей работы и утилит. Команда для монтирования проста:

$ sshfs [email protected]:/tmp /media/other

После чего потребуется ввести пароль для доступа к удаленной системе. Проверить можно так:

$ mount | grep shfs [email protected]: on /media/other type shfs (version=2,mnt=/mnt/local,fd=5)

Если теперь посмотреть в /media/other, то в нем обнаружите файлы, расположенные на удаленном компьютере.

Подобным образом можно смонтировать и SMB‑ресурсы Windows-машин. Проект SMB for Fuse (www.ricardis.tudelft.nl/~vincent/fusesmb/) позволяет монтировать не только отдельные ресурсы, как это делается обычным способом при помощи smbclient и smbmount, но и полностью всю рабочую группу или компьютер. Затем к ресурсам можно обращаться как к локальным файлам из любого приложения. Кэширование с помощью скрипта fusesmbcache ускоряет просмотр доступных ресурсов. Этот скрипт необходимо запустить, используя cron:

# crontab -e

*/30 * * * * fusesmbcache &> /dev/null

И теперь монитуем ресурсы:

# mkdir ~/net

# fusermount ~/net fusesmb &

Теперь в указанном каталоге появится дерево каталогов, соответствующих рабочим группам, входящим в них компьютерам и доступным ресурсам.

Контроль версий файлов

Wayback (User-level Versioning File System for Linux, wayback.sourceforge.net) позволяет сохранять старые версии текстовых файлов, независимо от их количества и каталогов, в которых они располагаются. Работает wayback на любом блочном устройстве с любой файловой системой. Для отката такая система ведет файл журнала, в котором описываются все изменения. Монтируется новая файловая система при помощи скрипта mount.wayback.

$ 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 (sourceforge.net/projects/cvsfs), позволяющую смонтировать CVS и работать с ней как с локальной файловой системой. При этом пользователю будут доступны все изменения, без необходимости закачки всего архива.

Доступ к Gmail

Для пользователей почтового сервиса Gmail доступна файловая система GmailFS — Gmail Filesystem (richard.jones.name/google-hacks/gmail-filesystem/gmail-filesystem.html). Это приложение, написанное на языке высокого уровня Питон, для связи с Gmail использует библиотеку libgmail (libgmail.sourceforge.net). С его помощью можно смонтировать почтовый аккаунт как обычную файловую систему и пользоваться в дальнейшем обычными командами вроде ls, rm, cp, grep. Пользоваться GmailFS просто, к тому же он есть в репозитарии Kubuntu sudo apt-get install gmailfs:

$ sudo mount.gmailfs none /media/gmail -o username=gmail_user, password=gmail_password

Для удобства проще занести регистрационные данные в файл /etc/gmailfs/gmailfs.conf в поля username и password.

Работа с устройствами

Не менее интересны файловые системы, позволяющие получить доступ к различным устройствам. Среди них btfs — Bluetooth FileSystemMapping (www.mulliner.org/bluetooth/btfs.php), используя которую, можно узнать обо всех доступных Bluetooth-устройствах, просто прибегнув к команде ls:

$ ls -la /OPUSH

 /OPUSH/SE_T630

А также переслать файлы обычным образом:

$cp file.txt /OPUSH/SE_T630

Правда, в данный момент получить файлы от устройств таким образом невозможно, да и проект уже год как не обновлял версии.

Для доступа к памяти в мобильных телефонах Siemens разработана файловая система SieFS (chaos.allsiemens.com/siefs, рис. 2), которая работает с телефонами серий 45, 55 и 65.

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

Linux forever!

Сергей ЯРЕМЧУК

Robo User
Web-droid editor

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *