шифрование в Ubuntu для домашнего и бизнес-применения

Данные на дисках обычно хранятся в открытом виде, как в Windows, так и в Linux, что дает доступ к любой информации практически любому, на нее покушающемуся, "случайному прохожему", или даже неслучайному. Если вы хотите что-то скрыть от посторонних глаз, то эта статья для вас - умеренных параноиков и пользователей (K)Ubuntu. Особенно это касается владельцев ноутбуков (про массовые кражи все читали).

Взялся я за это дело шифровальное, посмотрел, что народ пишет. Нашел совсем не много грамотных статей, для Линукса тем более, так что пришлось самому колесо изобретать. Может, кому тоже пригодится.

Я зашифровал не все разделы, а только пользовательские данные. Это нисколько не меньшая безопасность, чем шифровать весь корневой раздел со всеми пакетами и библиотеками!

Итак, что требуется для шифрования:

- swap;

- /home - поместить в контейнер tc (можно в виде файла или в раздел);

- /tmp - эти данные нужны только для одного сеанса, поэтому смело помещаем в tmpfs;

- /var/tmp - то же самое;

- /var/spool - здесь хранятся пользовательские задачи cron, задачи для принтера, лучше поместить в контейнер вместе с домашней папкой; - /var/mail - в контейнер;

- /var/lib/slocate - в контейнер;

- /var/log - в контейнер. Хотя кое-что на этапе загрузки не попадет сюда, но это не относится к пользовательским логам.

Для линукса есть как встроенные (dm-crypt, loop-aes...), так и стороннее средство - TrueCrypt, работающее как в Windows Vista/XP/2000, так и в Linux (правда, примерно в 1.5 раза медленнее). И, конечно же, с открытым кодом (привет спецслужбам :)

Для шифрования swap можно довериться средствам Линукса. В документации много «воды», я распишу детально и коротко:

sudo -i
apt-get install cryptsetup
echo aes >> /etc/modules
echo dm_mod >> /etc/modules
echo dm_crypt >> /etc/modules
swapoff -a
cryptsetup -d /dev/urandom create cryptoswap /dev/sda2
mkswap /dev/mapper/cryptoswap -L accessisdenied -v1
echo 'cryptoswap /dev/sda2 /dev/urandom swap' >> /etc/crypttab


В fstab заменить ваш swap на:

/dev/mapper/cryptoswap none swap sw 0 0

dd if=/dev/urandom of=/dev/sda2 count=100
swapon -a


Дальше больше. Размещение в tmpfs:

mv /tmp /ttmp
mkdir tmp
chmod 777 tmp
в /etc/fstab добавить:
echo 'tmpfs /tmp tmpfs rw,noexec,nosuid,nodev,mode=0777' >> /etc/fstab
mv /var/tmp /var/ttmp
ln -s /tmp /var/tmp


Теперь помещаем в криптоконтейнер каталоги из /var:

mkdir /home/.var
chmod 755 /home/.var
mv /var/spool/ /home/.var/spool
ln -s /home/.var/spool /var/spool
mv /var/mail /home/.var/mail
ln -s /home/.var/mail /var/mail
mkdir /home/.var/lib
chmod 755 /home/.var/lib
mv /var/lib/slocate /home/.var/lib/slocate
ln -s /home/.var/lib/slocate /var/lib/slocate
mv /var/log home/.var/log
ln -s /home/.var/log /var/log


Индексацию зашифрованных разделов нужно отключать, в файле /etc/updatedb.conf, в PRUNEPATHS добавить /home.

Затем перезагрузиться и удалить каталоги /ttmp и /var/ttmp.

Следующим этапом идет собственно шифрование раздела /home Я воспользовался руководством от MasterGnome, при этом переделав некоторые моменты, касающиеся инсталляции и форматирования.

Для Ubuntu Feisty инсталляция несколько проще:

1. Устанавливаем пакет Automatix2, если его у вас еще нет.

2. Через Automatix устанавливаем TrueCrypt.

3. Тестируем TC:

if truecrypt --test &> /dev/null; then echo "Ok"; else echo "Error"; fi

TrueCrypt позволяет создавать криптоконтейнеры как в разделах, так и в файлах, которые потом подключаются как разделы. Для замены одного другим в командах достаточно поменять раздел (например /dev/sda3) на название файла (например home.tc).

Truecrypt позволяет шифровать с использованием алгоритмов AES, Twofish, Serpent.

Все три алгоритма очень надежны, и сейчас не существует даже теоретического способа взлома, кроме метода полного перебора. AES выбран как правительственный стандарт в США. Twofish на процессоре AMD64 (Linux kernel i386 2.6.20-16) самый быстрый (опережает AES в среднем на 20%). Serpent - существенно медленнее остальных.

Я заметил, что Twofish быстрее на AMD, а AES на Intel, причем на Intel Mobile оба алгоритма примерно равны. Вы можете выбрать любой из них, но я советую сначала протестировать на скорость на вашем компьютере.

Используются хешевые функции RIPEMD-160,SHA-1 и Whirlpool.

Замечу, что в SHA-1 появилась теоретическая возможность взлома, и хотя это скорее относится к письмам и цифровым подписям, алгоритм не рекомендуется к применению.

RIPEMD-160 стоит по умолчанию. Для этого алгоритма даже теоретически взлом пока не возможен. Но вот его предшественник RIPEMD уже себя дискредитировал. Функция Whirlpool, теоретически, самая медленная; некоторые источники утверждают, что она медленнее остальных в 2-3 раза. Хотя мои тесты показали, что в TrueCrypt это не так. Как в Linux, так и в Windows XP отставание не более 5% от предыдущих. И учтите, на сегодняшний момент это самый стойкий алгоритм. И самый молодой.

Можно использовать Whirlpool или RIPEMD-160.

В TC есть возможность использовать каскады алгоритмов. Связка AES-Twofish вместе с Whirlpool и скрытый контейнер - это для суперсекретных данных ;)

Прежде чем продолжить, сохраните где-нибудь папку /home. После этого, если у вас home расположен на отдельном разделе (например, sda3), то его надо размонтировать.

Для директории /home создадим внешний криптоконтейнер:

truecrypt --encryption AES --type normal -c /dev/sda3

Задаем файловую систему как None, выбираем любой алгоритм хэша и два раза вводим пароль. /* Имейте в виду, что во всех шифровальных системах такого типа (запароленный криптоконтейнер) самое уязвимое место не криптоалгоритмы или длина ключей, как может показаться с первого взгляда, а именно пароль. Никакой AES и Twofish с супердлинными ключами не спасут вас от тупого подбора пароля на контейнер из 5 символов :))) – прим. ред. */

Затем:

truecrypt /dev/sda3

Теперь форматирование контейнера:

mkfs.ext2 -v /dev/mapper/truecrypt0
mount /dev/mapper/truecrypt0 /home


Перепишем туда сохраненный /home со всеми вашими данными. Не забудьте про .var из сохраненного /home, только удалите там все файлы.

umount /home
truecrypt -d


Вместо ext2 вы можете использовать и другую файловую систему: ext3, ReiserFS...

Truecrypt несомненно хорош и тем, что внутри зашифрованного контейнера можно спрятать еще один. Хотя в документации сказано, что внешний контейнер должен быть отформатирован как FAT, он прекрасно работает и с ext2. Но при превышении границы между контейнерами (с ключом –P) система не говорит об окончании места, как в Windows, просто данные теряются.

Журнал файловой системы автоматически размещается в криптоконтейнере.

Теперь надо вставить скрипт, который спрашивает пароль и монтирует, в загрузку:

cd /usr
wget http://privat.heinzelzwerg.de/howtos/debian/truecrypt/tcbootscreen.tar.bz2
tar -xvjf tcbootscreen.tar.bz2
chown root:root /usr/tcbootscreen/*
chmod ugo+x /usr/tcbootscreen/*
chmod ugo-x /usr/tcbootscreen/tcscreen.tmp
chmod ugo-x /usr/tcbootscreen/main.log


Возможно понадобится заменить во всех скриптах #!/bin/sh на #!/bin/bash, иначе в Ubuntu выдается ошибка с declare.

Далее:

mv /usr/tcbootscreen/tcbootscreen /etc/init.d/tcbootscreen
update-rc.d tcbootscreen defaults


В файле /usr/tcbootscreen/decrypt подставить свои значения для device и mountpoint.

"Небольшая проблемка" только в том, что при вводе пароля он показывается. Что не есть хорошо, то есть не работает "stty -echo" при загрузке... Возможно, я просто что-то делал не так :)



Alrond


Сетевые решения. Статья была опубликована в номере 07 за 2007 год в рубрике save ass…

©1999-2024 Сетевые решения