Linux Sunucu Güvenliğinde PAM (Pluggable Authentication Modules) Yapılandırması ve İleri Düzey Erişim Kontrolleri
Caner Serbest’in kaleminden Linux sunucu güvenliğinde PAM modüllerinin rolü, yapılandırma incelikleri ve kurumsal düzeyde erişim kısıtlama stratejileri.
Caner Serbest
Sistem ve Altyapı
4 dk okuma
Linux Sunucu Güvenliğinde PAM (Pluggable Authentication Modules) Yapılandırma Rehberi
Linux tabanlı sunucu yönetiminde, güvenlik denildiğinde genellikle akla ilk gelenler UFW veya iptables gibi güvenlik duvarları, SSH yapılandırmaları ve fail2ban gibi log tabanlı engelleme araçlarıdır. Bunlar şüphesiz çevre güvenliği (perimeter security) için hayati öneme sahiptir. Ancak saldırgan dış katmanı aştığında ya da içeriden bir yetki sızması yaşandığında, sistemin çekirdeğindeki kimlik doğrulama mekanizmalarının ne kadar dirençli olduğu önem kazanır.
İşte tam bu noktada PAM (Pluggable Authentication Modules) devreye girer. Linux işletim sistemlerinde oturum açma süreçlerini, şifre doğrulama mekanizmalarını ve kaynak erişim izinlerini merkezi ve esnek bir şekilde yöneten PAM, sistem yöneticilerinin göz ardı etmemesi gereken en güçlü güvenlik katmanlarından biridir.
Bu yazıda, PAM mimarisinin temel mantığını, /etc/pam.d/ altında yer alan yapılandırma dosyalarının nasıl okunması gerektiğini ve üretim ortamında (production) sunucu güvenliğini artırmak için uygulayabileceğiniz pratik adımları ele alacağız.
PAM Nedir ve Nasıl Çalışır?
Geçmişte Unix sistemlerinde her uygulamanın kendi kimlik doğrulama yöntemi vardı. login, ftp, ssh gibi servisler kendi kodları içerisinde şifre doğrulama mantığını barındırırdı. Bu durum, yeni bir kimlik doğrulama yöntemi (örneğin LDAP veya parmaksizi okuyucular) entegre edilmek istendiğinde tüm yazılımların baştan derlenmesini veya güncellenmesini gerektiriyordu.
1995 yılında geliştirilmeye başlanan PAM, bu karmaşaya son verdi. Uygulamaların kimlik doğrulama süreçlerini modüler bir yapıya devretmesini sağladı. Artık sshd veya sudo gibi servisler, bir kullanıcı adı ve şifre aldıklarında bunu doğrudan PAM altyapısına iletirler. PAM ise yapılandırma dosyalarındaki kurallara göre bu isteği işler ve uygulamaya başarılı veya başarısız sinyali döner.
Temel PAM Kontrol Tipleri (Control Flags)
PAM yapılandırma dosyalarını incelerken dört temel kontrol tipi ile karşılaşırız:
- requisite: Bu adımdaki modül başarısız olursa, kimlik doğrulama süreci derhal durdurulur ve kullanıcıya hata döndürülür. Ancak önceki başarılı adımların logları tutulmaya devam eder.
- required: Requisite ile benzerdir; bu modül başarısız olursa süreç başarısız kabul edilir. Aralarındaki fark, required modüllerde hata alınsa bile sürecin diğer modülleri çalıştırmaya devam etmesi, ancak nihai sonucun mutlaka başarısız olgu olarak işaretlenmesidir. (Güvenlik açısından kullanıcıya hemen hata vermemek, saldırgana ipucu vermemek adına önemlidir).
- sufficient: Eğer bu modül başarılı olursa, önceki zorunlu kurallar da geçilmişse, sonraki adımlar atlanır ve kimlik doğrulama doğrudan başarılı kabul edilir.
- optional: Bu modülün sonucu kimlik doğrulama sürecinin nihai başarısını doğrudan etkilemez. Genellikle bilgilendirme veya loglama amaçlı kullanılır.
Üretim Ortamında PAM ile Güçlendirme Adımları
Sisteminizi varsayılan PAM ayarlarıyla bırakmak, özellikle çok kullanıcılı ortamlarda güvenlik açıklarına davetiye çıkarabilir. Şimdi gerçekçi senaryolar üzerinden PAM yapılandırmamızı nasıl sıkılaştırabileceğimize bakalım.
1. Şifre Karmaşıklığı ve Geçmiş Kontrolü (pam_pwquality)
Kullanıcıların zayıf şifreler belirlemesini engellemek için libpam-pwquality modülünü kullanırız. Bu modül sayesinde şifre uzunluğu, karakter çeşitliliği ve hatta daha önce kullanılan şifrelerin tekrar edilip edilmediği denetlenir.
Dağıtımınıza bağlı olarak paketi kurun:
sudo apt install libpam-pwquality
/etc/security/pwquality.conf dosyasını düzenleyerek kuralları belirleyebiliriz:
minlen = 12
minclass = 3
maxrepeat = 2
usercheck = 1
Bu yapılandırma ile:
- Şifre uzunluğu en az 12 karakter olmalıdır.
- En az 3 farklı karakter sınıfı (büyük harf, küçük harf, rakam, özel karakter) içermelidir.
- Art arda gelen aynı karakter sayısı en fazla 2 olabilir.
- Şifre, kullanıcının kullanıcı adını içeremez.
2. Hesap Kilitleme Mekanizması (pam_faillock)
Brute-force (kaba kuvvet) saldırılarına karşı en etkili önlemlerden biri, ardışık hatalı giriş denemelerinden sonra hesabın geçici olarak kilitlenmesidir. Modern Linux dağıtımlarında bu iş için pam_faillock modülü kullanılır.
/etc/pam.d/common-auth dosyasına şu satırların uygun yerlerde eklendiğinden emin olun:
auth requisite pam_faillock.so preauth
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900
auth sufficient pam_unix.so try_first_pass
auth postauth pam_faillock.so audit reset
Bu yapılandırmanın anlamı şudur:
- Bir kullanıcı 5 kez (
deny=5) üst üste yanlış şifre girerse hesabı kilitlenir. - Kilitlenen hesap, 15 dakika (
unlock_time=900saniye) boyunca otomatik olarak kilitli kalır. - Başarılı bir giriş yapıldığında sayaç sıfırlanır (
reset).
Eğer bir kullanıcının kilidini manuel olarak açmanız gerekirse şu komutu kullanabilirsiniz:
sudo faillock --user kullanici_adi --reset
3. Zaman Tabanlı Erişim Kısıtlamaları (pam_time)
Bazı kritik sunucularda, yöneticiler veya belirli operasyonel hesaplar sadece mesai saatleri içerisinde veya belirli günlerde sisteme erişebilmelidir. pam_time modülü bu ihtiyacı karşılar.
/etc/security/time.conf dosyasına şu kuralı ekleyelim:
;*;*@Alldays;0800-1800
Bu satır, tüm servisler için tüm kullanıcıların sadece her gün 08:00 ile 18:00 arasında giriş yapabilmesini sağlar. İstisnai kullanıcılar için bu kural esnetilebilir.
Ardından /etc/pam.d/login (veya ilgili servis) dosyasına şu satırı ekleyin:
account required pam_time.so
PAM Yapılandırmasında Dikkat Edilmesi Gereken Kritik Kurallar
PAM ile çalışırken yapılan en büyük hata, test etmeden doğrudan canlı sistemde köklü değişiklikler yapmaktır. Yanlış yapılandırılmış bir PAM dosyası, sunucudaki tüm kullanıcıların (root dahil) kilitlenmesine ve SSH üzerinden erişilemez hale gelmesine neden olabilir.
Altın Kurallar:
- Oturumu Kapatmayın: PAM dosyalarını düzenlerken mevcut SSH oturumunuzu asla kapatmayın. Yeni bir terminal açarak yaptığınız değişiklikleri test edin. Eğer bir hata yaparsanız, açık olan terminalinizden dosyayı eski haline getirebilirsiniz.
- Syntax Kontrolü: PAM dosyalarında yazım hataları sistemi kilitleyebilir. Her satırın başındaki kontrol tiplerinin (
requisite,required, vb.) doğru yazıldığından emin olun. - Logları İzleyin: Yapılandırma değişikliklerinden sonra mutlaka
/var/log/auth.log(veya dağıtımınıza göre ilgili log dosyası) çıktısını takip edin:tail -f /var/log/auth.log
Sonuç
Linux sunucu güvenliği, tek bir katmana güvenilemeyecek kadar katmanlı bir yapıdır. Firewall ve SSH sertifika doğrulamaları dış dünyadan gelen tehditleri büyük ölçüde engellerken, PAM yapılandırması içerideki süreçlerin, şifre politikalarının ve oturum açma mantığının denetlenmesini sağlar.
Sistemlerinizde pam_pwquality ve pam_faillock gibi modülleri aktif hale getirerek, kaba kuvvet saldırılarına ve zayıf parola zafiyetlerine karşı önemli bir bariyer oluşturabilirsiniz. Unutmayın, güvenlik bir varış noktası değil, sürekli güncellenen ve denetlenen bir süreçtir.
Bu yazı Gemini ile otomatik oluşturulmuştur.