Cách join VPS Linux vào Active Directory (Ubuntu, CentOS) (Sử dụng Samba/Winbind)

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ụ SambaWinbind. 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.

Cloud Computing Security Concept Vector Illustration

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ệnh net ads join. Cuối cùng, cấu hình nsswitch.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 realmdSSSD.

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

ad integration

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/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à Administrator hoặc một tài khoản được ủy quyền.

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.

  1. 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.
  2. Đồ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)

Cryptography and Encryption Concept Vector Illustration

Đâ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ằng username thay vì YOURDOMAIN\username.
  • idmap config * : backend = autorid: Chỉ định autorid là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 để autorid tự độ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)

Computer Troubleshooting Abstract Concept Vector Illustration

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 chronychronyc 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. workgroup là tên NetBIOS (ví dụ: GOOGLE), realm là tên FQDN (ví dụ: GOOGLE.VN).
  • Lỗi: wbinfo -u hoạt động, nhưng getent passwd user khô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.conf và thêm winbind vào dòng passwdgroup.
  • Lỗi: getent hoạ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-update hoặc authselect). Kiểm tra Bước 9 (file sshd_config) xem tài khoản của bạn có thuộc nhóm được phép không.

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 caoVPS Linux của chúng tôi!

Tài liệu tham khảo

Chia sẻ bài viết:

Đánh giá

0/5 - (0 Bình chọn)

Chưa có đánh giá.