Ana Sayfa » *nix » SSH 2-Step Verification – Google Authenticator

SSH 2-Step Verification – Google Authenticator


BerbatKötüİdare EderGüzelHarika (Toplam 3 oy. 5 puan üzerinden ortalama 5,00 || Oy vererek siz de katkıda bulunabilirsiniz.)
Loading...

Google Authenticator, sağladığı PAM modülü üzerinden OpenSSH'a entegre edilebiliyor, bu şekilde SSH erişimlerinde, ya da key based auth'a ek olarak, telefonunuzda yüklü olan Google Authenticator üzerinden üretebileceğiniz time-based one-time password (TOTP) doğrulamasını da devreye alarak two-step authentication yapabiliyorsunuz.

Özellikle bir nedenle heryerden erişilebilir, standart portta çalışan SSH çalıştıran sunucularınız varsa, ek bir güvenlik katmanı sağladığından dolayı Google Authenticator entegrasyonunu da kullanmak isteyebilirsiniz. Bu nedenle yazının devamında, CentOS 6 ve 7 sistemler için google authenticator PAM modülünün kurulması ve SSH'a entegre edilmesinden bahsedeceğim.

 

Gereksinimler


GA üzerinden time-based doğrulama kodları üretileceği için sistem saatinin senkronize olması çok önemli. Aksi halde çalışmayacaktır. Bu nedenle kuruluma başlamadan önce sisteminizde NTP kurulu ve çalışıyor olmalıdır. Eğer değilse öncelikle aşağıdaki linklerden NTP kurulumunuzu tamamlayın.

CentOS Sistemlerde NTP Kurulumu
Debian Sistemlerde NTP Kurulumu

GA PAM Modülünün Kurulması


GA PAM modülü, CentOS sistemler için EPEL repolarında bulunduğundan dolayı, üzerinden kurabiliyor; ancak şu anki rpm sürümümde güncel olmadığından ben kaynak koddan derlemeyi anlatacağım. sistemlerde ise kurulumu kaynak koddan yapmak dışında seçenek yok.

Kurulum işlemi her iki dağıtım için aynı olsa da, öncesinde sisteme yüklenmesi gereken paketlerde minor farklılıklar olduğundan bağımlılık paketlerinin yüklnemesini dağıtım spesifik anlatacağım:

CentOS Dependencies


RHEL tabanlı sistemlerde, pam-devel paketinin kurulu olması gerekiyor. Ayrıca, sisteminizin minimal kurulmuş olması ihtimaline karşı, wget ve make gibi diğer gerekli paketleri de kuralım.

#  install -y wget make pam-devel

CentOS sistemlere spesifik bir diğer gereksinim ise SELinux'un disable edilmesidir. Zira, Google Authenticator ve SELinux arasındaki bir uyumsuzluk nedeni ile SELinux devredeyken bazı problemler çıkıyor. (Gerçi ilgili problemleri gidermek için bazı çözümler var ama ben pek kullanışlı bulmadığım için direk olarak SELinux'u disable etmeyi tercih ediyorum.)

# setenforce 0

ve sistem açılışlarında da disable olması için /etc/selinux/config dosyasını açın ve “SELINUX=” ibaresini disabled olacak şekilde düzenleyin:

SELINUX=disabled

Bu şekilde CentOS sistemler GA entegrasyonu için hazır duruma gelmektedir.

 Dependencies


Debian sistemlerde pam'in development paketinin ismi libpam-dev olarak geçiyor. Bu paketi ve diğer gereksinimleri sisteme ekleyelim:  (Gene minimal bir Debian kurulumunuz olduğunu varsayıyorum):

# apt-get install gcc make libpam-dev ca-certificates bzip2 libpam-dev

Kurulum


Kurulumların adımları her iki tip dağıtımda da aynı olduğu için bundan sonrasına tek başlık altında değineceğim.

Öncelikle pam modülünü ediyoruz.

Not: paketin son sürümü var mı diye kontrol etmek için şu adrese göz atabilirsiniz:
https://code.google.com/p/google-authenticator/downloads/list

# wget https://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2

İndirdiğimiz paketi açıyoruz:

# tar jvfx libpam-google-authenticator-1.0-source.tar.bz2

ve kuruyoruz:

# cd libpam-google-authenticator-1.0/
# make install

Bu şekilde pam modülü,
CentOS sistemlerde, /lib/x86_64--gnu/security/pam_google_authenticator.so path'ine
Debian sistemlerde ise /lib/x86_64--gnu/security/pam_google_authenticator.so path'ine kurulmuş oluyor.

Kurulumun ardından GA yapılandırmasına geçiyoruz.

google-authenticator Yapılandırması


Bu aşamada google-authenticator pam modülü ile ilgilli konfigurasyonu tamamlayıp, sistemi  cep telefonumuzdaki Google Authenticator uygulaması ile entegre ediyoruz. Bu işlem için kısaca google-authenticator komutunu çalıştırıyorsunuz ve uygulama bir iki soru sorarak yapılandırmayı tamamlıyor ve telefonunuzdaki app'e girmeniz gereken secret key'i (ya da ilgili secret key'e ait QR koduna giden linki) ekranda basıyor ve yapılandırma login olduğunuz kullanıcının home dizininde oluşturulan .google_authenticator  isimli dosyaya yazılıyor. İlgili secret key ya da qr kodunu da telefonunuzdaki google authenticator uygulamasına girdiğiniz zaman entegrasyon tamamlanmış oluyor. Bu şekilde home dizininde .google_authenticator dosyası bulunan kullanıcılara ssh oturumu açılırken yapılan kimlik denetimi için telefondan üretilecek verification kod da sorulacaktır.

Ben aşağıdaki şekilde komuta gerekli parametreleri de vererek yapılandırmanın soru sorulmadan tamamlanması için GA entegrasyonu yapmak istedğim kullanıcı ile login durumdayken şu şekilde çalıştırıyorum:

$ google-authenticator -t -d -r 3 -R 30 -w 17 -f

Komuta geçtiğimiz parametrelerin anlamları şu şekilde. (Detaylar için google-authenticator –help ile yardım menüsüne bakabilirsiniz.)

-t: time-based verification (TOTP) kullanacağımızı belirtir.
-d: Daha önceden kullanılmış tokenlerin yeniden kullanılmasını engeller.
-r 3: önlemi için rate-limiting. her (N) saniye için max 3 login teşebbüsüne izin ver diyoruz.
-R 30: Yukarıdakinin devamı; her 30 saniye için (N) login teşşebbüsüne izin ver demiş oluyoruz.
-w 17: Max concurrent token sayısı (Default değer 17)
-f: Yapılandırmanın ~/.google_authenticator dosyasına otomatik ekle. (Default olarak izin istenir.)

Komutun çıktısı aşağıdaki gibidir:

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/[email protected]%3Fsecret%3D5H3DMHLDJYWOWL2I
Your new secret key is: 5H3DMHLDJYWOWL2I
Your verification code is 925499
Your emergency scratch codes are:
  27941089
  23804637
  45492576
  52695555
  91790394

Çıktıda verilen URL'de telefonunuzdaki GA uygulaması üzerinden scan edebileceğiniz QRCode bulunmaktadır. QRCode kullanmak istememeniz durumunda ise  “secret key”‘i girerek kullanıcınıza ait GA hesabını ekleyebilirsiniz.

Aşağıdaki ilk imajda, uygulamaya ait hesabı hangi yol ile eklemek istediğinizi seçtiğiniz ekran bulunuyor, diğer imaj ise QRCode yöntemi yerine secret code'unuzu kullanarak manual account ekleme ekranı göstermektedir:

 

Hesabı manual olarak eklemeniz durumunda, Account name olarak [email protected] gibi bir isim verip secret key'inizi girmeniz yeterli olacaktır. (Ama tabi telefonunuzun kamerasında bir sorun yoksa hesabı QRCode üzerinen eklemeniz daha kolay olacaktır.)

 Hesap eklendikten sonra ise görüntü şu şekilde olacaktır:

Google Authenticator

Bu şekilde google authenticator yapılandırması tamamlanmış oluyor. Şimdi son adım olarak sistem tarafında pam ve sshd'deki yapılandırma işlemlerine geçiyoruz.

SSHd PAM Yapılandırılması


UYARI UYARI!: Bu aşamada, pam ve sshd gibi kimlik doğrulamayla ilgili bileşenlerde değişiklikler yapılacağı için, özellikle console erişiminizin olmadığı sistemlerde çalışırken yedek olarak mutlaka ikinci bir ssh oturumunuzun olmasını öneririm.Zira, pam üzerindeki değişiklikler herhangi bir servisi restart etmeye gerek kalmaksızın on the fly olarak devreye alınmaktadır. Böyle bir durumda GA yapılandırmanızın doğru olmaması ve bir şekilde ssh bağlantınızın kesilmesi durumunda console haricinde GA aktif edilmiş herhangi bir kullanıcı ile login olamayabilirsiniz.

Öncelikli olarak SSHd'ye ait PAM yapılandırmasına Google Auth. modülünü de eklememiz gerekiyor. Bunun için /etc/pam.d/sshd dosyasını editleyin (Bu hem CentOS hem de Debian sistemler için aynıdır.):

# vi /etc/pam.d/sshd

ve dosyanın muhtelif bir yerine (örneğin ikinci satıra) aşağıdaki ibareyi ekleyin:

auth required pam_google_authenticator.so nullok

Yukarıdaki “nullok” ibaresi, google auth. entegrasyonu olmayan (yani home dizininde .google_authenticator dosyası olmayan) kullanıcılar için GA doğrulamasını devre dışı bırakmaktadır.

Şimdi de /etc/ssh/sshd_config dosyasını editleyin ve

ChallengeResponseAuthentication no

satırını aşağıdaki şekilde değiştirin:

ChallengeResponseAuthentication yes

Son olarak da sshd'yi restart edin:

CentOS:

# /etc/init.d/sshd restart

Debian:

# /etc/init.d/ssh restart

Bu şekilde sistem tarafındaki yapılandırma tamamlanmış olmaktadır. Bundan sonra sisteme SSH bağlantısı kurduğunuz zaman aşağıdaki şekilde verification code'de sorulacaktır.

login as: username
Verification code:
Password:

Bu şekilde entegrasyon tamamlanmış oluyor.

Visited 682 times, 1 visit(s) today
Kategoriler: *nix,Security |

Bu yazılar da ilginizi çekebilir:


- Linuxlar’da SSH üzerinden Root Erişiminin Engellenmesi
- SSH Üzerinden Root Login Girişimlerinde Artış
- PSSH ile Birden Fazla Sunucuyu Tek Merkezden Yönetmek
- Linux’larda SSH Key Saldırısı
- SSH Tunneling ile Güvenli Surf ve SSH Port Forwarding

Yorumlar


  1. Cagri Emer | (Aralık 2nd, 2013 1:30 pm)

    Ubuntu icin soyle bir betik[1] yazmistim zamaninda. Debian’da da calisacaktir diye tahmin ediyorum. Yukaridaki islemleri her hostta tek tek yapmaktansa tercih edilebilir.

    [1] https://github.com/cagriemer/betikler/blob/master/totpssh.sh

    [Cevapla]

    Cagri Ersen tarafından yanıtlandı.

    Katkınız için teşekkkür ederim; Debian’larda sorunsuz çalışacak ve küçük bir kaç modifikasyon ile RHEL tabanlı sistemlerle de uyumlu hale getirilebilir gibi gorunuyor.
    Yalnız pam’e modülü eklerken nullok parametresi de geçseniz iyi olabilir. Çünkü TOTP kullanmak istemeyeceğiniz spesifik kullanıcılar vs. olabilir.

    [Cevapla]

    Cagri Emer tarafından yanıtlandı.

    Geri bildiriminiz icin tesekkur ederim. Haklisiniz, betik ilk kez calisirken kullaniciya bunu sormasinda fayda var. Firsatim oldugu bir ara ilgili degisiklikleri yapmaya calisayim.

    [Cevapla]

Trackbacks

Yorumda bulunun.