Başsız sunucu önyüklemesi sırasında şifreli LVM şifresini çözmek için SSH?


59

Ubuntu 10.04'ü kurduğumda ve şimdi, 10.10'da sabit sürücüm için "şifreli LVM" yi etkinleştirme seçeneği sunuldu. Bu seçeneği seçtikten sonra, önyükleme sırasında LVM'nin şifresini çözmek için şifrem isteniyor.

Şimdi Linux çalıştıran başsız bir sunucu kurmayı düşünüyorum (mutlaka Ubuntu değil), ancak sunucu başsız olduğu için başlangıçta şifresini çözemeyeceğime endişeleniyorum. Şifrelenmiş LVM şifremi girmek için açılışta SSH girebilir miyim? Eğer öyleyse nasıl kurarım? Yoksa başka bir çözüm var mı? Yine bu soru Ubuntu'ya özgü DEĞİLDİR. Teşekkürler.


4
Ayrıca bakınız:zless /usr/share/doc/cryptsetup/README.remote.gz
0xC0000022L

@Nate'in cevabının kabul edilen cevap olması gerektiğini düşünüyorum: (aslında, bağlantılı blogdaki değişiklikleri yansıtmak için bir düzenleme yapılması gerektiğinden) özel anahtarlar yerine genel anahtarları kullanır .
Jonathan Y.

Yanıtlar:


25

Ubuntu'nun daha yeni sürümleri için, örneğin, 14.04, @ dragly'nin bir kombinasyonunu buldum ve bu blog yazılarının cevapları çok yardımcı oldu. Kelimeleri ifade etmek:

  1. (Sunucuda) Dropbear'ı yükleyin

    sudo apt-get install dropbear
    
  2. (Sunucuda) Kök genel / özel anahtar oturum açma izinlerini kopyalayın ve atayın

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

kullanıcıyı sunucudaki kullanıcı adınıza değiştirmeyi unutmayın

  1. (İstemcide) Sunucudan özel anahtar al

    scp user@remote.server:~/id_rsa ~/.ssh/id_rsa_dropbear
    
  2. (İstemcide) ssh config'e bir giriş ekleyin

    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. (Sunucuda) adresinde bu dosyayı oluşturun ./etc/initramfs-tools/hooks/crypt_unlock.sh

  4. (Sunucuda) Bu dosyayı çalıştırılabilir yap

    sudo chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh
    
  5. İnitramfs'i güncelleyin

    sudo update-initramfs -u
    
  6. Dropbear hizmetini önyüklemede devre dışı bırak, böylece bölüm şifresi çözüldükten sonra openssh kullan

    sudo update-rc.d dropbear disable
    

Sen bittin. Denemek. Yapmanız gereken bir şeyse, sunucuyu statik IP adresiyle nasıl yapılandıracağınıza ilişkin talimatlar için yukarıdaki bağlantıya sahip blog gönderisini kontrol edin.


Bağlantılı blog, /etc/initramfs-tools/root/.ssh/authorized_keysDropbear'ın özel anahtarını kopyalamaya devam etse bile, bir müşterinin ortak anahtarını sunucunun sunucusuna eklemek için bir referans ekledi . Talimatların geri kalanını takip etmek benim için işe yarıyor, bunun anlamı, kabul edilen cevap olmalıdır (bu değişikliği yansıtırsa), çünkü yalnızca açık anahtar kullanır.
Jonathan Y.

23

Bu blog yazısında BusyBox ve Dropbear ile böyle bir kurulum yapmak için bir rehber gösterilmiştir . ssh'nin başı benim için işe yaramadı ve görünüşe göre artık gerekli değil.

Aşağıdakilerde yapmanız gerekenleri özetledim. Daha fazla ayrıntı için yukarıdaki yazıya bir göz atın:

  1. BusyBox ve Dropbear'ı sunucunuza yükleyin

    sudo apt-get install dropbear busybox
    
  2. Sunucudaki initramfs'ınızı güncelleyin

    sudo update-initramfs -u
    
  3. Dropbear tarafından oluşturulan özel anahtarı istemci makinenize kopyalayın. Bunu yeni bir dizine kopyalamanız ve sahipliğini değiştirmeniz gerekebilir. Senin üzerinde sunucuya aşağıdakileri yapın:

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

    Kullanıcı adını kullanıcı adınızla değiştirmeyi unutmayın. Parola girişleri çalışmıyor gibi görünüyor.

  4. Artık müşterinize aşağıdakileri arayarak scp ile özel anahtarı aktarabilirsiniz :

    scp user@remote.server:~/id_rsa ~/.ssh/id_rsa_dropbear
    
  5. Kolay oturum açmak için müşterinizin ~ / .ssh / config dosyasını kurun . Bir metin editörüyle açın ve aşağıdakileri ekleyin:

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

    Ana Bilgisayarı istediğiniz şekilde ve Ana Bilgisayar Adı'nı sunucunuzun adına değiştirin. Kullanıcının kök olmasına izin ver. Dropbear'da kabul edilen tek kullanıcı gibi görünüyor. Dosyayı kaydedin ve kapatın.

  6. Sunucunuzu yeniden başlatın ve parola istemi için bekleyin. Dropbear'a internet bağlantısını tespit etmek ve kurmak için birkaç saniye verin. İstemcinize aşağıdaki komutu kullanarak sunucunuza bağlanın :

    ssh myremoteserver # or any name you chose
    
  7. Giriş yaptığınızda, sunucunuzda aşağıdaki komutu verin . Ayrıntılar için blog gönderisine bakın:

    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;
    

    Parolanızı yazmanız biraz zaman alabilir (30 saniye). İstendiğinde yazın.

  8. Yazarak bağlantıyı kapatın

    exit
    
  9. Sunucunuz şimdi şifreli sabit sürücüsünün kilidini açmalı ve normal şekilde başlatmalıdır.

(Blog yazısının asıl yazarına çok teşekkürler!)


2
Özel anahtarlarla dolaşmanın nedenini pek anlamadım. İstemci makinedeki açık anahtarını sunucuya, kök sunucu için yetkili anahtar olarak kopyalamak yeterli olmalı, değil mi?
gertvdijk

İstemci makinede anahtar çifti oluşturmak ve genel anahtarı yalnızca oradan sunucuya taşımak mümkün olduğundan eminim, ancak doğru hatırlıyorsam, BusyBox'un kabul edeceği bir biçim bulmakta bazı sorunlar olduğunu düşünüyorum. Zaten sunucuda olan anahtarları tekrar kullanmak, çalışmam için tek seçenekti.
sürükle

1
Bunu Arch Linux'ta çalıştırmak için ne yapmam gerektiğine dair bir fikriniz var mı?
Gerharddc

1
@Gerhman Archlinux'daki erken ssh desteği için AUR'daki dropbear_initrd_encrypt paketini inceleyin .
Caleb,

1
@Gerhman archwiki sayfası: Kökün veya diğer bölümlerin uzaktan açılması Henüz bir şey yapmadım, ancak ilginç görünüyor. Kontrol etmek zorunda
kalacak

18

Sanırım ssh , aradığınızı sağlar:

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...

Zaten bir .deb paketi mevcut, bu yüzden muhtemelen Ubuntu ile iyisin.


Görünüşe göre bu tam olarak aradığım şey, teşekkürler!
Aralık'ta

3
İyi bir eğiticiyle veya nasıl bir bağlantınız var mı? Debian sıkma kutumun başlarında ssh ile sıkıştım.

1
Evet bir öğretici harika olurdu.
hpy


16

Bunun için cryptsetup beniokularına bir göz atın /usr/share/doc/cryptsetup/README.remote.gz(Ubuntu paketi cryptsetup). İçinde bunu başarmak için tam bir rehber var. Dragly'nin cevabına benzer , ancak bunun biraz daha zarif olduğunu düşünüyorum. (Dropbear biçimlendirilmiş anahtarlar, parolayı kırılgan bir kabuk komut dosyası yerine FIFO aracılığıyla geçirme vb.)

initramfs'ta ssh ile rootfs kilidini açma

Initramfs takılıyken çalışırken önyükleme sisteminde oturum açmak için ssh kullanarak, açılışta rootfs'ınızın kilidini uzaktan açabilirsiniz.

Kurmak

Uzaktan kilit açma çalışması için initramfs oluşturmadan önce aşağıdaki paketlerin yüklenmesi gerekir: dropbear busybox

Dosya /etc/initramfs-tools/initramfs.confinitramfs oluşturulurken kullanılan yapılandırma seçeneklerini tutar. Bu içermelidir BUSYBOX=y Initramfs içine monte busybox olması (busybox paketi yüklendiğinde bu varsayılan olarak ayarlanır) ve içermemelidir DROPBEAR=nInitramfs için dropbear yüklenmesini devre dışı sıkça dile getiriliyor. Eğer ayarlanırsa DROPBEAR=y, dropbear her durumda kurulur; eğer DROPBEARhiç ayarlanmazsa, o dropbear yalnızca varolan cryptroot kurulum durumunda kurulacaktır.

Initramfs için kullanılan konak anahtarları dropbear_dss_host_keyve dropbear_rsa_host_keyhem yer, /etc/initramfs-tools/etc/dropbear/. İnitramfs derlendiğinde yoklarsa, otomatik olarak oluşturulurlar. Bunları manuel olarak oluşturma komutları aşağıdadır:

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

İnitramfs şifreli olmayacağından, publickey kimlik doğrulaması kabul edilir. Bunun için kullanılan anahtar (lar) alınacaktır /etc/initramfs-tools/root/.ssh/authorized_keys. İnitramfs derlendiğinde bu dosya yoksa, oluşturulur ve /etc/initramfs-tools/root/.ssh/id_rsa.pubbuna eklenir. İkinci dosya da yoksa, otomatik olarak oluşturulur - daha sonra altında initramfs'e giriş yapmanız gereken eşleşen özel anahtarı bulacaksınız /etc/initramfs-tools/root/.ssh/id_rsa (ya da id_rsa.dropbeardropbear biçiminde ihtiyacınız varsa). İlgili adımları manuel olarak yapmak için gereken komutlar aşağıdadır:

Bir anahtar oluşturmak için (dropbear biçiminde):

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

Anahtarı dropbear formatından openssh formatına dönüştürmek için:

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

Genel anahtarı çıkarmak için:

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

Genel anahtarı yetkilinin_keys dosyasına eklemek için:

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

Eğer bazı arayüz ayarı, dhcp kullanarak yapılandırılmasını istiyoruz DEVICE=içinde /etc/initramfs-tools/initramfs.confyeterli olmalıdır. İnitramfs ayrıca ip=çekirdek parametresini de onurlandırmalıdır . Grub kullanıyorsanız, muhtemelen /boot/grub/menu.lst' # kopt=' satırına ya da belirli ' kernel' satırlarına eklenmesini isteyebilirsiniz . ip=Çekirdek parametresi belgelenmiştir Documentation/nfsroot.txtçekirdek kaynak ağacında.

Sorunlar

update-initramfsEtkin hale getirmek için konfigürasyonu değiştirdiğinizde çalıştırmayı unutmayın !

Ssh daemon için yeterli entropi toplamak bazen bir sorun gibi görünmektedir. Ssh arka plan programının başlatılması, yeterli entropi alınana kadar ertelenebilir. Bu, başlatma işlemi için engelleyici değildir, bu yüzden konsoldayken sshd'nin başlangıcını tamamlamasını beklemeniz gerekmez.

Açma prosedürü

Uzaktan kumandadan kilidini açmak için şöyle bir şey yapabilirsiniz:

ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
    -i "~/id_rsa.initramfs" root@initramfshost.example.com \
    "echo -ne \"secret\" >/lib/cryptsetup/passfifo"

Bu örnek, fazladan olduğunu varsayar known_hostsdosyayı " ~/.ssh/known_hosts.initramfs" Eğer bir dosya var olduğunu, cryptroot sistemin konak-anahtarı tutuyor " ~/id_rsa.initramfscryptroot sistem için yetkili anahtar tutan" cryptroot sistemin adı "olduğunu, initramfshost.example.com" ve bu şifreli parola " secret" dır

- < debian@x.ray.net>, Çar, 30 Eyl 2009

Bunu bana farklı bir kanalda gösterdiği için jap'e teşekkür ederim.


1
Bu, ps-grepping'le uğraşmaktan çok daha iyi bir fikir (resmi dokümanlar ve her şeyde tanımlanmak) gibi görünüyor. Bununla birlikte, kilit açma prosedürüne ilişkin bir yan not olarak, biri büyük olasılıkla bir yerde bir kabuk geçmişi dosyasında biteceği için şifreyi doğrudan komut satırına yazmak konusunda dikkatli olmak isteyebilirsiniz. Olası bir çözüm, kullanılan parolayı soran küçük bir sarmalayıcı komut dosyası oluşturmaktır read -s -p.
joelpet

1
bu yaklaşımla ilgili son Ubuntu sürümlerinde sorun olduğunu, yani bugs.launchpad.net/ubuntu/+source/cryptsetup/+bug/595648
Frederick Nord

6

Uzaktan olduğu kadar katılımsız bir şekilde önyükleme yapabilmek istiyorsanız, Mandos'a da bakmalısınız (ki ben ve diğerlerinin yazdığı):

Mandos, şifrelenmiş kök dosya sistemli sunucuların katılımsız ve / veya uzaktan yeniden başlatılmasını sağlayan bir sistemdir. Bir SSS listesi de dahil olmak üzere daha fazla bilgi için intro manuel sayfa dosyasına bakın .

Kısacası, önyükleme sunucusu parolayı ağ üzerinden güvenli bir şekilde alır. Detaylar için README'ye bakınız.


Katkılarınız için teşekkür ederiz, ancak gönderilerinizin% 100'ünün ürününüzle neredeyse aynı olduğundan bahsettiğini ve sınırsız davranış olduğunu ve spam olarak kabul edilme riskini taşıdığınızı unutmayın ( Mandos özgür yazılım değilse, gönderilerinizi işaretledim veya diğer sitelerdeki Mandos olmayan yayınların geçmişine sahip değildiniz).
Gilles 'SO- kötülük olmayı'

@Gilles: Şimdi bitti.
Teddy

2

Başsız sunucu? Seri bir bağlantı noktası varsa, kullanın.

GRUB, seri port üzerinden çalışacak şekilde konfigüre edilebilir. Çekirdeğiniz, başlangıçtaki önyükleme iletilerini yazdırmak, sürücülerinizin kilidini açmak için parolayı girmek ve oturum açmak için seri bağlantı noktasını kullanarak da yapılandırılabilir. (Sunucunuz seri BIOS'u destekliyorsa, bunu da etkinleştirin. makineye bir monitör hiç).

Başsız bir sunucuya girmenin “ağ dışı” bir yolunu görmek her zaman iyi bir fikirdir.


Harika nokta! Bununla birlikte, " ağ dışı " bir başsız sunucuya girme yolları, müşteri / sunucu arasındaki fiziksel yakınlık yakınsa çoğunlukla ( sadece ) ilgilidir; Seri bağlantının başka bir olasılığını / özelliğini görmezden gelmediğim sürece.
ILMostro_7,


2

Ne yazık ki, yukarıdaki cevapların hiçbiri benim için çalıştı. Dahası, özel bir anahtarı sunucudan kopyalamak paradoksal görünüyor.

Her neyse, aşağıdaki talimatlar işe yaradı:

CLIENT'iniz ile şifrelenmiş bölümü bağlayıp kilidini açarak SUNUCU'nuzu açın.

Zorunlu paketleri kurun (SERVER'de)

apt-get install dropbear initramfs-tools busybox

İstediğiniz ortak anahtarları SERVER’in yetkili_ anahtarlar dosyasına ekleyin

Ortak anahtarlarınızı kopyalayıp /etc/dropbear-initramfs/authorized_keysSERVER üzerine yapıştırın

Kilit açma komut dosyasını oluşturun

Aşağıdaki betiği oluştur /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 "\$@"
EOF

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

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

fi

Çalıştırılabilir yap:

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

Statik IP oluşturun (veya DHCP'yi kullanmak için bu adımı atlayın)

Düzen /etc/initramfs-tools/initramfs.confsatırı ekleyin (veya değiştirmek) için:

#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

İnitialramfs'i güncelle

update-initramfs -u

Dropbear hizmetini önyüklemede devre dışı bırak, böylece bölüm şifresi çözüldükten sonra openssh kullan

sudo update-rc.d dropbear disable

Test yapmak

  • Sunucunuzu yeniden başlatın
  • Sunucunuza üzerinden bağlanın ssh root@192.168.1.254 [-i ~/.ssh/id_rsa]

2

Debian 9'da (kararlı) bu çözüm eskiydi. Kurulum sırasında bir uyarı dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work!aldım ve gerekli anahtarları bulamadım. Bu yöntem gerçekten çok basit ve bana büyük #debian kanalında açıklandı (tekrar teşekkür ederim):

Öncelikle emin olun busybox, dropbearve dropbear-initramfsyüklü

sudo apt install busybox dropbear*

daha sonra ~/.ssh/id_rsa.pubdosyaya ortak anahtarınızı (çoğu zaman ) ekleyin /etc/dropbear-initramfs/authorized_keys.

Daha sonra güncelleme initramfsdeğişiklikleri dikkate almak: update-initramfs -u

Bu kadar!

Unutmayın ki, dropbearve arasında tuşların arasında çarpışma olmasını önlemek istiyorsanız openssh(aynı ipi paylaşırlar, ancak farklı bir anahtar kullanırlarsa), müşterinize şöyle bir ~/.ssh/configşey koymak isteyebilirsiniz :

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

Ardından, sadece kullanarak bağlanın:

ssh myserver_luks_unlock

ve bir istemi aldığınızda, meşgul kutusu istemi tarafından önerilen şekilde yazın:

cryptroot-unlock

ve şifrenizi yazın.

Keyfini çıkarın!



0

IPBaşsız Ubuntu Linux sunucularının (12.02, 14.04, 16.04 ve 18.04) uzaktan kilidini açmak için bu sayfada başkaları tarafından açıklanan tekniği (initramfs'ta ağ yapılandırmak için bir çekirdek parametresiyle SSH ) kullanıyorum.

Hatta gerçek kilidimi açan bir Python programı ( unlock-remote-system ) geliştirmeye bile gittim , çünkü bunu manuel olarak yapma süreci biraz kırılgan hissettirdi ve sunucularımı yeniden başlatmaya korkmaya başladım. "Acıtırsa otomatikleşmeye değer" lafımı Python in 'da kodladım (ve bu güvenlik güncellemelerini uygulamak için düzenli olarak yeniden başlatmayı gerçekten kolaylaştırdı).

O zamandan beri kişisel notlarımı Remote root disk şifrelemesi ile dünya ile paylaşmaya karar verdim . Bağlantılı sayfa prosedürle ilgili birkaç ayrıntı içerir (ayrıca burada belirtilmeyen bazı ipuçlarını da içerir) ve güncel tutmayı düşünüyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.