Cách Join CentOS Stream 9 vào Windows Active Directory bằng SSSD và Realmd

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

Nỗi lo quản trị tài khoản khi hệ thống phình to

Hồi đầu, hệ thống của mình chỉ có khoảng 3-5 con server chạy Web và Database. Việc dùng lệnh useradd rồi đặt mật khẩu thủ công vẫn còn khá “dễ thở”. Tuy nhiên, khi số lượng server chạm mốc 30 node, cộng với team DevOps 10 người thường xuyên thay đổi nhân sự, mình bắt đầu đuối sức. Mỗi khi có nhân viên nghỉ việc, mình phải SSH vào từng máy để xóa account. Chỉ cần quên một máy thôi là đã tạo ra lỗ hổng bảo mật nghiêm trọng.

Tận dụng hạ tầng Windows Active Directory (AD) có sẵn là hướng đi hợp lý nhất. Tại sao phải quản lý hai hệ thống user riêng biệt trong khi ta có thể dùng tài khoản AD để login trực tiếp vào CentOS Stream 9? Cách này giúp đồng nhất Password Policy và thu hồi quyền truy cập chỉ với một click trên Domain Controller.

Nhiều bạn mới thường sa vào “vũng lầy” cấu hình Winbind hay Samba thủ công. File config lúc đó dài dằng dặc và cực kỳ dễ lỗi. Hiện nay, giải pháp gọn nhẹ và ổn định nhất trên CentOS 9 là RealmdSSSD. SSSD đóng vai trò như một thông dịch viên, giúp Linux hiểu và giao tiếp mượt mà với các giao thức xác thực của Microsoft.

Ưu điểm của SSSD và Realmd

Mình từng loay hoay tự dựng LDAP, nhưng nó cực kỳ phiền phức khi gặp các cấu trúc Forest phức tạp của Windows. Realmd giải quyết vấn đề này bằng cách tự động dò tìm domain và cài đặt các gói phụ thuộc. Trong khi đó, SSSD sở hữu khả năng caching rất tốt. Ngay cả khi đường truyền đến Domain Controller bị lag, bạn vẫn có thể đăng nhập bằng thông tin đã lưu (cached credentials) mà không bị văng ra ngoài.

Chuẩn bị hệ thống: Đừng bỏ qua bước này

Kinh nghiệm cho thấy 90% các ca join domain thất bại đều do DNSThời gian. Nếu hai yếu tố này lệch lạc, bạn sẽ chỉ nhận được những thông báo lỗi chung chung và rất khó debug.

1. Trỏ DNS về Domain Controller

Server CentOS phải phân giải được tên miền của AD. Bạn hãy kiểm tra file /etc/resolv.conf hoặc dùng nmcli:

# Cập nhật DNS bằng nmcli
nmcli connection modify eth0 ipv4.dns "192.168.1.10" 
nmcli connection up eth0

Hãy chắc chắn lệnh ping domain trả về kết quả đúng:

ping itfromzero.local

2. Đồng bộ thời gian tuyệt đối

Giao thức Kerberos sẽ từ chối xác thực nếu thời gian giữa Client và Server lệch quá 5 phút. Trên CentOS Stream 9, chrony là lựa chọn mặc định tốt nhất:

dnf install chrony -y
systemctl enable --now chronyd

3. Đặt Hostname dạng FQDN

Định danh máy Linux rõ ràng giúp AD dễ quản lý hơn.

hostnamectl set-hostname srv-web-01.itfromzero.local

Cài đặt các gói phần mềm

Chạy lệnh sau để cài đặt các công cụ kết nối cần thiết:

dnf install realmd sssd adcli samba-common-tools oddjob oddjob-mkhomedir sssd-ad -y
  • realmd: Điều phối việc gia nhập domain.
  • sssd: Xử lý xác thực và lưu trữ danh tính user.
  • oddjob-mkhomedir: Tự động tạo thư mục /home/user khi login lần đầu.

Tiến hành Join Domain

Trước tiên, hãy thử “thăm dò” xem Linux đã thấy AD chưa:

realm discover itfromzero.local

Nếu mọi thứ ổn, hãy thực hiện lệnh join. Bạn cần chuẩn bị sẵn tài khoản có quyền Admin của Domain:

realm join -U Administrator itfromzero.local

Nhập mật khẩu khi được yêu cầu. Nếu màn hình không báo lỗi, máy của bạn đã chính thức nằm trong danh sách “Computers” của Active Directory.

Tối ưu cấu hình SSSD

Mặc định, bạn phải gõ đầy đủ user@domain mới login được. Để rút ngắn lại chỉ cần gõ username, hãy sửa file /etc/sssd/sssd.conf:

vi /etc/sssd/sssd.conf

Chỉnh dòng use_fully_qualified_names = True thành False. Sau đó restart dịch vụ:

systemctl restart sssd

Kích hoạt tính năng tự tạo thư mục Home để user không bị lỗi môi trường làm việc:

authselect select sssd with-mkhomedir --force
systemctl enable --now oddjobd && systemctl restart oddjobd

Kiểm tra và Phân quyền Sudo

Dùng lệnh id để xác nhận Linux đã thấy user từ Windows:

id username_ad

Để cấp quyền root cho một nhóm quản trị (ví dụ nhóm IT_Admins trong AD), bạn tạo file cấu hình sudo:

vi /etc/sudoers.d/ad-admins

Thêm dòng sau (nhớ dùng dấu gạch chéo nếu tên group có khoảng trắng):

%[email protected] ALL=(ALL) ALL

Bài học thực tế: Khi SSSD “biểu tình”

Trong một dự án thực tế, mình từng gặp lỗi realm list báo thành công nhưng user không thể login. Sau khi check log tại /var/log/sssd/, mình phát hiện Firewall Windows chặn port 389 (LDAP) và 445 (SMB). Chỉ cần mở các port này cho dải IP server Linux là mọi thứ chạy mượt ngay.

Lưu ý: Nếu bạn clone máy ảo (Template), hãy chạy realm leave trước khi clone. Nếu không, các máy mới sẽ bị trùng SID, gây xung đột và văng khỏi domain liên tục.

Tổng kết

Tích hợp CentOS Stream 9 vào Active Directory là cách tối ưu để chuyên nghiệp hóa hạ tầng. Bạn không còn phải nhớ hàng tá mật khẩu hay loay hoay xóa user thủ công. Mọi thứ giờ đây tập trung tại một nơi duy nhất. Nếu bạn đang nâng cấp hệ thống từ CentOS 7 lên bản 9, hãy áp dụng ngay quy trình này để việc quản trị trở nên nhẹ nhàng hơn.

Share: