debian.org / О Debian Где взять Debian Поддержка Уголок разработчика Новости Wiki

Автор Тема: Разблокировка зашифрованного раздела root удалённо через SSH  (Прочитано 1628 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн oermolaev

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 294
не актуально: ShowHide
Хочу предложить свой перевод статьи из персонального блога системного администратора Carlos Alberto Lopez Perez, которая была найдена путём целенаправленных поисков:

Корректность перевода проверена на практике. Кое что пришлось исправить под современные реалии. Итак:

Если вы собираетесь поднять новый сервер в удалённом датацентре, или уже имеете один, или несколько серверов в облаке, то вы, вероятно, хотели бы зашифровать их жесткие диски. Думаете потребуется какое-то устройство KVM для ввода пароля, всякий раз когда придется перезапустить удалённый сервер? Нет!
Благодаря описываемому здесь изящному способу, вы сможете удалённо вводить пароль во время загрузки. Хитрость состоит во внедрении небольшого сервера SSH — Dropbear в initramfs, который и позволит ввести пароль для корневого раздела при загрузке.
Для вас, счастливых обладателей Debian, задача решается предельно просто:
1. Устанавливаем ваш сервер с шифрованным root-разделом
2. Устанавливаем требуемые пакеты:
apt-get install openssh-server dropbear busybox3. Копируем SSH ключ, который был сгенерирован автоматически:
    3.1. Здесь надо предварительно временно разрешить доступ по ssh для root, для чего в файле /etc/ssh/sshd_config указываем
PermitRootLogin yes
вместо PermitRootLogin without-passwordи выполнить service ssh force-reload    3.2. Копируем ключ на локальный компьютер scp root@my.server.ip.addr:/etc/initramfs-tools/root/.ssh/id_rsa ~/id_rsa.initramfs4. Если ваш сервер получает IP-адрес автоматически (DHCP), пропустите этот шаг, в противном случае вы должны указать IP конфигурацию в строке загрузки ядра. Для этого отредактируйте в файле /etc/default/grub строку:
GRUB_CMDLINE_LINUX="ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>" используя формат определённый в документации в nfsroot.txt (https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt). Например:
GRUB_CMDLINE_LINUX="ip=192.168.122.192::192.168.122.1:255.255.255.0::eth0:none"Перезагрузите конфигурацию grub:
update-grub5. Перезагрузитесь
reboot6. И разблокируйте удалённо введя в терминале следующую строку:
ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
 -i "/home/<username>/id_rsa.initramfs" root@my.server.ip.addr \
 "echo -ne \"MyS3cr3tK3y\" >/lib/cryptsetup/passfifo"
где  MyS3cr3tK3y — это пароль, с использованием которого был зашифрован корневой раздел сервера. Пробел в начале строки позволит избежать сохранения парольной фразы в истории команд терминала.
« Последнее редактирование: 19 Ноябрь 2018, 09:28:49 от oermolaev »
 
Пользователи, которые поблагодарили этот пост: qupl, rada-07

Оффлайн oermolaev

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 294
Более свежий вариант:
НА СЕРВЕРЕ:
1. Устанавливаем сервер SSH dropbear:
~# apt install dropbear2. Меняем номер порта на котором будет слушать dropbear, чтобы разойтись с сервером openssh при проверке ключа машины в файле known_hosts. Для этого редактируем файл /etc/dropbear-initramfs/config - добавляем строку:
DROPBEAR_OPTIONS="-p 4748 -s -j -k -I 60"где
-s      Запрет логина по паролю
-j      Запрет проброса локального порта
-k      Запрет проброса удаленного порта
-p [address:]port
      Listen on specified tcp port (and optionally address),
      up to 10 can be specified
      (default port is 22 if none specified)
-I Таймаут до разрыва соединения если не передается никаких данных, в секундах
3. В файле /etc/default/grub описываем параметры сетевого интерфейса:
GRUB_CMDLINE_LINUX="ip=192.168.11.95::192.168.11.191:255.255.255.0::enp2s0:none"в соответствии с nfsroot.txt
Цитировать
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>: <dns0-ip>:<dns1-ip>:<ntp0-ip>
4. Обновляем grub:
~# update-grub5. Конвертируем ключ dropbear в формат openssh, тем самым получаем приватный ключ для initramfs:
~# /usr/lib/dropbear/dropbearconvert dropbear openssh /etc/dropbear-initramfs/dropbear_rsa_host_key /etc/dropbear-initramfs/id_rsa
6. Получаем публичный ключ:
~# dropbearkey -y -f /etc/dropbear-initramfs/dropbear_rsa_host_key | grep rsa > /etc/dropbear-initramfs/id_rsa.pub
НА КЛИЕНТЕ:
1. Копируем свой публичный ключ в файл authorized.keys на сервер:
~$ scp /home/<username>/.ssh/id_rsa.pub root@192.168.11.95:/etc/dropbear-initramfs/authorized.keys2. Копируем вновь созданный приватный ключ сервера клиенту:
~$ scp root@192.168.11.95:/etc/dropbear-initramfs/id_rsa /home/<username>/.ssh/id_rsa_serverНА СЕРВЕРЕ
7. Обновляем initramfs:
~# update-initramfs -uПерегружаем сервер и подключаемся к нему c КЛИЕНТА:
~$ ssh -i "/home/<username>/.ssh/id_rsa_server" root@192.168.11.95 -p 4748Выполняем команду:
~ # cryptroot-unlockРазблокируем известным вам паролем, после чего имеем возможность подключиться к серверу openssh на стандартный порт.
« Последнее редактирование: 06 Декабрь 2018, 14:49:27 от oermolaev »
 
Пользователи, которые поблагодарили этот пост: rada-07

Русскоязычное сообщество Debian GNU/Linux



Теги: