it-swarm-tr.com

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

Ubuntu 10.04 ve şimdi 10.10'u yüklediğimde, sabit diskim için "şifreli LVM" etkinleştirme seçeneği sunuldu. Bu seçeneği seçtikten sonra, önyükleme sırasında LVM'nin şifresini çözmek için şifremi girmem isteniyor.

Şimdi, Linux çalıştıran (mutlaka Ubuntu değil) başsız bir sunucu kurmayı düşünüyorum, ancak sunucu başsız olduğu için başlatma sırasında şifresini çözemeyeceğimden endişeliyim. Şifreli LVM için şifremi girmek için önyükleme sırasında SSH girebilir miyim? Ö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.

62
hpy

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

  1. (Sunucuda) Dropbear'ı yükle

    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ızla değiştirmeyi unutmayın

  1. (İstemcide) Özel anahtarı sunucudan getir

    scp [email protected]:~/id_rsa ~/.ssh/id_rsa_dropbear
    
  2. (İstemcide) ssh config dosyasına bir girdi 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) bu dosya adresinde /etc/initramfs-tools/hooks/crypt_unlock.sh

  4. (Sunucuda) Bu dosyayı yürütülebilir yap

    Sudo chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh
    
  5. Initramfs'ı güncelleyin

    Sudo update-initramfs -u
    
  6. Bölümün şifresi çözüldükten sonra openssh'ın kullanılması için önyükleme sırasında dropbear hizmetini devre dışı bırakın

    Sudo update-rc.d dropbear disable
    

Sen bittin. Denemek. Yapmanız gereken bir şeyse sunucuyu statik bir IP adresiyle nasıl yapılandıracağınızla ilgili talimatlar için yukarıdaki bağlantılı blog yayınına bakın.

26
nsg

BusyBox ve Dropbear ile böyle bir kurulum yapma kılavuzu bu blog yazısı içinde gösterilmektedir. early-ssh benim için çalışmadı ve artık gerekli değil.

Aşağıda ne yapmanız gerektiğini özetledim. Daha fazla ayrıntı için yukarıdaki gönderiye bir göz atın:

  1. BusyBox ve Dropbear'ı sunucunuza kurun

    Sudo apt-get install dropbear busybox
    
  2. Initramf'lerinizi sunucuda 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. sunucunuzda aşağıdakileri yapın:

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

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

  4. Artık istemcinizde aşağıdakileri çağırarak özel anahtarı scp ile aktarabilirsiniz:

    scp [email protected]:~/id_rsa ~/.ssh/id_rsa_dropbear
    
  5. Kolay giriş için istemcinizin s ~/.ssh/config dosyanızı ayarlayın. Bir metin düzenleyicisiyle 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 gibi ve Ana BilgisayarAdı sunucunuzun adı olarak değiştirin. Kullanıcı kök olsun. Dropbear'da kabul edilen tek kullanıcı gibi görünüyor. Dosyayı kaydedip kapatın.

  6. sunucunuzu yeniden başlatın ve parola İstemi'ni bekleyin. İnternet bağlantısını algılamak ve kurmak için Dropbear'a birkaç saniye verin. Sunucunuza istemcinizde aşağıdaki komutla 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 yayınına 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 alacaktır (30 saniye). İstendiğinde yazın.

  8. Bağlantıyı yazarak kapatın

    exit
    
  9. Sunucunuz şimdi şifreli sabit sürücüsünün kilidini açmış ve normal şekilde açılmış olmalıdır.

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

23
dragly

Bence early-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 var, bu yüzden muhtemelen Ubuntu ile iyi durumdasınız.

18
wag

/usr/share/doc/cryptsetup/README.remote.gz (Ubuntu paketi cryptsetup) içinde bunun için cryptsetup benioku dosyasına bakın. Bunu gerçekleştirmek için tam bir rehber var. dragly's answer 'a benzer, ama bunun biraz daha zarif olduğunu düşünüyorum. (Dropbear biçimli anahtarlar, parolayı bir FIFO vb.)

initramfs içinde ssh girişi ile rootfs kilidini açma

Initramfs takılıyken önyükleme sisteminde oturum açmak için ssh kullanarak önyüklemede rootfs'lerinizin kilidini açabilirsiniz.

Kurmak

Uzaktan kilit açma özelliğinin çalışması için, initramfs oluşturulmadan önce aşağıdaki paketlerin yüklenmesi gerekir: dropbearbusybox

/etc/initramfs-tools/initramfs.conf Dosyası, initramfs oluşturulurken kullanılan yapılandırma seçeneklerini içerir. Meşgul kutusunu initramfs içine yüklemek için BUSYBOX=y (Meşgul kutusu paketi kurulduğunda varsayılan olarak ayarlanır) içermeli ve initramfs'e dropbear kurulumunu devre dışı bırakacak DROPBEAR=n İçermemelidir . DROPBEAR=y Olarak ayarlanırsa, dropbear her durumda kurulacaktır; DROPBEAR hiç ayarlanmamışsa, dropbear yalnızca mevcut bir cryptroot kurulumu durumunda yüklenir.

İnitramfs için kullanılan Host anahtarları, her ikisi de dropbear_dss_Host_key İçinde bulunan dropbear_rsa_Host_key Ve /etc/initramfs-tools/etc/dropbear/ 'Dır. İnitramfs derlendiğinde mevcut değilse, otomatik olarak oluşturulurlar. Bunları manuel olarak oluşturmak için komutlar şunlardı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

Initramfs şifrelenmeyeceğinden, publickey kimlik doğrulaması varsayılır. Bunun için kullanılan anahtarlar /etc/initramfs-tools/root/.ssh/authorized_keys 'Dan alınacaktır. İnitramfs derlendiğinde bu dosya yoksa, oluşturulur ve /etc/initramfs-tools/root/.ssh/id_rsa.pub Dosyaya eklenir. İkinci dosya da yoksa otomatik olarak oluşturulur - daha sonra initramfs'de /etc/initramfs-tools/root/.ssh/id_rsa (Veya id_rsa.dropbear Altında oturum açmanız gereken eşleşen özel anahtarı bulacaksınız. dropbear formatında ihtiyacınız varsa). İlgili adımları manuel olarak yapma komutları şunlardır:

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

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

Anahtarı dropbear biçiminden openssh biçimine 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

Ortak anahtarı çıkartmak 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ı, yetkili_anahtarlar dosyasına eklemek için:

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

Bazı arabirimlerin dhcp kullanılarak yapılandırılmasını istiyorsanız, DEVICE= İçindeki /etc/initramfs-tools/initramfs.conf Ayarının yeterli olması gerekir. İnitramfs ip= Çekirdek parametresini de dikkate almalıdır. Grub'u kullanmanız durumunda, muhtemelen '/boot/grub/menu.lst' Satırında veya belirli 'kernel' satırlarına eklenmiş olarak # kopt= 'Da ayarlamak isteyebilirsiniz. ip= Çekirdek parametresi, çekirdek kaynak ağacındaki Documentation/nfsroot.txt İçinde belgelenmiştir.

Sorunlar

Yapılandırmayı etkinleştirmek için değiştirdiğinizde update-initramfs Komutunu çalıştırmayı unutmayın!

Ssh daemon için yeterli entropi toplamak bazen bir sorun gibi görünüyor. Yeterli entropi alınana kadar ssh arka plan programının başlatılması gecikebilir. Bu başlatma işlemi için engellemez, bu nedenle konsoldayken sshd'nin başlamasını tamamlamasını beklemek zorunda kalmazsınız.

Kilit açma prosedürü

Uzaktan kumandanın kilidini açmak için şöyle bir şey yapabilirsiniz:

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

Bu örnekte, şifreli sistemin Host-anahtarını barındıran fazladan bir known_hosts Dosyanız "~/.ssh/known_hosts.initramfs" Olduğu, yetkili sunucuda "~/id_rsa.initramfs" Dosyanızın olduğu kripto sistemi için anahtar, kripto sistemi adı "initramfshost.example.com" ve kripto parolasının "secret"

- <[email protected]>, 30 Eyl 2009 Çar

Bunu bana farklı bir kanalda gösterdiği için jap teşekkürler.

16
gertvdijk

Uzaktan yanı sıra katılımsız önyükleme yapabilmek istiyorsanız, Mandos (ben ve diğerleri) yazdım):

Mandos, şifrelenmiş kök dosya sistemlerine sahip sunucuların gözetimsiz ve/veya uzaktan yeniden başlatılmasına izin veren bir sistemdir. FAQ listesi de dahil olmak üzere) daha fazla bilgi için giriş kılavuzu sayfası dosyasına bakın.

Kısacası, önyükleme sunucusu şifreyi ağ üzerinden güvenli bir şekilde alır. Ayrıntılar için README sayfasına bakın.

6
Teddy

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

GRUB, seri port üzerinden çalışacak şekilde yapılandırılabilir. Çekirdeğiniz ayrıca, ilk önyükleme iletilerinin çıktısını almak, sürücülerinizin kilidini açmak için parolayı girmek ve oturum açmak için seri bağlantı noktasını kullanarak yapılandırılabilir. (Sunucunuz seri BIOS'u destekliyorsa, bunu da etkinleştirin. makineye bir monitör).

Başsız bir sunucuya girmenin "ağ dışı" bir yoluna sahip olmak her zaman iyi bir fikirdir.

2
LawrenceC

Ne yazık ki, yukarıdaki cevapların hiçbiri benim için işe yaramadı. Ayrıca, sunucudan özel bir anahtar kopyalamak paradoksal görünmektedir.

Her neyse, aşağıdaki talimatları izleyin çalıştı:

MÜŞTERİNİZ aracılığıyla şifrelenmiş bölümü bağlayıp kilidini açarak SERVER'nizi başlatın

Zorunlu paketleri yükleyin (SERVER üzerinde)

apt-get install dropbear initramfs-tools busybox

İstediğiniz ortak anahtarları SERVER'ın yetkili_anahtarlar dosyasına ekleyin

Genel anahtarlarınızı kopyalayıp /etc/dropbear-initramfs/authorized_keys SERVER üzerinde

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

/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

Yürütülebilir 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üzenle /etc/initramfs-tools/initramfs.conf satırını eklemek (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

İlk çerçeveleri güncelle

update-initramfs -u

Bölümün şifresi çözüldükten sonra openssh'ın kullanılması için önyükleme sırasında dropbear hizmetini devre dışı bırakın

Sudo update-rc.d dropbear disable

Test yapmak

2
ceremcem

Arch Linux'ta kutunun dışında istediğinizi yapan bir AUR paketi dropbear_initrd_encrypt vardır. Kablolu arabirimler için oldukça iyi çalışır. Kablosuz için biraz kesmek zorunda kaldı.

2
user3188445

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

Öncelikle busybox, dropbear ve dropbear-initramfs Öğelerinin kurulu olduğundan emin olun

Sudo apt install busybox dropbear*

ardından genel anahtarınızı (çoğu zaman ~/.ssh/id_rsa.pub) /etc/dropbear-initramfs/authorized_keys dosyasına ekleyin.

Değişiklikleri dikkate almak için güncelleyin ve ardından initramfs:: update-initramfs -u

Bu kadar!

dropbear ve openssh (aynı ip paylaşıyor, ancak farklı bir anahtar kullanıyorlar) arasındaki tuşlar arasında çakışma olmasını önlemek istiyorsanız, istemcinize ~/.ssh/config Şöyle bir şey:

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

Sonra, sadece kullanarak bağlayın:

ssh myserver_luks_unlock

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

cryptroot-unlock

ve şifrenizi yazın.

Zevk almak!

2
tobiasBora

Başsız Ubuntu Linux sunucularının (12.02, 14.04) birkaç yıldır bu sayfada başkaları tarafından açıklanan tekniği (ağ yapılandırmak için IP parametresi ile initramfs'de SSH) birkaç yıldır kullanıyorum. , 16.04 ve 18.04).

Hatta benim için gerçek kilidini açan bir Python programı ( nlock-remote-system ) geliştirmek için o kadar gittim, çünkü bunu manuel olarak yapma işlemi hissettim Biraz kırılgan ve sunucularımı yeniden başlatmayı dehşete düşürmeye başladım, bu yüzden "o acıtıyorsa o otomatikleştirmeye değer" ruhuyla bilgimi Python ????) kodladım (ve bu gerçekten de güvenlik güncelleştirmelerini uygulamak için düzenli olarak yeniden başlatma yapılmasını kolaylaştırdı).

O zamandan beri kişisel notlarımı zak kök disk şifreleme ile dünyayla paylaşmaya karar verdim. Bağlantılı sayfa, prosedür hakkında birkaç ayrıntı içerir (ayrıca burada belirtilmeyen bazı ipuçları) ve güncel tutmayı planlıyorum.

1
xolox

Bunu sizin için yapan Ansible bir rol yazdım. Sadece rolünü al debops-antlr.dropbear_initramfs ve çalıştır. Ayrıntılar için rolün belgeleri konusuna bakın.

0
ypid