Cài đặt OpenLDAP trên CentOS

LDAP là gì?

LDAP (Lightweight Directory Access Protocol) là một giao thức ứng dụng dùng để truy cập các cấu trúc thư mục, được thiết kế và hoạt động trên giao thức TCP/IP.

Một cấu trúc thư mục là một tập hợp các đối tượng có các thuộc tính hay đặc điểm tương tự và được sắp xếp theo logic thành nhiều cấp bậc. Ví dụ thường thấy nhất là danh bạ điện thoại. Trong đó, mỗi cá nhân hay tổ chức được xếp theo thứ tự tên và có các thuộc tính là địa chỉ và số điện thoại. Vì mẫu cấu trúc thư mục của LDAP tương đối đơn giản nên nó cũng thường được dùng để xác nhận người sử dụng trong hệ thống.

LDAP là một giao thức hướng thông điệp. Client tạo ra một thông điệp LDAP chứa một yêu cầu và gửi nó đến server. Server xử lý yêu cầu đó và gửi trả kết quả lại cho client theo một chuỗi gồm một hoặc nhiều thông điệp LDAP.

Trong bài viết này, chúng ta sẽ đi qua từng bước trong quá trình cài đặt OpenLDAP – 1 trong những máy chủ LDAP được sử dụng phổ biến nhất trên Linux nói chung và trên CentOS nói riêng.

Cài đặt OpenLDAP trên CentOS

Cài đặt OpenLDAP server

Cài đặt các gói cần thiết trên OpenLDAP server

# yum install -y openldap openldap-clients openldap-servers openldap-devel nss_ldap libtool-ltdl

Cấu hình Firewall

# vi /etc/sysconfig/iptables
[...]
-A INPUT -m state --state NEW -m tcp -p tcp --dport 389 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 636 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9830 -j ACCEPT
[...]
# service iptables restart

Điều chỉnh hiệu năng và bảo mật cho LDAP server

# vi /etc/sysctl.conf
[...]
net.ipv4.tcp_keepalive_time = 300
net.ipv4.ip_local_port_range = 1024 65000
fs.file-max = 64000
# vi /etc/security/limits.conf
[...]
*                    soft        nofile             8192
*                    hard        nofile             8192
# vi /etc/profile
[...]
ulimit -n 8192

Khởi động lại máy chủ.

Tạo tập tin cấu hình cho OpenLDAP server

# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
# rm -rvf /etc/openldap/slapd.d/*

Tạo mật khẩu cho tài khoản quản trị của OpenLDAP.

# slappasswd
New password:  <Nhập mật khẩu>
Re-enter new password: <Nhập lại mật khẩu>

Kết quả trả về:

{SSHA}2uS++C9YLJbIikx3tluwFKOVx+Y2Biww

Cấu hình tập tin cấu hình của OpenLDAP như sau:

# vi /etc/openldap/slapd.conf
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include         /etc/openldap/schema/corba.schema
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/duaconf.schema
include         /etc/openldap/schema/dyngroup.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/java.schema
include         /etc/openldap/schema/misc.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/ppolicy.schema
include         /etc/openldap/schema/collective.schema

# Allow LDAPv2 client connections.  This is NOT the default.
allow bind_v2

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral       ldap://root.openldap.org

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

# Load dynamic backend modules
# - modulepath is architecture dependent value (32/64-bit system)
# - back_sql.la overlay requires openldap-server-sql package
# - dyngroup.la and dynlist.la cannot be used at the same time

# modulepath /usr/lib/openldap
# modulepath /usr/lib64/openldap

# moduleload accesslog.la
# moduleload auditlog.la
# moduleload back_sql.la
# moduleload chain.la
# moduleload collect.la
# moduleload constraint.la
# moduleload dds.la
# moduleload deref.la
# moduleload dyngroup.la
# moduleload dynlist.la
# moduleload memberof.la
# moduleload pbind.la
# moduleload pcache.la
# moduleload ppolicy.la
# moduleload refint.la
# moduleload retcode.la
# moduleload rwm.la
# moduleload seqmod.la
# moduleload smbk5pwd.la
# moduleload sssvlv.la
# moduleload syncprov.la
# moduleload translucent.la
# moduleload unique.la
# moduleload valsort.la

# The next three lines allow use of TLS for encrypting connections using a
# dummy test certificate which you can generate by running
# /usr/libexec/openldap/generate-server-cert.sh. Your client software may balk
# at self-signed certificates, however.
#TLSCACertificatePath /etc/openldap/certs
#TLSCertificateFile "\"OpenLDAP Server\""
#TLSCertificateKeyFile /etc/openldap/certs/password

# Sample security restrictions
#       Require integrity protection (prevent hijacking)
#       Require 112-bit (3DES or better) encryption for updates
#       Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64

# Sample access control policy:
#       Root DSE: allow anyone to read it
#       Subschema (sub)entry DSE: allow anyone to read it
#       Other DSEs:
#               Allow self write access
#               Allow authenticated users read access
#               Allow anonymous users to authenticate
#       Directives needed to implement policy:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
#       by self write
#       by users read
#       by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn.  (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!

# enable on-the-fly configuration (cn=config)
database config
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
        by * none

# enable server status monitoring (cn=monitor)
database monitor
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=admin,dc=website,dc=com" read
        by * none

#######################################################################
# database definitions
#######################################################################

database        bdb
suffix          "dc=website,dc=com"
checkpoint      1024 15
rootdn          "cn=admin,dc=website,dc=com"
rootpw          {SSHA}2uS++C9YLJbIikx3tluwFKOVx+Y2Biww
loglevel        256
sizelimit       unlimited
# Cleartext passwords, especially for the rootdn, should
# be avoided.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw                secret
# rootpw                {crypt}ijFYNcSNctBYg
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory       /var/lib/ldap/website.com

# Indices to maintain for this database
index objectClass                       eq,pres
index ou,cn,mail,surname,givenname      eq,pres,sub
index uidNumber,gidNumber,loginShell    eq,pres
index uid,memberUid                     eq,pres,sub
index nisMapName,nisMapEntry            eq,pres,sub

# Replicas of this database
#replogfile /var/lib/ldap/openldap-master-replog
#replica host=ldap-1.example.com:389 starttls=critical
#     bindmethod=sasl saslmech=GSSAPI
#     authcId=host/[email protected]

Tạo thư mục chứa cơ sở dữ liệu của OpenLDAP cho domain website.com

# mkdir /var/lib/ldap/website.com
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/website.com/DB_CONFIG
# echo "" | slapadd -f /etc/openldap/slapd.conf 
# chown -R ldap:ldap /var/lib/ldap/website.com

Kiểm tra cấu hình

# slaptest -u
config file testing succeeded

Chuyển tập tin cấu hình sang cấu hình động trong thư mục /etc/openldap/slapd.d/

# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
config file testing succeeded
# chown -R ldap:ldap /var/lib/ldap/website.com
# chown -R ldap:ldap /etc/openldap/slapd.d

Chạy dịch vụ OpenLDAP

# service slapd start
# chkconfig --levels 235 slapd on

Kiểm tra thư mục vừa tạo

# ls -l /var/lib/ldap/website.com
-rw-r--r-- 1 ldap ldap     2048 Nov 18 03:39 alock
-rw------- 1 ldap ldap    24576 Nov 18 03:39 __db.001
-rw------- 1 ldap ldap   278528 Nov 18 03:39 __db.002
-rw------- 1 ldap ldap   270336 Nov 18 03:39 __db.003
-rw------- 1 ldap ldap    98304 Nov 18 03:39 __db.004
-rw------- 1 ldap ldap   352256 Nov 18 03:39 __db.005
-rw------- 1 ldap ldap    24576 Nov 18 03:39 __db.006
-rw-r----- 1 ldap ldap      921 Nov 17 00:19 DB_CONFIG
-rw------- 1 ldap ldap     8192 Nov 17 00:38 dn2id.bdb
-rw------- 1 ldap ldap    32768 Nov 17 00:38 id2entry.bdb
-rw------- 1 ldap ldap 10485760 Nov 17 01:54 log.0000000001

Cấu hình tập tin /etc/openldap/ldap.conf như sau

# vi /etc/openldap/ldap.conf
BASE dc=website, dc=com
URI ldap://IP_ldap_server

Tạo cơ sở dữ liệu cho domain website.com

Tạo tập tin createdc.ldif có nội dung như sau:

# vi createdc.ldif
dn: dc=website,dc=com
objectClass: dcObject
objectClass: organization
o: website.com
dc: website

dn: cn=admin,dc=website,dc=com
objectClass: organizationalRole
cn: admin

Chạy lệnh sau

# ldapadd –c –x –D “cn=admin,dc=website,dc=com” –W –f createdc.ldif
Enter LDAP Password: <Nhập mật khẩu quản trị>

Kết quả:

adding new entry “dc=website,dc=com”
adding new entry “cn=admin,dc=website,dc=com”

Kiểm tra cơ sở dữ liệu vừa tạo bằng lệnh sau:

# ldapsearch –x –b “dc=website,dc=com”

Kết quả hiện ra

# extended LDIF
#
# LDAPv3
# base <dc=website,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# website.com
dn: dc=webiste,dc=com
objectClass: dcObject
objectClass: organization
o: website.com
dc: website

# admin, website.com
dn: cn=admin,dc=website,dc=com
objectClass: organizationalRole
cn: admin

# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2

Cài đặt OpenLDAP client

Cài đặt các gói cần thiết trên OpenLDAP client

# yum install –y openldap openldap-clients nss_ldap

Cấu hình OpenLDAP client

# vi /etc/openldap/ldap.conf
BASE dc=website,dc=com
URI ldap://IP_Ldap_Server

Kiểm tra

# ldapsearch –x –b “dc=website,dc=com”

Kết quả

# extended LDIF
#
# LDAPv3
# base <dc=website,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
# 

# website.com
dn: dc=website,dc=com
objectClass: dcObject
objectClass: organization
o: website.com
dc: website

# admin, website.com
dn: cn=admin,dc=website,dc=com
objectClass: organizationalRole
cn: admin

 

Chúng ta hoàn thành việc cài đặt OpenLDAP trên CentOS 5 tại đây.

Cám ơn các bạn đã quan tâm theo dõi!

Related Post