Шифрование каталога с помощью eCryptfs на Debian Squeeze
О чём эта инструкция
eCryptfs — это POSIX-совместимая файловая система верхнего уровня для Linux, предназначенная для шифрования данных на уровне файлов и директорий независимо от базовой файловой системы. В этой инструкции показано, как зашифровать обычный каталог (не отдельный раздел) и автоматически монтировать его при загрузке с помощью файла с паролем на USB‑ключе.
Важно: автор исходной инструкции не даёт никаких гарантий работоспособности в вашей среде. Всегда делайте резервные копии перед изменениями.
1 Начальное замечание
В этом руководстве я шифрую домашний каталог /home/falko/, который находится на разделе / (то есть /home/falko/ — обычный каталог, а не отдельный раздел).
2 Установка eCryptfs
Установить eCryptfs можно стандартным способом:
apt-get install ecryptfs-utils3 Шифрование каталога
Поскольку в каталоге уже есть незашифрованные файлы, сначала сделайте резервную копию, чтобы позже восстановить данные в зашифрованный каталог (иначе файлы станут нечитаемыми после монтирования eCryptfs):
cp -pfr /home/falko/ /tmp/Затем смонтируйте каталог как ecryptfs:
mount -t ecryptfs /home/falko /home/falkoПри первом монтировании система задаст несколько вопросов. Пример диалога показан ниже — отвечайте так, как требуется вашей политике безопасности и рекомендациям (в примере выбран AES, 16 байт ключа, включены некоторые опции по умолчанию):
root@server1:~# mount -t ecryptfs /home/falko /home/falko
Passphrase: <-- some_passphrase
Select cipher:
1) aes: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
2) blowfish: blocksize = 16; min keysize = 16; max keysize = 56 (not loaded)
3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24 (not loaded)
4) twofish: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
5) cast6: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)
6) cast5: blocksize = 8; min keysize = 5; max keysize = 16 (not loaded)
Selection [aes]: <-- ENTER
Select key bytes:
1) 16
2) 32
3) 24
Selection [16]: <-- ENTER
Enable plaintext passthrough (y/n) [n]: <-- ENTER
Enable filename encryption (y/n) [n]: <-- ENTER
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=bd28c38da9fc938b
WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt],
it looks like you have never mounted with this key
before. This could mean that you have typed your
passphrase wrong.
Would you like to proceed with the mount (yes/no)? : <-- yes
Would you like to append sig [bd28c38da9fc938b] to
[/root/.ecryptfs/sig-cache.txt]
in order to avoid this warning in the future (yes/no)? : <-- yes
Successfully appended new sig to user sig cache file
Mounted eCryptfs
root@server1:~#Проверьте вывод команды mount — в списке должен появиться /home/falko, смонтированный как ecryptfs:
root@server1:~# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/home/falko on /home/falko type ecryptfs (rw,ecryptfs_sig=bd28c38da9fc938b,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs)
root@server1:~#Восстановите резервную копию в зашифрованный каталог и удалите временную копию:
cp -pfr /tmp/falko/ /home/
rm -fr /tmp/falko/Для проверки можно скопировать, например, /etc/hosts в /home/falko и убедиться, что при смонтированном eCryptfs содержимое читается:
cp /etc/hosts /home/falko
cat /home/falko/hostsТеперь размонтируйте каталог:
umount /home/falkoИ снова попробуйте просмотреть файл — вы увидите нечитабельные, криптированные данные:
cat /home/falko/hosts?æËÊÀû5)í}Ó`§wʽ.ÂçµÔyiIezz°Ñd¦R,`Ëi,0ñ*úÐ%^-']YÑj÷#6÷¨Y-]«é²ùô(Фрагмент зашифрованного содержимого показан выше — он не предназначен для чтения человеком.)
4 Автоматический монтирование зашифрованного каталога при загрузке
Чтобы каталог монтировался автоматически при загрузке, понадобится файл с паролем. Для безопасности этот файл можно хранить на USB‑ключе.
- Подключите USB‑флешку и определите её устройство и тип файловой системы:
fdisk -lПример вывода (в моём случае устройство /dev/sdb1, файловая система FAT32):
root@server1:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00035e35
Device Boot Start End Blocks Id System
/dev/sda1 * 1 3793 30461952 83 Linux
/dev/sda2 3793 3917 992257 5 Extended
/dev/sda5 3793 3917 992256 82 Linux swap / Solaris
Disk /dev/sdb: 8086 MB, 8086617600 bytes
255 heads, 63 sectors/track, 983 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e439f
Device Boot Start End Blocks Id System
/dev/sdb1 1 983 7895916 b W95 FAT32
root@server1:~#- Смонтируйте USB‑ключ, например, в /mnt/usb:
mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb- Посмотрите содержимое /root/.ecryptfs/sig-cache.txt — нам нужна подпись (signature):
cat /root/.ecryptfs/sig-cache.txtbd28c38da9fc938b- Создайте файл /root/.ecryptfsrc с параметрами монтирования, используя подпись из sig-cache.txt. Пример содержимого:
key=passphrase:passphrase_passwd_file=/mnt/usb/passwd_file.txt
ecryptfs_sig=bd28c38da9fc938b
ecryptfs_cipher=aes
ecryptfs_key_bytes=16
ecryptfs_passthrough=n
ecryptfs_enable_filename_crypto=n- Создайте файл с паролем на USB‑ключе:
vi /mnt/usb/passwd_file.txtСодержимое файла (используйте ваш реальный passphrase):
passphrase_passwd=some_passphrase- Добавьте в /etc/fstab две строки: сначала для USB‑ключа (важно — USB должен быть смонтирован перед шифрованным каталогом), затем для зашифрованного каталога. Пример:
[...]
/dev/sdb1 /mnt/usb vfat ro 0 0
/home/falko /home/falko ecryptfs defaults 0 0- Перезагрузите систему:
rebootЕсли во время загрузки USB‑ключа не удаётся примонтировать (например, из‑за порядка инициализации), можно добавить строку /bin/mount -a в конец /etc/rc.local перед exit 0, чтобы повторно попытаться примонтировать все записи из fstab в конце загрузки:
/bin/mount -a
exit 0Это обеспечит попытку монтирования USB и зашифрованного каталога в конце процесса загрузки.
5 Тестирование и проверка
- Убедитесь, что после перезагрузки каталог /home/falko доступен и содержимое читаемо (при вставленной флешке).
- Проверьте логи (dmesg, /var/log/syslog) на ошибки ecryptfs при монтировании.
- Попробуйте вынуть USB‑ключ и перезагрузиться — система должна не иметь доступа к зашифрованному каталогу.
Типичные проблемы и их решение
- Проблема: USB‑ключ монтируется слишком поздно, и ecryptfs не может найти passwd_file. Решение: убедитесь, что строка для USB в /etc/fstab идёт перед ecryptfs; при необходимости добавьте /bin/mount -a в /etc/rc.local.
- Проблема: Неправильный passphrase — монтирование завершается ошибкой. Решение: проверьте содержимое файла passwd_file.txt и соответствие passphrase при ручном монтировании.
- Проблема: Файлы после монтирования выглядят некорректно. Решение: не восстанавливайте резервную копию поверх замонтированного каталога до тех пор, пока eCryptfs не смонтирован корректно и не доступен как расшифрованный.
Безопасность — рекомендации
- Храните файл с паролем на физически защищённом USB‑ключе; используйте аппаратное шифрование USB, если доступно.
- Ограничьте права доступа на passwd_file.txt (chmod 600) и на /root/.ecryptfsrc.
- Регулярно делайте резервные копии (лучше — зашифрованные резервные копии).
- Рассмотрите использование TPM или LUKS для более надёжной интеграции с системой и автоматического монтирования.
Альтернативные подходы
- LUKS/dm‑crypt — лучше подходит для шифрования целых разделов и предоставляет сильную криптографию на уровне блочного устройства.
- EncFS или gocryptfs — современные пользовательские файловые системы шифрования с пользовательским пространством; удобны для синхронизации с облаком, но имеют свои ограничения в безопасности.
- eCryptfs удобен, когда нужно шифровать отдельные каталоги поверх существующей файловой системы.
Контрольный список перед внедрением
- Сделана полная резервная копия каталога
- Установлен пакет ecryptfs-utils
- Сформирован и проверен passphrase
- Создан файл passwd_file.txt на USB и защищён правами доступа
- Добавлены корректные записи в /root/.ecryptfsrc и /etc/fstab
- Проверено монтирование вручную
- Перезагрузка и проверка автоматического монтирования
Критерии приёмки
- После перезагрузки и при вставленном USB ключе каталог /home/falko монтируется как ecryptfs и файлы доступны пользователю.
- При вынутом USB‑ключе файлы в каталоге /home/falko не читаемы.
- Нет сообщений об ошибках в журналах, связанных с ecryptfs.
Короткий глоссарий
- Passphrase — секретный пароль, используемый для генерации ключа шифрования.
- eCryptfs — стековая файловая система для шифрования на уровне файлов.
- sig — подпись (signature) ключа, необходимая для автоматического распознавания ключа при монтировании.
Заключение
eCryptfs предоставляет удобный способ шифрования отдельных каталогов без переразметки диска. Для автоматизации монтирования при загрузке разумно хранить файл с паролем на защищённом USB‑ключе и правильно настраивать /etc/fstab и /root/.ecryptfsrc. Всегда тестируйте процедуру восстановления и имейте рабочие резервные копии данных.
Дополнительные ссылки
- eCryptfs: https://launchpad.net/ecryptfs
- Debian: http://www.debian.org/
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента