Cơn ác mộng khi hệ thống bắt đầu “phình” to
Hãy tưởng tượng bạn đang quản lý 5 con server, việc SSH vào từng máy gõ adduser vẫn còn chịu đựng được. Nhưng khi con số đó vọt lên 50 hoặc 100, mọi chuyện sẽ khác. Mỗi lần có nhân viên mới hoặc một ai đó nghỉ việc, bạn sẽ mất cả buổi sáng chỉ để copy-paste lệnh xóa tài khoản.
Đỉnh điểm là những đêm 2 giờ sáng, bạn ngồi dán mắt vào màn hình, tay run run gõ lệnh trên con production cuối cùng mà chỉ sợ xóa nhầm user của sếp. Đó là lúc bạn cần Centralized Identity Management (Quản lý định danh tập trung).
OpenLDAP xuất hiện như một vị cứu tinh. Thay vì lưu user cục bộ tại /etc/passwd, mọi thứ được đẩy về một kho lưu trữ trung tâm. Khi một server cần xác thực, nó chỉ việc hỏi OpenLDAP: “Ông này có quyền vào không? Password đúng chưa?”. Mọi thứ diễn ra trong tích tắc, đồng bộ và cực kỳ chuyên nghiệp.
LDAP thực chất là gì?
LDAP (Lightweight Directory Access Protocol) không phải là database quan hệ kiểu MySQL hay PostgreSQL. Bạn hãy coi nó là một cuốn danh bạ điện thoại khổng lồ. Nó được tối ưu hóa đặc biệt cho việc đọc và tìm kiếm hơn là ghi dữ liệu liên tục.
Trước khi bắt đầu, hãy nhớ nhanh 3 khái niệm cốt lõi:
- DIT (Directory Information Tree): Cấu trúc dữ liệu hình cây.
- DN (Distinguished Name): ID duy nhất của một đối tượng, ví dụ:
cn=admin,dc=itfromzero,dc=com. - ObjectClasses: Bộ quy tắc định nghĩa user đó có những thuộc tính gì (như email, shell, hay mật khẩu).
Bước 1: Cài đặt OpenLDAP và công cụ quản trị
LDAP rất nhạy cảm với tên miền. Việc đầu tiên là phải đặt hostname chuẩn cho server của bạn.
sudo hostnamectl set-hostname ldap.itfromzero.com
Tiếp theo, hãy cài đặt slapd (LDAP server daemon) và ldap-utils. Gói utils này cực kỳ quan trọng để bạn thực hiện các lệnh query sau này.
sudo apt update
sudo apt install slapd ldap-utils -y
Trong lúc cài, hệ thống sẽ yêu cầu nhập mật khẩu admin cho LDAP. Đừng dùng mật khẩu kiểu 123456. Hãy tạo một chuỗi phức tạp và cất vào Vault, vì đây là chìa khóa vạn năng vào toàn bộ hệ thống của bạn.
Bước 2: Cấu hình lại slapd theo ý muốn
Mặc định Ubuntu sẽ tự cấu hình dựa trên hostname, nhưng thường thì nó không chuẩn theo ý đồ hệ thống. Tôi luôn ưu tiên chạy lại lệnh dưới đây để kiểm soát mọi thông số:
sudo dpkg-reconfigure slapd
Hãy chú ý các lựa chọn quan trọng sau:
- Omit OpenLDAP server configuration? Chọn No.
- DNS domain name: Nhập domain của bạn (ví dụ:
itfromzero.com). - Organization name: Tên công ty hoặc dự án.
- Database backend: Chọn MDB. Đây là backend hiện đại, nhanh và tin cậy hơn các dòng cũ như BDB hay HDB.
- Allow LDAPv2 protocol? Chọn No để đảm bảo tính bảo mật.
Bước 3: Xây dựng cấu trúc cây (Organizational Units)
Đừng bao giờ sửa file cấu hình trực tiếp trong /etc/ldap. Cách làm chuẩn của dân chuyên nghiệp là dùng file .ldif và nạp vào qua lệnh ldapadd.
Thông thường, chúng ta sẽ chia thành 2 nhánh chính: People (chứa user) và Groups (chứa nhóm). Hãy tạo file base.ldif:
dn: ou=People,dc=itfromzero,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Groups,dc=itfromzero,dc=com
objectClass: organizationalUnit
ou: Groups
Tiến hành đẩy cấu trúc này vào database:
ldapadd -x -D cn=admin,dc=itfromzero,dc=com -W -f base.ldif
Nếu màn hình hiện adding new entry... là bạn đã đi đúng hướng.
Bước 4: Tạo User đầu tiên để Test
Để một user có thể SSH vào server Linux, họ cần thuộc tính posixAccount. Tôi sẽ tạo một group tên devops và một user tên tungdt trong file users.ldif.
# Tạo Group
dn: cn=devops,ou=Groups,dc=itfromzero,dc=com
objectClass: posixGroup
cn: devops
gidNumber: 5000
# Tạo User
dn: uid=tungdt,ou=People,dc=itfromzero,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: tungdt
sn: Doan
givenName: Tung
cn: Tung Doan
uidNumber: 10001
gidNumber: 5000
userPassword: {SSHA}password_da_hash
loginShell: /bin/bash
homeDirectory: /home/tungdt
Mẹo nhỏ: Hãy dùng lệnh slappasswd để tạo chuỗi password đã mã hóa thay vì để text thô. Ngoài ra, uidNumber nên bắt đầu từ 10000 để tránh đụng hàng với các user hệ thống có sẵn trên máy local.
Nạp file user vào hệ thống:
ldapadd -x -D cn=admin,dc=itfromzero,dc=com -W -f users.ldif
Bước 5: Kiểm tra thành quả
Để biết chắc chắn user đã “nằm gọn” trong LDAP, hãy dùng lệnh search. Đây là cách nhanh nhất để debug mỗi khi hệ thống gặp trục trặc.
ldapsearch -x -b "dc=itfromzero,dc=com" "(uid=tungdt)"
Kinh nghiệm xương máu khi triển khai
Trong thực tế, 90% lỗi LDAP đến từ những chi tiết rất nhỏ:
- Dấu cách chết người: Trong file LDIF, sau dấu hai chấm (:) bắt buộc phải có một khoảng trắng. Thừa một dấu cách ở cuối dòng cũng có thể khiến lệnh bị fail.
- Lỗi Schema: Nếu bạn cố thêm thuộc tính
mobilevào một objectClass không hỗ trợ, LDAP sẽ báo lỗi ngay. Hãy kiểm tra kỹ schema trước khi import. - Firewall: Nếu client không kết nối được, hãy check port 389 (LDAP) và 636 (LDAPS).
sudo ufw allow 389/tcp
Lời kết
Cài đặt xong OpenLDAP mới chỉ là hoàn thành phần móng. Để hệ thống thực sự chạy, bạn cần cấu hình các client (Ubuntu, CentOS) để chúng biết tìm đến LDAP khi có người login. Cảm giác nhìn hàng chục server đồng bộ user chỉ sau một lệnh ldapadd thực sự rất xứng đáng với công sức bỏ ra. Ở bài tới, tôi sẽ hướng dẫn các bạn cài thêm giao diện Web để quản lý user trực quan hơn, thay vì cứ phải gõ LDIF mỏi tay.

