LinuxShop.ru   PrefNews.Ru  |  DotStyle.Ru  |  HotStuff.Ru  |  Hurd.ru  








 
НОВОСТИ МАГАЗИН БИБЛИОТЕКА LINUXBEGIN GENTOO.RU REDHAT UNIX4ALL ФОРУМ  
Logo
LinuxBegin Статьи Проекты Обратная связь
Все разделы
Аналоги Windows-программ в Linux
(en)
Рассылка "OS Linux для начинающих"
Лучшие ссылки

Знакомство с Linux
Linux Navigator
Выбираем Linux
Инсталляция Linux на компьютер с Windows
Список всех статей (big)

LinuxHumor (en)
Linux Wallpapers
LNAG на русском языке
Linux Tips & Tricks
Ссылки на софт
Xoid26 homepage

Форум проекта
Другие форумы, и т.д.
Регистрация
Добавить статью
Обратная связь
Email
Разделы

Что такое Linux
Некоторые возможности Linux
Дистрибутивы
Переход с Windows на Linux (Nowindows)
Руководства, HOWTO, FAQ
Hardware и драйвера
Программное обеспечение
Запуск Windows-программ в Linux. Эмуляторы.
Все разделы >>


Поиск по сайту

Подписка
OS Linux для начинающих.
Linux Tips & Tricks. [временно не выходит]

Top 10
Художественно-техническое руководство по приведени... (0) 1979
Маленькие хитрости большой системы (1) 1710
Пересядем на дракона (0) 1380
Почтовая система среднего и малого оффиса. (1) 1326
Настройка X-Window (0) 1128
Тонкая настройка IDE дисков с помощью hdparm (0) 1114
Торвальдс: "Мне не о чем беспокоиться" (0) 770
Революция смеха ради (0) 757
Кодирование с помощью MEncoder. (0) 706
Девять с половиной пингвинов. Этюд о легкости рабо... (0) 610

Лучшие ссылки
Linux-ve.net.
*nix project.
Edge.com.ru.
Atmsk.ru.
~t-alex.
Все ссылки >>

Шифрование отдельных директорий с помощью OpenSSL
(Программное обеспечение, работа в Linux)


- Денис Каледин, 23.07.2003 -

Рано или поздно перед многими из нас встает проблема конфидециальности данных. Причины и обстоятельства бывают самыми разными - одним домашним компьютером пользуются несколько человек, тогда хочется максимально обезопасить личные данные. Однако чаще всего о криптографической защите данных мы начинаем задумываться в том случае, когда сами эти данные представляют огромный интерес для ваших конкурентов или же правоохранительных органов. Как говорится, когда в ваш дом врывается ФСБ или ФАПСИ, уже можно пожалеть о том, что единственной защитой ваших данных были права доступа "600". ;)

Однако это все лирика. Современные криптографические средства для *NIX платформ зачастую предлагают нам шифрование единичных файлов, либо партиций. В последнем случае все осложняется необходимостью пропатчивания и пересборки ядра, для поддержки всевозможных EFS/EVFS (Encrypted FileSystem / Encrypted Virtual FileSystem). Часто данные решения подходят только для определенной официальной версии исходников ядра, т.е. пропатчить ядро от Alan Cox, например, может не получиться. Шифрование единичных файлов не совсем удобно, однако, за основу я беру именно этот путь.

Я столкнулся с необходимостью шифрования отдельных директорий, к примеру /home/user/stuff, без значительных на это временных затрат, т.е. выполнение простенького скрипта, как для шифровки, так и для дешифровки данных. В идеале - шифрование директории /home/user, например, при выходе пользователя из системы, однако, об этом в следующий раз.

Убедитесь, что у вас установлен пакет OpenSSL, и можем начинать. Я пошел простым путем: для шифрования, пользователь вводит команду: sslenc <директория> <шифр>

ВНИМАНИЕ! Необходимо указывать путь к директории полностью, т.к. дальнейшая работа ведется в каталоге /tmp.Скрипт sslenc с помощью команды tar сжимает директорию, затем командой openssl шифрует полученный файл заданным шифром. Если все ОК, содержимое исходной директории очищается и туда помещается зашифрованный tarball. Незашифрованный tarball рекомендуется удалять вручную, однако, если вы уверены в своих действиях, эту команду можно включить в скрипт (в моем скрипте она включена). Помнить необходимо две вещи - использованный шифр и пароль, который попросит задать команда openssl.

Ниже приведен мой вариант скрипта sslenc:

<--------start script--------->

#!/bin/bash
# OpenSSL directory encryption script.
# 2003 Denis A. Kaledin, <hannibal at nline dot ru>

cd /tmp

if [ ! -e "$1" ]; then
echo "Directory not found!"
exit 1
else
echo "Preparing to encrypt directory "$1"..."
fi

if [ "$2" = "base64" ] || [ "$2" = "bf-cbc" ] || [ "$2" = "bf" ] ||
[ "$2" = "bf-cfb" ] || [ "$2" = "bf-ecb" ] || [ "$2" = "bf-ofb" ] ||
[ "$2" = "cast-cbc" ] || [ "$2" = "cast" ] || [ "$2" = "cast5-cbc" ] ||
[ "$2" = "cast5-cfb" ] || [ "$2" = "cast5-ecb" ] || [ "$2" = "cast5-ofb" ] ||
[ "$2" = "des-cbc" ] || [ "$2" = "des" ] || [ "$2" = "des-cfb" ] ||
[ "$2" = "des-ofb" ] || [ "$2" = "des-ecb" ] || [ "$2" = "des-ede-cbc" ] ||
[ "$2" = "des-ede" ] || [ "$2" = "des-ede-cfb" ] || [ "$2" = "des-ede-ofb" ] ||

[ "$2" = "des-ede3-cbc" ] || [ "$2" = "des-ede3" ] || [ "$2" = "des3" ] ||
[ "$2" = "des-ede3-cfb" ] || [ "$2" = "des-ede3-ofb" ] || [ "$2" = "desx" ] ||
[ "$2" = "rc2-cbc" ] || [ "$2" = "rc2" ] || [ "$2" = "rc2-cfb" ] ||
[ "$2" = "rc2-ecb" ] || [ "$2" = "rc2-ofb" ] || [ "$2" = "rc2-64-cbc" ] ||
[ "$2" = "rc2-40-cbc" ] || [ "$2" = "rc4" ] || [ "$2" = "rc4-40" ] ||
[ "$2" = "aes-128-cbc" ] || [ "$2" = "aes-128-ecb" ] || [ "$2" = "aes-192-cbc" ]
||
[ "$2" = "aes-192-ecb" ] || [ "$2" = "idea" ] || [ "$2" = "aes-256-cbc" ] ||
[ "$2" = "aes-256-ecb" ] || [ "$2" = "rc5" ]; then
echo "Good...loading "$2" algorithm"
else
echo "Cipher "$2" is not supported by OpenSSL!"
exit 1
fi

echo "Encrypting "$1" directory with "$2" cipher..."
tar -cvvf encrypted.tar "$1"/ -P
/usr/bin/openssl "$2" -salt -in encrypted.tar -out encrypted.tar.sec

if [ ! -e encrypted.tar.sec ]; then
echo "Incorrect password!"
exit 1
else
rm -Rf "$1"/
mkdir "$1"
mv encrypted.tar.sec "$1"/
rm encrypted.tar
echo "Directory "$1" has been encrypted with "$2" cipher!"
fi

<-------end script-------->

Итак, теперь в /home/user/stuff у нас лежит зашифрованный tarball. Для его расшифровки пользователь вводит команду: ssldec <директория> <шифр>, вводит пароль. Опять же, путь к директории должен быть полным! Программа openssl расшифрует файл, затем команда tar расворачивает его в исходной директории. Зашифрованный tarball, опять же, можно удалять руками, а можно с помощью скрипта. Вот мой вариант скрипта ssldec:
<------start script------->
#!/bin/bash
# OpenSSL directory decryption.
# 2003 Denis A. Kaledin <hannibal at nline dot ru>

cd /tmp

if [ "$2" = "base64" ] || [ "$2" = "bf-cbc" ] || [ "$2" = "bf" ] ||
[ "$2" = "bf-cfb" ] || [ "$2" = "bf-ecb" ] || [ "$2" = "bf-ofb" ] ||
[ "$2" = "cast-cbc" ] || [ "$2" = "cast" ] || [ "$2" = "cast5-cbc" ] ||
[ "$2" = "cast5-cfb" ] || [ "$2" = "cast5-ecb" ] || [ "$2" = "cast5-ofb" ] ||
[ "$2" = "des-cbc" ] || [ "$2" = "des" ] || [ "$2" = "des-cfb" ] ||
[ "$2" = "des-ofb" ] || [ "$2" = "des-ecb" ] || [ "$2" = "des-ede-cbc" ] ||
[ "$2" = "des-ede" ] || [ "$2" = "des-ede-cfb" ] || [ "$2" = "des-ede-ofb" ] ||

[ "$2" = "des-ede3-cbc" ] || [ "$2" = "des-ede3" ] || [ "$2" = "des3" ] ||
[ "$2" = "des-ede3-cfb" ] || [ "$2" = "des-ede3-ofb" ] || [ "$2" = "desx" ] ||
[ "$2" = "rc2-cbc" ] || [ "$2" = "rc2" ] || [ "$2" = "rc2-cfb" ] ||
[ "$2" = "rc2-ecb" ] || [ "$2" = "rc2-ofb" ] || [ "$2" = "rc2-64-cbc" ] ||
[ "$2" = "rc2-40-cbc" ] || [ "$2" = "rc4" ] || [ "$2" = "rc4-40" ] ||
[ "$2" = "aes-128-cbc" ] || [ "$2" = "aes-128-ecb" ] || [ "$2" = "aes-192-cbc" ]
||
[ "$2" = "aes-192-ecb" ] || [ "$2" = "idea" ] || [ "$2" = "aes-256-cbc" ] ||
[ "$2" = "aes-256-ecb" ] || [ "$2" = "rc5" ]; then
echo "Muy bien....preparing to decrypt"
else
echo "Cipher "$2" is not supported by OpenSSL!"
exit 1
fi

if [ ! -e "$1"/encrypted.tar.sec ]; then
echo "There is nothing to decrypt!"
exit 1
else
echo "Decrypting encrypted.tar.sec..."
cp "$1"/encrypted.tar.sec /tmp
/usr/bin/openssl "$2" -d -salt -in "$1"/encrypted.tar.sec -out encrypted.tar
rm -Rf "$1"/
tar -xvvf encrypted.tar -P
if [ ! -e "$1"/ ]; then
echo "Invalid password!"
mkdir "$1"
cp encrypted.tar.sec "$1"/encrypted.tar.sec
exit 1
else
rm encrypted.tar
echo "Directory "$1" has been successfully decrypted."
fi
fi

<------end script-------->

Вот, собственно, и все. Скрипты можно положить в /usr/bin или /usr/local/bin и начинать экспериментировать.

P.S. Конфидециальную информацию имеет смысл хранить на партиции с журналируемой файловой системой, т.к. это сводит к нулю шансы злоумышленника воспользоваться утилитами типа undelete. ReiserFS в этом плане оптимальна, можно Ext3. По поводу XFS и JFS ничего сказать не могу, не в курсе. Параноики после процесса зашифровки могут произвести какие-либо действия на диске, например покопировать или постирать файлы, это сделает восстановление невозможным.

P.P.S. Список доступных алгоритмов шифрования - команда 'openssl help' . По умолчанию, бинарные пакеты OpenSSL не включают в себя достаточно мощные шифры - IDEA и RC5. Если вы не страдаете помешательством на почве соблюдения патентов, доставайте исходники с http://www.openssl.org/ и пересобирайте руками с теми алгоритмами, которые считаете необходимыми.

Хотелось бы получить feedback по поводу скриптов, экспериментируйте! =)

На главную  |  Версия для печати  |  Отправить по почте  |  Просмотров: 239  |  Рейтинг статьи: 5 (Голосов: 3).
Помещено: Xoid26, 2003-08-02 19:01:51

Как вы оцениваете полезность и понятность этой статьи?
Плохо Нормально Хорошо Очень хорошо! Отлично!



5 последних поступлений в раздел Программное обеспечение, работа в Linux:

02.08.03: Что делать, если Вы установили GNU/Linux? (Это - перевод части руководства "Doing Things In GNU/Linux", которое является своего рода путеводител...)
02.08.03: Шифрование отдельных директорий с помощью OpenSSL (Я столкнулся с необходимостью шифрования отдельных директорий, к примеру /home/user/stuff, без значит...)
17.07.03: Маленькие хитрости большой системы (Некоторые нюансы использования Linux. )
06.07.03: Защита ваших данных. PGP & Linux. (Небольшое руководство по PGP.)
03.07.03: Клонирование рабочих станций в Линукс (Думаю, что любой, кому приходилось готовить парк компьютеров из 10 - 100 рабочих станций с абсолютно ...)

"Шифрование отдельных директорий с помощью OpenSSL" | Логин/Создать Аккаунт | 0 Комментарии
Порог
  
Спасибо за проявленный интерес

© 2003 Valery V. Kachurov. Hosted by Linux-online. Powered by PHP-Nuke.

Rambler's Top100