Việc join VPS Linux vào Active Directory (AD) là một nhu cầu quản trị hệ thống thiết yếu. Nó giúp thống nhất hạ tầng, cho phép quản lý định danh, phân quyền và bảo mật tập trung thay vì phải tạo tài khoản local trên từng máy chủ riêng lẻ.
Khi tích hợp thành công, người dùng của bạn có thể sử dụng chính tài khoản Windows (AD) để đăng nhập SSH vào VPS Ubuntu hoặc CentOS.
Bài viết này là một hướng dẫn kỹ thuật chuyên sâu. Chúng ta sẽ cấu hình thủ công từng bước bằng bộ công cụ Samba và Winbind. Phương pháp này cung cấp sự kiểm soát chi tiết và giúp bạn hiểu rõ từng thành phần của quá trình tích hợp.
Tóm tắt nhanh: Để join VPS Linux vào AD, bạn cần cấu hình DNS và NTP trỏ về Domain Controller (DC), sau đó cài đặt các gói Samba/Kerberos. Tiếp theo, chỉnh sửa file
smb.conf(dùng autorid) vàkrb5.conf, rồi chạy lệnhnet ads join. Cuối cùng, cấu hìnhnsswitch.conf(NSS) vàpam-auth-update(PAM) để cho phép đăng nhập SSH bằng tài khoản AD.
Ghi chú: Bạn đang chọn phương pháp “Cổ điển” (Winbind)
Bài viết này hướng dẫn chi tiết cách cấu hình thủ công bằng Samba/Winbind. Đây là cách làm “cổ điển”, mạnh mẽ, cho phép bạn kiểm soát tối đa, nhưng cũng phức tạp nhất.
Trên các hệ thống Linux hiện đại, có một phương pháp “hiện đại” và tự động hóa cao hơn là dùng
realmdvà SSSD.
- Nếu bạn ưu tiên sự đơn giản & tự động hóa: Hãy xem hướng dẫn 7 bước join VPS Linux vào AD bằng realmd (Ubuntu/CentOS).
- Nếu bạn chưa biết nên chọn SSSD hay Winbind: Hãy đọc bài phân tích chuyên sâu SSSD vs Winbind: Giải pháp nào là tốt nhất? để đưa ra quyết định.
Nếu bạn cần kiểm soát chi tiết hoặc có nhu cầu đặc thù (như tích hợp Samba file server, Cấu hình Squid Kerberos Active Directory), thì phương pháp Winbind thủ công trong bài viết này là lựa chọn phù hợp.
Lợi ích khi join VPS Linux vào Active Directory
Việc tích hợp này mang lại giá trị thực tiễn lớn, giúp hệ thống của bạn chuyên nghiệp và an toàn hơn.
Quản lý định danh tập trung (Centralized ID)
Đây là lợi ích lớn nhất. Bạn không cần dùng useradd trên 10 VPS khác nhau. Khi một nhân viên mới vào công ty, bạn chỉ cần tạo 1 tài khoản AD. Khi họ nghỉ việc, bạn vô hiệu hóa tài khoản AD đó, và họ sẽ mất quyền truy cập trên mọi VPS ngay lập tức.
Phân quyền và bảo mật nhất quán
Các chính sách mật khẩu phức tạp, yêu cầu đổi mật khẩu định kỳ của AD sẽ được áp dụng cho cả các phiên SSH vào Linux.
Quan trọng hơn, bạn có thể cấp quyền sudo hoặc giới hạn truy cập SSH dựa trên Nhóm (Group) trong Active Directory. Ví dụ: Chỉ cho phép nhóm “Linux Admins” được SSH, và chỉ nhóm “Domain Admins” mới có quyền sudo.
Tuân thủ (Compliance) và kiểm soát (Audit)
Việc quản lý tập trung giúp việc kiểm toán (audit) dễ dàng hơn. Bạn có một nơi duy nhất (Active Directory) để xem ai có quyền truy cập vào hệ thống nào, thay vì phải kiểm tra file /etc/passwd và /etc/sudoers trên từng máy chủ.
Trải nghiệm người dùng (Single Sign-On)
Người dùng chỉ cần nhớ một bộ thông tin đăng nhập duy nhất cho cả máy tính Windows và VPS Linux, giảm thiểu sự phiền toái và các yêu cầu hỗ trợ (support ticket) liên quan đến quên mật khẩu.
Yêu cầu chuẩn bị (Checklist bắt buộc)
Cấu hình tích hợp AD nổi tiếng là “khó tính”. 99% các lỗi xảy ra do bỏ qua các bước chuẩn bị cơ bản này. Đừng bỏ qua bất kỳ mục nào.
- Một VPS Linux: Đã cài đặt Ubuntu (20.04, 22.04) hoặc CentOS/RHEL/AlmaLinux (8, 9).
- Quyền Root/Sudo: Bạn cần quyền quản trị cao nhất trên VPS Linux.
- Thông tin Active Directory:
- Tên Domain (FQDN):
YOURDOMAIN.COM(ví dụ:goolge.vn). - Tên NetBIOS:
YOURDOMAIN(thường là phần đầu, ví dụ:GOOGLE). - IP của Domain Controller (DC): Ví dụ:
192.168.1.10. - Tài khoản AD có quyền Join: Thường là
Administratorhoặc một tài khoản được ủy quyền.
- Tên Domain (FQDN):
Yêu cầu quan trọng nhất: DNS và NTP
Đây là hai yếu tố quyết định thành bại của toàn bộ quá trình.
- Cấu hình DNS (Cực kỳ quan trọng): VPS Linux bắt buộc phải sử dụng Domain Controller làm máy chủ DNS chính. Nếu không, nó sẽ không thể tìm thấy các “dịch vụ” (như Kerberos, LDAP) của AD.
- Đồng bộ thời gian (NTP) (Cực kỳ quan trọng): Kerberos (giao thức xác thực của AD) rất nhạy cảm với thời gian. Nếu thời gian trên VPS Linux và DC lệch nhau quá 5 phút (mặc định), mọi yêu cầu xác thực sẽ thất bại.
Bước 1: Cấu hình DNS và đồng bộ thời gian (NTP)
Chúng ta sẽ thực hiện 2 yêu cầu quan trọng nhất ở trên.
Cấu hình DNS Resolver
Bạn cần chỉnh sửa file cấu hình network để trỏ nameserver đến IP của Domain Controller.
Đối với Ubuntu (sử dụng Netplan): Mở file cấu hình trong /etc/netplan/ (ví dụ: 01-netcfg.yaml).
network:
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.50/24] # IP của VPS
gateway4: 192.168.1.1
nameservers:
addresses: [192.168.1.10] # IP CỦA DOMAIN CONTROLLER
version: 2
Áp dụng cấu hình: sudo netplan apply.
Đối với CentOS/RHEL (sử dụng NetworkManager): Sửa file /etc/sysconfig/network-scripts/ifcfg-eth0.
# ...
BOOTPROTO="static"
IPADDR="192.168.1.50"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
DNS1="192.168.1.10" # IP CỦA DOMAIN CONTROLLER
Khởi động lại network: sudo systemctl restart NetworkManager.
Kiểm tra DNS: Chạy lệnh ping yourdomain.com. Nó phải phân giải và trả về IP của DC.
Cấu hình đồng bộ thời gian (NTP)
Chúng ta sẽ cài đặt chrony và trỏ nó đến DC (hoặc một nguồn NTP nội bộ tin cậy).
Cài đặt (Ubuntu): sudo apt install chrony
Cài đặt (CentOS): sudo yum install chrony
Cấu hình: Mở file /etc/chrony/chrony.conf (hoặc /etc/chrony.conf) và thêm IP của DC vào làm máy chủ thời gian.
# server 0.pool.ntp.org iburst
# server 1.pool.ntp.org iburst
# ...
server 192.168.1.10 iburst
Khởi động và kiểm tra dịch vụ:
sudo systemctl restart chrony
sudo systemctl enable chrony
chronyc sources
Bạn sẽ thấy IP của DC xuất hiện trong danh sách.
Bước 2: Cài đặt các gói cần thiết (Samba & Kerberos)
Bây giờ, chúng ta cài đặt các phần mềm chính.
Trên Ubuntu/Debian:
sudo apt update
sudo apt install samba winbind krb5-utils libnss-winbind libpam-winbind
Trên CentOS/RHEL/AlmaLinux:
sudo yum install samba samba-client samba-common krb5-workstation samba-winbind samba-winbind-clients
Trong quá trình cài krb5-utils (Ubuntu), bạn có thể được hỏi về “default realm”. Hãy nhập tên domain của bạn VIẾT HOA (ví dụ: YOURDOMAIN.COM).
Bước bổ sung (Quan trọng) cho CentOS/RHEL: Các hệ thống Linux hiện đại (RHEL 8+, CentOS 8+) có chính sách bảo mật mã hóa cao. Chúng có thể chặn các thuật toán cũ mà AD yêu cầu.
Hãy chạy lệnh sau để cho phép các thuật toán tương thích với AD:
sudo update-crypto-policies --set DEFAULT:AD-SUPPORT
Bước 3: Cấu hình Kerberos (/etc/krb5.conf)
Đây là file cấu hình cho “ngôn ngữ” xác thực của AD. Nó cho Linux biết cách tìm Domain Controller.
Nhờ chúng ta đã cấu hình DNS chính xác ở Bước 1, file krb5.conf có thể được đơn giản hóa. Mở file và đảm bảo nó có nội dung sau:
[libdefaults]
default_realm = YOURDOMAIN.COM
dns_lookup_realm = false
dns_lookup_kdc = true
[plugins]
localauth = {
module = winbind:/usr/lib64/samba/krb5/winbind_krb5_localauth.so
enable_only = winbind
}
Giải thích nhanh:
[libdefaults]:default_realm: Tên miền AD của bạn (bắt buộc VIẾT HOA).dns_lookup_kdc = true: Yêu cầu Kerberos tự động dùng DNS để tìm máy chủ (KDC).
[plugins]:- Đây là mục rất quan trọng trên các hệ thống MIT Kerberos (như CentOS/RHEL). Nó kết nối Kerberos với Winbind để xác thực PAM (đăng nhập), đảm bảo SSO hoạt động chính xác.
Bước 4: Cấu hình Samba (/etc/samba/smb.conf)
Đây là file cấu hình quan trọng nhất. Nó cho Winbind biết cách ánh xạ (map) người dùng và nhóm từ AD sang UID/GID của Linux.
Chúng ta sẽ sử dụng backend autorid hiện đại. autorid tự động xử lý việc ánh xạ cho miền của bạn và bất kỳ miền tin cậy (trusted domain) nào khác, đơn giản hóa cấu hình đáng kể.
Mở /etc/samba/smb.conf và thay thế phần [global] bằng nội dung sau:
[global]
# --- Cấu hình Domain ---
workgroup = YOURDOMAIN # Tên NetBIOS (Viết hoa)
realm = YOURDOMAIN.COM # Tên Realm Kerberos (Viết hoa)
security = ads # Chế độ bảo mật: Active Directory
# --- Cấu hình Winbind (Ánh xạ User) ---
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
winbind offline logon = no
# --- Cấu hình IDMAP (Sử dụng autorid) ---
idmap config * : backend = autorid
idmap config * : range = 10000-999999
idmap config * : Caching = true
# --- Cấu hình Home Directory & Shell ---
template shell = /bin/bash
template homedir = /home/%U
Giải thích nhanh:
security = ads: Chỉ định Samba hoạt động như một thành viên của AD.winbind use default domain = yes: Cho phép bạn đăng nhập bằngusernamethay vìYOURDOMAIN\username.idmap config * : backend = autorid: Chỉ địnhautoridlàm trình xử lý mặc định cho tất cả các miền.idmap config * : range = 10000-999999: Cung cấp một dải UID/GID đủ lớn đểautoridtự động phân bổ cho tất cả người dùng và nhóm.
Bước 5: Join Domain và khởi động dịch vụ
Đây là thời điểm quan trọng. Chúng ta sẽ join VPS vào AD.
Kiểm tra Kerberos (Nên làm)
Hãy thử lấy “vé” Kerberos bằng tài khoản Administrator để xem cấu hình krb5.conf và DNS đã đúng chưa.
kinit [email protected]
Nhập mật khẩu của tài khoản Administrator. Nếu không có lỗi, bạn đã thành công. Dùng klist để xem vé.
Join Domain
Chạy lệnh net ads join và sử dụng tài khoản có quyền join.
sudo net ads join -U Administrator
Nhập mật khẩu của Administrator. Nếu thành công, bạn sẽ thấy thông báo: Joined 'VPS-HOSTNAME' to realm 'YOURDOMAIN.COM'
Khởi động và kích hoạt dịch vụ
Bây giờ, hãy khởi động các dịch vụ Samba và Winbind.
# Đối với Ubuntu/CentOS (systemd)
sudo systemctl restart smbd nmbd winbind
sudo systemctl enable smbd nmbd winbind
Bước 6: Kiểm tra (Verify) – VPS đã “thấy” AD chưa?
Làm thế nào để biết việc join đã thành công? Đừng vội SSH. Hãy dùng các lệnh kiểm tra của Winbind. Đây là bước kiểm tra xem Samba/Winbind đã kết nối được với AD chưa.
1. Kiểm tra Join Status:
sudo net ads testjoin
Bạn phải thấy kết quả: Join is OK.
2. Kiểm tra người dùng AD (Quan trọng):
wbinfo -u
Lệnh này phải liệt kê tất cả người dùng trong AD của bạn (ví dụ: YOURDOMAIN\Administrator, YOURDOMAIN\user1).
3. Kiểm tra nhóm AD (Quan trọng):
wbinfo -g
Lệnh này phải liệt kê tất cả các nhóm trong AD (ví dụ: YOURDOMAIN\Domain Admins).
Nếu wbinfo hoạt động, tức là Winbind đã nói chuyện thành công với AD. Nhưng hệ điều hành Linux vẫn chưa “thấy” các user này. Đó là nhiệm vụ của bước 7.
Bước 7: Cấu hình NSS (Linux “nhìn thấy” User AD)
NSS (Name Service Switch) là file /etc/nsswitch.conf. Nó giống như một cuốn “danh bạ” chỉ cho Linux biết nơi tìm thông tin người dùng (từ file local hay từ winbind?).
Mở file /etc/nsswitch.conf và sửa 2 dòng sau:
# Dòng cũ (có thể khác một chút):
passwd: files systemd
group: files systemd
# Dòng mới (thêm 'winbind'):
passwd: files systemd winbind
group: files systemd winbind
Thêm winbind vào cuối đảm bảo hệ thống tra cứu file local (/etc/passwd) trước, rồi mới đến Winbind.
Kiểm tra lại bằng getent: Sau khi lưu file, hãy kiểm tra ngay. getent là lệnh “chuẩn” của Linux để tra cứu “danh bạ”.
# Nếu 'winbind use default domain = yes' đã được bật:
getent passwd administrator
Nếu thành công, bạn sẽ thấy một dòng output kiểu Linux, với UID/GID được ánh xạ (ví dụ: administrator:*:10000:10001:...:/home/administrator:/bin/bash).
Nếu wbinfo -u hoạt động nhưng getent passwd không hoạt động, 99% là bạn đã quên sửa /etc/nsswitch.conf!
Bước 8: Cấu hình PAM (Cho phép đăng nhập SSH)
PAM (Pluggable Authentication Modules) giống như người “bảo vệ” kiểm soát việc đăng nhập. Chúng ta đã cho Linux “thấy” user AD (bằng NSS), giờ chúng ta phải cho PAM “cho phép” user đó đăng nhập.
Trên Ubuntu/Debian: Chạy lệnh tương tác này: sudo pam-auth-update
Một cửa sổ sẽ hiện lên. Hãy đảm bảo bạn dùng phím cách (Space) để chọn (đánh dấu [*]) vào các mục sau:
[*] Winbind NT/LDAP authentication[*] Create home directory on login(Cực kỳ quan trọng)
Chọn <Ok> và thoát.
Trên CentOS/RHEL/AlmaLinux 8+ (dùng authselect): Cách làm “sạch” và chuẩn nhất là dùng authselect.
# Chọn hồ sơ winbind VÀ tự động tạo home directory
sudo authselect select winbind with-mkhomedir
# Áp dụng thay đổi
sudo authselect apply-changes
Lệnh này sẽ tự động cấu hình PAM để cho phép Winbind xác thực và tự động gọi pam_mkhomedir.so để tạo /home/username khi đăng nhập.
Bước 9: Cấu hình “sau khi join” (Phân quyền Sudo & SSH)
VPS của bạn đã sẵn sàng. Giờ là lúc cấu hình phân quyền, đây là bước quan trọng để đảm bảo bảo mật.
Cấp quyền sudo cho nhóm AD
Bạn chắc chắn không muốn mọi người dùng AD đều có quyền sudo. Hãy chỉ cấp quyền này cho nhóm “Domain Admins” (hoặc “Linux Admins” mà bạn tự tạo).
Cách tốt nhất là tạo một file mới trong /etc/sudoers.d/.
sudo visudo -f /etc/sudoers.d/domain-admins
Thêm dòng sau vào file (lưu ý dấu % cho nhóm):
# Cho phép nhóm "Domain Admins" có quyền sudo
# Nếu tên nhóm có khoảng trắng, dùng dấu \
%Domain\ Admins ALL=(ALL:ALL) ALL
(Vì chúng ta đã bật winbind use default domain = yes, bạn không cần tiền tố YOURDOMAIN\\).
Giới hạn đăng nhập SSH (Bảo mật)
Theo mặc định, bất kỳ người dùng nào trong AD đều có thể SSH vào VPS của bạn (mặc dù họ không có sudo). Đây là một rủi ro bảo mật.
Chúng ta nên giới hạn chỉ cho phép các nhóm cụ thể (xem thêm Bảo mật VPS Linux với UFW, Fail2Ban và Hardening SSH).
Mở file cấu hình SSH: sudo nano /etc/ssh/sshd_config
Thêm dòng AllowGroups vào cuối file:
# ...
PasswordAuthentication yes
ChallengeResponseAuthentication no
# Chỉ cho phép các nhóm này SSH
AllowGroups "Domain Admins" "Linux Admins"
Nếu tên nhóm có khoảng trắng, hãy đặt trong dấu ngoặc kép.
Sau đó, khởi động lại dịch vụ SSH: sudo systemctl restart sshd
Bước 10: Kiểm tra đăng nhập SSH (Thành quả)
Bây giờ là lúc kiểm tra. Từ máy tính của bạn, hãy SSH vào VPS bằng tài khoản AD (tài khoản này phải thuộc nhóm AllowGroups nếu bạn đã cấu hình ở bước 9).
ssh username@your_vps_ip
Bạn sẽ được hỏi mật khẩu. Hãy nhập mật khẩu AD của bạn.
Nếu đăng nhập thành công và bạn thấy [username@vps-hostname ~]$, xin chúc mừng! Bạn đã join VPS Linux vào Active Directory thành công.
Thư mục /home/username của bạn cũng sẽ được tự động tạo ra. Thử chạy sudo -l để kiểm tra quyền sudo của bạn.
Xử lý sự cố thường gặp (Troubleshooting)
Nếu bạn gặp lỗi, 99% là do 1 trong 5 lý do sau:
- Lỗi:
kinit: Clock skew too great- Nguyên nhân: Thời gian trên VPS và DC lệch nhau.
- Giải pháp: Kiểm tra lại Bước 1. Chạy
sudo systemctl restart chronyvàchronyc sources. Đảm bảo thời gian đã đồng bộ.
- Lỗi:
net ads join: Cannot resolve KDC for realm- Nguyên nhân: DNS! VPS không tìm thấy Domain Controller.
- Giải pháp: Kiểm tra lại Bước 1. Đảm bảo
/etc/resolv.conf(hoặc netplan/network-scripts) trỏ chính xác đến IP của DC. Thửping yourdomain.com. - Nếu thất bại, xem thêm: 5 công cụ khắc phục sự cố DNS tốt nhất trên Linux.
- Lỗi:
net ads join failed - 'no such object'- Nguyên nhân: Sai tên Realm hoặc Workgroup trong
smb.conf. - Giải pháp: Kiểm tra lại Bước 4.
workgrouplà tên NetBIOS (ví dụ:GOOGLE),realmlà tên FQDN (ví dụ:GOOGLE.VN).
- Nguyên nhân: Sai tên Realm hoặc Workgroup trong
- Lỗi:
wbinfo -uhoạt động, nhưnggetent passwd userkhông trả về gì.- Nguyên nhân: NSS chưa được cấu hình.
- Giải pháp: Kiểm tra lại Bước 7. Mở
/etc/nsswitch.confvà thêmwinbindvào dòngpasswdvàgroup.
- Lỗi:
getenthoạt động, nhưng SSH báo “Permission denied”.- Nguyên nhân: PAM chưa được cấu hình, hoặc bạn bị chặn bởi
AllowGroups. - Giải pháp: Kiểm tra lại Bước 8 (chạy
pam-auth-updatehoặcauthselect). Kiểm tra Bước 9 (filesshd_config) xem tài khoản của bạn có thuộc nhóm được phép không.
- Nguyên nhân: PAM chưa được cấu hình, hoặc bạn bị chặn bởi
Kết luận
Bạn đã hoàn thành một trong những tác vụ quản trị hệ thống phức tạp nhưng mang lại giá trị cao nhất. Bằng cách join VPS Linux vào Active Directory, bạn đã thống nhất hệ thống quản lý định danh, tăng cường bảo mật và đơn giản hóa quy trình quản trị.
Giờ đây, VPS của bạn không còn là một “hòn đảo” cô lập mà đã là một thành viên được quản lý đầy đủ trong hạ tầng doanh nghiệp.
Nếu bạn thấy phương pháp Winbind thủ công này quá phức tạp, đừng quên rằng chúng tôi có hướng dẫn chi tiết về phương pháp realmd (SSSD) hiện đại và tự động hơn.
Việc quản lý một hệ thống lai (Linux/Windows) đòi hỏi VPS phải có hiệu năng ổn định, network nhanh và hỗ trợ kỹ thuật tốt. Nếu bạn cần một nền tảng vững chắc để triển khai các giải pháp phức tạp này, hãy tham khảo ngay các gói VPS cấu hình cao và VPS Linux của chúng tôi!
Tài liệu tham khảo
- Setting up Samba as a Domain Member – SambaWiki
- Chapter 2. Connecting RHEL systems directly to AD using Samba Winbind | Integrating RHEL systems directly with Windows Active Directory | Red Hat Enterprise Linux | 10 | Red Hat Documentation
- Introduction to Active Directory integration – Ubuntu Server documentation




