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à Realmd và SSSD. 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 DNS và Thờ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/userkhi 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.

