]> gitweb.morketsmerke.org Git - mmdev.git/commitdiff
Dodanie materiału: linux/zdalne_odblokowanie_cryptroot_przez_SSH.html
authorxf0r3m <jakubstasinski@protonmaill.com>
Tue, 23 Jul 2024 11:22:09 +0000 (13:22 +0200)
committerxf0r3m <jakubstasinski@protonmaill.com>
Tue, 23 Jul 2024 11:22:09 +0000 (13:22 +0200)
articles/linux/index.html
articles/linux/zdalne_odblokowanie_cryptroot_przez_SSH.html [new file with mode: 0644]

index 92de661d058f15d8ad277381206c1969db23f527..e445175462ed1299e6a4646a226f944a694aacfc 100755 (executable)
@@ -47,6 +47,7 @@
       <li><a href="uruchomienie_skryptu_podczas_ładowania_systemu_-_jednostka_systemd.html">Uruchomienie skryptu podczas ładowania systemu - jednostka systemd.html</a></li>
       <li><a href="instalacja_sterowników_Nvidii_na_Debian_11.html">Instalacja własnościowego sterownika graficznego Nvidii na Debian 11</a></li>
       <li><a href="automatyczne_odblokownie_istniejacych_partycji_LUKS.html">Automatyczne odblokowanie istniejących partycji LUKS</a></li>
+      <li><a href="zdalne_odblokowanie_cryptroot_przez_SSH.html">Zdalne odblokowanie cryptroot przez SSH</a></li>
                </ul>
        </div>
 
diff --git a/articles/linux/zdalne_odblokowanie_cryptroot_przez_SSH.html b/articles/linux/zdalne_odblokowanie_cryptroot_przez_SSH.html
new file mode 100644 (file)
index 0000000..7d2df21
--- /dev/null
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html>
+       <head>
+               <meta charset="utf-8" />
+               <link rel="icon" type="image/png" href="https://i.ibb.co/khy45hh/mm.png">
+               <link rel="stylesheet" type="text/css" href="/style.css">
+       </head>
+       <body>
+<pre>
+  _____ _   _ _    _    ___      _
+ / ____| \ | | |  | |  / / |    (_)
+| |  __|  \| | |  | | / /| |     _ _ __  _   ___  __
+| | |_ | . ` | |  | |/ / | |    | | '_ \| | | \ \/ /
+| |__| | |\  | |__| / /  | |____| | | | | |_| |>  <
+ \_____|_| \_|\____/_/   |______|_|_| |_|\__,_/_/\_\
+</pre>
+       <p class="header_link">
+               &#9760;&nbsp;<a href="https://morketsmerke.github.io">morketsmerke</a>&nbsp;&#9760;
+       </p>
+       <div class="main">
+               <h1 class="title">Zdalne odblokowanie cryptroot przez SSH</h1>
+        <p>
+          Tworząc materiał o automatyczym odblokowaniu partycji LUKS podczas
+          rozruchu systemu, na jego końcu postawiłem tezę, że rozwiązanie nie
+          jest idealne, brakuje środka zapobiegającego wyciekowi klucza w
+          momencie, gdy ktoś nie powołany uzyska fizyczny dostęp do maszyny.
+          Po zapoznaniu się z materiałem opisującym przekierowanie konsoli
+          <em>tty0</em> na port COM, wiemy, że możemy zaszyfrować partycję
+          z katalogiem głównym i użyć innego serwera do połaczenia szeregowego
+          i odblokować go przez konsolę. Problem niestety z tym rozwiązaniem
+          jest taki, że obecne komputery, mogą nie mieć w ogóle portów COM lub
+          trzeba je wyprowadzić lub trzeba zakupić odpowiedni moduł, którego
+          nie tyle cena co dostępność może być utrudniona. Tak też było w
+          moim przypadku.
+        </p>
+        <p>
+          Rozwiązanie tego problemu istnieje i polega ono na uruchomieniu
+          serwera SSH na etapie wykonywania czynności przez system w
+          <em>initramfs</em>. Do tego celu użyjemy inne implementacji
+          protokołu SSH niż OpenSSH, wykorzystamy oprogramowanie Dropbear - 
+          jest to implemetacja obsługi protokołu SSH przeznaczona dla systemów
+          wbudowanych. Domyślnie wykorzystywana jest w dystrybucji OpenWRT.
+          Dla systemów opartych na Debianie w repozytoriach dostępnych jest
+          pakiet <em>dropbear-initramfs</em>, więc niezbędne oprogramowanie
+          mamy podane jak na tacy. Pozostaje je tylko skonfigurować. 
+        </p>
+<pre class="code-block">
+$ sudo apt install -y dropbear-initramfs
+</pre>
+        <p>
+          Podczas instalacji zostanie nam wyświetlony taki o to komunikat:
+        </p>
+<pre class="code-block">
+dropbear: WARNING: Invalid authorized_keys file, SSH login to initramfs won't work!
+</pre>
+        <p>
+          Ignorujemy go, a naszą konfigurację zaczniemy od właśnie
+          dodania klucza. Możemy używać swojego dotychczasowego klucza lub
+          wygenerować nowy klucz dla serwera. Klucz zapisujemy w pliku
+          <strong>/etc/dropbear/initramfs/authorized_keys</strong> - oznaczyłem
+          te ścieżkę nie bez powodu. Otóż różne wersje <em>dropbear</em>,
+          korzystają z różnych ścieżek, na szczęście jest tylko jedna
+          alternatywa (<em>/etc/dropbear-initramfs/authorized_keys</em>).
+          Wersje do Debiana 11 oraz Ubuntu 20.04 LTS, korzystają ze starszej
+          wersji (<em>dropbear-initramfs/</em>). Tutaj opiszę wersję nowszą, 
+          starsza znajduje się w źródłach (drugi odnośnik).
+        </p>
+        <p>
+          Po zapisaniu klucza możemy przejść do konfiguracji 
+          <em>Dropbear</em>-a.
+          W pliku <em>/etc/dropbear/initramfs/dropbear.conf</em> i odnajdujemy
+          w nim ujętą w komentarz opcję <em>DROPBEAR_OPTIONS</em> usuwamy
+          symbol komentarza i zapisujemy w nim poniższe opcje:
+        </p>
+<pre class="code-block">
+DROPBEAR_OPTIONS="-p 2222 -s"
+</pre>
+        <p>
+          Za pomocą opcji <code class="code-inline">-p</code> wskazujemy port,
+          a za pomocą <code class="code-inline">-s</code> wyłączamy możliwość
+          zalogowania się hasłem. Można różnież dodać opcje <em>-I</em>, która
+          powoduje rozłączenie sesji po podanym czasie nieaktywności. W ten 
+          sposób <em>dropbear</em> został skonfigurowany.
+        </p>
+        <p>
+          Teraz musimy uruchomić jeszcze sieć w trybie <em>initramfs</em>,
+          dokonujemy tego wpisując poniższą konfigurację do pliku
+          <em>/etc/initramfs-tools/initramfs.conf</em>.
+        </p>
+<pre class="code-block">
+# IP_ADDRESS::GATEWAY:NETMASK:HOSTNAME
+IP=172.29.141.62::172.29.128.1:255.255.240.0:debian
+</pre>
+        <p>
+          Komentarz w przykładzie pokazuje, jakie pole odpowiada za co. Po
+          zapisaniu zmian w plikach, możemy przejść do wygenerowania nowego
+          obrazu <em>initramfs</em> oraz aktualizacji plików konfiguracyjnych
+          GRUB-a.
+        </p>
+<pre class="code-block">
+xf0r3m@debian:~$ sudo update-initramfs -u
+update-initramfs: Generating /boot/initrd.img-6.1.0-23-amd64
+xf0r3m@debian:~$ sudo update-grub
+Generating grub configuration file ...
+Found linux image: /boot/vmlinuz-6.1.0-23-amd64
+Found initrd image: /boot/initrd.img-6.1.0-23-amd64
+Found linux image: /boot/vmlinuz-6.1.0-18-amd64
+Found initrd image: /boot/initrd.img-6.1.0-18-amd64
+Warning: os-prober will not be executed to detect other bootable partitions.
+Systems on them will not be added to the GRUB boot configuration.
+Check GRUB_DISABLE_OS_PROBER documentation entry.
+done
+</pre>
+        <p>
+          Jeśli potrzebujemy konfiguracji sieciowej z IPv6, to informacja o tym
+          jak to zrobić znajduje się w źródłach (drugi odnośnik). Teraz możemy
+          restartować nasz serwer i próbować się logować. Serwer będzie gotowy,
+          do połączenia, kiedy podczas rozruchu pokażą nam się informacje
+          sieciowe wprowadzone w pliku <em>initramfs.conf</em>. Na serwerze
+          może to wyglądać to mniej więcej tak:
+        </p>
+<pre class="code-block">
+  Booting `Debian GNU/Linux'
+
+Loading Linux 6.1.0-23-amd64 ...
+Loading initial ramdisk ...
+[    1.071903] piix4_smbus 0000:00:07.3: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr
+IP-Config: eth0 hardware address 00:15:5d:0a:11:67 mtu 1500 DHCP RARP
+IP-Config: eth0 guessed broadcast address 172.29.143.255
+IP-Config: eth0 complete:
+ address: 172.29.141.62    broadcast: 172.29.143.255   netmask: 255.255.240.0
+Please unlock disk sda5_crypt:  gateway: 172.29.128.1     dns0     : 0.0.0.0 
+         dns1   : 0.0.0.0
+ host   : debian
+ rootserver: 0.0.0.0 rootpath:
+ filename  :
+</pre>
+        <p>
+          Teraz serwer jest gotowy do połączenia, na moim komputerze wydaje
+          poniższe polecenie i serwer powinien mi odpowiedzieć co jest pokazane
+          na przykładzie. 
+        </p>
+<pre class="code-block">
+xf0r3m@immudex:~$ ssh -p 2222 -i ~/.ssh/id_rsa root@172.29.141.62
+The authenticity of host '[172.29.141.62]:2222 ([172.29.141.62]:2222)' can't be established.
+ED25519 key fingerprint is SHA256:ZJUHcaM30fDyjshd7kkSOQLFtfFXCDlhpFGlid2g8MY.
+This key is not known by any other names.
+Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
+Warning: Permanently added '[172.29.141.62]:2222' (ED25519) to the list of known hosts.
+Enter passphrase for key '/home/xf0r3m/.ssh/id_rsa':
+To unlock root partition, and maybe others like swap, run `cryptroot-unlock`.
+
+
+BusyBox v1.35.0 (Debian 1:1.35.0-4+b3) built-in shell (ash)
+Enter 'help' for a list of built-in commands.
+
+~ # cryptroot-unlock
+Please unlock disk sda5_crypt:
+cryptsetup: sda5_crypt set up successfully
+~ # Connection to 172.29.141.62 closed by remote host.
+Connection to 172.29.141.62 closed.
+</pre>
+        <p>
+          Po zalogowaniu się zostanie zestawiona sesja powłoki BusyBox. Od
+          samego systemu dostajemy podpowiedź:
+          <code class="code-inline">To unlock root partition, and maybe others 
+          like swap, run `cryptroot-unlock`.</code>, wpisujemy podane polecenie
+          i wówczas zostaniemy zapytani o hasło do odblokowania partycji LUKS.
+          Po prawidłowym podaniu hasło, połączenie zostanie zakończone a
+          rozruch systemu serwera ruszy dalej.
+        </p>
+        <p>
+          Ta metoda jest uniwersalna i może być stosowana nie zależnie od tego
+          czy mamy port COM czy też nie.
+        </p>
+        <p>
+          Źródła:<br />
+          <ul>
+            <li><a href="https://en.wikipedia.org/wiki/Dropbear_(software)">Strona na Wikipedii o Dropbear (implementacji SSH)</a></li>
+            <li><a href="https://www.privex.io/articles/unlock-luks-remotely-ssh-dropbear/">Zdalne odblokowanie LUKS z rootfs podczas rozruchu przez SSH</a></li>
+            <li><a href="https://www.cyberciti.biz/security/how-to-unlock-luks-using-dropbear-ssh-keys-remotely-in-linux/">Zdalne odblokowanie LUKS z rootfs podczas rozruchu przez SSH - nowsza wersja</a></li>
+          </ul>
+        </p>
+        <p>
+            ~xf0r3m
+        </p>
+    </div>
+               <p class="footer">
+                       2024; COPYLEFT; ALL RIGHTS REVERSED;
+               </p>
+</body>
+</html>