Что такое dev loop
Другой пример смотрите в losetup(8).
Для шифрования и расшифровки каждому закольцованному устройству может быть назначена функция обмена.
Для закольцованного блочного устройства доступны следующие операции ioctl(2):
LOOP_SET_FD Связывает закольцованное устройство с открытым файлом, чей файловый дескриптор передаётся в третьем аргументе ioctl(2). LOOP_CLR_FD Отвязывает закольцованное устройство от файлового дескриптора. LOOP_SET_STATUS Назначает состояние (передаваемое в третьем аргументе ioctl(2)) закольцованному устройству. Данный аргумент представляет собой указатель на структуру loop_info, определённую в следующим образом:
Типом шифрования (lo_encrypt_type) должно быть одно из значений: LO_CRYPT_NONE, LO_CRYPT_XOR, LO_CRYPT_DES, LO_CRYPT_FISH2, LO_CRYPT_BLOW, LO_CRYPT_CAST128, LO_CRYPT_IDEA, LO_CRYPT_DUMMY, LO_CRYPT_SKIPJACK или LO_CRYPT_CRYPTOAPI (начиная с Linux 2.6.0).
Поле lo_flags представляет собой битовую маску, в которой может быть ноль или несколько следующих значений:
LO_FLAGS_READ_ONLY Закольцованное устройство доступно только для чтения. LO_FLAGS_AUTOCLEAR (начиная с Linux 2.6.25) Закольцованное устройство автоматически уничтожится после закрытия. LO_FLAGS_PARTSCAN (начиная с Linux 3.2) Разрешено автоматическое сканирования разделов. LOOP_GET_STATUS Получить состояние закольцованного устройства. В третьем аргументе ioctl(2) должен быть задан указатель на структуру struct loop_info. LOOP_CHANGE_FD (начиная с Linux 2.6.5) Поменять источник данных (backing store) закольцованного устройства на новый файл, определяемый файловым дескриптором, указанным в третьем аргументе ioctl(2), представленный целым числом. Данная операция допустима только, если закольцованное устройство доступно только на чтение и новый источник данных имеет тот же размер и тип, использованный ранее. LOOP_SET_CAPACITY (начиная с Linux 2.6.30) Изменить размер используемого (live) закольцованного устройства. Можно изменить размер используемого источника данных, а затем применить эту операцию для того, чтобы драйвер закольцованных устройств учёл новый размер. У этой операции нет аргументов.
Начиная с Linux 2.6, появилось две новые операции ioctl(2):
LOOP_SET_STATUS64, LOOP_GET_STATUS64 Они подобны описанным выше LOOP_SET_STATUS и LOOP_GET_STATUS, но используют структуру loop_info64, в которой есть несколько дополнительных полей, а некоторым другим полям назначены типы с большим диапазоном значений:
Записки дебианщика
В этом блоге публикуются заметки и решения, найденные в процессе работы, освоения и жизни в дистрибутиве Debian GNU/Linux.
Шифрование разделов и файлов в Linux с помощью loop-device и AES алгоритма
Способов шифрования в Linux много, но в данном случае будет показан простой и быстрорастворимый метод с использованием cryptoloop. С его помощью мы можем шифровать как отдельные разделы (например, создать зашифрованный раздел на флешке), либо сделать криптофайл (зашифрованный файл, внутри которого хранятся ценные данные). Последнее особенно удобно для личного применения.
Немного юниксвея
Шифрование раздела на физическом носителе и создание криптофайла на самом деле для UNIX будут выглядеть одинаково. Это есть следствие принципа UNIX » всё есть файл «, над которым стоит немного помедитировать. Так, в посте о монтировании разделов уже приводился пример того, как можно примонтировать ISO-образ файла в Linux и получить доступ к файлам. Хотелось бы подчеркнуть этот факт ещё раз:
Понимание этого факта важно для последующего изложения, и вообще важно для работы в Linux, а не только тыкания по кнопкам в KDE/GNOME.
Два слова о петлевом устройстве (Loop-device)
Loopback Device (loop) это механизм ядра Linux, используемый для интерпретации файлов как реальных блочных устройств. Главное, что все инструменты, используемые для работы с реальными дисками (например mount), могут быть использованы и для петлевых устройств.
Говоря простыми словами, loop нужен для того, чтобы структурированные файлы (ISO-образы, копии разделов с флешек, шифрованные файлы) для ядра выглядели, как реальные диски. В посте о монтировании разделов был пример с ISO-образом
mknod /dev/loop8 b 7 8
mknod /dev/loop9 b 7 9
Главное, чтобы поддержка loopback-device была в ядре Linux (если вы его не собирали сами, она там скорее всего есть). Больше о петлевых устройствах можно прочитать тут, там и здесь.
Установка и подготовка к работе
Для cryptoloop нам потребуется установить небольшой пакет:
sudo aptitude install loop-aes-utils
Итак, начинаем подготавливать криптораздел\криптофайл, куда мы скопируем ценные данные и зашифруем.
0. Создание криптофайла или криптораздела
Если мы хотим создать один большой файл, который будет содержать зашифрованные файлы, делаем это так:
crypto.file bs=1M count= 30
В данном примере это файл на 30 Мб, но при нужде можно сделать сколько угодно.
1. Связываем устройство с loop device (петлевым устройством) с использованием шифрования
В случае криптофайла:
2. Форматирование зашифрованного раздела или файла
После того, как мы связали устройство или файл с loop-device, нужно его отформатировать:
В этом примере мы отформатировали на файловую систему Ext2, но можно использовать любую.
3. Перенос данных и работа с зашифрованным разделом или файлом
Работаем с петлевым устройством, как с обычным разделом: монтируем, записываем на него данные и так далее. Монтирование зашифрованного раздела или файла выглядит так:
mkdir /mnt/cryptodisk
mount /dev/loop0 /mnt/cryptodisk
4. Окончание работы с криптофайлом\криптоустройством
После отмонтирования нужно отвязать устройство или файл от петлевого устройства:
Теперь петлевое устройство свободно, данные зашифрованы, враг не пройдёт.
Вас снова попросят ввести пароль, который нужен для доступа к вашим файлам.
Теперь мы имеем раздел или файл, который невозможно примонтировать просто так (он зашифрован и Linux не увидит на нем файловую систему). Но после прикручивания к петлевому устройству все данные будут доступны (если вы знаете пароль, разумеется).
Лирическое отступление
Не хотелось бы разочаровывать начинающих криптоанархистов, но ребята с xkcd в общем реалистично смотрят на вещи:
Тем не менее, светить своими данными не комильфо, и какое-то время вы выиграете.
26 комментариев: |высказаться!| RSS-лента дискуссии.|
Насколько я помню, loop-aes никогда не включали в официальное ядро, т.е. это левый патч. Одно время его добавляли при сборке ядра в Debian (например, в Lenny), но начиная со Squeeze прекратили.
Поэтому лучше все-таки через штатный cryptsetup.
правильно это делать через lvm. там можно совершать все действия онлайн, перенося данные с одного физ диска на другой, шифруюя, сжимая и разжимая.
Мы с тобой одновременно написали про шифрование http://libc6.org/page/perenos-home-na-zashifrovannyj-razdel
По поводу лирического отступления вспомнилось одно из суждений Инь Фу Во 🙂
Однажды инженер Чжа Вынь обратился к Учителю:
– Один достойный уважения человек сказал мне, что шифровать электронную почту неправильно. Поскольку честному человеку нечего скрывать, шифрованная переписка неизбежно привлечёт внимание Охранительного ведомства. Учитель, что вы об этом думаете?
Инь Фу Во ответил:
– Благородный муж имеет чувство стыдливости. Он закрывает одеждой свою наготу. Вовсе не потому, что лицезрение другими принесёт ему ущерб. Но такова воля Неба, и таков ритуал. Честному человеку есть, что скрывать.
Одно время его добавляли при сборке ядра в Debian (например, в Lenny), но начиная со Squeeze прекратили.
А это, в Сквизи оно в репах тоже есть. Должно ж работать.
Поэтому лучше все-таки через штатный cryptsetup.
Что-то у меня оно не завелось в своё время. Анонимус намекает, что стоит попробовать ещё раз? 🙂
или btrfs.
Кхм. я в общем-то хочу получить свои зашифрованные данные обратно, знаете ли. Для безвозвратного уничтожения данных есть менее экзотические методы 🙂
@librarian комментирует.
Мы с тобой одновременно написали про шифрование
Это да. Ну так Большой Брат наступает, вот параноики и зашевелились :-))
Кстати, я на твой пост ссылку поставил. И да, Librarian, твой дискас не переваривает блоггеровские OpenID. Покрути его 🙂
@Livid комментирует.
По поводу лирического отступления вспомнилось одно из суждений Инь Фу Во
Очень поучительная история. Любому человеку всегда есть, что скрывать. Или, скажем так, есть то, что правительству знать необязательно. 🙂
Как всегда гуд, однако давно использую EncFS 🙂
@Михаил Саушкин комментирует.
Как всегда гуд, однако давно использую EncFS
Михаил, а оно секурно? Меня смущает вот это (из википедии):
2. Fragmentation of the encrypted volume causes fragmentation of the filesystem containing the source directory.
3. Anyone having access to the source directory is able to see how many files are in the encrypted filesystem
В частности, за возможность создания зашифрованного контейнера с «двойным» дном, т.е. двух уровней правдоподобного отрицания, на случай рассекречивания паролей.
Спасибо за пост! Про cryptsetup знал, а про это нет. Хотя на практике шифрования не юзал, нет у меня ничего тайного и криминального 🙂
В debian-russian был не так давно правильный тред на эту тему.
Сухая выжимка: надо использовать cryptsetup с форматом LUKS. В качестве алгоритма на сегодня правильнее всего aes-xts-plain
Ссылки на аргументацию можно найти в треде. http://lists.debian.org/debian-russian/2012/04/msg00012.html
> А это, в Сквизи оно в репах тоже есть. Должно ж работать.
> XXKB
Вы, конечно, имели в виду xkcd 🙂
cryptoloop- это ж старо как говно мамонта, его не рекомендовали использовать еще года четыре назад. cryptsetup, dmcrypt- вот современные решения. encfs же хорош для того, чтоб не ограничивать место для данных, и с другой стороны не занимать лишнее. truecrypt- единственный плюс-правдоподобное отрицание,в остальном не лучше/хуже dmcrypt
> 3. Anyone having access to the source directory is able to see how many files are in the encrypted filesystem
Меня это не смущает 🙂 Главное, не заморачиваюсь с размером, и приходится синхронизировать не весь образ, а только изменённые данные. Зашифрованный том 2 Г по сети не погоняешь 🙂
Кстати, в шифрованных папках винды не тока количество, но и названия файлов видны всем желающим. Такая вот защита 🙂
Приветствую, Михаил! «В нашем полку прибыло!» (с) :)))
Оч-ч-чень правильный подход: заюзать петлю!
Посоветовал бы только (в преддверии наступления Б.Б. 😉 ну, и для просвещения «новичков» джеймсов-бондов и прочих 007 ;)) при юзании подобной технологии создавать для себя набор скриптиков, которые однозначно и безошибочно выполняли бы нужные команды. И конечно поместить их в заветну папочку, типа SecurityTools или там НиктоНеДолженЗнатьЭТО! 🙂
А набор команд необходим и достаточен такой: Создать, Подключить, Отключить, Уничтожить. ТОЧКА! Всё что нужно для собственного спокойствия держать у себя под рукой. Ну, и создано это будет истинно в Ъ юниксвэйном стиле :)))
Хинт. Конечно, при нужде в интерактивном вводе параметров (начиная с пасспараша) можно как (а) ограничиться терминалом, так и пойти на *незначительные* затраты труда (тем кто умеет юзать шелл+граф.оболочки к gtk) заюзать (б) граф. расширение для получения приятной междумордочки, что вызовется при нужде ввода параметров для каждого этого скриптика. Тогда это почти. «коммерческая» 😉 разработка! Но! «Просто, как всё гениальное»! 🙂
Прошу простить за этот как бы оффтопик. Или считайте это подсказкой материала для будущих статей Вашего замечательного блога, который я с удовольствием (увы «поздно» наткнувшись случайно) начал читать на днях.
@Lion9 комментирует.
Использую Truecrypt
По мне так это overkill для личных нужд. Мне этот метод нравится простотой.
@Vlsu комментирует.
Хотя на практике шифрования не юзал, нет у меня ничего тайного
Есть. Личные документы и всякие весёлые картинки можно истолковать по-разному.
@GQ комментирует.
В debian-russian был не так давно правильный тред
О да, там же Рыцари Света и Правды. Всё знают, всё умеют, но никому от этого не легче. Включая их же дебиановской вики, за которую мне приходится краснеть (дебианщик, а пользуюсь либо Gentoo Wiki, либо Arch Wiki).
надо использовать cryptsetup с форматом LUKS.
Добавил в список альтернатив. Спасибо.
@Анонимный комментирует.
В репах (включая Sid) есть только юзерспейсная часть
Шайтан. Я Анонимусу признаюсь по секрету: пост писался дома, а дома ноут с Ленни. Сквизи на работе, так что посыпаю голову пеплом.
@Andrew Kravchuk комментирует.
Вы, конечно, имели в виду xkcd
Пофиксено, спасибо.
@Анонимный комментирует.
cryptoloop- это ж старо как говно мамонта
Анонимус говорит, что софт старый, как будто в этом есть что-то плохое. Расскажите это поклонникам Фортрана, которому полвека, любителям латеха, которому за тридцать, и пользователям Матлаба, которому тоже не меньше 20 лет. Если оно старое, это не значит, что надо вышвырнуть и написать заново.
cryptsetup, dmcrypt- вот современные решения
Никто не спорит.
encfs же хорош
Ой ли?
truecrypt- единственный плюс-правдоподобное отрицание
Заваривать долго. 🙂
@Михаил Саушкин комментирует.
Меня это не смущает
Ну и зря. Когда придут ребята в штатском и спросят, что это за файл «10yroldlollypr0n» что будем отвечать? Что это про старые конфетки? %-)
@Анонимный комментирует.
«В нашем полку прибыло
В общем, давно уже прибыло. Баян старый, сейчас вот выложил.
создавать для себя набор скриптиков, которые однозначно и безошибочно
Ой, Анонимус, ну муторно это. Если надо каждый день шифроваться, тогда да.
По теме, если речь идёт про SquashFS, так автор давно в теме. Но отказался от этого, ибо разработчики SquashFS, эти бестолковые животные, по 10 раз меняют формат и собственно утилиты. Ковбои красноглазые.
Или считайте это подсказкой материала для будущих статей
Ммм. про SquashFS тут уже писалось не раз. На самом деле, оно удобно для LiveCD, и непригодно для архивирования (формат меняется). Ну и хотелось бы добавление возможности записи.
Да, на правах обсуждения. Есть потребность делать сжатые блочные устройства (ну, типа файл, а там сжатая файловая система). Чтобы было чтение и, главное, запись на лету. Шифрование опционально. Лучше через loop, но FUSE тоже сойдёт. Интим и BTRFS не предлагать 🙂
Тоже использую трукрипт, в детали даже не вдаюсь. Файлик храню на флешке =).
ps: omg, блоггеровская каптча бесполезна: комментаторам она мешает, спамерам нет =), Блоггер вообще и так спам сеет хорошо.
Похоже, тут опечатка:
при монтировании от размонтировании
Кстати, прочитайте
http://www.pustyshek.net/literature/articles/469-vzlom-sistem-shifrovaniya-zhestkih-diskov-pod-algoritmom-aes-s-ispolzovaniem-256-bitnyh-klyuchey.html
и не очень надейтесь на надежность защиты.
@aldous комментирует.
блоггеровская каптча бесполезна: комментаторам она мешает, спамерам нет
Неправда. Если я выключаю капчу, сюда лезет куча сеошников с большими членами 🙂 Кроме того, троллей тут и так полно, капча сдерживает их активность.
Блоггер вообще и так спам сеет хорошо.
Часто длинные комментарии попадают в спам, и их приходится вылавливать. Так что не совсем.
@Ostrich’s Poison комментирует.
Похоже, тут опечатка:
Точно. Исправил. Спасибо.
@Анонимный комментирует.
и не очень надейтесь на надежность защиты.
Анонимус, оно подразумевает доступ к машине. Если вы сидите в Гуантанамо с конфискованным ноутбуком и файлами lolli_pr0n.truecrypt, то поздно пить Боржоми 🙂
Так шифрование и должно спасать в случае наличия физического доступа к машине, иначе на фига оно вообще. В оригинале, кстати, и ролик- поливают память из баллончика для охлаждения, вырубают, суют в свой бук, грузят прогу для дампа памяти, затем для поиска ключей- и пожалте бриться. Менее чувствительна к такой атаке память с ЕСС, там очистка вроде как обязательна, чтобы заполнить корректными данными биты коррекции
Gentoo: настройка и подключение через /dev/loop файловой системы с компрессией на примере Reiser4

Есть у меня несколько VPS’ок с Gentoo, бегущих под VMWare, для которых я, пожадничав, выделил всего по 7G дискового пространства. Как-то раз, после выхода очередной версии gcc, на одной из них закончилось место. Покопавшись, я обнаружил, что главными потребителями были директории /usr/src и /usr/portage. Тут же родилась мысль переместить их на файловую систему с компрессией (ага, на NTFS) и выбор пал на Reiser4, так как эти данные идеально подходят для неё — очень много файлов и они все маленькие.
Про эту файловую систему в сети имеется множество противоречивой информации (2013), но, пожалуй, стоит почитать статью (2010) ведущего разработчика.
Цитата из статьи:
за последние четыре года я не помню, чтобы кто-то терял данные на reiser4 разделе при исправно работающем железе. Ко мне обращалось несколько человек с жалобой на работу fsck. В конечном итоге все они получали и свои данные и работающий fsck.
Не надо её бояться…
Хочу особо подчеркнуть, так как их часто путают между собой, Reiser4 это не то же самое, что ReiserFS. Это две разных файловых системы! ReiserFS давно уже живет в основном транке ядра, а вот для Reiser4, хотя и появилась она на свет в далеком 2004 году, придется применять патч, который, надо заметить, регулярно обновляется для новых версий ядра.
Качаем и применяем патч в соответствии с вашей версией ядра (у меня в системе linux-3.10.25-gentoo) с этой страницы
Скажем, это можно сделать вот так:
Вот пример реальной последовательности команд и действий, которые я выполнял на своем сервере, вдруг, кому-то пригодится:
Так как я ставлю совсем новое ядро, то нужно подправить настройки загрузчика, я пользуюсь GRUB:
Рабочая запись для нового ядра выглядит так (просто для примера, у вас может быть всё совсем по-другому):
Не стоит пока что делать её конфигурацией по умолчанию, для начала перезапустим сервер и убедимся, что все хорошо.
Делаем контрольный замер свободного места на дисках:
Запасаемся попкорном с валидолом и…
Не забываем ручками выбрать новую конфигурацию ядра для загрузки:
Надеюсь, ваш сервер всё ещё с вами…
Первое и второе мы уже съели, переходим к десерту — созданию loop устройства и монтированием на него образа диска с Reiser4:
Наконец, монтируем наш новый «диск»:
Перемещаем требуемые директории на новое место жительства (тут можно выпить чашечку кофе и поделать другие дела)
Всё, можно сделать контрольный и подсчитывать профит:
Итого: наши исходники занимали 3.9G, после упаковки это значение уменьшилось до 1.8G, или 46% (сжались больше, чем в два раза!) от исходного размера. Мелочь, конечно, но приятно.
Цитата из статьи, ссылка на которую дана в начале поста:
The Reiser4 performance results were mixed but overall its performance was decent compared to EXT4/XFS/Btrfs given the limited manpower devoted to this out-of-tree file-system and its unfortunate history. Beyond porting the file-system to newer versions of the Linux kernel and fixing bugs, there’s been no major development progress on Reiser4 in months. At this time, however, it appears there are still no formal plans for merging Reiser4 into the mainline Linux kernel anytime soon.
Что такое dev loop
Другой пример смотрите в losetup(8).
Для шифрования и расшифровки каждому закольцованному устройству может быть назначена функция обмена.
Для закольцованного блочного устройства доступны следующие операции ioctl(2):
LOOP_SET_FD Связывает закольцованное устройство с открытым файлом, чей файловый дескриптор передаётся в третьем аргументе ioctl(2). LOOP_CLR_FD Отвязывает закольцованное устройство от файлового дескриптора. LOOP_SET_STATUS Назначает состояние (передаваемое в третьем аргументе ioctl(2)) закольцованному устройству. Данный аргумент представляет собой указатель на структуру loop_info, определённую в следующим образом:
Типом шифрования (lo_encrypt_type) должно быть одно из значений: LO_CRYPT_NONE, LO_CRYPT_XOR, LO_CRYPT_DES, LO_CRYPT_FISH2, LO_CRYPT_BLOW, LO_CRYPT_CAST128, LO_CRYPT_IDEA, LO_CRYPT_DUMMY, LO_CRYPT_SKIPJACK или LO_CRYPT_CRYPTOAPI (начиная с Linux 2.6.0).
Поле lo_flags представляет собой битовую маску, в которой может быть ноль или несколько следующих значений:
LO_FLAGS_READ_ONLY Закольцованное устройство доступно только для чтения. LO_FLAGS_AUTOCLEAR (начиная с Linux 2.6.25) Закольцованное устройство автоматически уничтожится после закрытия. LO_FLAGS_PARTSCAN (начиная с Linux 3.2) Разрешено автоматическое сканирования разделов. LOOP_GET_STATUS Получить состояние закольцованного устройства. В третьем аргументе ioctl(2) должен быть задан указатель на структуру struct loop_info. LOOP_CHANGE_FD (начиная с Linux 2.6.5) Поменять источник данных (backing store) закольцованного устройства на новый файл, определяемый файловым дескриптором, указанным в третьем аргументе ioctl(2), представленный целым числом. Данная операция допустима только, если закольцованное устройство доступно только на чтение и новый источник данных имеет тот же размер и тип, использованный ранее. LOOP_SET_CAPACITY (начиная с Linux 2.6.30) Изменить размер используемого (live) закольцованного устройства. Можно изменить размер используемого источника данных, а затем применить эту операцию для того, чтобы драйвер закольцованных устройств учёл новый размер. У этой операции нет аргументов.
Начиная с Linux 2.6, появилось две новые операции ioctl(2):
LOOP_SET_STATUS64, LOOP_GET_STATUS64 Они подобны описанным выше LOOP_SET_STATUS и LOOP_GET_STATUS, но используют структуру loop_info64, в которой есть несколько дополнительных полей, а некоторым другим полям назначены типы с большим диапазоном значений:
Устройство петли может допускать некоторую обработку данных во время этого перенаправления. Например, устройство может быть незашифрованной версией зашифрованного файла. В таком случае файл, связанный с устройством петли, может быть другим псевдоустройством. Это в основном полезно, когда это устройство содержит зашифрованную файловую систему. Если поддерживается, устройство цикла в этом случае является дешифрованной версией исходного зашифрованного файла и, следовательно, может быть смонтировано, как если бы это была обычная файловая система.
СОДЕРЖАНИЕ
Использование петлевого монтажа
После монтирования файла, содержащего файловую систему, к файлам в этой системе можно будет получить доступ через обычный интерфейс файловой системы операционной системы без каких-либо специальных функций, таких как чтение и запись в ISO-образы в приложениях.
Петлевой монтаж имеет несколько применений. Это удобный метод автономного управления и редактирования образов файловой системы, которые в дальнейшем используются для нормальной работы системы. Сюда входят образы CD или DVD или системы установки. Его можно использовать для установки операционной системы в файловую систему без повторного разбиения диска. Он также обеспечивает постоянное разделение данных, например, при имитации съемных носителей на более быстром и удобном жестком диске или инкапсуляции зашифрованной файловой системы.
Доступность
Различные Unix-подобные операционные системы предоставляют функции устройства контура, используя разные имена.
Пример
Для монтирования файла, содержащего образ диска, в каталог требуется два шага:
Эти две операции могут быть выполнены либо с помощью двух отдельных команд, либо с помощью специальных флагов для команды mount. Первая операция может выполняться такими программами, как losetup в Linux или lofiadm в SunOS. Например, если example.img это обычный файл, содержащий файловую систему, и /home/you/dir каталог пользователя Linux, суперпользователь (root) может смонтировать файл в каталоге, выполнив следующие две команды:
Чтобы определить доступное устройство петли для использования в приведенных выше командах, суперпользователь (root) может использовать:
Утилита mount обычно способна обрабатывать всю процедуру:
Затем устройство можно размонтировать с помощью следующей команды:
В интерфейсе прикладного программирования нижнего уровня ( API ) ассоциация и разъединение файла с устройством цикла выполняется с помощью системного вызова ioctl на устройстве цикла.




