Dalam siaran ini, kami akan membangunkan prosedur untuk akses kecemasan kepada hos SSH menggunakan kunci keselamatan perkakasan di luar talian. Ini hanyalah satu pendekatan, dan anda boleh menyesuaikannya mengikut keperluan anda. Kami akan menyimpan kuasa sijil SSH untuk hos kami pada kunci keselamatan perkakasan. Skim ini akan berfungsi pada hampir semua OpenSSH, termasuk SSH dengan log masuk tunggal.
Untuk apa semua ini? Nah, ini adalah pilihan terakhir. Ini adalah pintu belakang yang akan membolehkan anda mendapat akses ke pelayan anda apabila atas sebab tertentu tiada apa-apa yang berfungsi.
Mengapa menggunakan sijil dan bukannya kunci awam/peribadi untuk akses kecemasan?
- Tidak seperti kunci awam, sijil boleh mempunyai jangka hayat yang sangat singkat. Anda boleh menjana sijil yang sah selama 1 minit atau bahkan 5 saat. Selepas tempoh ini, sijil akan menjadi tidak boleh digunakan untuk sambungan baharu. Ini sesuai untuk akses kecemasan.
- Anda boleh membuat sijil untuk mana-mana akaun pada hos anda dan, jika perlu, hantar sijil "sekali" sedemikian kepada rakan sekerja.
Apa yang anda perlukan
- Kunci keselamatan perkakasan yang menyokong kunci pemastautin.
Kunci pemastautin ialah kunci kriptografi yang disimpan sepenuhnya dalam kunci keselamatan. Kadangkala ia dilindungi oleh PIN alfanumerik. Bahagian awam kunci pemastautin boleh dieksport daripada kunci keselamatan, secara pilihan bersama pemegang kunci peribadi. Sebagai contoh, kekunci USB siri Yubikey 5 menyokong kekunci pemastautin. Adalah dinasihatkan bahawa ia hanya bertujuan untuk akses kecemasan kepada hos. Untuk siaran ini saya hanya akan menggunakan satu kunci, tetapi anda harus mempunyai satu kunci tambahan untuk sandaran. - Tempat yang selamat untuk menyimpan kunci tersebut.
- OpenSSH versi 8.2 atau lebih tinggi pada komputer tempatan anda dan pada pelayan yang anda ingin dapatkan akses kecemasan. Ubuntu 20.04 dihantar dengan OpenSSH 8.2.
- (pilihan, tetapi disyorkan) Alat CLI untuk menyemak sijil.
Latihan
Pertama, anda perlu membuat pihak berkuasa pensijilan yang akan terletak pada kunci keselamatan perkakasan. Masukkan kunci dan jalankan:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
Sebagai ulasan (-C) saya nyatakan [e-mel dilindungi]jadi anda tidak lupa kunci keselamatan mana yang dimiliki oleh pihak berkuasa sijil ini.
Selain menambah kunci pada Yubikey, dua fail akan dijana secara tempatan:
- sk-user-ca, pemegang kunci yang merujuk kepada kunci peribadi yang disimpan dalam kunci keselamatan,
- sk-user-ca.pub, yang akan menjadi kunci awam untuk pihak berkuasa sijil anda.
Tetapi jangan risau, Yubikey menyimpan kunci peribadi lain yang tidak boleh diambil semula. Oleh itu, semuanya boleh dipercayai di sini.
Pada hos, sebagai akar, tambah (jika anda belum melakukannya) yang berikut pada konfigurasi SSHD anda (/etc/ssh/sshd_config):
TrustedUserCAKeys /etc/ssh/ca.pub
Kemudian pada hos, tambahkan kunci awam (sk-user-ca.pub) ke /etc/ssh/ca.pub
Mulakan semula daemon:
# /etc/init.d/ssh restart
Sekarang kita boleh cuba mengakses hos. Tetapi pertama-tama kita memerlukan sijil. Buat pasangan kunci yang akan dikaitkan dengan sijil:
$ ssh-keygen -t ecdsa -f emergency
Sijil dan pasangan SSH
Kadangkala tergoda untuk menggunakan sijil sebagai pengganti pasangan kunci awam/peribadi. Tetapi sijil sahaja tidak mencukupi untuk mengesahkan pengguna. Setiap sijil juga mempunyai kunci peribadi yang dikaitkan dengannya. Inilah sebabnya mengapa kita perlu menjana pasangan kunci "kecemasan" ini sebelum kita mengeluarkan sijil sendiri. Perkara penting ialah kami menunjukkan sijil yang ditandatangani kepada pelayan, menunjukkan pasangan kunci yang kami mempunyai kunci peribadi.Jadi pertukaran kunci awam masih hidup dan sihat. Ini berfungsi walaupun dengan sijil. Sijil hanya menghapuskan keperluan untuk pelayan menyimpan kunci awam.
Seterusnya, buat sijil itu sendiri. Saya memerlukan kebenaran pengguna ubuntu dalam selang 10 minit. Anda boleh melakukannya dengan cara anda.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
Anda akan diminta menandatangani sijil menggunakan cap jari anda. Anda boleh menambah nama pengguna tambahan yang dipisahkan dengan koma, contohnya -n ubuntu,carl,ec2-user
Itu sahaja, kini anda mempunyai sijil! Seterusnya anda perlu menentukan kebenaran yang betul:
$ chmod 600 emergency-cert.pub
Selepas ini, anda boleh melihat kandungan sijil anda:
$ step ssh inspect emergency-cert.pub
Ini adalah rupa saya:
emergency-cert.pub
Type: [email protected] 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 awam ialah kunci kecemasan yang kami buat dan sk-user-ca dikaitkan dengan pihak berkuasa pensijilan.
Akhirnya kami bersedia untuk menjalankan arahan SSH:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- Anda kini boleh membuat sijil untuk mana-mana pengguna pada hos yang mempercayai pihak berkuasa sijil anda.
- Anda boleh mengalih keluar kecemasan. Anda boleh menyimpan sk-user-ca, tetapi anda tidak perlu melakukannya kerana ia juga pada kunci keselamatan. Anda juga mungkin mahu mengalih keluar kunci awam PEM asal daripada hos anda (contohnya dalam ~/.ssh/authorized_keys untuk pengguna ubuntu) jika anda menggunakannya untuk akses kecemasan.
Akses Kecemasan: Pelan Tindakan
Tampalkan kunci keselamatan dan jalankan arahan:
$ ssh-add -K
Ini akan menambah kunci awam pihak berkuasa sijil dan deskriptor kunci kepada ejen SSH.
Sekarang eksport kunci awam untuk membuat sijil:
$ ssh-add -L | tail -1 > sk-user-ca.pub
Buat sijil dengan tarikh tamat tempoh, sebagai contoh, tidak lebih daripada 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 kini SSH sekali lagi:
$ ssh -i emergency username@host
Jika fail .ssh/config anda menyebabkan beberapa masalah semasa menyambung, anda boleh menjalankan ssh dengan pilihan -F none untuk memintasnya. Jika anda perlu menghantar sijil kepada rakan sekerja, pilihan yang paling mudah dan selamat ialah
Apa yang saya suka tentang pendekatan ini ialah sokongan perkakasan. Anda boleh meletakkan kunci keselamatan anda di dalam peti besi dan ia tidak akan pergi ke mana-mana.
Sebagai iklan
Pelayan epik - Adakah
Sumber: www.habr.com