Vấn đề: Khi việc quản lý User cục bộ trở thành cơn ác mộng
Hồi mình mới vào nghề, công ty chỉ có khoảng 5 con server chạy CentOS 7. Mỗi lần có nhân viên mới, mình lại lạch cạch SSH vào từng máy để useradd rồi đặt mật khẩu. Mọi thứ vẫn ổn cho đến khi quy mô lên tới 30, rồi 50 server. Lúc này, việc thu hồi quyền truy cập khi có người nghỉ việc thực sự là một thảm họa. Bạn không thể nhớ hết mình đã tạo user ở đâu. Chỉ cần quên xóa tài khoản ở một máy thôi, đó đã là một lỗ hổng bảo mật chết người.
Thực tế cho thấy, quản lý thủ công tốn khoảng 10-15 phút cho mỗi nhân viên mới trên 50 server. Với LDAP, con số này chỉ còn 10 giây. Thay vì lưu user ở /etc/passwd cục bộ, server sẽ hỏi “ông tổng đài” Directory Server xem: “User này có được phép login không?”.
Quick Start: Cấu hình LDAP Client trong 5 phút
Nếu bạn đã có sẵn LDAP Server (như OpenLDAP hoặc Active Directory), hãy dùng SSSD (System Security Services Daemon). Đây là phương thức hiện đại, ổn định và bảo mật hơn hẳn các cách cũ. Dưới đây là các bước tóm tắt để con CentOS của bạn kết nối ngay lập tức.
# 1. Cài đặt các gói cần thiết
sudo yum install -y sssd sssd-ldap oddjob-mkhomedir openldap-clients
# 2. Cấu hình xác thực (CentOS 7 dùng authconfig, CentOS 8/9 dùng authselect)
# Ví dụ trên CentOS 7:
sudo authconfig --enablesssd --enablesssdauth --enablemkhomedir --update
# 3. Phân quyền và khởi động
sudo chmod 600 /etc/sssd/sssd.conf
sudo systemctl restart sssd
sudo systemctl enable sssd
Tại sao dân chuyên nghiệp luôn chọn SSSD?
Trước đây, giới quản trị hay dùng nslcd hoặc pam_ldap. Tuy nhiên, kinh nghiệm xương máu của mình là: Hãy dùng SSSD bằng mọi giá. Có ba lý do chính khiến SSSD trở thành tiêu chuẩn:
- Offline Caching: Nếu LDAP Server đột ngột tèo, người dùng vẫn login được nhờ dữ liệu đã cache.
- Giảm tải: Nó không làm phiền LDAP Server liên tục cho mỗi lệnh
ls -l. - Đa nhiệm: SSSD có thể kết nối cùng lúc tới cả OpenLDAP và Active Directory của Windows một cách mượt mà.
Bước 1: Cài đặt Package
Chúng ta cần sssd-ldap để giao tiếp và oddjob-mkhomedir để tự động tạo thư mục Home (như /home/username). Nếu thiếu gói này, người dùng LDAP khi login sẽ không có môi trường làm việc cá nhân.
sudo yum install sssd sssd-ldap oddjob-mkhomedir -y
Bước 2: Thiết lập file sssd.conf
Đây là nơi mọi thứ vận hành. File này thường không có sẵn, bạn cần tạo mới tại /etc/sssd/sssd.conf. Hãy thay đổi các thông số ldap_uri và ldap_search_base cho đúng với hạ tầng của bạn.
[sssd]
services = nss, pam
config_file_version = 2
domains = default
[domain/default]
id_provider = ldap
auth_provider = ldap
ldap_uri = ldap://ldap.itfromzero.com
ldap_search_base = dc=itfromzero,dc=com
ldap_id_use_start_tls = True
ldap_tls_cacertdir = /etc/openldap/cacerts
cache_credentials = True
ldap_tls_reqcert = allow
ldap_schema = rfc2307bis
Có một cái bẫy ở đây: SSSD cực kỳ khó tính về bảo mật. Nó sẽ từ chối khởi động nếu file config để quyền quá lỏng lẻo. Bạn bắt buộc phải chạy lệnh: chmod 600 /etc/sssd/sssd.conf.
Bước 3: Kích hoạt tự động tạo Home Directory
Đừng để user bị văng ra ngoài hoặc rơi vào thư mục gốc / khi vừa login. Lệnh dưới đây sẽ đảm bảo hệ thống tự tạo /home/user ngay lần đầu họ đăng nhập.
# Với CentOS 7:
sudo authconfig --enablemkhomedir --update
# Với CentOS 8/9 (AlmaLinux, Rocky Linux):
sudo authselect select sssd with-mkhomedir --force
sudo systemctl enable --now oddjobd.service
Nâng cao: Bảo mật đường truyền và giới hạn truy cập
Gửi mật khẩu qua cổng 389 thông thường là gửi bản rõ (clear text). Trong môi trường Production, mình luôn yêu cầu bật TLS (LDAPS – cổng 636) để mã hóa dữ liệu. Điều này ngăn chặn các cuộc tấn công sniffing trong mạng nội bộ.
Nếu bạn muốn chỉ team DevOps được SSH vào server production, hãy thêm bộ lọc vào sssd.conf:
access_provider = ldap
ldap_access_filter = (memberOf=cn=sysadmins,ou=groups,dc=itfromzero,dc=com)
Dòng cấu hình này cực kỳ quyền lực. Nó giúp bạn phân loại quyền hạn: Dev chỉ vào được staging, còn SysAdmin mới có quyền vào production dù dùng chung một tài khoản LDAP.
Mẹo xử lý lỗi (Troubleshooting) thực tế
Trong quá trình vận hành các hệ thống lớn, mình đúc kết được 3 chiêu xử lý nhanh:
1. Kiểm tra kết nối cơ bản
Trước khi đổ lỗi cho SSSD, hãy dùng ldapsearch để xem server có “thấy” được LDAP không. Nếu lệnh này lỗi, hãy kiểm tra Firewall hoặc Network trước khi sửa file config.
ldapsearch -x -H ldap://ldap.itfromzero.com -b "dc=itfromzero,dc=com"
2. Xóa cache khi thông tin bị “lag”
Đôi khi bạn vừa thêm user trên LDAP nhưng lệnh id username vẫn báo không thấy. Đó là do SSSD đang dùng cache cũ. Hãy dọn dẹp nó bằng lệnh:
sudo sss_cache -E
sudo systemctl restart sssd
3. Đọc log để bắt bệnh
Khi SSSD dở chứng, đừng đoán mò. Hãy soi log tại /var/log/sssd/. Bạn có thể tăng debug_level = 5 trong file config để thấy chi tiết từng bước bắt tay giữa Client và Server.
Kết luận
Tích hợp LDAP không chỉ là thủ thuật kỹ thuật, mà là tư duy quản trị chuyên nghiệp. Khi hệ thống lớn dần, việc quản lý tập trung là cách duy nhất để bạn ngủ ngon mỗi đêm mà không lo về những tài khoản “ma” còn sót lại. Dù bạn dùng CentOS 7 hay các bản mới như Rocky Linux, mô hình xác thực này vẫn luôn là tiêu chuẩn vàng trong ngành.

