шифрование в 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
Взялся я за это дело шифровальное, посмотрел, что народ пишет. Нашел совсем не много грамотных статей, для Линукса тем более, так что пришлось самому колесо изобретать. Может, кому тоже пригодится.
Я зашифровал не все разделы, а только пользовательские данные. Это нисколько не меньшая безопасность, чем шифровать весь корневой раздел со всеми пакетами и библиотеками!
Итак, что требуется для шифрования:
- 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…