Использование CFS, криптографической файловой системы.
АрхивЛинуксоид (архив)Руководство по установке и использованию CFS. Преимущества и недостатки различных криптографических систем.
Если вы хотите надежно скрыть вашу личную информацию (например, письма или номера телефонов), то можно воспользоваться самым простым способом – поместить свои данные в скрытую директорию под названием ~/.private с правами доступа 0700, чтобы только вы могли прочитать свои файлы. Вы уже смеетесь? Тогда настало время перейти к более надежным способам, основанных на криптографии. Итак – рассмотрим CFS, свободную криптографическую файловую систему от Матта Блейза (Mutt Blaze) для Unix/Linux.
С помощью CFS вы можете надежно хранить вашу информацию в зашифрованном виде внутри обыкновенной директории. Используя ключ (или, если хотите, пароль), вы можете временно расшифровать ваши файлы, и они становятся доступными в течение некоторого времени – пока вы с ними работаете.
CFS делает зашифрованные файлы доступными для вас с помощью локального NFS-монтирования; в документации CFS этот процесс называется «подключение» («attach»). Изменения, вносимые во временно расшифрованные файлы, моментально вносятся и в их зашифрованные версии. Чтобы завершить сеанс CFS, используется процесс «отключения» («detach»), после которого все расшифрованные файлы исчезают – до следующего раза, когда вы будете с ними работать.
В этой статье рассматривается CFS версии 1.4.0beta2, дистрибутив которого вместе с несколькими полезными инструментами прилагается (см. раздел «Ресурсы»).
Другие криптографические системы.
Существуют и другие открытые криптографические системы, среди которых можно выделить OpenSSL, OpenSSH и TCFS («Transparent Cryptographic Filesystem» – прозрачная криптографическая файловая система). Краткое сравнение:
CFS: работает в пространстве обычного пользователя, и для работы не требуется устанавливать патчи на ядро. CFS использует обыкновенный NFS loopback (локальный экспорт NFS с локальным подключением), что может создать некоторые проблемы с безопасностью. Будьте осторожны с экспортом директорий. CFS был разработан на SunOS и BSDI, а потом портирован на Linux и другие подходящие для его работы операционные системы. Поддерживаются несколько алгоритмов шифрования.
TCFS: для работы требуется специфический модуль NFS для Linux или пересборка ядра. Улучшенная совместимость с ядром и расширенные атрибуты файловой системы делают TCFS более защищенной, но менее мобильной.
OpenSSL: работает в пространстве обычного пользователя, и для работы не требуется устанавливать патчи на ядро. OpenSSL поддерживет большое количество методов шифрования, и даже имеет поддержку аппаратных ключей. Существуют версии OpenSSL для Linux, Windows и других сред. Но OpenSSL 3.4 позволяет производить шифрование или расшифровку только одного потока или файла за один раз.
OpenSSH: Его можно использовать вместе с другими инструментами. Главным образом OpenSSH предназначен не для хранения секретных данных, а для безопасного обмена данными.
Loop device mount: входит в комплект дистрибутива Red Hat. В данный момент DES – единственный серьезный метод шифрования из поддерживаемых. Loop device mount требует подготовку файла фиксированного размера или привилегий root'а (или чтобы пользовател имели права на доступ к файлам loop device). Подробнее – в man-страницах mount(8) и losetup(8).
Установка CFS.
В разделе «Ресурсы» есть ссылка на файл cfs-1.4.0.beta2j в формате src.rpm, который, кроме самой программы, включает: – Патч для повышения безопасности Linux. – Два установочных скрипта для Red Hat Linux. – И два удобных скрипта – decrypt и dpw.py. Так же можно скачать все эти скрипты отдельно. Всегда полезно поискать в сети более новые версии CFS и обратить внимание на новые патчи.
NFS – обязательный компонент для использования CFS. Будьте осторожны с экспортом ресурсов и не сделайте случайно все ваши файлы доступными для всего мира. А лучше всего – настроить свой персональный firewall так, чтобы запретить внешний доступ к портам, используемым демонами NFS и RPC. Номера портов – 2049 и 111 (TCP и UDP) соответственно.
Во всех приведенных примерах приглашение «#» означает работу под root'ом, а «$» – работу под обычным пользователем.
Установите пакет с исходниками, как обычно:
# rpm -iv cfs-1.4.0.beta2j-6.2a.src.rpm
Затем соберите и установите CFS:
# cd /usr/src/redhat/SPECS
# rpm -bb cfs.spec
# cd ../RPMS/i386
# rpm -ivv cfs-1.4.0.beta2j.i386.rpm
Если у вас есть трудности c установкой именно этого конкретного пакета – поищите и установите более подходящую для вашего дистрибутива версию. После установки необходимо провести небольшую настройку CFS. Используйте скрипт cfs-setup, поставляющийся вместе с этой статьей, или прочитайте документ Мэтта Блэйза «Установка и использование CFS» (см. раздел «Ресурсы»).
Начинаем работу с CFS.
Приведенные инструкции подходят для Red Hat Linux 6.2, 7.1, 7.2, и 7.3. Чтобы они работали в вашем дистрибутиве, могут понадобиться некоторые изменения.
Убедитесь, что NFS запущена:
# ps auxww | grep rpc.mountd
Если rpc.mountd не присутствует в списке процессов, запустите NFS:
# /etc/rc.d/init.d/nfs start
Затем запустите демона CFS:
# /etc/rc.d/init.d/cfsd start
Теперь создайте под своим пользователем директорию с приватной информацией (например, «notes») и подключите ее. Два способа:
Самый простой – запустите скрипт «decrypt»:
$ decrypt -init
Key: (наберите здесь ваш ключ, чтобы создавать личную директорию, и запомните его)
Again: (наберите ваш ключ еще раз)
Key: (и в третий раз наберите ваш ключ, чтобы произвести подключение)
Другой способ создания личной директории – использование стандартных команд CFS (cmkdir и cattach):
$ mkdir ~/cdata
$ cd ~/cdata
$ cmkdir notes
Key: (наберите здесь ваш ключ, чтобы создавать личную директорию, и запомните его)
Again: (наберите ваш ключ еще раз)
$ cattach notes $LOGNAME-notes
Key: (наберите ваш ключ, чтобы произвести подключение)
(В примере, приведенном выше, встроенная переменная среды $LOGNAME содержит ваше имя входа. Это используется для того, чтобы избежать конфликта между различными пользователями – вы можете использовать более простое название.)
В обоих случаях может потребоваться 1-2 минуты для того, чтобы демон CFS cоздал директорию для временно расшифрованных файлов с именем $LOGNAME-notes.
Теперь создайте тестовый файл во временной директории:
$ pushd /mnt/crypt/$LOGNAME-notes
$ echo «Test.» > test.txt
$ popd
Завершите ваш сеанс CFS и посмотрите, что появилось в директориях:
$ cdetach $LOGNAME-notes
$ ls /mnt/crypt
$ ls -R ~/cdata
Листинг ~/cdata должен показывать зашифрованное имя вашего файла test.txt – например, 03fa2aa5242d5a741866a6605de1ae3b.
Подключите вашу директорию снова, чтобы убедиться, что ваш тестовый файл – все еще там. Опять же, есть два способа:
Легкий способ – использование decrypt:
$ decrypt
Key: (наберите ваш ключ)
Нормальный способ – использование cattach:
$ cd ~/cdata
$ cattach notes $LOGNAME-notes
Key: (наберите ваш ключ)
Теперь проверьте, что ваш тестовый файл все еще там:
$ cat /mnt/crypt/$LOGNAME-notes/test.txt
Переходим к поиску документации для CFS, которая включает в себя man-страницы для команд cmkdir, cattach, cdetach, cpasswd и еще некоторых. Основы CFS хорошо описаны в статьях «Установка и использование CFS» и «Криптографическая файловая система для Unix». Вы можете прочитать их с помощью команды «nroff -ms /usr/doc/cfs*/notes.ms». Одна из самых интересных возможностей, описанных в этих документах – это ускорение работы CFS с помощью изменения параметров «rsize» и «wsize» команды mount.
Рассмотрим скрипты decrypt и dwp.py. «decrypt» упрощает управление вашими личными директориями в CFS. Всю информацию по этому скрипту можно получить с помощью команды «decrypt -help».
Dpw.py обеспечивает графический интерфейс, и для работы этого скрипта требуется стандартный модуль Python под названием Tkinter.
Преимущества и недостатки CFS:
Сильные стороны CFS включают в себя различные способы уменьшения и предотвращения ошибок:
– После изменения временно расшифрованных файлов CFS не требует выполнения отдельной процедуры шифрования, и таким образом можно избежать проблемы шифрования с неправильным ключом.
– CFS поддерживает тайм-аут после определенного периода неактивности, поэтому временно расшифрованный файл не может случайно оказаться свободно доступным в течении долгого периода времени. Не забудьте использовать опцию тайм-аута (-I) с командой cattach.
Уязвимые места CFS и некоторых других криптографических систем:
– Ваш секретный ключ может быть получен с помощью различных клавиатурных шпионов, когда вы набираете его для шифрования или расшифровки.
– Более привилегированные пользователи (злоумышленники или нет) могут получить доступ к временно расшифрованным файлам.
– Ваши временно расшифрованные файлы могут быть различными способами перехвачены при их передаче через сеть. OpenSSH может помочь в какой-то мере, но лучше всего ограничить ваше использование CFS и OpenSSL только вашим личным компьютером, а так же хранить зашифрованные и временные данные только в локальной файловой системе.
– Сохраняйте различные файлы в различных частных директориях.
В документах Матта Блейза по CFS можно найти более подробное обьяснение различных вопросов безопасности CFS.
Вывод.
Не нужно вводить себя в заблуждение и считать, что CFS спасет нас от различных шпионов или от проблем с сетевой безопасностью. Но все равно, использование CFS – важный момент в защите информации.
Мобильный компьютер с установленным Linux – вероятно, идеальное место для применения CFS, если применены другие практические меры предосторожности (настроен firewall и отключены необязательные сетевые сервисы). Даже если ваш лаптоп украдут, закодированные с помощью CFS секретные файлы останутся невидимыми. Не забывайте делать резервные копии.
Самое желаемое улучшение для будущих версий CFS – это поддержка аппаратных ключей, пусть даже позаимствованная из OpenSSL. Использование аппаратных ключей решает проблему с раскрытием пароля с помощью клавиатурных шпионов при его вводе. Так же желательно было бы портировать CFS на платформу Windows, чтобы можно было работать с ним на мультизагрузочных компьютерах.
Ресурсы.
ftp://ftp.ssc.com/pub/lj/listings/Web/6381.tar.gz
Все файлы, упомянутые в этой статье, включая исходники cfs-1.4.0.beta2j и файлы decrypt, dpw.py, cfs-setup и README.
ftp://speakeasy.rpmfind.net/linux/rhcontrib/SRPMS/cfs-1.4.0.beta2-6.2.src.rpm
Исходники cfs-1.4.0.beta2j.
Мэтт Блэйз, «Установка и использование CFS», 1997 и «Криптографическая файловая система для Unix», 1993. Вы можете прочитать эти статьи с помощью команды «nroff -ms /usr/doc/cfs*/notes.ms». Или поищите notes.ms среди исходных файлов C - например, в /usr/src/redhat/BUILD/cfs*/.
Mauriello, Ermelindo. «TCFS: Transparent Cryptographic Filesystem», 1997. Доступно на сайте Linux Journal: http://www.linuxjournal.com/article.php?sid=2174.
www.openssl.org: сайт OpenSSL
www.openssh.com: сайт OpenSSH