389 Directory Server (LDAP) Kurulum ve Yapılandırması
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MY9Y5yjV' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
linux ve açık kaynak kod teknolojiler barındıran altyapılar için, merkezi kimlik denetimi işleri için bir ldap dizin servisi ihtiyacı olduğu zaman OpenLDAP dahil kullanılabilecek bir kaç alternatif var. Multi Master replikasyon desteği, yüksek performans, LDAPv3 uyumluluğu gibi güzel özellikleri ve kullanışlı bir arayüze sahip olmasından dolayı “389 Directory Server” alternatifler arasında iyi bir tercih olmaktadır. RHEL tarafından geliştirilmekte olan 389-DS hemen her tür operasyonu da online olarak gerçekleştirebilmesinden mütevellit, üretim ortamları için de çok uygun bir directory serverdır.
Bu yazıda, tüm özelliklerine http://directory.fedoraproject.org/docs/389ds/FAQ/features.html adresinden erişelebilecek olan 389 Directory Server'ın, CentOS 6.6 sürümü üzerinde nasıl kurulacağı; temel ve genel güvenlik ayarlarının yapılarak nasıl servisin nasıl devreye alınabileceğine değineceğim. Yazının sonraki bölümlerinde ise Master & Slave replication ve SSSD üzerinden SSH servisinin ve SUDO entegrasyonlarından bahsedeceğim.
Kurulum
Öncelikle dizin servisinin düzgün çalışabilmesi için hostname, alan adı ve çözümleme konularında herhangi bir aksaklık olmaması gerekiyor. Bu nedenle sunucunuza ait tam ismi (FQDN) DNS sunucunuza -olmadı hosts- dosyanıza eklemeniz gerekiyor. Benim test ortamında 389-ds kurulumunu yapacağım sunucunun hostname'i ldap01, domain'i linuxakademi.lab ve ip adresi 10.10.10.10 bu nedenle hosts dosyama aşağıdaki şekilde bir kayıt ekliyorum.
# echo "10.10.10.10 ldap01.linuxakademi.lab ldap01" >> /etc/hosts
Aynı şekilde ilgili kaydı DNS sunucunuzda da tanımlayarak, networkünüzün her node'undan aynı isimle erişilebildiğinden emin olun.
Ardından iptables'a gerekli kuralları ekliyoruz:
# iptables -A INPUT -i eth0 -p tcp --dport 389 -j ACCEPT # iptables -A INPUT -i eth0 -p tcp --dport 636 -j ACCEPT # iptables -A INPUT -i eth0 -p tcp --dport 9830 -j ACCEPT # /etc/init.d/iptables save /etc/init.d/iptables reload
Şimdi de SELinux'u kapatalım:
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config # setenforce 0
Sonra file descriptor ve tcp stack üzerinde küçük bir iki tanımlama ile performance tuning yapalım:
# echo "net.ipv4.tcp_keepalive_time = 300" >> /etc/sysctl.conf # echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf # echo "* soft nofile 8192" > /etc/security/limits.d/90-nofile.conf # echo "* hard nofile 8192" >> /etc/security/limits.d/90-nofile.conf # echo "ulimit -n 8192" >> /etc/profile # echo "session required /lib64/security/pam_limits.so" >> /etc/pam.d/system-auth
Ayrıca, /proc/sys/fs/file-max dosyasındaki değerin, 64000'den büyük olduğuna emin olalım. Modern sistemlerde bu değer genelde daha büyük olacaktır, ancak eğer değilse minimum 64000 yapmalısınız.
Şimdi özellikle tuning ayarlarının aktif olması için sistemi reboot edelim.
# reboot
Sistem açıldıktan sonra, 389 ds'i paket yöneticisinden kurmak üzere EPEL ve remi repolarının sisteme ekleyelim:
# rpm -Uvh http://ftp.linux.org.tr/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
Ardından 389-ds paketeni sisteme kuruyoruz:
# yum install -y 389-ds
Kurulumlar tamamlandıktan sonra dizin servisinin yapılandırılması işlemine geçiyoruz:
Genel Yapılandırma
Yapılandırmaya başlamadan önce, 389-ds paketi ile birlikte gelen ve sistemi tarayıp gerekli paketlerin ve yamaları, yeterli memory olup olmadığını ve diğer sistem ayarlarını check eden “dsktune” isimli uygulamayı çalıştırıyoruz:
# dsktune
Bu araç, sistemi tarayacak ve herhangi bir sorun olmaması durumunda aşağıdakine benzer bir çıktı verecektir.
389 Directory Server system tuning analysis version 23-FEBRUARY-2012. NOTICE : System is x86_64-unknown-linux3.8.13-68.1.3.el6uek.x86_64 (2 processor).
Sizdeki çıktıda herhangi bir WARNING var ise bahsi geçen problemi gidermeniz ve dsktune'u yeniden çalıştırmanız gerekmektedir.
Herşeyin yolunda olduğu rapor edildiyse, aşağıdaki komut ile yapılandırma işlemine başlıyoruz:
# setup-ds-admin.pl
Bu komutu çalıştırdığınız zaman, yapılandırma işlemleri için bir takım sorular sorulacaktır. Yapılandırma işlemlerinin tam bir çıktısı ve sorulan soruların anlamları aşağıda bold ve kırmızı olarak verilmiştir. İlgili ibareleri izleyerek kendi tanımlamalarınızı da bu şekilde yapınız:
============================================================================== This program will set up the 389 Directory and Administration Servers. It is recommended that you have "root" privilege to set up the software. tips for using this program: - Press "Enter" to choose the default and go to the next screen - Type "Control-B" then "Enter" to go back to the previous screen - Type "Control-C" to cancel the setup program Would you like to continue with set up? [yes]: Setup'a devam etmek isteyip istemediğinizi soran ilk soru; yes diyerek devam edin. ============================================================================== Your system has been scanned for potential problems, missing patches, etc. The following output is a report of the items found that need to be addressed before running this software in a production environment. 389 Directory Server system tuning analysis version 23-FEBRUARY-2012. NOTICE : System is x86_64-unknown-linux2.6.32-504.3.3.el6.x86_64 (1 processor). Would you like to continue? [no]: yes dsktune aracı bir daha çalıştırıldı ve sistem check edildi. Herhangi bir warning verilmedi. Devam etmek istiyor muyuz ? Evet. ============================================================================== Choose a setup type: 1. Express Allows you to quickly set up the servers using the most common options and pre-defined defaults. Useful for quick evaluation of the products. 2. Typical Allows you to specify common defaults and options. 3. Custom Allows you to specify more advanced options. This is recommended for experienced server administrators only. To accept the default shown in brackets, press the Enter key. Choose a setup type [2]: Ne tip bir kurulum yapacağız ? Express, Typical ya da Custom seçeneklerinden birini seçebiliriz. Biz tipik bir kurulum yapacağımız için 2 diyerek devam ediyoruz. ============================================================================== Enter the fully qualified domain name of the computer on which you're setting up server software. Using the form . Example: eros.example.com. To accept the default shown in brackets, press the Enter key. Warning: This step may take a few minutes if your DNS servers can not be reached or if DNS is not configured correctly. If you would rather not wait, hit Ctrl-C and run this program again with the following command line option to specify the hostname: General.FullMachineName=your.hostname.domain.name Computer name [ldap01.linuxakademi.lab]: Bu alanda sistemimizin tam alan adını belirtiyoruz. Bu nokta servisin düzgün çalışması için önemlidir. Kurulumun FQDN'i kendisinin detect etmesi herşeyin yolunda olduğunu gösterir. ============================================================================== The servers must run as a specific user in a specific group. It is strongly recommended that this user should have no privileges on the computer (i.e. a non-root user). The setup procedure will give this user/group some permissions in specific paths/files to perform server-specific operations. If you have not yet created a user and group for the servers, create this user and group using your native operating system utilities. System User [nobody]: System Group [nobody]: Servisin hangi user ve grup üzerinden çalıştırılacağını belirlediğimiz bölüm. Burada, default olarak nobody seçiyoruz. ============================================================================== Server information is stored in the configuration directory server. This information is used by the console and administration server to configure and manage your servers. If you have already set up a configuration directory server, you should register any servers you set up or create with the configuration server. To do so, the following information about the configuration server is required: the fully qualified host name of the form .(e.g. hostname.example.com), the port number (default 389), the suffix, the DN and password of a user having permission to write the configuration information, usually the configuration directory administrator, and if you are using security (TLS/SSL). If you are using TLS/SSL, specify the TLS/SSL (LDAPS) port number (default 636) instead of the regular LDAP port number, and provide the CA certificate (in PEM/ASCII format). If you do not yet have a configuration directory server, enter 'No' to be prompted to set up one. Do you want to register this software with an existing configuration directory server? [no]: Sistem üzerinde daha önceden yapılandırılmış bir dizin servisini olup olmadığını ve bu kurulumu register edip etmek isteyip istemediğimizi soran bölüm. Biz yeni kurulum yapıyor olduğumuzdan burada "no" diyoruz. ============================================================================== Please enter the administrator ID for the configuration directory server. This is the ID typically used to log in to the console. You will also be prompted for the password. Configuration directory server administrator ID [admin]: Password: Password (confirm): Dizin servisinin konsoluna bağlanma ve management işlemleri sırasında kullanılacakusername / password ikilisini set ettiğimiz bölüm. Burada kullanıcı ve şifremizi tanımlıyoruz. ============================================================================== The information stored in the configuration directory server can be separated into different Administration Domains. If you are managing multiple software releases at the same time, or managing information about multiple domains, you may use the Administration Domain to keep them separate. If you are not using administrative domains, press Enter to select the default. Otherwise, enter some descriptive, unique name for the administration domain, such as the name of the organization responsible for managing the domain. Administration Domain [linuxakademi.lab]: Yönetici domainin ne olacağını belirten bölüm. Bizim sadece bir alanımız olduğu için burada linuxakademi.lab şeklinde beliryiroruz. ============================================================================== The standard directory server network port number is 389. However, if you are not logged as the superuser, or port 389 is in use, the default value will be a random unused port number greater than 1024. If you want to use port 389, make sure that you are logged in as the superuser, that port 389 is not in use. Directory server network port [389]: Dizin servisinin portu. Default 389. ============================================================================== Each instance of a directory server requires a unique identifier. This identifier is used to name the various instance specific files and directories in the file system, as well as for other uses as a server instance identifier. Directory server identifier [ldap01]: Dizin servisinin tanımlayıcısı. Burada hostname'imizi kullanıyoruz. ============================================================================== The suffix is the root of your directory tree. The suffix must be a valid DN. It is recommended that you use the dc=domaincomponent suffix convention. For example, if your domain is example.com, you should use dc=example,dc=com for your suffix. Setup will create this initial suffix for you, but you may have more than one suffix. Use the directory server utilities to create additional suffixes. Suffix [dc=linuxakademi, dc=lab]: Sistemdeki kök dizin ağacını tanımlıyoruz. Default dc=linuxakademi, dc=lab ============================================================================== Certain directory server operations require an administrative user. This user is referred to as the Directory Manager and typically has a bind Distinguished Name (DN) of cn=Directory Manager. You will also be prompted for the password for this user. The password must be at least 8 characters long, and contain no spaces. Press Control-B or type the word "back", then Enter to back up and start over. Directory Manager DN [cn=Directory Manager]: Password: Password (confirm): Administrative user'ımız. Burada default olarak "cn=Directory Manager" DN'ini kullanacağız ve 8 karakterli bir şifre tanımlayacağız. (Bir önce tanımladığımız admin user'ı ile aynı şifreyi verebilirsiniz.) ============================================================================== The Administration Server is separate from any of your web or application servers since it listens to a different port and access to it is restricted. Pick a port number between 1024 and 65535 to run your Administration Server on. You should NOT use a port number which you plan to run a web or application server on, rather, select a number which you will remember and which will not be used for anything else. Administration port [9830]: Yönetimsel işlemler için kullanılacak (consol) port. Default 9830. ============================================================================== The interactive phase is complete. The script will now set up your servers. Enter No or go Back if you want to change something. Are you ready to set up your servers? [yes]: Son olarak yapılandırmanın tamamlanması için evet diyoruz. ==============================================================================
Yapılandırmanın sorunsuz tamamlandığını belirten çıktıdan sonra, dirsrv isimli dizin servisi süreci ve dirsrv-admin isimli console servisi start edilecek ve erişime hazır duruma gelecektir.
Kullanmaya başlamadan önce bu iki servisi startup'a ekliyoruz:
# chkconfig dirsrv on # chkconfig dirsrv-admin on
Şu anda servis sorunsuz olarak çalışıyor olmalıdır, test etmek için aşağıdaki ldapsearch komutunu kullanalım:
# ldapsearch -x -b "dc=linuxakademi,dc=lab"
Komut herhangi bir hata vermeden, dizin şemasını aşağıdakine benzer şekilde görüntüleyecektir.
Böylece dizin servisinin düzgün olaraç çalıştığını test etmiş oluyoruz. Ancak yukarıdaki ldapseach komutunda farketmiş olabileceğiniz gibi şu anda dizin servisi herhangi bir kimlik doğrulaması yapmaksızın sorgulanabiliyor. Bu güvenli bir durum olmayacağı için öncesinde Anonymous Access'i kapatmak ve güvenli erişim için TLS/SSL yapılandırmasını tamamlamak gerekiyor. Bunun için şimdi TLS/SSL için kullanılacak sertifika otoritelerinin ve sertifikaların oluşturulma işlemlerini tamamlayalım.
TLS/SSL Yapılandırmaları
Öncelikli olarak şu anda çalışmakta olan yapılandırmayı yedekliyoruz.
# cd /etc/dirsrv/slapd-ldap01 # mkdir /ldap-backups/ && tar -cf /ldap-backups/db-backup.tar *
Ardından, sertifika oluşturma vs. işleri için bir şifre belirleyip, tmp dizini altında pwdfile ismli dosya içerisine yazıyoruz:
# echo "sifreburaya" > /tmp/pwdfile
Daha sonra LDAP servisi için bir sertifika database'i oluşturalım:
# cd /etc/dirsrv/slapd-ldap01 # certutil -N -d . -f /tmp/pwdfile
Şimdi de ldap servisi için oluşturacağımız ssl sertifikasını imzalayacağımız CA sertifikamızı oluşturuyoruz:
certutil -S -n "CA certificate" -s "cn=LinuxAkademi CA Cert,dc=linuxakademi,dc=lab" -2 -x -t "CT,," -m 1000 -v 120 -d . -k rsa -f /tmp/pwdfile
Not: Burada CA sertifikasnın ismi ve domainini düzgün verdiğinize dikkat edin. Sertfika isimlerinde yapılan hatalar ya da tutarsızlıklar SSL üzerinden LDAP servisi verme işleminin çalışmamasına neden olacaktır. Ben örnekte sertifikayı “LinuAkademi CA Cert” ismi ile linuxakademi.lab domainine ait olacak şekilde oluşturuyorum.
Bu komutu verdiğiniz zaman aşağıdakine benzer bir şekilde, key'in üretilebilmesi için klavyeden ramdom girişler yapmanızı isteyecek ve progress bar sona geldiği zaman iki soru sorarak cevaba göre işlemi tamamlayacaktır. İlki bunun bir CA sertifikası mı olduğunu soran bu soruların ikisine de “y” tuşu ile evet diyerek işlemi tamamlıyoruz:
A random seed must be generated that will be used in the creation of your key. One of the easiest ways to create a random seed is to use the timing of keystrokes on a keyboard. To begin, type keys on the keyboard until this progress meter is full. DO NOT USE THE AUTOREPEAT FUNCTION ON YOUR KEYBOARD! Continue typing until the progress meter is full: |************************************************************| Finished. Press enter to continue: Generating key. This may take a few moments... Is this a CA certificate [y/N]? y Enter the path length constraint, enter to skip [ Is this a critical extension [y/N]? y
Bu şekilde CA sertifikamız oluşturulmuş oluyor. Böylece bu CA cert ile ldap servisi için bir self-signed SSL sertifikası imzalayabiliriz.
Bu işlem için gene aynı dizindeşu komutu giriyoruz:
certutil -S -n "Server-Cert" -s "cn=ldap01.linuxakademi.lab,ou=Directory Server" -c "CA certificate" -t "u,u,u" -m 1001 -v 120 -d . -k rsa -f /tmp/pwdfile
Bu komut, ldap01.linuakademi.lab ismi için “CA certificate” isimli CA'i kullanarak bir sertifika oluşturulmasını söylemektedir. Burada da isimlere dikkat etmek gerekmekte. Ldap servisi için oluşturulan sertifikanın mutlak olarak ilgili sunucunun tam fqdn'i için oluşturulması ve base domain ile aynı olması gerekir.
Bu komut da sizden gene rastgele girişler yapmanızı isteyecek ve aşağıdaki gibi tamamlanacaktır:
A random seed must be generated that will be used in the creation of your key. One of the easiest ways to create a random seed is to use the timing of keystrokes on a keyboard. To begin, type keys on the keyboard until this progress meter is full. DO NOT USE THE AUTOREPEAT FUNCTION ON YOUR KEYBOARD! Continue typing until the progress meter is full: |************************************************************| Finished. Press enter to continue: Generating key. This may take a few moments... Notice: Trust flag u is set automatically if the private key is present.
Bu şekilde ldap servisi için sertifika oluşturma işlemini tamamlamış oluyoruz. Son olarak ilgili CA sertifikamıza ait pub key'i ldap servisine ssl üzerinden erişecek servislerin kullanımı için export edelim:
# certutil -d . -L -n "CA certificate" -a > cacert.asc
Ldap servisi için SSL sertifikasının oluşturulmasının ardından ikinci olarak, Ldap servisini bir GUI üzerinden yönetmeye olanak sağlayan “Admin Server” için de benzer şekilde bir SSL sertifikası oluşturmamız gerekiyor.
Öncelikle certutil ile admin server için key database'ini oluşturulım:
# cd /etc/dirsrv/admin-serv # certutil -N -d . -f /tmp/pwdfile
Ardından, Admin server'a ait CA sertifikasını oluşturalım:
# certutil -S -n "CA certificate" -s "cn=LinuxAkademi Admin Server CA Cert,dc=linuxakademi,dc=lab" -2 -x -t "CT,," -m 1000 -v 120 -d . -k rsa -f /tmp/pwdfile
CA sertifikasının oluşturulması işleminde alan adına ve sertifika ismine dikkat ederek bir önce oluşturduğumuz sertifkalarda olduğu gibi prosedürü tamamlayalım.
CA oluşturulduktan sonra bu sertifika ile admin server için bir sertifika oluşturuyoruz:
# certutil -S -n "Server-Cert" -s "cn=ldap01.linuxakademi.lab,ou=Admin Server" -c "CA certificate" -t "u,u,u" -m 1001 -v 120 -d . -k rsa -f /tmp/pwdfile
Hem dirsrv hem de admin server için sertifikaların oluşturulmasının ardından artık ilgili servislerin başlatılması sırasında /tmp/pwdfile dosyasına kaydetmiş olduğumuz şifrenin girilmesi gerekecektir. İşte bu durumun otomatize edilmesi için aşağıdaki adımları gerçekleştirelim:
/etc/dirsrv/admin-serv/nss.conf dosyasını editleyin ve NSSPassPhraseDialog satırını aşağıdaki şekilde düzenleyin:
NSSPassPhraseDialog file://///etc/dirsrv/admin-serv/password.conf
Ardından /etc/dirsrv/admin-serv/password.conf dosyasını oluşturup gerekli izinleri tanımlayalım:
# touch /etc/dirsrv/admin-serv/password.conf # chmod 600 /etc/dirsrv/admin-serv/password.conf # chown nobody /etc/dirsrv/admin-serv/password.conf
Şimdi de ilgili dosya içerisine şifremizi yazalım:
# LDAPPWD=$(cat /tmp/pwdfile) # echo "internal:$LDAPPWD" > /etc/dirsrv/admin-serv/password.conf
Admin server için yaptığımız bu tanımlamanın bir benzerini dir server için yapıyoruz:
# touch /etc/dirsrv/slapd-ldapslave01/pin.txt # chmod 600 /etc/dirsrv/slapd-ldapslave01/pin.txt # chown nobody /etc/dirsrv/slapd-ldapslave01/pin.txt # LDAPPWD=$(cat /tmp/pwdfile) # echo "Internal (Software) Token:$LDAPPWD" > /etc/dirsrv/slapd-ldapslave01/pin.txt
Böylece TLS ile ilgili temel tanımlamaları yapmış oluyoruz. Şimdi herşeyin doğru olup olmadığını test etmek için her iki servisi de restart edelim:
# /etc/init.d/dirsrv restart # /etc/init.d/dirsrv-admin restart
Bu şekilde servisler normak bir şekilde restart edilmiş olmalıdır.
Şimdi hem admin server'a hem de console'a erişimlerin encrypt olmasını default olarak set ayarlayacağız. Normalde bu işlemi komut satırından yapabileceğiniz gibi 389-console uygulaması üzerinden de yapmak mümkün. 389-console uygulamasını client olarak kullanmak üzere sisteminize paket yöneticiniz üzerinden yükleyebilirsiniz.
Örnek olarak Kali linux gibi debian tabanlı dağıtımlarda:
# apt-get install 389-console
Fedora gibi RHEL tabanlı sistemlerse ise:
# yum install 389-console
şeklinde kurabilirsiniz.
Böylece 389-console uygulaması üzerinden LDAP servisine erişebilirsiniz. İlgili console ait bir ekran görüntüsü aşağıdaki gibidir:
389 dizin servisine login olmak üzere, -aksini belirtlediğiniz sürece- default kullanıcı “cn=Directory Manager”‘dır ve şifre setup-ds-admin.pl ile yapılandırma işlemlerini belirlediğimiz şifredir.
Not: Biz dizin servisine erişimlerde, TLS kullanılabilecek şekilde yapılandırdık sistemi ancak bu özelliği henüz devreye almadığımız için console erişimleri http üzerinden yapılmaktadır. Dolayısı ile şifreler ağda plaintext olarak iletilecektir. Bu nedenle -işlemler grafik arabirim üzerinden yapılabildiğinden dolayıayrıca anlatmayacağım üzere- sisteme ilk login olmanızın ardından “Configure Admin Server” ve “Configure DS” segmelerinden Encryption ve Secure Connection tanımlamalarını yerine getirin. Bu işlemin ardından dizin ve admin servislerini yeniden restart ettikten sonra sisteme encrypt olarak ( örn: https://ldap01.linuxakademi.com.tr:9830 ) erişebilirsiniz.
Bu yazılar da ilginizi çekebilir:
- Webmin – Web-Based Unix Management
- CentOS 7.0 Üzerinde Zimbra Server 8.0 Kurulumu
- Backtrack 4 Üzerine Nessus Kurulumu
- Two-Factor Auth Destekli OpenVPN Server Kurulumu
- FreeBSD 6.2 Kurulumu – Part IV: Post-Installation
Yorumlar
Trackbacks
Yorumda bulunun.
Teşekkürler Hocam Ellerinize Sağlık,,
Güzel bir kaynak Olmuş.
[Cevapla]
Yazıyı inceledim ve kendi ağımdaki makinalara uyguladım. Uzaktaki LDAP sunucusundan SSH ve Xforwarding (Xming) ile 389-console uygulamasını Windows masaüstüne almaya çalışırken anlamsız bir hata verip bağlanamıyor. Biraz araştırdığımda console uygulamasının Windows için yazılmış sürümü olduğunu farkettim. Bu istemciyle bağlanınca sorun düzeliyor.
Saygılarımla
[Cevapla]