DEV Community 👩‍💻👨‍💻

Cover image for Lab001 - Linux Dağıtımlarında LDAP Üzerinden Kimlik Doğrulama
Berkant
Berkant

Posted on • Updated on

Lab001 - Linux Dağıtımlarında LDAP Üzerinden Kimlik Doğrulama

İçindekiler

  1. Terraform ile Ortamın Kurulması
  2. Ansible ile Yapılandırma
  3. LDAP Adımları
  4. Lab Dosyaları

Giriş

Bu yazıda sadece LDAP Sunucusu kurulumu anlatmayacağım. LDAP kurup, kayıtları ekleyip, kullanıcıların linux sunucularda LDAP üzerinden yetkilendirilmesini anlatacağım. Bunu yaparken ortam kurulumu için Terraform, yapılandırma için de Ansible kullanacağım.

⚠️⚠️ Ekran görüntülerinde ve terminal kayıtlarında yazı içinde farklı IP adresleri görebilirsiniz. Bu yazıyı takip ederken LDAP Sunucusu mu yoksa istemci makineden mi bahsediliyor dikkat ediniz.

Terraform ile Ortamın Kurulması

Bulut ortamlarından AWS yi seçtim bu lab için siz dilediğiniz bulut sağlayıcıda veya kendi yerelinizde bu ortamı kurabilirsiniz.

AWS de varsayılan VPC nin içine iki sunucu(LDAP + Test Sunucusu) kuracağız. Bunlar aynı güvenlik grubuna(security group) bağlı, güvenlik grubunda dışarıdan(VPC nin dışından) gelecek SSH ve LDAP bağlantılarına izin verecek iki kural var. Ayrıca sunuculara terraform da , açık anahtarımızı(public ssh key) tanıtacağız ssh bağlantısı için.

Terraform Kurulumu

AWS CLI Kurulumu

  • AWS Console da IAM -> Users -> Add Users bölümünden terraformUser isimli kullanıcı oluşturuyoruz. Credential type için Access key i seçiyoruz.

Image description

  • Bir sonraki adımda Set Permissions ekranında Attach Existing policies directly bölümünden aşağıdaki yetkiler seçilir. Yetkiler Filter Policies ekranından aranarak bulunabilir.

    • AmazonEC2FullAccess , AmazonVPCFullAccess

Image description

  • Add tags bölümünde herhangi bir seçim yapmamıza gerek yok. Bir sonraki adıma geçiyoruz.

Image description

  • Review bölümünde bize önceki adımlarda yaptığımız seçenekleri gösteriyor. Alttaki ekran görüntüsüyle karşılaştırıp doğrulamanız iyi olur.

Image description

  • Son adımda Download .csv ile kimlik bilgilerinin olduğu dosya indirilir.

Image description

  • Terraform dosyalarının AWS de yapıyı kurabilmesi için önceki adımlarda indirdiğimiz .csv dosyasındaki profili , aws cli da tanıtalım. Bu profili Terraformda tanımlayalım.

provider "aws" {
  region  = "us-east-1"
  profile = "terraformUser"
}
Enter fullscreen mode Exit fullscreen mode
  • Oluşturacağımız sunuculara hem Ansible ın erişmesi için hem de ssh üzerinden erişebilmemiz için sunuculara açık SSH anahtarımızı Terraform ile yerleştiriyoruz.
resource "aws_key_pair" "myKey" {
  key_name   = "mySSHKey"
  public_key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICT1k5NTCYPbi19DKDUvJQ8V9pkVFvCK8FZaXhv8bJty berkant@ryzen"
}
Enter fullscreen mode Exit fullscreen mode
  • terraform fmt komutuyla dosya varsayılan biçimde formatlanır. terraform validate komutu ile oluşturulan ayarlar ve yapı geçerli mi diye kontrol edilir. terraform init ile terraformun çalışması gereken çeşitli hazırlıklar yapılır(sağlayıcı dosyasını indirmek gibi). terraform plan kurulacak yapı için gereken değişiklikleri gösterir. terraform apply yapıyı kurar.
  • Kaydın sonunda hata almasının sebebi AWS de Terraform tarafından oluşturulmayan bir kaynağı kullanmaya çalışmamız. Terraform dosyalarında varsayılan VPC yi kullandım. Bu kaynak Terraform tarafından oluşturulmadığı için , AWS deki o kaynağı içe aktarmamız lazım.
resource "aws_vpc" "myVPC" {
  # Bu kaynak aws tarafından oluşturuldu.İçe aktarılacak.
  # Kullanmamız için bu tanımlama ve terraform import ile içe aktarılması yeterli
}
Enter fullscreen mode Exit fullscreen mode
  • Tekrar terraform apply yaptığımızda sorunsuz bir şekilde kurulacak. Terraform bölümünü bitirdik 🏁

Ansible ile Yapılandırma

  • Ansible ile kuracağımız iki sunucuda paket yükleme, ssh ayarlarını değiştirme, ayar dosyalarını atma işlemlerini yapacağız. Altta temel ansible-playbook komutunun açıklamaları var.

ansible-playbook -i inventoryFile playbook.yaml --key-file keyFile

inventoryFile: playbook.yaml daki kuralların hangi sunucularda işletileceğine yönelik bilgiler. Bu bilgilerle ssh bağlantısı sağlanacak. (IP adresi, sunucu, kullanıcı adı vb). [] Köşeli parantezler içinde yazan ifade ansible dosyasında hosts ile belirttiğimiz değişkene karşılık geliyor.

[LDAP]
XXX.XXX.XXX.XXX ansible_user=admin
[Client]
XXX.XXX.XXX.XXX ansible_user=admin

Enter fullscreen mode Exit fullscreen mode

playbook.yaml: Ansible kodlarının olduğu dosya.

keyFile: SSH ile bağlanırken kimlik doğrulama için anahtar dosyası.

  • İhtiyacımız olan paketleri kurup, dosyaları kopyalayıp, ayar dosyalarında değişiklikler yaptık.

LDAP Adımları

LDAP Sunucusundaki Adımlar

  • LDAP sunucumuza giriyoruz, slapd ve ldaputils paketi ansible ile kurulmuştu. Varsayılan olarak kurulumda sunucu isminden dn(ayırt edici ad ~ distinguished name) almaya çalışıyor. Bu değerlere slapcat komutuyla bakabiliriz.

  • Örneğin cloudsio ismindeki yapımız için cloudsio.com a karşılık gelecek şekilde kurduğumuzu düşünelim. LDAP ı sudo dpkg-reconfigure slapd komutuyla yeniden yapılandırabiliriz. Adımlarda oluşturulan admin hesabının okuma/yazma yetkileri var.

  • LDAP ı yeniden yapılandırdıktan sonra drivers.ldif dosyamızı ldap a ekleyelim alttaki komut ile. (.ldif uzantılı dosyalar ldap kayıtlarını düz metin olarak saklar.)
    👉👉LDIF Dosyaları Hakkında Kısa Notlar👈👈

ldapadd -x -W -D "cn=admin,dc=cloudsio,dc=com" -f drivers.ldif

👉👉drivers.ldif in görselleştirilmiş hali👈👈

İstemci/Client ta Yapılacak Adımlar

  • LDAP sunucusunda yapmamız gerekenler adımlar bitti. Kimlik doğrulama işini LDAP a soracak sunucudaki(istemci / client) adımlara geçelim.

sudo apt update && sudo apt install libnss-ldapd libpam-ldapd ldap-utils -y

  • Sunucuya libnss-ldapd , libpam-ldapd, ldap-utils paketlerini yüklüyoruz. Paketlerin yüklenme adımında ldap sunucusu ile ilgili ve bulunduğumuz pam modülünün ayarları ile ilgili seçenekleri soruyor.

  • Son olarak /etc/pam.d/common-session dosyasına , sunucuya giren kullanıcaların ev dizininin sunucuya girer girmez oluşturulması için aşağıdaki pam seçeneğini ekliyoruz.
    session optional pam_mkhomedir.so skel=/etc/skel umask=077

  • İlgili nscd ve nslcd servislerini yeniden başlatıyoruz.
    systemctl restart nscd nslcd

  • Kendi makinemizden yaptığımız bağlantılarda ssh servisinin MaxAuthTries (varsayılan 6) değerini aştığımız için aşağıdaki gibi bir hata alabiliriz.

berkant@ryzen:~/LAB001/terraform$ ssh jbianchi@54.243.0.128
Received disconnect from 54.243.0.128 port 22:2: Too many authentication failures
Disconnected from 54.243.0.128 port 22
Enter fullscreen mode Exit fullscreen mode

Eğer başka bir makineden bağlanırsak, ya da /etc/ssh/sshd_config MaxAuthTries değerini yükseltip, ssh servisi yeniden başlatırsak sorun çözülür.

  • Kullanıcılar sunucuya girdi ama henüz sudo yetkileri yok. Ne yapmalıyız?
    • /etc/sudoers dosyasında değişiklik yapmamız gerekecek. -r--r----- 1 root root 668 Oct 31 20:00 /etc/sudoers dosyanın izinleri bu şekilde olduğundan herhangi bir metin düzenleyici içine girip değişiklik yapamıyoruz. sudoers dosyalarını düzenlemek için visudo komutunu kullanabiliriz.
sudo visudo
# Açılan sudoers dosyasında ilgili kullanıcının grubunu ekliyorum
%drivers   ALL=(ALL:ALL) ALL
Enter fullscreen mode Exit fullscreen mode

Lab Dosyaları

👉👉Github Bağlantısı👈👈

Okuduğunuz için teşekkürler 🙂

Kaynaklar

  1. Kapak görseli -> Image by David Mark from Pixabay
  2. https://wiki.debian.org/LDAP/PAM
  3. https://wiki.debian.org/LDAP/OpenLDAPSetup
  4. https://www.howtoforge.com/linux_ldap_authentication
  5. https://www.server-world.info/en/noteos=Debian_11&p=openldap
  6. https://marcin.owsiany.pl/ldif2dot-page
  7. https://github.com/ltb-project

Top comments (1)

Collapse
 
berkanterbey profile image
Berkant • Edited on

Eklemeler

  1. Yazıda eklememişim, .ldif kayıtlarında kullanıcılar için userPassword değeri slappasswd komutu ile oluşturulabilir.

  2. LDAP sunucusuna kayıt ekleme/silme/düzenleme işlemleri ldap komutları yerine GUI li bir araç kullanmak isterseniz Apache Directory Studio yu öneriyorum.

Hey! Check out this week's Meme Monday post