У каждого из нас есть секреты. У многих людей часть секретов (а у некоторых даже все:)) хранится в персональном компьютере. Для хранения секретных данных их полезно зашифровать, в этом случае даже если злоумышленник получит доступ к шифрованным файлам - у него уйдут месяцы, а то и годы на дешифровку.
Самым распространённым решением для шифрования данных сейчас является TrueCrypt, однако он не свободен от недостатков, поскольку шифрованный том имеет ограниченный размер и либо в какой-то момент он просто заканчивается (а динамически расширить его не такая уж и простая задача), либо используется не полностью, то есть можно говорить о нерациональном расходовании дискового пространства.
От описываемого недостатка свободен проект encfs (На русском языке о нём можно прочитать в Википедии).
Основное отличие encfs от TrueCrypt состоит в использовании шифрованных директорий вместо шифрованных томов. Размер директории не фиксирован, и она может увеличиваться по мере появления в ней новых данных, вплоть до размера физического носителя, на котором они и расположены.
Свободное от шифрованных данных место на разделе не пропадает, а может быть использовано под нешифрованные данные. Таким образом достигается более эффективное использование дискового пространства.
Единственный недостаток encfs - отсутствие графического интерфейса пользователя, но он легко устраним с помощью несложных скриптов, с использованием например zenity или kdialog.
Далее будет показано как можно сделать использование encfs простым и удобным для простых пользователей. Начальные условия очень простые: дистрибутив xubuntu 8.10, использующий рабочую среду XFCE.
Итак, нам понадобиться два пакета: собственно encfs и пакет zenity, о котором уже говорилось ранее. Установим их:
apt-get install zenity encfs
Далее создадим шифрованную директорию и точку монтирования для него.
Здесь мы будем исходить из того, что работа ведётся под пользовательским аккаунтом "moose", и шифрованные данные будут хранится в директории /home/moose/.crypt, а монтировать для доступа будем в /home/moose/crypt. Если у вас другие данные - нужно внести соответствующие поправки.
Для создания директорий и настройки шифрования нужно выполнить команду:
encfs /home/moose/.crypt /home/moose/crypt
Далее начинаем отмечать на вопросы. Первым делом будут заданы вопросы о необходимости создания директорий. На них нужно ответить "y" (то есть утвердительно).
Следующий вопрос касается параметров шифрования. Здесь есть два варианта: режиме эксперта и максимальное шифрование. Выберем максимальное шифрование набрав "p".
На третьем (завершающем) шаге нужно ввести и повторить пароль для шифрования.
Всё. Теперь шифрованная директория создана и примонтирована. В дальнейшем для монитирования нужно будет выполнять команду:
encfs /home/moose/.crypt /home/moose/crypt
И отвечать на запрос пароля. Для отмонтирования достаточно выполнить команду:
fusermount -u /home/moose/crypt
На этом создание шифрованной директории заканчивается. Теперь создадим простеший интерфейс для облегчения работы с ecnfs простым пользователям.
Как он работает будет видно из комментариев. Вот листинг скрипта:
#!/bin/sh
# Точка монтирования для шифрованной файловой системы
ENCFS_MOUNTPOINT='/home/moose/crypt'
# Исходная директория с шифрованными файлами
ENCFS_SRCDIR='/home/moose/.crypt'
# Смонитирована ли файловая система? Если да - будет единица, если нет - ноль
ENCFS_MOUNTED=`mount | grep encfs\ on\ ${ENCFS_MOUNTPOINT}\  | wc -l`
# Если файловая система смонтирована
if [ ${ENCFS_MOUNTED} -ne 0 ]; then
    # Задаём вопрос
    zenity --question --text='Вы уверены что хотите отмонтировать директорию '.${ENCFS_MOUNTPOINT}.'?' --title='Доступ к шифрованным данным'
    
    # Если ответ утвердительный
    if [ $? -eq 0 ]; then
    
	# Пытаемся отмонтировать шифрованную ФС
	fusermount -u ${ENCFS_MOUNTPOINT}
	# Если всё прошло гладко
	if [ $? -eq 0 ]; then
	
	    # Сообщаем об этом пользователю
	    zenity --info --text='Размонтирование прошло успешно!' --title='Информация'
	    
	# Если попытка размонтировать не удалась
	else
	
	    # Выдаём сообщение об ошибке
	    zenity --error --text='Не удалось отмонтировать!' --title='Ошибка'
	fi
    fi
# Если файловая система не смонтирована
else
    # Спрашиваем пароль
    ENCFS_PASSWORD=`zenity --entry --text='Введите пароль для доступа к шифрованным данным' --hide-text --title='Введите пароль'`
    
    # Если пароль был введён
    if [ "${ENCFS_PASSWORD}" != "" ]; then
	# Пытаемся примонтировать файловую систему
	echo ${ENCFS_PASSWORD} | encfs -S ${ENCFS_SRCDIR} ${ENCFS_MOUNTPOINT}
	
	# Если монтирование прошло успешно
	if [ $? -eq 0 ]; then
	
	    # Сообщаем об успехе
	    zenity --info --text='Монтирование прошло успешно!' --title='Информация'
	# Если же монтирование не удалось
	else
	    
	    # Выдаём сообщение об ошибке
	    zenity --error --text='Не удалось смонтировать директорию, возможно указан не верный пароль!' --title='Ошибка'
	fi
    fi
fi
Скрипт можно сохранить в директорию ~/scripts под именем mount_encfs.sh и сделать его исполняемым:
chmod +x ~/scripts/mount_encfs.sh
Далее остаётся только добавить кнопку запуска этого скрипта на рабочий стол или панель быстрого запуска и всё!
На этом всё. Приятной работы!

Шаманыш 2009-03-20 01:09:33 (#)