Шифрованная файловая система в файле: готовый рецепт

    Picamatic - upload your imagesНа хабре уже было множество статей о том, как безопасно передать данные, защитив канал, или зашифровав файл с данными. Но часто хранить данные в файле не очень удобно (например, в файле не удобно хранить SVN-репозиторий, или maildir с почтой).

    Под катом ещё одно решение, которое я нахожу весьма удобным, возможно оно пригодится ещё кому-то.

    Почему я использую не архив, а именно файловую систему? Потому, что файловой системой умеют пользоваться все программы, работающие с файлами. А архив пришлось бы разархивировать и создавать не зашифрованную копию, которую потом можно случайно забыть удалить. Одним словом, шифрованная файловая система — это естественное решение, а сохранение файлов со всеми их атрибутами в шифрованном архиве — это искусственное решение. На этом позвольте закончить лирическую часть и перейти к конкретике.

    Создаём файл с шифрованной файловой системой


    Подгружаем модуль ядра geom_bde
    # kldload geom_bde
    или для автоматической загрузки прописываем в /boot/loader.conf
    geom_bde_load="YES"
    Создаём сам файл (в моём случае — один мегабайт):
    # dd bs=1024 count=1024 if=/dev/zero of=/mnt/nokia/virt-fs
    Создаём устройство, глядящее в этот файл:
    # mdconfig -a -t vnode -f /mnt/nokia/virt-fs -u 0
    Теперь у нас есть устройство /dev/md0.
    Инициализируем шифрование:
    # gbde init /dev/md0
    Тут вас попросят дважды ввести пароль.
    Внимание, это самый простой способ. gbde допускает более изощрённые способы защиты с lock- и key-файлами. Если вам это интересно, смотрите man.
    Теперь зашифрованное устройство надо подключить:
    # gbde attach /dev/md0
    Снова вводим пароль. Если пароль не правильный, то ничего не произойдёт. Если правильный — тот у вас появилось устройство /dev/md0.bde.
    Создаём на нём файловую систему:
    # newfs -U -O2 /dev/md0.bde
    Вот и всё, можно разобрать всю эту конструкцию, если она вам больше не нужна (подробнее см. ниже):
    # gbde detach /dev/md0; mdconfig -d -u 0

    Подключаем


    Тут, я думаю, незнакомых команд не будет:
    # mdconfig -a -t vnode -f /mnt/nokia/virt-fs -u 0
    # gbde attach /dev/md0
    # mount /dev/md0.bde /mnt-private
    Теперь в /mnt-private смонтирована шифрованная файловая система, находящаяся в файле /mnt/nokia/virt-fs и ей может пользоваться любая программа (кстати, симлинки рулят!).

    Отключаем


    Тут всё ещё проще:
    # umount /mnt-private
    # gbde detach /dev/md0
    # mdconfig -d -u 0
    Обратите внимание, что если одна из этих команд не сработает (скажем, файловая система занята и не размонтировалась), то остальные тоже не сработают. Это надо учитывать, при написании скрипта подключения/отключения.

    Вот и всё


    Теперь, если враг похитит мою «нокию», то ничего не сможет разобрать в файле virt-fs.

    Всем успехов и сохранности приватных данных!
    Поделиться публикацией

    Комментарии 25

      0
      Ого! Не знал, что можно вот так сделать. Спасибо за информацию.
        0
        а мне больше нравится geli. и, кстати, всё вышеописанное доступно из <a href=«www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/disks-encrypting.html»handbook.
          +2
          Осторожно. Если всё сделать как написано по ссылке, то ничего работать не будет :-) Основное и принципиальное отличие: там предлагается создать lock-файл (/etc/gbde/ad4s1c.lock), так вот, чтобы всё работало, вам нужно носить этот файл с собой на флешке, а не хранить локально в /etc. Тамошнее решение просто рассчитано на другое: на то, что шифрованная система не таскается в файле на флешке, а организована на стационарном устройстве типа жёсткого диска. В моём случае для lock-данных используется первый сектор md0. Ну и есть целый раз заметных, но не столь принципиальных отличий.
          0
          Я правильно понял, что это для BSD? Если да, то как сделать тоже самое в Ubuntu?
            0
            Совершенно точно — FreeBSD.
            Под Linux я тоже один раз так делал, но сейчас, на память, не воспроизведу, а линукса под рукой нет. Могу только сказать, что решение легко нагугляется.
              0
              под убунту — тут
              oletorr.habrahabr.ru/blog/50810/
                +1
                под Ubuntu можно использовать truecrypt. можно точно так же создать файл, а в нем файловую систему, либо откусить целый раздел винта и зашифровать.
                • НЛО прилетело и опубликовало эту надпись здесь
                +1
                Отключаем
                Тут всё ещё проще:
                # umount /man-private

                — исправьте /man -> /mnt ;)

                  0
                  спасибо — исправил :-)
                  –1
                  еще есть замечательная утилитка truecrypt, которой можно шифровать целые разделы. огромным приемуществом также является поддержка практически всех платформ. оч. удобно зашифровать раздел на флешке и пользовать его под любой осью.
                    +4
                    «поддержка практически всех платформ» — это «Windows 7/Vista/XP, Mac OS X, and Linux», на сколько я знаю (поправьте меня, если я ошибаюсь), как раз под FreeBSD этой штуки нет, а моя статья для BSDельников, к коим относится и ваш покорный слуга :-)
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        Спасибо вам, о учитель! До вашего светоносного замечания, никто просто не догадывался собрать из сорцов!
                        JFYI: http://www.truecrypt.org/misc/freebsd
                        • НЛО прилетело и опубликовало эту надпись здесь
                    –11
                    dm-crypt/cryptsetup в Linux гораздо более удобно, гибко в конфигурации, и масштабируемо.
                      +1
                      Ну. вобще-то статья для BSDельников. Linux в данном посте не рассматривается. Хотя наверное Вы это уже поняли (cудя по минусам вашего камента)
                      +1
                      Писал не так давно драйвер под WinNT для реализации виртуального раздела диска, с шифрованием на лету в AES128. Написано на MASM32. Могу поделиться с сообществом исходниками)
                        0
                        исходники трукрипта тоже открыты
                        0
                        С удовольствием посмотрел бы
                          0
                          ну вот.

                          это конечно не законченный продукт, но работает) тестилось в свое время под XP SP2. все исходники и ресурсы + бинарники драйвера и загрузчика.
                        0
                        Замечательная статья!
                        А можно поподробнее, что за нокия, и как она связана с BSD как таковым? :) Давно не имел дел с их девайсами
                          0
                          N78. А связана она просто как флешка, ничего особенного :-)
                          Но, честно говоря… я не жалею, что её купил, но и советовать её я бы не стал :-) Есть мелкие глюки софта (первая прошивка была просто караул, но потом всё пофиксили), и корпус не очень надёжный (хотя, должен признаться, что не использую никаких чехольчиков и таскаю телефон просто в кармане). Да и модель эта уже не новая.
                          0
                          Когда делаете форматирование, ключ "-O2" необязателен — по умолчанию создаётся UFS2.

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

                          Самое читаемое