From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-0.5 required=5.0 tests=BAYES_00,FUZZY_XPILL, RP_MATCHES_RCVD autolearn=no autolearn_force=no version=3.4.1 From: "Michael A. Kangin" To: ALT Linux sysadmins' discussion References: Message-ID: <58ff3eac-291b-4d6a-b97f-32f0a5e7b955@complife.ru> Date: Fri, 17 Jun 2016 23:00:47 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=koi8-r; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [Sysadmins] =?utf-8?b?0YjQuNGE0YDQvtCy0LDQvdC40LUg0LrQvtGA0L0=?= =?utf-8?b?0LXQstC+0LPQviDRgNCw0LfQtNC10LvQsA==?= X-BeenThere: sysadmins@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux sysadmins' discussion List-Id: ALT Linux sysadmins' discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Jun 2016 21:00:49 -0000 Archived-At: List-Archive: Немножко оффтопика, опишу для гугля как я у себя делал систему. Дано: новенький рабочий компьютер с 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]