Ngừng quản lý tài khoản trên từng máy chủ riêng lẻ
Việc quản lý thủ công các tài khoản người dùng cục bộ trên hơn 50 máy chủ Linux là một cực hình. Nó vừa tẻ nhạt vừa không an toàn. Nếu bạn đang vận hành môi trường Windows, Active Directory (AD) domain là nơi hoàn hảo để tập trung hóa các danh tính Linux. Sau hướng dẫn này, bạn sẽ có thể đăng nhập vào các máy Linux bằng thông tin xác thực AD, đồng thời áp dụng kiểm soát truy cập theo nhóm và quản lý quyền sudo trực tiếp từ domain controller.
Bắt đầu nhanh (5 phút)
Tôi khuyên bạn nên bắt đầu với một hệ thống sạch. Trước khi nhập bất kỳ lệnh nào, hãy đảm bảo máy chủ Linux có thể kết nối tới Domain Controller (DC) qua các cổng 389 (LDAP), 445 (SMB) và 88 (Kerberos). Cài đặt DNS của bạn phải trỏ về các máy chủ AD DNS. Đây là nguyên nhân gây lỗi phổ biến nhất.
1. Cài đặt các gói cần thiết
Đầu tiên, hãy cài đặt các công cụ thực hiện công việc chính. Chúng ta sử dụng realmd để tìm kiếm domain và sssd để xử lý xác thực và bộ nhớ đệm (caching).
sudo apt update
sudo apt install -y realmd sssd sssd-tools libnss-sss libpam-sss adcli samba-common-bin packagekit krb5-user
Trong quá trình cài đặt krb5-user, bạn sẽ thấy yêu cầu nhập Kerberos realm mặc định. Hãy nhập tên domain của bạn bằng CHỮ HOA (ví dụ: EXAMPLE.COM). Kerberos rất khắt khe về việc phân biệt chữ hoa chữ thường.
2. Tìm kiếm và Gia nhập Domain
Xác minh xem máy chủ của bạn có thực sự thấy domain hay không. Sử dụng lệnh realm discover:
realm discover example.com
Nếu kết quả hiển thị đúng, hãy gia nhập máy chủ vào domain. Bạn sẽ cần thông tin đăng nhập của một tài khoản AD có quyền gia nhập máy tính vào domain, chẳng hạn như Service Account hoặc Administrator.
sudo realm join --user=Administrator example.com
3. Xác minh kết nối
Kiểm tra kết nối. Thử lấy thông tin của một người dùng AD hiện có:
id [email protected]
Phía sau hậu trường: SSSD đối đầu Realmd
Tôi thích sử dụng realmd vì nó tự động hóa việc cấu hình Kerberos và SSSD vốn rất nhức đầu. Trước đây, quản trị viên phải chỉnh sửa thủ công các tệp krb5.conf và smb.conf. Chỉ một lỗi đánh máy nhỏ cũng có thể làm hỏng mọi thứ. realmd đóng vai trò như một điều phối viên thông minh cho các dịch vụ này.
Sức mạnh của SSSD
System Security Services Daemon (SSSD) giúp thiết lập này trở nên mạnh mẽ. Nó không chỉ kiểm tra mật khẩu; nó còn lưu trữ thông tin xác thực hệ thống vào bộ nhớ đệm (cache). Đây là “cứu cánh” nếu kết nối mạng tới DC bị gián đoạn. Người dùng vẫn có thể đăng nhập bằng dữ liệu đã lưu trong cache cho đến khi kết nối được khôi phục.
Trên các nút Ubuntu 22.04 môi trường production của tôi với 4GB RAM, SSSD xử lý hàng trăm yêu cầu xác thực đồng thời mà không hề hấn gì. Nó hiệu quả hơn đáng kể so với các phương pháp cũ như Winbind.
DNS: Nền móng quan trọng
Các vấn đề về DNS là nguyên nhân của 99% lỗi realm discover. AD phụ thuộc rất nhiều về các bản ghi SRV để định vị các dịch vụ LDAP và Kerberos. Máy chủ Linux của bạn phải sử dụng AD Domain Controller làm DNS chính. Kiểm tra các bản ghi của bạn bằng lệnh sau:
host -t SRV _kerberos._udp.example.com
Tinh chỉnh SSSD
Mặc dù realmd tạo ra một cấu hình hoạt động tốt, bạn có thể sẽ muốn tinh chỉnh tệp /etc/sssd/sssd.conf. Một chỉnh sửa phổ biến là loại bỏ hậu tố domain khỏi tên người dùng. Điều này cho phép bạn đăng nhập bằng username thay vì [email protected] dài dòng.
[sssd]
domains = example.com
config_file_version = 2
services = nss, pam
[domain/example.com]
ad_domain = example.com
krb5_realm = EXAMPLE.COM
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
Khởi động lại dịch vụ sau bất kỳ thay đổi nào: sudo systemctl restart sssd.
Kiểm soát nâng cao: Sudo và Nhóm truy cập
Sau khi gia nhập domain, bạn nên giới hạn những ai thực sự có quyền truy cập máy chủ. Chắc hẳn bạn không muốn mọi người dùng trong domain đều có thể đăng nhập vào máy chủ cơ sở dữ liệu của mình.
Giới hạn quyền đăng nhập
Tôi thường từ chối tất cả mọi người trước, sau đó mới cho phép có chọn lọc các nhóm AD cụ thể.
sudo realm deny --all
sudo realm permit -g "Quản trị viên Linux"
Lệnh này đảm bảo chỉ các thành viên của nhóm bảo mật “Quản trị viên Linux” mới có thể SSH vào máy.
Tự động hóa thư mục Home
Khi một người dùng AD đăng nhập lần đầu tiên, họ cần một nơi để lưu trữ các tệp tin. Hãy kích hoạt module pam_mkhomedir để tự động hóa quy trình này. Nó giúp bạn không phải tạo thư mục thủ công cho mỗi nhân viên mới.
sudo pam-auth-update --enable mkhomedir
Cấp quyền Sudo
Bạn có thể gán các nhóm AD với đặc quyền root. Hãy tạo một tệp riêng trong /etc/sudoers.d/ để giữ cấu hình gọn gàng.
sudo nano /etc/sudoers.d/ad-admins
Thêm dòng sau. Lưu ý rằng các khoảng trắng trong tên nhóm AD phải được thoát (escape) bằng dấu gạch chéo ngược:
%Quản trị\ viên\ Linux ALL=(ALL) ALL
Mẹo xử lý sự cố thực tế
Việc gia nhập AD vào Linux không phải lúc nào cũng suôn sẻ. Dưới đây là những gì tôi đã rút ra được từ thực tế:
- Đồng bộ thời gian là yếu tố then chốt: Kerberos sẽ thất bại nếu đồng hồ máy chủ của bạn lệch quá 300 giây (5 phút) so với DC. Luôn sử dụng chrony để đồng bộ với các domain controller.
- Xóa bộ nhớ đệm: Nếu bạn cập nhật nhóm của người dùng trong AD mà Linux không nhận ra, hãy xóa cache:
sudo sss_cache -E. - Kiểm tra nhật ký (Logs): Khi mọi thứ chệch hướng, journalctl -u sssd là người bạn đồng hành tốt nhất. Để gỡ lỗi chuyên sâu, hãy đặt
debug_level = 9trong tệpsssd.confcủa bạn. - Sự tương đồng của Hostname: Hostname cục bộ của bạn phải khớp với tên đối tượng máy tính (computer object) trong AD. Sử dụng
hostnamectl set-hostname myserver.example.comtrước khi gia nhập.
Hợp nhất các danh tính vào Active Directory là một thắng lợi lớn về bảo mật. Sẽ rất tuyệt vời khi chỉ cần vô hiệu hóa một tài khoản AD duy nhất và biết rằng quyền truy cập sẽ bị thu hồi ngay lập tức trên toàn bộ hệ thống Linux của bạn.

