ALT Linux sysadmins discussion
 help / color / mirror / Atom feed
From: "Michael A. Kangin" <mak@complife.ru>
To: ALT Linux sysadmins' discussion <sysadmins@lists.altlinux.org>
Subject: Re: [Sysadmins] шифрование корневого раздела
Date: Fri, 17 Jun 2016 23:00:47 +0200
Message-ID: <58ff3eac-291b-4d6a-b97f-32f0a5e7b955@complife.ru> (raw)
In-Reply-To: <CAD5JXrnWeOU0R5Sb-Zn2v1gnfS6+J_ynm1F1BPotek_tPMhdFw@mail.gmail.com>

Немножко оффтопика, опишу для гугля как я у себя делал систему.

Дано: новенький рабочий компьютер с 4 HDD и 1 SSD.
Надо всё зашифровать по максимуму (/, swap) и поиметь максимально 
быструю при этом дисковую систему, утилизируя SSD и 4 шпинделя.

В основу кладём уже используемую мной ранее схему - разделы с редкой 
записью - /boot, /, /usr (разделы по отдельности или вместе) кладём на 
ssd, из дисков (сырых, безраздельно) делаем raid10, на котором размещаем 
LVM, из которого нарезаем /var, /home, swap, и далее по потребностям. 
Потребности можно кстати оставить вообще пока невыделенными, и потом 
увеличить любой требуемый раздел. При выходе из строя HDD просто 
вынимаем его, вставляем новый, и никак не размечая, запускаем ребилд.

Но при такой схеме используется только маленькая часть самого маленького 
SSD, много ли там на /usr надо. Так что попробуем еще и bcache. Большую 
часть SSD пускаем на кеширование, и кешировать будем весь md0, который у 
нас raid10 на 4 сырых дисках. Да, с точки зрения надёжности наверное 
стоит пустить на кеширование отдельное зеркальце из пары отдельных SSD, 
но у меня тут не Ынтерпрайз, а скромная рабочая станция :)

Хорошо, но куда же тут прилепить шифрование?
А шифровать мы будем посерединке между bcache и LVM.
Т.е., с одной стороны, у нас уже сразу целиком зашифрованный PV, дальше 
можно по-раздельно уже не париться. С другой стороны, сам b-кеш на SSD 
тоже скидывается зашифрованный, на радость моей паранойе.

Ну и корень с /usr, которые остались на SSD вне LVM. Их же тоже надо 
зашифровать. Ну, это простенько - ни рейдов, ни кешей, ни LVM, обычный 
простой раздельчик.
Только вот беда - теперь при старте системы пароль спрашивается два раза 
- на / и на LVM. Внутренний полузадушенный перфекционист негодуэ.
Выход из этой ситуации - для расшифровки брать ключ не с клавиатуры, а 
из некоего файла или устройства. Недушенный перфекционист прикрутил бы 
смарт-карту с двухфакторной авторизацией, но мой такого не осилил. 
Поэтому ключ мы храним просто где-то в файле, который на этом же диске, 
и является в свою очередь криптоконтейнером. Который мы открываем 
паролем, вводимым с клавиатуры при старте системы. Но всего один раз! 
Сколько бы мы потом разделов не нашифровали себе.

Ладно, извращаться, так по крупному. Всё в этой схеме хорошо, но этот 
компьютер я постоянно использую и удалённо, из дома. Что, если он там 
без меня соскучится, зависнит, перезагрузится, электричество моргнёт?
Я могу попросить коллегу нажать там резет, но не сдавать же пароли чтобы 
отпереть диск?
Это мог бы сделать я и сам, по сети. Жаль что груб2 её не умеет :)
Тогда мы приходим к пониманию необходимости еще одной, 
минимальной-вспомогательной системы на нашей SSDшечке. Её заботой будет 
загрузиться, поднять сеть, запустить OpenVPN для обхода NAT-ов (у меня 
хоть и есть прямой IP, но подстраховаться никогда не помешает), 
запустить sshd, и спрашивать пароли, на физической консоли и при 
ssh-подключениях. Если там или там был введён пароль, которым удалось 
раскрыть наш криптоконтейнер с главным ключом, мы открываем им наш 
основной криптованный рут, LVM, и делаем pivot_root в основную систему.
Или, если пароля не ввели, можно например перезагрузиться, или выпасть в 
консоль вспомогательной системы, или показать котика дня. Ведь по 
существу ничего, кроме котиков, хранить в незашифрованной системе нельзя 
(здесь должна быть КДПВ с котиком).

Вот, собственно, такая система была реализована на базе P7 и живёт и 
здравствует уже почти полтора года.

Плюсы - высокое быстродействие (если верить fio и субъективным 
ощущениям), вроде-бы криптобезопасность, ну и удобство использования, 
насколько это возможно.

Из минусов - некоторый геморрой создания всего этого. Штатный 
инсталлятор, разумеется, и десятой части всего этого изврата не осилит, 
поэтому основная работа происходит из лив-системы, с последующим 
разворачиванием образа готовой системы в подготовленное место (можно 
использовать, например, ALT Linux Live имени enp@).
Вспомогательная система у нас должна быть аналогична по пакетному 
составу основной (совершенно точно должно совпадать версия ядра, скорее 
всего и всякие libc), за этим надо специально следить при обновлении.
Наличие только одного нерезервируемого SSD внушает некоторые опасения, 
поэтому я время от времени делаю копию рута/бута на диски. Возможно 
подумаю потом о зеркалировании SSD, хотя уже и устройств пихать некуда :)

Получившаяся разбивка SSD:
Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 468862128 sectors, 223.6 GiB
...

Number   Size       Code  Name
    1    256.0 MiB   EF00  EFI System
    2    8.0 MiB     EF02  BIOS boot partition
    3    256.0 MiB   8300  Linux filesystem
    4    2.0 GiB     8300  Linux filesystem
    5    24.0 GiB    8300  Linux filesystem
    6    197.1 GiB   8300  Linux filesystem

3 - boot, 4 - вспомогательная система, 5 - шифрованный рут+usr основной 
системы, 6 - кеш.


HDD-диски в lsblk выглядят так:

sdb                          8:16   0   1.8T  0 disk
└─md0                        9:0    0   3.7T  0 raid10
   └─bcache0                252:0    0   3.7T  0 disk
     └─cr-lvm (dm-2)        253:2    0   3.7T  0 crypt
       ├─VG0-lv_var (dm-0)  253:0    0    64G  0 lvm    /var
       ├─VG0-lv_home (dm-3) 253:3    0   2.9T  0 lvm    /home
       └─VG0-lv_swap (dm-4) 253:4    0    32G  0 lvm    [SWAP]
sdc                          8:32   0   1.8T  0 disk
└─md0                        9:0    0   3.7T  0 raid10
   └─bcache0                252:0    0   3.7T  0 disk
     └─cr-lvm (dm-2)        253:2    0   3.7T  0 crypt
       ├─VG0-lv_var (dm-0)  253:0    0    64G  0 lvm    /var
       ├─VG0-lv_home (dm-3) 253:3    0   2.9T  0 lvm    /home
       └─VG0-lv_swap (dm-4) 253:4    0    32G  0 lvm    [SWAP]
sdd                          8:48   0   1.8T  0 disk
└─md0                        9:0    0   3.7T  0 raid10
   └─bcache0                252:0    0   3.7T  0 disk
     └─cr-lvm (dm-2)        253:2    0   3.7T  0 crypt
       ├─VG0-lv_var (dm-0)  253:0    0    64G  0 lvm    /var
       ├─VG0-lv_home (dm-3) 253:3    0   2.9T  0 lvm    /home
       └─VG0-lv_swap (dm-4) 253:4    0    32G  0 lvm    [SWAP]
sde                          8:64   0   1.8T  0 disk
└─md0                        9:0    0   3.7T  0 raid10
   └─bcache0                252:0    0   3.7T  0 disk
     └─cr-lvm (dm-2)        253:2    0   3.7T  0 crypt
       ├─VG0-lv_var (dm-0)  253:0    0    64G  0 lvm    /var
       ├─VG0-lv_home (dm-3) 253:3    0   2.9T  0 lvm    /home
       └─VG0-lv_swap (dm-4) 253:4    0    32G  0 lvm    [SWAP]







  parent reply	other threads:[~2016-06-17 21:00 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-30 11:28 ` Michael Shigorin
2016-05-30 14:39     ` Michael Shigorin
2016-05-31  8:19             ` Michael Shigorin
2016-05-31 11:05                 ` Michael Shigorin
2016-06-15 15:38   ` Michael Shigorin
2016-06-17 21:00 ` Michael A. Kangin [this message]
2016-06-18 12:10     ` Michael A. Kangin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=58ff3eac-291b-4d6a-b97f-32f0a5e7b955@complife.ru \
    --to=mak@complife.ru \
    --cc=sysadmins@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux sysadmins discussion

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sysadmins/0 sysadmins/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sysadmins sysadmins/ http://lore.altlinux.org/sysadmins \
		sysadmins@lists.altlinux.org sysadmins@lists.altlinux.ru sysadmins@lists.altlinux.com
	public-inbox-index sysadmins

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sysadmins


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git