it-swarm-id.com

SSH untuk mendekripsi LVM terenkripsi selama boot server tanpa kepala?

Ketika saya menginstal Ubuntu 10,04 dan, sekarang, 10,10, saya ditawari opsi untuk mengaktifkan "LVM terenkripsi" untuk hard drive saya. Setelah memilih opsi itu, saya diminta kata sandi saya saat boot untuk mendekripsi LVM.

Sekarang, saya berpikir untuk membuat server tanpa kepala yang menjalankan Linux (belum tentu Ubuntu), tetapi saya khawatir karena server itu tanpa kepala saya tidak akan dapat mendekripsi saat startup. Apakah saya bisa masuk SSH saat boot untuk memasukkan kata sandi saya untuk LVM terenkripsi? Jika demikian, bagaimana cara mengaturnya? Atau ada solusi lain? Sekali lagi pertanyaan ini BUKAN spesifik untuk Ubuntu. Terima kasih.

62
hpy

Untuk versi ubuntu yang lebih baru, misalnya, 14,04, saya menemukan kombinasi @dragly dan this blogposts ' jawaban sangat membantu. Mengutip:

  1. (Di server) Instal Dropbear

    Sudo apt-get install dropbear
    
  2. (Di server) Salin dan tetapkan izin untuk login root publik/kunci privat

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

ingatlah untuk mengubah pengguna menjadi nama pengguna Anda di server

  1. (Pada klien) Ambil kunci pribadi dari server

    scp [email protected]:~/id_rsa ~/.ssh/id_rsa_dropbear
    
  2. (Pada klien) Tambahkan entri ke 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. (Di server) Buat file ini at /etc/initramfs-tools/hooks/crypt_unlock.sh

  4. (Di server) Jadikan file itu dapat dieksekusi

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

    Sudo update-initramfs -u
    
  6. Nonaktifkan layanan dropbear saat boot sehingga openssh digunakan setelah partisi didekripsi

    Sudo update-rc.d dropbear disable
    

Kamu sudah selesai. Cobalah. Periksa posting blog yang tertaut ke atas untuk instruksi tentang cara mengkonfigurasi server dengan alamat IP statis jika itu adalah sesuatu yang perlu Anda lakukan.

26
nsg

Panduan untuk melakukan pengaturan seperti itu dengan BusyBox dan Dropbear ditampilkan di posting blog ini . ssh-awal tidak bekerja untuk saya dan tampaknya tidak diperlukan lagi.

Saya telah merangkum apa yang perlu Anda lakukan di berikut ini. Untuk lebih jelasnya, lihat posting di atas:

  1. Instal BusyBox dan Dropbear di server Anda

    Sudo apt-get install dropbear busybox
    
  2. Perbarui initramfs Anda di server

    Sudo update-initramfs -u
    
  3. Salin kunci pribadi yang dihasilkan oleh dropbear ke mesin klien Anda. Anda mungkin harus menyalin ini ke dir baru dan mengubah kepemilikan untuk melakukan ini. Di server Anda lakukan hal berikut:

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

    Ingatlah untuk mengganti pengguna dengan nama pengguna Anda. Login kata sandi sepertinya tidak berfungsi.

  4. Sekarang Anda dapat mentransfer kunci pribadi dengan scp dengan memanggil yang berikut ini pada klien Anda :

    scp [email protected]:~/id_rsa ~/.ssh/id_rsa_dropbear
    
  5. Atur file klien Anda ~/.ssh/config untuk kemudahan login. Buka dengan editor teks dan tambahkan yang berikut:

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

    Ubah Host menjadi apa pun yang Anda suka dan HostName menjadi nama server Anda. Biarkan pengguna menjadi root. Tampaknya menjadi satu-satunya pengguna yang diterima di Dropbear. Simpan dan tutup file.

  6. Mulai ulang server Anda dan tunggu Prasa sandi frasa. Berikan Dropbear beberapa detik untuk mendeteksi dan mengatur koneksi internetnya. Hubungkan ke server Anda dengan perintah berikut pada klien Anda :

    ssh myremoteserver # or any name you chose
    
  7. Saat masuk, terbitkan perintah berikut pada server Anda . Lihat posting blog untuk detail:

    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;
    

    Diperlukan waktu (30 detik) sebelum Anda mengetikkan frasa sandi. Ketikkan ketika diminta.

  8. Tutup koneksi dengan mengetik

    exit
    
  9. Server Anda sekarang harus membuka kunci hard drive terenkripsi dan boot seperti biasa.

(Terima kasih banyak kepada penulis asli posting blog!)

23
dragly

Saya pikir awal-ssh memberikan apa yang Anda cari:

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

Sudah ada paket deb., Jadi Anda mungkin baik-baik saja dengan Ubuntu.

18
wag

Lihat readme cryptsetup untuk ini di /usr/share/doc/cryptsetup/README.remote.gz (Paket Ubuntu cryptsetup). Di sana ada panduan lengkap untuk mencapai hal ini. Ini mirip dengan jawaban dragly , tapi saya pikir ini sedikit lebih elegan. (Dropbear kunci yang diformat, melewati frasa sandi melalui FIFO daripada skrip Shell yang rapuh, dll.)

membuka kunci rootfs melalui login ssh di initramfs

Anda dapat membuka kunci rootfs Anda saat bootup dari jarak jauh, menggunakan ssh untuk masuk ke sistem booting saat sedang berjalan dengan initramfs yang terpasang.

Mendirikan

Agar remote unlocking berfungsi, paket-paket berikut harus diinstal sebelum membangun initramfs: dropbearbusybox

Berkas /etc/initramfs-tools/initramfs.conf memegang opsi konfigurasi yang digunakan saat membangun initramfs. Itu harus mengandung BUSYBOX=y (ini ditetapkan sebagai default ketika paket busybox diinstal) untuk memiliki busybox diinstal ke dalam initramfs, dan seharusnya tidak mengandung DROPBEAR=n, yang akan menonaktifkan instalasi dropbear ke initramfs. Jika diatur ke DROPBEAR=y, dropbear akan diinstal dalam keadaan apa pun; jika DROPBEAR tidak disetel sama sekali, maka dropbear hanya akan dipasang jika ada pengaturan cryptroot yang ada.

Kunci Host yang digunakan untuk initramfs adalah dropbear_dss_Host_key dan dropbear_rsa_Host_key, keduanya terletak di /etc/initramfs-tools/etc/dropbear/. Jika mereka tidak ada ketika initramf dikompilasi, mereka akan dibuat secara otomatis. Berikut ini adalah perintah untuk membuatnya secara manual:

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

Karena initramfs tidak akan dienkripsi, otentikasi publickey diasumsikan. Kunci yang digunakan untuk itu akan diambil dari /etc/initramfs-tools/root/.ssh/authorized_keys. Jika file ini tidak ada ketika initramf dikompilasi, file itu akan dibuat dan /etc/initramfs-tools/root/.ssh/id_rsa.pub akan ditambahkan ke dalamnya. Jika file yang terakhir juga tidak ada, file itu akan dibuat secara otomatis - Anda akan menemukan kunci pribadi yang cocok yang nantinya harus Anda masuk ke initramfs di bawah /etc/initramfs-tools/root/.ssh/id_rsa (atau id_rsa.dropbear jika Anda membutuhkannya dalam format dropbear). Berikut ini adalah perintah untuk melakukan langkah masing-masing secara manual:

Untuk membuat kunci (dalam format dropbear):

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

Untuk mengonversi kunci dari format dropbear ke format openssh:

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

Untuk mengekstrak kunci publik:

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

Untuk menambahkan kunci publik ke file otor_keys:

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

Jika Anda ingin beberapa antarmuka dikonfigurasi menggunakan dhcp, atur DEVICE= di /etc/initramfs-tools/initramfs.conf harus cukup. Initramf juga harus menghormati ip= parameter kernel. Jika Anda menggunakan grub, Anda mungkin ingin mengaturnya di /boot/grub/menu.lst, baik di '# kopt= 'baris atau ditambahkan ke baris' kernel 'tertentu. ip= parameter kernel didokumentasikan dalam Documentation/nfsroot.txt di pohon sumber kernel.

Masalah

Jangan lupa untuk menjalankan update-initramfs ketika Anda mengubah konfigurasi untuk membuatnya efektif!

Mengumpulkan cukup entropi untuk daemon ssh terkadang tampaknya menjadi masalah. Startup dari ssh daemon mungkin tertunda sampai cukup entropi telah diambil. Ini bukan pemblokiran untuk proses startup, jadi ketika Anda berada di konsol Anda tidak perlu menunggu sshd untuk menyelesaikan startupnya.

Prosedur membuka kunci

Untuk membuka kunci dari jarak jauh, Anda dapat melakukan sesuatu seperti ini:

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

Contoh ini mengasumsikan bahwa Anda memiliki tambahan known_hosts file "~/.ssh/known_hosts.initramfs "yang menyimpan Host-key sistem cryptroot, bahwa Anda memiliki file" ~/id_rsa.initramfs "yang memegang kunci-resmi untuk sistem cryptroot, bahwa nama sistem cryptroot adalah" initramfshost.example.com ", dan bahwa frasa sandi cryptroot adalah" secret "

- <[email protected]>, Rab, 30 Sep 2009

Terima kasih kepada jap untuk menunjukkan ini kepada saya di saluran yang berbeda.

16
gertvdijk

Jika Anda ingin dapat mem-boot tanpa pengawasan dan juga dari jarak jauh, Anda juga harus melihat Mandos (yang saya dan orang lain telah menulis):

Mandos adalah sistem untuk memungkinkan server dengan sistem file root terenkripsi untuk reboot tanpa pengawasan dan/atau jarak jauh. Lihat halaman manual intro file untuk informasi lebih lanjut, termasuk daftar FAQ.

Singkatnya, server booting mendapatkan kata sandi melalui jaringan, dengan cara yang aman. Lihat README untuk detailnya.

6
Teddy

Server tanpa kepala? Jika memiliki port serial, gunakan itu.

GRUB dapat dikonfigurasi untuk berfungsi pada port serial. Kernel Anda juga dapat dikonfigurasi menggunakan port serial untuk mengeluarkan pesan-pesan boot awal, memasukkan kata sandi untuk membuka kunci drive Anda, dan masuk. (Jika server Anda mendukung BIOS serial, aktifkan juga. Maka Anda tidak akan pernah harus terhubung monitor ke mesin sama sekali).

Selalu merupakan ide bagus untuk memiliki cara "non-jaringan" untuk masuk ke server tanpa kepala.

2
LawrenceC

Sayangnya, tidak ada jawaban di atas yang berfungsi untuk saya. Selain itu, menyalin kunci pribadi dari server tampaknya paradoks.

Bagaimanapun, instruksi berikut berhasil:

Boot SERVER Anda dengan menghubungkan dan membuka kunci partisi terenkripsi melalui CLIENT Anda

Instal paket wajib (di SERVER)

apt-get install dropbear initramfs-tools busybox

Tambahkan kunci publik yang Anda inginkan ke dalam file SERVER_key's otorisasi

Cukup salin dan tempel kunci publik Anda ke /etc/dropbear-initramfs/authorized_keys pada SERVER

Buat skrip pembuka kunci

Buat skrip berikut di /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

Jadikan itu dapat dieksekusi:

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

Buat IP statis (atau lewati langkah ini untuk menggunakan DHCP)

Edit /etc/initramfs-tools/initramfs.conf untuk menambahkan (atau mengubah) baris:

#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

Perbarui initialramfs

update-initramfs -u

Nonaktifkan layanan dropbear saat boot sehingga openssh digunakan setelah partisi didekripsi

Sudo update-rc.d dropbear disable

Pengujian

  • Mulai ulang server Anda
  • Hubungkan ke server Anda melalui ssh [email protected] [-i ~/.ssh/id_rsa]
2
ceremcem

Di Arch Linux, ada paket AUR dropbear_initrd_encrypt yang melakukan apa yang Anda inginkan di luar kotak. Berfungsi cukup baik untuk antarmuka kabel. Saya harus meretasnya sedikit untuk nirkabel.

2
user3188445

Pada debian 9 (stabil), solusi ini sudah usang. Selama instalasi, saya mendapat peringatan tentang dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work!, dan saya tidak dapat menemukan kunci yang diperlukan. Metode ini sangat sederhana, dan dijelaskan kepada saya di saluran #debian yang hebat (terima kasih lagi):

Pertama pastikan bahwa busybox, dropbear dan dropbear-initramfs diinstal

Sudo apt install busybox dropbear*

kemudian tambahkan kunci publik Anda (sebagian besar waktu ~/.ssh/id_rsa.pub) dalam file /etc/dropbear-initramfs/authorized_keys.

Perbarui kemudian initramfs untuk memperhitungkan perubahan:: update-initramfs -u

Itu saja!

Catatan, jika Anda ingin menghindari bentrokan antara tombol antara dropbear dan openssh (mereka berbagi ip yang sama, tetapi menggunakan kunci yang berbeda), Anda mungkin ingin memasukkan klien Anda ~/.ssh/config sesuatu seperti itu:

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

Kemudian, Anda cukup terhubung menggunakan:

ssh myserver_luks_unlock

dan setelah Anda mendapatkan Prompt, ketikkan seperti yang disarankan oleh Prompt busybox:

cryptroot-unlock

dan ketikkan kata sandi Anda.

Nikmati!

2
tobiasBora

Saya telah menggunakan teknik yang dijelaskan oleh orang lain di halaman ini (SSH dalam initramfs dengan parameter kernel IP untuk mengkonfigurasi jaringan) selama beberapa tahun sekarang untuk membuka kunci server Linux Ubuntu tanpa kepala dari jarak jauh (12.02, 14.04, 16.04 dan 18.04).

Saya bahkan melangkah lebih jauh dengan mengembangkan program Python ( nlock-remote-system ) yang melakukan unlocking yang sebenarnya bagi saya, karena proses melakukan ini secara manual terasa sedikit rapuh dan saya mulai takut me-reboot server saya, jadi dalam semangat "jika menyakitkan itu layak diotomatisasi" Saya menyandikan pengetahuan saya di Python ???? (dan ini memang benar membuatnya lebih mudah untuk melakukan reboot reguler untuk menerapkan pembaruan keamanan).

Sejak itu saya memutuskan untuk juga membagikan catatan pribadi saya di Enkripsi root disk jarak jauh dengan dunia. Halaman yang tertaut berisi beberapa detail tentang prosedur ini (juga beberapa petunjuk yang tidak disebutkan di sini) dan saya bermaksud untuk memperbaruinya.

1
xolox

Saya menulis peran Ansible yang melakukan ini untuk Anda. Cukup dapatkan peran debops-contrib.dropbear_initramfs dan jalankan. Lihat dokumentasi peran untuk detailnya.

0
ypid