it-swarm-eu.dev

SSH dešifrovat šifrované LVM během spouštění bezhlavého serveru?

Když jsem nainstaloval Ubuntu 10.04 a nyní 10.10, byla mi nabídnuta možnost povolení „šifrovaného LVM“ pro můj pevný disk. Po výběru této možnosti jsem během bootování požádán o heslo, abych dešifroval LVM.

Teď přemýšlím o nastavení bezhlavého serveru, který provozuje Linux (ne nutně Ubuntu), ale obávám se, že jelikož je server bezhlavý, nebudu jej moci při spuštění dešifrovat. Mohl bych se během zavádění systému SSH přihlásit k zadání hesla pro šifrované LVM? Pokud ano, jak je nastavím? Nebo existuje jiné řešení? Opět tato otázka NENÍ specifická pro Ubuntu. Dík.

62
hpy

Například pro novější verze Ubuntu, například 14.04, jsem zjistil, že kombinace odpovědí @dragly a this blogposts ' je velmi užitečná. Parafrázovat:

  1. (Na serveru) Nainstalujte Dropbear

    Sudo apt-get install dropbear
    
  2. (Na serveru) Zkopírujte a přiřaďte oprávnění pro přihlášení root/veřejný/soukromý klíč

    Sudo cp /etc/initramfs-tools/root/.ssh/id_rsa ~/.
    Sudo chown user:user ~/id_rsa
    

nezapomeňte změnit uživatele na vaše uživatelské jméno na serveru

  1. (Na klientovi) Načtěte soukromý klíč ze serveru

    scp [email protected]:~/id_rsa ~/.ssh/id_rsa_dropbear
    
  2. (Na klientovi) Přidejte položku do ssh config

    Host parkia
        Hostname 192.168.11.111
        User root
        UserKnownHostsFile ~/.ssh/know_hosts.initramfs
        IdentityFile ~/.ssh/id_rsa_dropbear
    Remember to change _parkia_ to whatever you'd like to type `ssh my-box` to be.
    
  3. (Na serveru) Vytvořit tento soubor na /etc/initramfs-tools/hooks/crypt_unlock.sh

  4. (Na serveru) Vytvořte spustitelný soubor

    Sudo chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh
    
  5. Aktualizujte initramfs

    Sudo update-initramfs -u
    
  6. Zakažte službu dropbear při spouštění, takže po dešifrování oddílu se použije openssh

    Sudo update-rc.d dropbear disable
    

Jsi hotový. Vyzkoušej to. Pokyny, jak nakonfigurovat server se statickou adresou IP, pokud je to něco, co byste měli udělat, najdete v blogu propojeném s výše.

26
nsg

Průvodce, jak provést toto nastavení pomocí BusyBox a Dropbear, je zobrazen v tento blogový příspěvek . early-ssh pro mě nepracoval a zjevně už není potřeba.

V následujícím textu jsem shrnul, co musíte udělat. Pro více informací se podívejte na výše uvedený příspěvek:

  1. Nainstalujte BusyBox a Dropbear na svůj server

    Sudo apt-get install dropbear busybox
    
  2. Aktualizujte své initramfy na serveru

    Sudo update-initramfs -u
    
  3. Zkopírujte soukromý klíč vygenerovaný kapátkem do svého klientského počítače. Možná to budete muset zkopírovat do nového adresáře a změnit vlastnictví. Na serveru proveďte následující:

    Sudo cp /etc/initramfs-tools/root/.ssh/id_rsa ~/.
    Sudo chown user:user ~/id_rsa
    

    Nezapomeňte nahradit uživatele svým uživatelským jménem. Zdá se, že přihlašovací hesla nefungují.

  4. Nyní můžete přenést soukromý klíč pomocí scp voláním následujícího na klienta :

    scp [email protected]:~/id_rsa ~/.ssh/id_rsa_dropbear
    
  5. Chcete-li se snadno přihlásit, vytvořte soubor ~/.ssh/config vašeho klienta . Otevřete jej pomocí textového editoru a přidejte následující:

    Host myremoteserver
        HostName my.remote.server
        User root
        UserKnownHostsFile ~/.ssh/known_hosts.initramfs
        IdentityFile ~/.ssh/id_rsa_dropbear
    

    Změňte hostitele podle svého uvážení a název hostitele na název vašeho serveru. Nechte uživatele root. Zdá se, že je jediným přijatým uživatelem v Dropbear. Uložte a zavřete soubor.

  6. Restartujte svůj server a počkejte na výzvu k zadání hesla. Dejte Dropbear několik sekund na detekci a nastavení jeho připojení k internetu. Připojte se k serveru pomocí následujícího příkazu na klientovi :

    ssh myremoteserver # or any name you chose
    
  7. Po přihlášení zadejte na serveru následující příkaz. Podrobnosti najdete v blogovém příspěvku:

    pid=`ps | grep "/scripts/local-top/cryptroot" | cut -d " " -f 3`
    kill -9 $pid
    sleep 35
    /scripts/local-top/cryptroot
    pid=`ps | grep "/bin/sh" | cut -d " " -f 3`
    kill -9 $pid;
    

    Než zadáte heslo, bude to nějakou dobu trvat (30 sekund). Po zobrazení výzvy zadejte.

  8. Ukončete připojení zadáním

    exit
    
  9. Váš server by nyní měl odemknout šifrovaný pevný disk a spustit jako obvykle.

(Obrovské díky původnímu autorovi blogu!)

23
dragly

Myslím, že early-ssh poskytuje to, co hledáte:

Early-ssh is a simple initramfs hook, which installs Dropbear SSH server into  
your initramfs, and starts it at boottime, so you will be able to do a lot of  
things remotely over SSH, before your root partition gets mounted, for example:

* unlocking LUKS encrypted crypto devices - 
  even your root can be an encrypted filesystem
* assembling/altering RAID arrays (mdadm)
* checking the root filesystem in read-write mode, 
  taking action in case of errors
* and so on...

K dispozici je již balíček .deb, takže s Ubuntu pravděpodobně budete v pohodě.

18
wag

Podívejte se na readme cryptsetup pro toto v /usr/share/doc/cryptsetup/README.remote.gz (Ubuntu balíček cryptsetup). K dispozici je kompletní průvodce, jak toho dosáhnout. Je to podobné draglyova odpověď , ale myslím, že je to o něco elegantnější. (Klíče ve formátu Dropbear, předávání přístupové fráze pomocí skriptu FIFO místo křehkého skriptu Shell atd.)

odemknutí rootfů pomocí ssh přihlášení v initramfs

Můžete rootfy odemknout při startu ze vzdáleného systému pomocí ssh pro přihlášení k bootovacímu systému, zatímco běží s připojenými initramfy.

Založit

Aby dálkové odemykání fungovalo, musí být před vytvořením initramfs nainstalovány následující balíčky: dropbearbusybox

Soubor /etc/initramfs-tools/initramfs.conf Obsahuje možnosti konfigurace použité při vytváření initramfs. Měl by obsahovat BUSYBOX=y (Toto je nastaveno jako výchozí, když je nainstalován balíček busybox), aby měl busybox nainstalován do initramfs, a neměl by obsahovat DROPBEAR=n, Což by zakázalo instalaci dropbear na initramfs . Pokud je nastavena na DROPBEAR=y, Dropbear bude v každém případě nainstalován; Pokud DROPBEAR není vůbec nastaveno, bude dropbear nainstalován pouze v případě existujícího nastavení kryptomot.

Hostovací klíče používané pro initramfs jsou dropbear_dss_Host_key A dropbear_rsa_Host_key, Oba umístěné v /etc/initramfs-tools/etc/dropbear/. Pokud při kompilaci initramfů neexistují, budou vytvořeny automaticky. Následující příkazy jsou vytvořeny ručně:

dropbearkey -t dss -f /etc/initramfs-tools/etc/dropbear/dropbear_dss_Host_key
dropbearkey -t rsa -f /etc/initramfs-tools/etc/dropbear/dropbear_rsa_Host_key

Protože initramfy nebudou šifrovány, předpokládá se veřejná autentizace. Klíč (y) použité pro tento bude převzat z /etc/initramfs-tools/root/.ssh/authorized_keys. Pokud tento soubor neexistuje při kompilaci initramfs, bude vytvořen a bude k němu přidán /etc/initramfs-tools/root/.ssh/id_rsa.pub. Pokud ani tento soubor neexistuje, bude vygenerován automaticky - najdete odpovídající soukromý klíč, který se později budete muset přihlásit k initramfs pod /etc/initramfs-tools/root/.ssh/id_rsa (Nebo id_rsa.dropbear V pokud to potřebujete v dropbear formátu). Následuje příkaz k ručnímu provedení příslušných kroků:

Vytvoření klíče (ve formátu dropbear):

dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear

Převod klíče z formátu dropbear do formátu openssh:

/usr/lib/dropbear/dropbearconvert dropbear openssh \
    /etc/initramfs-tools/root/.ssh/id_rsa.dropbear \
    /etc/initramfs-tools/root/.ssh/id_rsa

Extrahování veřejného klíče:

dropbearkey -y -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear | \
    grep "^ssh-rsa " > /etc/initramfs-tools/root/.ssh/id_rsa.pub

Chcete-li přidat veřejný klíč do souboru autorizovaných klíčů:

cat /etc/initramfs-tools/root/.ssh/id_rsa.pub >> /etc/initramfs-tools/root/.ssh/authorized_keys

Pokud chcete, aby se nějaké rozhraní konfigurovalo pomocí dhcp, mělo by stačit nastavení DEVICE= V /etc/initramfs-tools/initramfs.conf. Initramfs by také měly respektovat parametr jádra ip=. Pokud používáte grub, pravděpodobně jej budete chtít nastavit v /boot/grub/menu.lst, Buď v řádku '# kopt=', Nebo připojte ke konkrétním řádkům 'kernel'. Parametr jádra ip= Je dokumentován v Documentation/nfsroot.txt Ve zdrojovém stromu jádra.

Problémy

Nezapomeňte spustit update-initramfs, Když jste změnili konfiguraci tak, aby byla účinná!

Shromažďování dostatečné entropie pro démona ssh se někdy jeví jako problém. Spuštění démona ssh může být zpožděno, dokud není načteno dostatečné množství entropie. Toto je neblokující proces spouštění, takže když jste na konzole, nemusíte čekat na dokončení sshd.

Postup odblokování

Chcete-li odemknout dálkové ovládání, můžete udělat něco takového:

ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
    -i "~/id_rsa.initramfs" [email protected] \
    "echo -ne \"secret\" >/lib/cryptsetup/passfifo"

Tento příklad předpokládá, že máte zvláštní soubor known_hosts "~/.ssh/known_hosts.initramfs", Který obsahuje hostitelský klíč systému kryptom, že máte soubor "~/id_rsa.initramfs", Který obsahuje autorizovaný- klíč pro kryptrootový systém, že název kryptrolového systému je "initramfshost.example.com", a že kryptrotová přístupová fráze je "secret"

- <[email protected]>, St, 30. září 2009

Díky jap za to, že jste mi na to poukázali na jiný kanál.

16
gertvdijk

Pokud chcete mít možnost bootovat bezobslužně i vzdáleně, měli byste se také podívat na Mandos (který jsem já a další napsal):

Mandos je systém umožňující serverům se šifrovanými kořenovými souborovými systémy restartovat bezobslužné a/nebo vzdáleně. Viz úvodní stránka manuál soubor pro více informací, včetně seznamu FAQ seznam.

Zkrátka, bootovací server získá heslo přes síť bezpečným způsobem. Podrobnosti najdete na README).

6
Teddy

Bezhlavý server? Pokud má sériový port, použijte jej.

GRUB lze nakonfigurovat tak, aby pracoval přes sériový port. Vaše jádro lze také nakonfigurovat pomocí sériového portu pro výstup počátečních spouštěcích zpráv, zadání hesla k odemknutí disků a přihlášení. (Pokud váš server podporuje sériové BIOS, povolte to také. Pak už se nikdy nebudete muset připojit monitor na stroji vůbec).

Vždy je dobré mít "nesíťový" způsob, jak se dostat na bezhlavý server.

2
LawrenceC

Bohužel pro mě žádná z výše uvedených odpovědí nefungovala. Navíc je kopírování soukromého klíče ze serveru paradoxní.

Každopádně následující pokyny vyšlo:

Spusťte svůj SERVER připojením a odemknutím šifrovaného oddílu prostřednictvím vašeho KLIENTA

Nainstalujte povinné balíčky (na SERVER)

apt-get install dropbear initramfs-tools busybox

Připojte požadované veřejné klíče do autorizovaného_keys souboru SERVER

Stačí zkopírovat a vložit veřejné klíče do /etc/dropbear-initramfs/authorized_keys na SERVERU

Vytvořte skript pro odemknutí

Vytvořit následující skript v /etc/initramfs-tools/hooks/crypt_unlock.sh

#!/bin/sh

PREREQ="dropbear"

prereqs() {
  echo "$PREREQ"
}

case "$1" in
  prereqs)
    prereqs
    exit 0
  ;;
esac

. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions

if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
cat > "${DESTDIR}/bin/unlock" << EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot; then
kill \`ps | grep cryptroot | grep -v "grep" | awk '{print \$1}'\`
# following line kill the remote Shell right after the passphrase has
# been entered.
kill -9 \`ps | grep "\-sh" | grep -v "grep" | awk '{print \$1}'\`
exit 0
fi
exit 1
EOF

  chmod 755 "${DESTDIR}/bin/unlock"

  mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" << EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
/bin/plymouth "\[email protected]"
EOF

  chmod 755 "${DESTDIR}/lib/unlock/plymouth"

  echo To unlock root-partition run "unlock" >> ${DESTDIR}/etc/motd

fi

Zajistěte, aby byl spustitelný:

chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh

Vytvořte statickou IP (nebo přeskočte tento krok pro použití DHCP)

Upravit /etc/initramfs-tools/initramfs.conf pro přidání (nebo změnu) řádku:

#format [Host ip]::[gateway ip]:[netmask]:[hostname]:[device]:[autoconf]
#([hostname] can be omitted)
IP=192.168.1.254::192.168.1.1:255.255.255.0::eth0:off

Aktualizujte počáteční obrázky

update-initramfs -u

Zakažte službu dropbear při spouštění, takže po dešifrování oddílu se použije openssh

Sudo update-rc.d dropbear disable

Testování

  • Restartujte server
  • Připojte se k serveru pomocí ssh [email protected] [-i ~/.ssh/id_rsa]
2
ceremcem

V Arch Linuxu existuje balíček AUR dropbear_initrd_encrypt , který dělá to, co chcete, mimo krabici. Funguje docela dobře pro kabelové rozhraní. Musel jsem to lehce zaseknout pro bezdrátové připojení.

2
user3188445

U Debianu 9 (stabilní) bylo toto řešení zastaralé. Během instalace se zobrazí varování o dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work! a já jsem nebyl schopen najít potřebné klíče. Tato metoda je mimochodem opravdu jednoduchá a byla mi vysvětlena na skvělém #debian kanálu (ještě jednou děkuji):

Nejprve se ujistěte, že busybox, dropbear a dropbear-initramfs jsou nainstalovány

Sudo apt install busybox dropbear*

poté přidejte svůj veřejný klíč (většinou ~/.ssh/id_rsa.pub) v souboru /etc/dropbear-initramfs/authorized_keys.

Poté aktualizujte initramfs, abyste zohlednili změny:: update-initramfs -u

To je vše!

Poznámka: Pokud se chcete vyhnout střetu mezi klíči mezi dropbear a openssh (sdílejí stejný ip, ale používají jiný klíč), možná budete chtít dát svého klienta ~/.ssh/config něco takového:

Host myserver_luks_unlock
     User root
     Hostname <myserver>
     # The next line is useful to avoid ssh conflict with IP
     HostKeyAlias <myserver>_luks_unlock
     Port 22
     PreferredAuthentications publickey
     IdentityFile ~/.ssh/id_rsa

Poté se stačí připojit pomocí:

ssh myserver_luks_unlock

a jakmile dostanete výzvu, zadejte text podle doporučení v busybox Prompt:

cryptroot-unlock

a zadejte své heslo.

Užívat si!

2
tobiasBora

Používám techniku ​​vysvětlenou ostatními na této stránce (SSH in initramfs s parametrem jádra IP pro konfiguraci sítě) již několik let, aby jsem vzdáleně odemkl bezhlavé servery Ubuntu Linux (12.02, 14.04, 16,04 a 18,04).

Dokonce jsem zašel tak daleko, že jsem vyvinul program Python ( nlock-remote-system )), který pro mě provede skutečné odemknutí, protože proces tohoto ručního cítění trochu křehký a začal jsem se bát restartování serverů, takže v duchu "pokud to bolí, stojí za to automatizovat", zakódoval jsem své znalosti v Python ???? (a to bylo skutečně bylo mnohem snazší provádět pravidelné restartování aplikace aktualizací zabezpečení).

Od té doby jsem se také rozhodl sdílet své osobní poznámky o vzdálené šifrování kořenového disk se světem. Propojená stránka obsahuje několik podrobností o postupu (také některé rady, které zde nejsou uvedeny) a mám v úmyslu jej aktualizovat.

1
xolox

Napsal jsem možnou roli, která to dělá za vás. Stačí získat roli debops-contrib.dropbear_initramfs a spustit ji. Podrobnosti najdete v dokumentace k roli .

0
ypid