Product SiteDocumentation Site

11.7. Direktori LDAP

OpenLDAP adalah sebuah implementasi protokol LDAP; dengan kata lain, itu adalah sebuah basis data tujuan khusus yang dirancang untuk menyimpan direktori. Dalam kasus penggunaan yang paling umum, menggunakan server LDAP memungkinkan pemusatan manajemen akun pengguna dan izin terkait. Selain itu, sebuah basis data LDAP mudah direplikasi, yang memungkinkan menyiapkan beberapa server LDAP yang tersinkronisasi. Ketika jaringan dan basis pengguna tumbuh cepat, beban kemudian dapat diseimbangkan ke beberapa server.
Data LDAP terstruktur dan hirarkis. Struktur didefinisikan oleh "skema" yang menggambarkan jenis objek yang dapat disimpan oleh basis data, dengan daftar semua atribut mereka yang mungkin. Sintaks yang digunakan untuk merujuk pada suatu obyek tertentu dalam basis data tersebut berdasarkan atas struktur ini, yang menjelaskan kompleksitasnya.

11.7.1. Memasang

Paket slapd berisi server OpenLDAP. Paket ldap-utils memuat alat bantu baris perintah untuk berinteraksi dengan server LDAP.
Memasang slapd biasanya hanya menanyakan kata sandi administrator dan basis data yang dihasilkan sangat boleh jadi tidak sesuai dengan kebutuhan Anda. Untungnya sekedar dpkg-reconfigure slapd memungkinkan Anda mengkonfigurasi ulang basis data LDAP dengan lebih banyak rincian:
  • Abaikan konfigurasi server OpenLDAP? Tidak, tentu saja, kami ingin mengkonfigurasi layanan ini.
  • Nama domain DNS: "falcot.com".
  • Nama organisasi: "Falcot Corp".
  • Kata sandi administratif harus diketikkan.
  • Backend basis data yang dipakai: "MDB".
  • Apakah Anda ingin basis data dihapus ketika slapd dibersihkan? Tidak. Tidak ada gunanya berrisiko kehilangan basis data jika terjadi kesalahan.
  • Memindahkan basis data lama? Ini hanya ditanyakan ketika konfigurasi diupayakan sementara basis data yang sudah ada. Hanya jawab "yes" jika Anda benar-benar ingin mulai lagi dari basis data yang bersih, misalnya jika Anda menjalankan dpkg-reconfigure slapd tepat setelah instalasi awal.
Basis data minimal sekarang dikonfigurasi, seperti yang ditunjukkan oleh kuiri berikut:
$ ldapsearch -x -b dc=falcot,dc=com
# extended LDIF
#
# LDAPv3
# base <dc=falcot,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# falcot.com
dn: dc=falcot,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Falcot Corp
dc: falcot

# admin, falcot.com
dn: cn=admin,dc=falcot,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
Kuiri mengembalikan dua objek: organisasi itu sendiri, dan pengguna administratif.

11.7.2. Mengisi Direktori

Karena basis data kosong yang tidak terlalu berguna, kita akan menyuntikkan ke dalamnya semua direktori yang ada; ini mencakup basis data pengguna, grup, layanan, dan host.
Paket migrationtools menyediakan seperangkat skrip yang didedikasikan untuk mengekstrak data dari direktori standar Unix (/etc/passwd, /etc/group, /etc/services, /etc/hosts, dan seterusnya), mengkonversi data ini dan menyuntikkan ke basis data LDAP.
Setelah paket terpasang, /etc/migrationtools/migrate_common.ph harus disunting; pilihan IGNORE_UID_BELOW dan IGNORE_GID_BELOW perlu diaktifkan (cukup dengan manghapus tanda komentar), dan DEFAULT_MAIL_DOMAIN/DEFAULT_BASE perlu diperbarui.
Operasi migrasi sebenarnya, ditangani oleh perintah migrate_all_online.sh, sebagai berikut:
# cd /usr/share/migrationtools
# PERL5LIB="${PERL5LIB}:/etc/migrationtools" LDAPADD="/usr/bin/ldapadd -c" ETC_ALIASES=/dev/null ./migrate_all_online.sh
migrate_all_online.sh menanyakan beberapa pertanyaan tentang basis data LDAP tempat tujuan data akan dimigrasi. Tabel 11.1 meringkas jawaban yang diberikan dalam use-case Falcot.

Tabel 11.1. Jawaban atas pertanyaan yang diajukan oleh skrip migrate_all_online.sh

PertanyaanJawaban
konteks penamaan X.500dc=falcot,dc=com
Nama host server LDAPlocalhost
Manajer DNcn=admin,dc=falcot,dc=com
Kredensial Bindkata sandi administratif
Buat DUAConfigProfiletidak
Anda mungkin memperhatikan bahwa kami memperluas variabel PERL5LIB. Ini karena laporan bug Debian #982666.
Seperti yang mungkin juga Anda perhatikan, kami sengaja mengabaikan migrasi /etc/aliases, karena skema standar seperti yang disediakan oleh Debian tidak menyertakan struktur yang digunakan skrip ini untuk menggambarkan alias surel. Jika kita ingin mengintegrasikan data ini ke dalam direktori, berkas /etc/ldap/schema/misc.schema harus ditambahkan ke skema standar.
Perhatikan juga penggunaan opsi -c untuk perintah ldapadd; opsi ini meminta pengolahan tidak berhenti saat ada kesalahan. Penggunaan opsi ini diperlukan karena mengubah /etc/services sering menghasilkan beberapa kesalahan yang aman untuk diabaikan.

11.7.3. Mengelola akun dengan LDAP

Sekarang basis data LDAP berisi beberapa informasi yang berguna, waktunya telah tiba untuk memakai data ini. Bagian ini berfokus pada bagaimana mengkonfigurasi sistem Linux sehingga berbagai sistem direktori memanfaatkan basis data LDAP.

11.7.3.1. Mengkonfigurasi NSS

The NSS system (Name Service Switch, see sidebar LEBIH JAUH NSS dan basisdata sistem) is a modular system designed to define or fetch information for system directories. Using LDAP as a source of data for NSS requires installing the libnss-ldapd package.
The /etc/nsswitch.conf file then needs to be modified, so as to configure NSS to use the freshly-installed ldap module.

Contoh 11.23. Berkas /etc/nsswitch.conf

# /etc/nsswitch.conf
#
# An example file that could be copied over to /etc/nsswitch.conf; it
# uses LDAP conjunction with files.
#
# "hosts:" and "services:" in this file are used only if the
# /etc/netconfig file has a "-" for nametoaddr_libs of "inet" transports.

# the following lines obviate the "+" entry in /etc/passwd and /etc/group.
passwd:         files ldap
shadow:         files ldap
group:          files ldap

# consult DNS first, we will need it to resolve the LDAP host. (If we
# can't resolve it, we're in infinite recursion, because libldap calls
# gethostbyname(). Careful!)
hosts:          dns ldap

# LDAP is nominally authoritative for the following maps.
services:   ldap [NOTFOUND=return] files
networks:   ldap [NOTFOUND=return] files
protocols:  ldap [NOTFOUND=return] files
rpc:        ldap [NOTFOUND=return] files
ethers:     ldap [NOTFOUND=return] files

# no support for netmasks, bootparams, publickey yet.
netmasks:   files
bootparams: files
publickey:  files
automount:  files

# I'm pretty sure nsswitch.conf is consulted directly by sendmail,
# here, so we can't do much here. Instead, use bbense's LDAP
# rules ofr sendmail.
aliases:    files
sendmailvars:   files

# Note: there is no support for netgroups on Solaris (yet)
netgroup:   ldap [NOTFOUND=return] files
Modul ldap biasanya dimasukkan sebelum yang lain, dan itu karena itu dikuiri pertama. Pengecualian adalah layanan hosts karena menghubungi server LDAP membutuhkan terlebih dahulu konsultasi ke DNS (untuk me-resolve ldap.falcot.com). Tanpa pengecualian ini, suatu kuiri nama host akan mencoba untuk bertanya ke server LDAP; ini akan memicu resolusi nama untuk server LDAP, dan seterusnya dalam suatu pengulangan tanpa ujung.
Jika server LDAP mesti dianggap otoritatif (dan berkas lokal yang digunakan oleh modul files diabaikan), layanan dapat dikonfigurasi dengan sintaks berikut:
service: ldap [NOTFOUND=return] files.
Jika entri yang diminta tidak ada di basis data LDAP, kuiri akan mengembalikan jawaban "tidak ada" bahkan jika sumber daya ada di salah satu berkas lokal; berkas-berkas lokal ini hanya dapat digunakan ketika layanan LDAP mati.

11.7.3.2. Mengkonfigurasi PAM

Bagian ini menjelaskan tentang konfigurasi PAM (lihat bilah sisi DI BALIK LAYAR /etc/environment dan /etc/default/locale) yang akan memungkinkan aplikasi untuk melakukan otentikasi yang diperlukan terhadap basis data LDAP.
The LDAP module for PAM is provided by the libpam-ldapd package. Installing this package asks a few questions very similar to those in libnss-ldapd; some configuration parameters (such as the URI for the LDAP server) are even actually shared with the libnss-ldapd package.
Installing libpam-ldapd automatically adapts the default PAM configuration defined in the /etc/pam.d/common-auth, /etc/pam.d/common-password and /etc/pam.d/common-account files. This mechanism uses the dedicated pam-auth-update tool (provided by the libpam-runtime package). This tool can also be run by the administrator should they wish to enable or disable PAM modules.

11.7.3.3. Mengamankan Pertukaran Data LDAP

Secara default, protokol LDAP transit pada jaringan sebagai teks polos; ini termasuk kata sandi (yang dienkripsi). Karena kata sandi terenkripsi dapat diekstrak dari jaringan, mereka dapat rentan terhadap serangan bertipe dictionary-attack. Ini dapat dihindari dengan menggunakan lapisan tambahan enkripsi; memfungsikan lapisan ini adalah topik bagian ini.
11.7.3.3.1. Menata Server
Langkah pertama adalah untuk membuat pasangan kunci (terdiri dari kunci publik dan kunci privat) untuk server LDAP. Para administrator Falcot kembali memakai easy-rsa untuk menghasilkan ini (lihat Bagian 10.2.2, “Infrastruktur Kunci Publik: easy-rsa). Menjalankan ./easyrsa build-server-full ldap.falcot.com nopass akan mengajukan pertanyaan tentang "common name". Jawaban atas pertanyaan itu harus berupa fully-qualified hostname untuk server LDAP; dalam kasus kami, ldap.falcot.com.
Perintah ini akan membuat sertifikat dalam berkas pki/issued/ldap.falcot.com.crt; kunci privat disimpan dalam pki/private/ldap.falcot.com.key.
Sekarang kunci ini harus dipasang di lokasi standar mereka, dan kita harus memastikan bahwa berkasi pribadi tersebut dapat dibaca oleh server LDAP yang berjalan di bawah identitas pengguna openldap:
# adduser openldap ssl-cert
Adding user `openldap' to group `ssl-cert' ...
Adding user openldap to group ssl-cert
Done.
# mv pki/private/ldap.falcot.com.key /etc/ssl/private/ldap.falcot.com.key
# chown root.ssl-cert /etc/ssl/private/ldap.falcot.com.key
# chmod 0640 /etc/ssl/private/ldap.falcot.com.key
# mv pki/issued/ldap.falcot.com.crt /etc/ssl/certs/ldap.falcot.com.pem
# chown root.root /etc/ssl/certs/ldap.falcot.com.pem
# chmod 0644 /etc/ssl/certs/ldap.falcot.com.pem
Daemon slapd juga perlu diberitahu untuk menggunakan kunci-kunci ini untuk enkripsi. Konfigurasi server LDAP dikelola secara dinamis: konfigurasi dapat diperbarui dengan operasi LDAP normal pada hirarki objek cn=config, dan server memperbarui /etc/ldap/slapd.d secara real time untuk membuat konfigurasi persisten. ldapmodify adalah alat yang tepat untuk memperbarui konfigurasi:

Contoh 11.24. Mengkonfigurasi slapd untuk enkripsi

# cat >ssl.ldif <<END
dn: cn=config
changetype: modify
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap.falcot.com.key
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap.falcot.com.pem
END
# ldapmodify -Y EXTERNAL -H ldapi:/// -f ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
# systemctl restart slapd.service
# ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config -s base | grep TLS
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
olcTLSCertificateFile: /etc/ssl/certs/ldap.falcot.com.pem
olcTLSCertificateKeyFile: /etc/ssl/certs/ldap.falcot.com.key
Langkah terakhir untuk memfungsikan enkripsi adalah mengubah variabel SLAPD_SERVICES di berkas /etc/default/slapd. Kami akan bermain aman dan menonaktifkan LDAP tidak aman sama sekali.

Contoh 11.25. Berkas /etc/default/slapd

# Default location of the slapd.conf file or slapd.d cn=config directory. If
# empty, use the compiled-in default (/etc/ldap/slapd.d with a fallback to
# /etc/ldap/slapd.conf).
SLAPD_CONF=

# System account to run the slapd server under. If empty the server
# will run as root.
SLAPD_USER="openldap"

# System group to run the slapd server under. If empty the server will
# run in the primary group of its user.
SLAPD_GROUP="openldap"

# Path to the pid file of the slapd server. If not set the init.d script
# will try to figure it out from $SLAPD_CONF (/etc/ldap/slapd.d by
# default)
SLAPD_PIDFILE=

# slapd normally serves ldap only on all TCP-ports 389. slapd can also
# service requests on TCP-port 636 (ldaps) and requests via unix
# sockets.
# Example usage:
# SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///"
SLAPD_SERVICES="ldaps:/// ldapi:///"

# If SLAPD_NO_START is set, the init script will not start or restart
# slapd (but stop will still work).  Uncomment this if you are
# starting slapd via some other means or if you don't want slapd normally
# started at boot.
#SLAPD_NO_START=1

# If SLAPD_SENTINEL_FILE is set to path to a file and that file exists,
# the init script will not start or restart slapd (but stop will still
# work).  Use this for temporarily disabling startup of slapd (when doing
# maintenance, for example, or through a configuration management system)
# when you don't want to edit a configuration file.
SLAPD_SENTINEL_FILE=/etc/ldap/noslapd

# For Kerberos authentication (via SASL), slapd by default uses the system
# keytab file (/etc/krb5.keytab).  To use a different keytab file,
# uncomment this line and change the path.
#export KRB5_KTNAME=/etc/krb5.keytab

# Additional options to pass to slapd
SLAPD_OPTIONS=""
11.7.3.3.2. Mengkonfigurasi Klien
On the client side, the configuration for the libpam-ldapd and libnss-ldapd modules needs to be modified to use an ldaps:// URI.
Klien LDAP juga harus bisa mengotentikasi server. Di infrastuktur kunci publik X.509, sertifikat publik ditandatangani dengan kunci dari certificate authority (CA). Dengan easy-rsa, para administrator Falcot telah menciptakan CA mereka sendiri dan mereka sekarang perlu mengonfigurasi sistem untuk mempercayai tanda tangan Falcot di CA. Ini dapat dilakukan dengan menempatkan sertifikat CA di /usr/local/share/ca-certificates dan menjalankan update-ca-certificates.
# cp pki/ca.crt /usr/local/share/ca-certificates/falcot.crt
# update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

Adding debian:falcot.pem
done.
done.
Terakhir sama pentingnya, URI LDAP default dan base DN default yang digunakan oleh berbagai alat baris perintah dapat dimodifikasi dalam /etc/ldap/ldap.conf. Ini akan banyak menghemat pengetikan.

Contoh 11.26. Berkas /etc/ldap/ldap.conf

#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

#BASE   dc=example,dc=com
#URI    ldap://ldap.example.com ldap://ldap-provider.example.com:666

#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never

# TLS certificates (needed for GnuTLS)
TLS_CACERT      /etc/ssl/certs/ca-certificates.crt