Debian`da Active Directory Kimlik Doğrulaması

Linux Yazıları30/08/2013


Bu yazımda "Samba" yüklü server'ımızı kullanılmakta olan bir etki alanına üye yapıp; verilen paylaşımlarda “Active Directory” kullanıcılarına erişim yetkisi vereceğiz.

 

Öncelikle samba ve Active Directory nedir ne işe yarar.

Samba, Linux/Unix işletim sistemleri ile Windows işletim sistemleri arasındaki iletişim kuran bir ağ sunucusu yazılımıdır. Linux’ta arka planda çalışan bu Deamon Windows istemcilerinin samba kurulu olan sunucuda paylaşıma açılmış dosya ve dizinlere ulaşılmasına olanak tanır bunun yanında istemcilerin yazıcı isteklerinide yönetebilir. Tam olarak Samba yapılandırılmış bir Linux sunucusu, genel olarak dizinleri paylaştırabilir, aktif dizin servisi (ADS – Active Directory Services) verebilir ayrıca PDC (Birincil Alan Denetleyicisi) olarak da çalışabilir, Windows istemcileri ile kullanıcı onayı yapar, kaynakları (dizinleri ve yazıcıları) paylaştırır ve kullanıcı oturumlarını uyarlar. Samba Windows istemcileri (clients) için dosya, yazıcı servisi sağlamanın dışında istemciler için işlevsellik ve yardımcı uygulamalar içerir.

Active Directory, Microsoft ağlarında kullanılan dizin hizmetidir. Bu veritabanı, kullanıcılar, bigisayarlar, mekanlar, yazıcılar gibi organizasyonun tüm bilgilerini saklar. Bu dizin vasıtasıyla çeşitli yönetimsel kısıtlamalar oluşturulabilir ya da kullanıcıların çalışma ortamları ihtiyaçlar ve standartlar doğrultusunda şekillendirilebilir. Bu şekillendirmeler Grup İlkesi sayesinde yapılır.

Şimdi geçelim uygulamaya. Anlatımım yapmış olduğum bir uygulamadaki değiştirilmesi gereken dosya içeriklerini vermek şeklinde olacaktır. Hangi dosya nedir ne işe yarar, zaten anlıyacaksınız.

Herşeyden önce sistemimizde ntp, samba, winbind ve krb5-user paketlerinin kurulu olması gerekmekte.

root@fileserver:~# apt-get install ntp samba winbind krb5-user

1.) /etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.1.130
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.100
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.1.160
        dns-search esintibilisim.local

2.) /etc/resolv.conf

search esintibilisim.local
nameserver 192.168.1.160

3.) /etc/hosts

127.0.0.1       localhost
192.168.1.130   fileserver.esintibilisim.local       fileserver

4.) /etc/samba/smb.conf

Samba yapılandırma dosyamızın bir yedeğini alıp kendi Etki Alanımızın ayarlarına göre yeni dosyamızı düzenliyoruz. Yedek aldığımız dosya daha sonra ihtiyacımız olan parametreleri incelememiz için gerekli olabilir.

[global]
   workgroup = ESINTIBILISIM
   realm = ESINTIBILISIM.LOCAL
   preferred master = no
   server string = Samba Server Version %v
   security = ads
   encrypt passwords = yes
   log level = 3
   log file = /var/log/samba/%m
   max log size = 50
   printcap name = cups
   printing = cups
   winbind enum users = Yes
   winbind enum groups = Yes
   winbind use default domain = Yes
   winbind nested groups = Yes
   winbind separator = +
   idmap uid = 1000-20000
   idmap gid = 1000-20000
   template shell = /bin/bash

# Samba Server Shared Folder Configuration

[TEST]
        comment = TEST Paylasimi
        browseable = yes
        path = /Share
        writable = yes
        public = no
        force user = %U
        force group = "ESINTIBILISIM+Domain Admins"
        force create mode = 0660
        create mask = 0660
        force directory mode = 0770
        valid users = @"ESINTIBILISIM+Domain Users"
        admin users = @"ESINTIBILISIM+Domain Admins"

Bazı Parametreleri açıklamak istiyorum.

.winbind use default domain = Yes kullanıcılar oturum açarken DOMAIN\KullanıcıAdı şeklinde oturum açmak yerine sadece KullanıcıAdı kullanarak oturum açılabilmesi için kullanılır.
 
.idmap uid = 10000-20000 ve idmap gid = 10000-20000 AD üzerinde tanımlı kullanıcılar, yerel sunucu üzerindeki kullanıcılara çevrilirken kullanılacak uid ve gid değerlerinin belirlenmesi için kullanılır.
 
Bu değerler belirlenirken verilecek min. değer en son eklenmiş yerel kullanıcı için belirlenmiş uid ve gid değerlerinden büyük olmalıdır. Eğer burada belirtilen değerler yerel değerler ile çakıştığında kullanıcı nssswitch.conf dosyasında belirtilen sıra göz önüne alınarak değerlendirilir.

.winbind enum users = yes ve winbind enum groups = yes   getent komutu kullanılarak kullanıcı ve grup bilgilerinin belirlenmesine izin verir.

NOT: testparm komutu kullanarak girdiğiniz parametrelerin yazım şeklinin doğru olup olmadığını kontrol edebilirisiniz.

5.) /etc/krb5.conf 

-- Kerberos yapılandırma dosyamızın bir yedeğini alıp kendi Etki Alanımızın ayarlarına göre yeni dosyamızı düzenliyoruz.

[libdefaults]
 default_realm = ESINTIBILISIM.LOCAL
 dns_lookup_realm = false
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[appdefaults]
pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
}

[realms]
 ESINTIBILISIM.LOCAL = {
  kdc = dc.esintibilisim.local
  admin_server = dc.esintibilisim.local
  kdc = *
}

[domain_realm]
 .esintibilisim.local = ESINTIBILISIM.LOCAL
 esintibilisim.local = ESINTIBILISIM.LOCAL

6.) /etc/nsswitch.conf 

-- Kimlik doğrulama yöntemlerimizi ayarlamak için dosyamızda bulunan aşağıdaki alanları düzenliyoruz. Mavi olan kısımlar eklenecek.

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat winbind files
group:          compat winbind files
shadow:         compat winbind files

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

7.) /etc/pam.d/common-password (Redhat Tabanlı Sistemlerde /etc/pam.d/system-auth)

İstemcimizde oturum açacak kullanıcıların bir "home folder" dediğimiz ev dizinine ihtiyaçları olacaktır. Bunun için aşağıdaki gibi dosyamızı açıp uygun bir satıra parametremizi ekliyoruz ki ilk login olduklarında gerekli dizinler otomatik oluşturulsun.

session     optional      pam_mkhomedir.so

Firewall Ayarları

root@fileserver:~# iptables -A INPUT -p tcp --dport 135 -j ACCEPT
root@fileserver:~# iptables -A INPUT -p tcp --dport 137 -j ACCEPT
root@fileserver:~# iptables -A INPUT -p tcp --dport 138 -j ACCEPT
root@fileserver:~# iptables -A INPUT -p tcp --dport 139 -j ACCEPT
root@fileserver:~# iptables -A INPUT -p tcp --dport 445 -j ACCEPT

Test ve Kontrol İşlemleri

-- Active Directory üzerinde tanımlanmış kullanıcıların listesini görebiliriz.

root@fileserver:~# wbinfo -u

-- AD üzerinde tanımlanmış kullanıcı gruplarını görebiliriz.

root@fileserver:~# wbinfo -g

-- Wbinfo komutunu kullanarak yapabileceğiniz diğer testleri görmek için aşağıdaki komut ile yardım alabiliriz.

root@fileserver:~# wbinfo -help

-- Kerberos kimlik doğrulama ayarlarımızı test ediyoruz.

-- AD ile Samba sunucusu arasında 5 dakikadan daha fazla bir zaman farkı varsa kinit komutunu çalıştırdığınızda aşağıdaki hata mesajı görüntülenecektir. Ayarlarımız doğruysa başarılı bir şekilde çalışacaktır.

root@fileserver:~# kinit administrator@ESINTIBILISIM.LOCAL
Password for administrator@ESINTIBILISIM.COM:
kinit(v5): Clock skew too great while getting initial credentials

-- Sorun yoksa Hata vermeyecektir.

root@fileserver:~# kinit administrator
Password for administrator@TAHTAKALESPOT.LOCAL:
Warning: Your password will expire in 23 days on Tue Apr 07 16:30:56 2013

-- İstemcimizi etki alanımıza üye yapıyoruz.

root@fileserver:~# net ads join -U eozban
Enter eozban's password:
Failed to join domain: Failed to set account flags for machine account (NT_STATUS_ACCESS_DENIED)

root@fileserver:~# net ads join -U administrator
Enter administrator's password:
Using short domain name -- ESINTIBILISIM
Joined 'FILESERVER' to realm 'esintibilisim.local'

-- Eğer aşağıdaki gibi bir hata ile karşılaşırsak istemcimizin DNS kaydını sunucumuzda /etc/hosts dosyasında oluşturup yeniden deneyebiliriz.

root@fileserver:~# net ads join -U administrator
Enter administrator's password:
Using short domain name -- ESINTIBILISIM
Joined 'FILESERVER' to realm 'esintibilisim.local'
No DNS domain configured for fileserver. Unable to perform DNS Update.
DNS update failed!

Etiketler: