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 fileshosts: files dns
networks: filesprotocols: db files
services: db files
ethers: db files
rpc: db filesnetgroup: 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 [email protected]
Password for [email protected]:
kinit(v5): Clock skew too great while getting initial credentials
— Sorun yoksa Hata vermeyecektir.
root@fileserver:~# kinit administrator
Password for [email protected]:
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!