udev: монтировать зашифрованный том после вставки флешки

3090
miracle2k

У меня есть зашифрованный раздел, который я хотел бы смонтировать автоматически, когда я вставляю флешку, содержащую ключ, и я хотел бы размонтировать его (и закрыть маппер), когда флешка удалена. Я использую Ubuntu Karmic.

Кажется, есть пара проектов, которые пытаются это сделать для TrueCrypt (например, http://sourceforge.net/projects/tc-wrapper/ ), но ничего не основано на dmcrypt / LUKS. Поэтому я решил попытать счастья, написав правило udev. После многих разочаровывающих часов я придумал это:

ACTION=="add", SUBSYSTEM=="block", ATTRS=="Flash Disk", ATTRS=="USB2.0", RUN+="/home/michael/trigger-mount.sh encrypted" ACTION=="remove", SUBSYSTEM=="block", ENV=="0204", ENV=="6025", RUN+="/home/michael/trigger-mount.sh encrypted" 

Это работает, но не приятно. Проблема здесь в том, что первое правило не будет соответствовать при удалении, второе не будет соответствовать при добавлении.

udevadm monitor --property показывает это (и почти то же самое на «добавить»).

UDEV [1264556064.762870] remove /devices/pci0000:00/0000:00:02.0/usb2/2-4/2-4:1.0/host47/target47:0:0/47:0:0:0/block/sde (block) UDEV_LOG=3 ACTION=remove DEVPATH=/devices/pci0000:00/0000:00:02.0/usb2/2-4/2-4:1.0/host47/target47:0:0/47:0:0:0/block/sde SUBSYSTEM=block DEVNAME=/dev/sde DEVTYPE=disk SEQNUM=3512 ID_VENDOR=USB2.0 ID_VENDOR_ENC=USB2.0\x20\x20 ID_VENDOR_ID=0204 ID_MODEL=Flash_Disk ID_MODEL_ENC=Flash\x20Disk\x20\x20\x20\x20\x20\x20 ID_MODEL_ID=6025 ID_REVISION=2.00 ID_SERIAL=USB2.0_Flash_Disk-0:0 ID_TYPE=disk ID_INSTANCE=0:0 ID_BUS=usb ID_USB_INTERFACES=:080650: ID_USB_INTERFACE_NUM=00 ID_USB_DRIVER=usb-storage ID_PATH=pci-0000:00:02.0-usb-0:4:1.0-scsi-0:0:0:0 DKD_MEDIA_AVAILABLE=1 DKD_PRESENTATION_NOPOLICY=0 MAJOR=8 MINOR=64 DEVLINKS=/dev/block/8:64 /dev/disk/by-id/usb-USB2.0_Flash_Disk-0:0 /dev/disk/by-path/pci-0000:00:02.0-usb-0:4:1.0-scsi-0:0:0:0 

Кажется, что он содержит все данные, которые необходимы для соответствия обоим правилам в обоих случаях (добавить, удалить).

Для полноты, вот вывод udevadm info -a -p /sys/block/sde/:

 looking at device '/devices/pci0000:00/0000:00:02.0/usb2/2-4/2-4:1.0/host48/target48:0:0/48:0:0:0/block/sde': KERNEL=="sde" SUBSYSTEM=="block" DRIVER=="" ATTR=="16" ATTR=="256" ATTR=="1" ATTR=="0" ATTR=="512000" ATTR=="0" ATTR=="53" ATTR==" 16 47 504 510 0 0 0 0 0 380 510"  looking at parent device '/devices/pci0000:00/0000:00:02.0/usb2/2-4/2-4:1.0/host48/target48:0:0/48:0:0:0': KERNELS=="48:0:0:0" SUBSYSTEMS=="scsi" DRIVERS=="sd" ATTRS=="0" ATTRS=="0" ATTRS=="3" ATTRS=="USB2.0 " ATTRS=="Flash Disk " ATTRS=="2.00" ATTRS=="running" ATTRS=="30" ATTRS=="32" ATTRS=="0x41" ATTRS=="0x41" ATTRS=="0x0" ATTRS=="scsi:t-0x00" ATTRS=="0" ATTRS=="1" ATTRS=="none" ATTRS=="240"  .... 

Кто-нибудь может пролить свет на это?

2
так ... есть ли у вас особая проблема, или это просто общий вопрос "udev + зашифрованный совет fs, пожалуйста"? quack quixote 14 лет назад 0

1 ответ на вопрос

1
quack quixote

Я написал некоторую информацию об использовании udev в качестве автомонтера в предыдущем ответе ; он (или ресурсы, на которые он ссылается) может пролить свет на вас.

Мне не ясно, что именно ваш вопрос

  • Относительно отдельных правил добавления и удаления: вы можете объединить их, если отбросите совпадение ACTION, но это может привести к слишком частому срабатыванию правила. Я думаю, что лучше явно соответствовать каждому правилу. Или еще лучше (по причинам, обсуждаемым в разделе « Размонтирование » ниже), вообще удалите правило «удалить» .

  • Относительно действий RUN в правилах uDev: Действие RUN в вашем правиле uDev должно быть выполнено быстро . Взгляните на пример, с которым я связан; вы увидите, что есть два сценария - uDev вызывает один, который раскручивает другой для фактического монтирования, позволяя первому своевременно вернуть управление обработкой обратно в uDev. Если вы уже делаете это, отлично; если нет, подумайте о настройке ваших сценариев аналогичным образом.

  • Что касается размонтирования: у меня было много проблем с автоматическим размонтированием при удалении устройства, и в конце концов я решил вообще не использовать правило «удалить» . Вместо этого я написал отдельный скрипт unmounter, который заменил правило «remove» .

    Это потому, что вы действительно должны дать ОС столько времени, сколько нужно, чтобы закрыть устройство, прежде чем физически удалить его. Одно дело дергать диск, если вы смонтировали файловую систему только для чтения, но полную файловую систему для чтения и записи следует по возможности аккуратно демонтировать. (Это то, что делает опция «Безопасное извлечение диска» в Windows - это механизм для размонтирования диска перед физическим удалением устройства из системы.)

    С обычной файловой системой я смог заставить некоторые размонтирования работать «правильно», используя syncопцию во время монтирования и umount -l(ленивое размонтирование) при размонтировании. Ленивые размонтирования говорят ядру немедленно отключить файловую систему, но очищают ссылки на файловую систему позже, когда они больше не заняты. Это работает, но это не так безопасно для данных, как полное демонтирование перед удалением устройства.

    По тем же причинам у вас могут возникнуть проблемы с работой ленивых размонтированных файлов с зашифрованной файловой системой. Устройство отображения устройств добавляет еще один уровень сложности поверх стандартных проблем файловой системы. Мне кажется, это сделало бы зашифрованную файловую систему еще более чувствительной к нечистому демонтажу. (Однако я не очень разбираюсь в зашифрованных FS, поэтому они могут это терпеть.)

Надеюсь, это даст вам некоторые советы. Честно говоря, для целей автонастройки uDev работоспособен, но не идеален. Демон HalEvt или новее DeviceKit, вероятно, будет более подходящим.

Похожие вопросы