Bu yazıda, donanım güvenlik anahtarlarını çevrimdışı kullanarak SSH ana bilgisayarlarına acil erişim için bir prosedür geliştireceğiz. Bu yalnızca bir yaklaşımdır ve bunu ihtiyaçlarınıza göre uyarlayabilirsiniz. Ana bilgisayarlarımız için SSH sertifika yetkisini donanım güvenlik anahtarında saklayacağız. Bu şema, tek oturum açmalı SSH dahil hemen hemen tüm OpenSSH'lerde çalışacaktır.
Bütün bunlar ne için? Tabi bu son çare seçeneğidir. Bu, herhangi bir nedenle başka hiçbir şeyin çalışmadığı durumlarda sunucunuza erişmenizi sağlayacak bir arka kapıdır.
Acil durum erişimi için neden genel/özel anahtarlar yerine sertifikalar kullanılmalı?
- Genel anahtarların aksine, sertifikaların ömrü çok kısa olabilir. 1 dakika, hatta 5 saniye geçerli bir sertifika oluşturabilirsiniz. Bu sürenin sonunda sertifika yeni bağlantılarda kullanılamaz hale gelecektir. Bu acil erişim için idealdir.
- Ana bilgisayarlarınızda herhangi bir hesap için bir sertifika oluşturabilir ve gerekirse bu tür "tek seferlik" sertifikaları meslektaşlarınıza gönderebilirsiniz.
Neye ihtiyacın var
- Yerleşik anahtarları destekleyen donanım güvenlik anahtarları.
Yerleşik anahtarlar, tamamen güvenlik anahtarının içinde saklanan kriptografik anahtarlardır. Bazen alfasayısal bir PIN ile korunurlar. Yerleşik anahtarın genel kısmı, isteğe bağlı olarak özel anahtar tanıtıcısıyla birlikte güvenlik anahtarından dışarı aktarılabilir. Örneğin, Yubikey 5 serisi USB anahtarları yerleşik anahtarları destekler ve bunların yalnızca ana bilgisayara acil erişim için tasarlanması tavsiye edilir. Bu yazı için yalnızca bir anahtar kullanacağım, ancak yedekleme için ek bir anahtara sahip olmanız gerekir. - Bu anahtarları saklamak için güvenli bir yer.
- Yerel bilgisayarınızda ve acil erişime sahip olmak istediğiniz sunucularda OpenSSH sürüm 8.2 veya üzeri. Ubuntu 20.04, OpenSSH 8.2 ile birlikte gelir.
- (isteğe bağlı, ancak önerilir) Sertifikaları kontrol etmek için bir CLI aracı.
Eğitim
Öncelikle donanım güvenlik anahtarı üzerinde yer alacak bir sertifika yetkilisi oluşturmanız gerekir. Anahtarı takın ve çalıştırın:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
Yorum olarak (-C) belirttim [e-posta korumalı]böylece bu sertifika yetkilisinin hangi güvenlik anahtarına ait olduğunu unutmazsınız.
Anahtarın Yubikey'e eklenmesine ek olarak yerel olarak iki dosya oluşturulacaktır:
- sk-user-ca, güvenlik anahtarında saklanan özel anahtarı ifade eden bir anahtar tanıtıcısı,
- Sertifika yetkilinizin ortak anahtarı olacak sk-user-ca.pub.
Ancak endişelenmeyin, Yubikey geri alınamayacak başka bir özel anahtar saklıyor. Bu nedenle burada her şey güvenilirdir.
Ana bilgisayarlarda root olarak SSHD yapılandırmanıza (/etc/ssh/sshd_config) aşağıdakileri ekleyin (henüz yapmadıysanız):
TrustedUserCAKeys /etc/ssh/ca.pub
Daha sonra ana bilgisayarda genel anahtarı (sk-user-ca.pub) /etc/ssh/ca.pub dosyasına ekleyin.
Daemon'u yeniden başlatın:
# /etc/init.d/ssh restart
Artık hosta erişmeyi deneyebiliriz. Ama önce bir sertifikaya ihtiyacımız var. Sertifikayla ilişkilendirilecek bir anahtar çifti oluşturun:
$ ssh-keygen -t ecdsa -f emergency
Sertifikalar ve SSH çiftleri
Bazen genel/özel anahtar çiftinin yerine sertifika kullanmak cazip gelebilir. Ancak bir sertifika tek başına kullanıcının kimliğini doğrulamak için yeterli değildir. Her sertifikanın kendisiyle ilişkilendirilmiş özel bir anahtarı da vardır. Bu nedenle kendimize bir sertifika vermeden önce bu "acil durum" anahtar çiftini oluşturmamız gerekiyor. Önemli olan imzalı sertifikayı, özel anahtarımız olan anahtar çiftini belirterek sunucuya göstermemizdir.Yani genel anahtar değişimi hâlâ canlı ve iyi durumda. Bu, sertifikalarla bile çalışır. Sertifikalar, sunucunun genel anahtarları saklama ihtiyacını ortadan kaldırır.
Daha sonra sertifikanın kendisini oluşturun. 10 dakikalık aralıklarla ubuntu kullanıcı yetkilendirmesine ihtiyacım var. Bunu kendi yönteminle yapabilirsin.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
Parmak izinizi kullanarak sertifikayı imzalamanız istenecektir. Virgüllerle ayrılmış ek kullanıcı adları ekleyebilirsiniz; örneğin -n ubuntu,carl,ec2-user
İşte bu kadar, artık bir sertifikanız var! Daha sonra doğru izinleri belirtmeniz gerekir:
$ chmod 600 emergency-cert.pub
Bundan sonra sertifikanızın içeriğini görüntüleyebilirsiniz:
$ step ssh inspect emergency-cert.pub
Benimki şöyle görünüyor:
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
Burada genel anahtar oluşturduğumuz acil durum anahtarıdır ve sk-user-ca sertifika yetkilisi ile ilişkilendirilir.
Sonunda SSH komutunu çalıştırmaya hazırız:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- Artık bir ana bilgisayardaki, sertifika yetkilinize güvenen herhangi bir kullanıcı için sertifika oluşturabilirsiniz.
- Acil durumu kaldırabilirsiniz. Sk-user-ca'yı kaydedebilirsiniz, ancak aynı zamanda güvenlik anahtarında da bulunduğundan buna gerek yoktur. Acil durum erişimi için kullandıysanız orijinal PEM genel anahtarını ana bilgisayarlarınızdan (örneğin ubuntu kullanıcısı için ~/.ssh/authorized_keys dosyasında) kaldırmak isteyebilirsiniz.
Acil Durum Erişimi: Eylem Planı
Güvenlik anahtarını yapıştırın ve şu komutu çalıştırın:
$ ssh-add -K
Bu, sertifika yetkilisinin genel anahtarını ve anahtar tanımlayıcısını SSH aracısına ekleyecektir.
Şimdi bir sertifika oluşturmak için ortak anahtarı dışa aktarın:
$ ssh-add -L | tail -1 > sk-user-ca.pub
Son kullanma tarihi örneğin bir saatten fazla olmayan bir sertifika oluşturun:
$ 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
Ve şimdi tekrar SSH:
$ ssh -i emergency username@host
Eğer .ssh/config dosyanız bağlanırken bazı sorunlara neden oluyorsa, bunu atlamak için ssh'yi -F none seçeneğiyle çalıştırabilirsiniz. Bir meslektaşınıza sertifika göndermeniz gerekiyorsa en kolay ve en güvenli seçenek
Bu yaklaşımda hoşuma giden şey donanım desteğidir. Güvenlik anahtarlarınızı bir kasaya koyabilirsiniz; hiçbir yere gitmezler.
Reklam gibi
Epik sunucular - Mı
Kaynak: habr.com