Dalam posting ini, kami akan mengembangkan prosedur untuk akses darurat ke host SSH menggunakan kunci keamanan offline. Ini hanya satu pendekatan, dan Anda dapat menyesuaikannya untuk diri Anda sendiri. Kami akan menyimpan SSH CA untuk host kami pada kunci keamanan perangkat keras. Skema ini akan bekerja di hampir semua OpenSSH, termasuk SSH dengan sistem masuk tunggal.
Mengapa semua ini? Ya, ini pilihan terakhir. Ini adalah pintu belakang yang akan memungkinkan Anda untuk mengakses server Anda jika karena alasan apa pun tidak ada yang membantu.
Mengapa menggunakan sertifikat alih-alih kunci publik / pribadi untuk akses darurat?
- , . , 1 5 . . .
- โโ ยซยป .
- , .
โ , . - PIN-. , โ . , , , USB- Yubikey 5. , . , . - .
- OpenSSH 8.2 , . Ubuntu 20.04 OpenSSH 8.2.
- (opsional, tetapi diinginkan) alat CLI untuk memverifikasi sertifikat.
Latihan
Pertama, Anda perlu membuat otoritas sertifikasi yang akan berada pada kunci keamanan perangkat keras. Masukkan kunci dan jalankan:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
Sebagai komentar (-C), saya menunjuk ke yubikey-9-512-742@smallstep.com sehingga saya tidak lupa kunci keamanan milik CA ini.
Selain menambahkan kunci ke Yubikey, dua file akan dibuat secara lokal:
- sk-user-ca, deskriptor kunci yang merujuk pada kunci pribadi yang disimpan dalam kunci keamanan,
- sk-user-ca.pub, yang akan menjadi kunci publik untuk CA Anda.
Tapi jangan khawatir, Yubikey memiliki kunci pribadi lain yang tidak dapat diambil. Karena itu, semuanya dapat diandalkan di sini.
Pada host sebagai root, tambahkan (jika belum ditambahkan) ke konfigurasi SSHD Anda (/ etc / ssh / sshd_config) berikut ini:
TrustedUserCAKeys /etc/ssh/ca.pub
Kemudian pada host tambahkan kunci publik (sk-user-ca.pub) ke /etc/ssh/ca.pub
Mulai ulang daemon:
# /etc/init.d/ssh restart
Sekarang kita dapat mencoba mengakses host. Tapi pertama-tama kita membutuhkan sertifikat. Buat pasangan kunci untuk dikaitkan dengan sertifikat:
$ ssh-keygen -t ecdsa -f emergency
Sertifikat dan Pasangan SSH
Terkadang tergoda untuk menggunakan sertifikat sebagai pengganti pasangan kunci publik / pribadi. Tetapi untuk otentikasi pengguna satu sertifikat saja tidak cukup. Setiap sertifikat juga memiliki kunci pribadi yang terkait dengannya. Inilah mengapa kita perlu membuat pasangan kunci "darurat" ini sebelum kita dapat mengeluarkan sertifikat bagi diri kita sendiri. Yang penting adalah bahwa kami menunjukkan sertifikat yang ditandatangani ke server, menunjukkan pasangan kunci yang kami miliki kunci pribadi.
Dengan demikian, pertukaran kunci publik masih hidup dan sehat. Ia bekerja bahkan dengan sertifikat. Sertifikat hanya menghilangkan kebutuhan server untuk menyimpan kunci publik.
Selanjutnya, buat sertifikat itu sendiri. Saya perlu otorisasi pengguna ubuntu dalam interval 10 menit. Anda bisa melakukannya dengan cara Anda.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
Anda akan diminta untuk menandatangani sertifikat dengan sidik jari Anda. Anda dapat menambahkan nama pengguna tambahan yang dipisahkan oleh koma, misalnya -n ubuntu, carl, ec2-user
Itu saja, sekarang Anda memiliki sertifikat! Selanjutnya, Anda perlu menentukan izin yang benar:
$ chmod 600 emergency-cert.pub
Setelah itu, Anda dapat membiasakan diri dengan konten sertifikat Anda:
$ step ssh inspect emergency-cert.pub
Seperti inilah milik saya:
emergency-cert.pub
Type: ecdsa-sha2-nistp256-cert-v01@openssh.com user certificate
Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
Key ID: "test-key"
Serial: 0
Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
Principals:
ubuntu
Critical Options: (none)
Extensions:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rc
Di sini kunci publik adalah kunci darurat yang kami buat, dan CA dikaitkan dengan sk-user-ca.
Kami akhirnya siap menjalankan perintah SSH:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- Anda sekarang dapat membuat sertifikat untuk setiap pengguna di host yang mempercayai CA Anda.
- Anda dapat menghapus darurat. Anda dapat menyimpan sk-user-ca, tetapi Anda tidak perlu karena itu juga pada kunci keamanan. Anda mungkin juga ingin menghapus kunci publik PEM asli dari host Anda (misalnya di ~ / .ssh / otor_keys untuk pengguna ubuntu) jika Anda menggunakannya untuk akses darurat.
Akses Darurat: Rencana Tindakan
Masukkan kunci keamanan dan jalankan perintah:
$ ssh-add -K
Ini akan menambahkan kunci publik dan deskriptor kunci CA ke agen SSH.
Sekarang ekspor kunci publik untuk membuat sertifikat:
$ ssh-add -L | tail -1 > sk-user-ca.pub
Buat sertifikat dengan tanggal kedaluwarsa, misalnya, tidak lebih dari satu jam:
$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pub
Dan sekarang SSH lagi:
$ ssh -i emergency username@host
Jika file .ssh / config Anda menyebabkan masalah koneksi, Anda dapat menjalankan ssh dengan opsi -F tidak ada untuk bertahan tanpa itu. Jika Anda perlu mengirim sertifikat ke kolega, opsi termudah dan teraman adalah Magic Wormhole . Ini hanya membutuhkan dua file - dalam kasus kami, ini darurat dan darurat-cert.pub.
Yang saya sukai dari pendekatan ini adalah dukungan perangkat keras. Anda dapat memasukkan kunci keamanan di brankas dan tidak akan pergi ke mana pun.
Iklan
Server epik adalah VPS murah dengan prosesor kuat dari AMD, frekuensi inti CPU hingga 3,4 GHz. Konfigurasi maksimum memungkinkan Anda untuk menyelesaikan hampir semua masalah - 128 core CPU, RAM 512 GB, NVMe 4000 GB. Bergabunglah dengan kami!