Site icon ZingServer

Cấu hình SSSD nâng cao: Hướng dẫn cấp Sudo và giới hạn đăng nhập AD

Cấu hình SSSD nâng cao Hướng dẫn cấp Sudo và giới hạn đăng nhập AD

Cấu hình SSSD nâng cao Hướng dẫn cấp Sudo và giới hạn đăng nhập AD

Nếu bạn đang đọc bài này, rất có thể bạn vừa thực hiện thành công 7 bước join VPS Linux vào AD bằng realmd. VPS của bạn đã “nhìn thấy” Active Directory.

Nhưng công việc chưa dừng lại ở đó. Cấu hình realmd mặc định có một vấn đề bảo mật lớn: nó cho phép bất kỳ ai trong ActiveDirectory cũng có thể đăng nhập SSH vào VPS của bạn. Thêm vào đó, việc phân quyền sudo cũng cần được kiểm soát chặt chẽ hơn.

Bài viết này là phần 2, tập trung vào cấu hình SSSD nâng cao để siết chặt an ninh. Chúng ta sẽ giải quyết 2 mục tiêu chính:

  1. Giới hạn đăng nhập (Access Control): Chỉ cho phép các nhóm AD cụ thể (ví dụ: Linux_Admins) được phép đăng nhập.
  2. Phân quyền Sudo nâng cao: Cấp quyền quản trị sudo cho user AD một cách linh hoạt và an toàn.

Nếu bạn còn phân vân tại sao nên dùng SSSD, hãy đọc bài so sánh chi tiết SSSD vs Winbind của chúng tôi. Và nếu bạn đang dùng Winbind, đây là hướng dẫn di chuyển sang SSSD an toàn.

Tóm tắt nhanh: Để siết chặt bảo mật SSSD, bạn cần chỉnh sửa file /etc/sssd/sssd.conf.

  1. Giới hạn đăng nhập: Dùng access_provider = simplesimple_allow_groups = TenNhom@domain.com.
  2. Cấp Sudo: Tạo file trong /etc/sudoers.d/ (ví dụ: visudo -f /etc/sudoers.d/ad_admins) và thêm dòng %TenNhom@domain.com ALL=(ALL) ALL.
  3. Áp dụng: Luôn chạy sudo systemctl restart sssdsudo sss_cache -E sau khi thay đổi.

Điều kiện tiên quyết (Quan trọng)

Bài viết này giả định bạn đã hoàn thành các bước sau (từ bài hướng dẫn realmd):

Trước khi bắt đầu, hãy đảm bảo bạn đã cài đặt đủ các gói hỗ trợ. Bài “realmd” đã cài hầu hết, nhưng để cấu hình nâng cao, chúng ta cần:

# Cài đặt gói hỗ trợ Sudo tập trung (nếu cần)
sudo dnf install libsss-sudo

Cấu hình SSSD: Giới hạn đăng nhập AD (Access Control)

Đây là bước quan trọng nhất để bảo mật VPS của bạn. Mặc định, SSSD cho phép mọi tài khoản AD đã xác thực được đăng nhập. Chúng ta phải thay đổi điều này ngay lập tức.

Tất cả cấu hình sẽ được thực hiện trong file /etc/sssd/sssd.conf.

Cách 1: Dùng simple_allow_groups (Đơn giản & khuyến nghị)

Đây là cách dễ hiểu và phổ biến nhất. Chúng ta ra lệnh cho SSSD chuyển sang chế độ “đơn giản” và chỉ định một danh sách (whitelist) các nhóm được phép.

  1. Mở file cấu hình SSSD:
    sudo nano /etc/sssd/sssd.conf
  2. Tìm đến mục [domain/ad.example.com] của bạn.
  3. Thêm 2 dòng sau vào cuối mục domain đó:
    [domain/ad.example.com]
    ...
    # ================================
    # ACCESS CONTROL - SIMPLE MODE
    # ================================
    access_provider = simple
    simple_allow_groups = Linux_Admins@ad.example.com, DevOps_Team@ad.example.com

Giải thích:

Cách 2: Dùng ad_access_filter (Nâng cao & linh hoạt)

Cách này phức tạp hơn nhưng mạnh mẽ hơn. Bạn giữ nguyên access_provider = ad nhưng thêm vào một bộ lọc (filter) theo cú pháp truy vấn LDAP.

Cách này hữu ích nếu bạn có các quy tắc phức tạp, ví dụ: “Cho phép nhóm A, VÀ user đó phải thuộc nhóm B”.

  1. Mở file /etc/sssd/sssd.conf.
  2. Trong mục [domain/...], hãy đảm bảo access_provider = ad (hoặc xóa dòng đó đi để dùng mặc định).
  3. Thêm dòng ad_access_filter:
    [domain/ad.example.com]
    ...
    # ==================================
    # ACCESS CONTROL - AD FILTER MODE
    # ==================================
    access_provider = ad
    ad_access_filter = (memberOf=cn=Linux_Admins,ou=Groups,dc=ad,dc=example,dc=com)

Giải thích:

Khuyến nghị: Đối với hầu hết các VPS, Cách 1 (simple_allow_groups) là đủ an toàn, dễ đọc và dễ bảo trì hơn.

Cách 3: Dùng lệnh realm permit (Cách của “realmd”)

Công cụ realmd cũng cung cấp các lệnh để quản lý truy cập. Đây là cách làm nhanh, không cần sửa file .conf.

Khi bạn chạy realm join, mặc định là không ai bị cấm. Bạn cần thay đổi điều đó:

  1. Cấm tất cả mọi người trước:
    sudo realm deny --all
  2. Cho phép (permit) từng nhóm cụ thể mà bạn muốn:
    sudo realm permit -g 'Linux_Admins@ad.example.com'
    sudo realm permit -g 'DevOps_Team@ad.example.com'
  3. Kiểm tra lại danh sách:
    sudo realm list

Lệnh realm permit sẽ tự động chỉnh sửa file sssd.conf hoặc quản lý quyền truy cập theo cách riêng của nó, nhưng kết quả cuối cùng là như nhau: chỉ các nhóm được “permit” mới có thể đăng nhập.

Cấu hình cấp quyền Sudo cho nhóm AD

Sau khi user AD có thể đăng nhập, họ chỉ là user thường. Họ cần quyền sudo để quản trị hệ thống. Bài hướng dẫn realmd có đề cập đến realm permit để cấp sudo, nhưng cách đó khá cơ bản.

Dưới đây là 2 cách “nâng cao” và linh hoạt hơn.

Cách 1: Cấu hình Local (Phổ biến & linh hoạt nhất)

Đây là cách an toàn và được khuyến nghị nhất. Chúng ta sẽ tạo một file cấu hình riêng trong thư mục /etc/sudoers.d/ để cấp quyền cho nhóm AD.

  1. Luôn dùng lệnh visudo để chỉnh sửa. Lệnh này sẽ kiểm tra cú pháp trước khi lưu, tránh làm bạn bị khóa khỏi sudo.
    # Tạo một file mới tên là 'ad_admins'
    sudo visudo -f /etc/sudoers.d/ad_admins
  2. Thêm nội dung sau vào file.
    Ví dụ 1: Cấp full quyền Sudo Cho phép nhóm Linux_Admins@ad.example.com chạy mọi lệnh.
    # Cấp full quyền sudo cho nhóm Linux Admins từ AD
    # Lưu ý dấu % ở đầu để chỉ định đây là một nhóm
    %Linux_Admins@ad.example.com ALL=(ALL) ALL

    Ví dụ 2: Cấp quyền Sudo nâng cao (dùng Cmnd_Alias) Chỉ cho phép nhóm DevOps_Team khởi động lại dịch vụ web. Đây là cách phân quyền tối thiểu (least privilege) rất an toàn.

    # Định nghĩa một nhóm lệnh tên là APACHE_CMDS
    Cmnd_Alias APACHE_CMDS = /bin/systemctl restart httpd, /bin/systemctl status httpd
    
    # Chỉ cho phép nhóm DevOps chạy các lệnh trong APACHE_CMDS
    %DevOps_Team@ad.example.com ALL=(ALL) APACHE_CMDS
  3. Lưu và thoát file. Quyền sudo sẽ có hiệu lực ngay lập tức (sau khi user đăng xuất và đăng nhập lại).

Cách 2: Cấu hình tập trung (Quản lý Sudo từ AD)

Đây là giải pháp chuyên nghiệp, dành cho các doanh nghiệp lớn. Thay vì định nghĩa sudo trên từng VPS, bạn định nghĩa các quy tắc sudo (gọi là sudoRole) bên trong Active Directory. SSSD trên VPS sẽ đọc và áp dụng các quy tắc này.

Điều kiện (Phía AD): Bạn phải mở rộng AD Schema (AD Schema Extension) để hỗ trợ các đối tượng sudoRole. Việc này nằm ngoài phạm vi bài viết này và cần được thực hiện bởi AD Admin.

Các bước (Phía VPS Linux):

  1. Cài đặt gói libsss-sudo:
    sudo dnf install libsss-sudo
  2. Sửa /etc/sssd/sssd.conf: Bạn cần SSSD biết rằng nó phải tìm quy tắc sudo.
    • Trong mục [sssd], thêm sudo vào services:
      [sssd]
      services = nss, pam, sudo
      ...
    • Trong mục [domain/ad.example.com], thêm các dòng sau:
      [domain/ad.example.com]
      ...
      # ================================
      # SUDO PROVIDER - CENTRALIZED
      # ================================
      sudo_provider = ad
      ldap_sudo_search_base = ou=Sudoers,dc=ad,dc=example,dc=com
      
      # Tinh chỉnh cache (tùy chọn)
      ldap_sudo_smart_refresh_interval = 900
      ldap_sudo_full_refresh_interval = 21600
    • Giải thích:
      • sudo_provider = ad: Yêu cầu SSSD lấy quy tắc sudo từ AD.
      • ldap_sudo_search_base: Chỉ cho SSSD biết phải tìm các quy tắc sudoRole ở đâu trong cây AD (thay bằng OU của bạn).
      • ldap_sudo_smart_refresh_interval: Tần suất (giây) kiểm tra thay đổi nhỏ (mặc định 15 phút).
      • ldap_sudo_full_refresh_interval: Tần suất (giây) tải lại toàn bộ quy tắc (mặc định 6 giờ).

    Ghi chú kỹ thuật (sudo_provider = ad vs ldap): Bạn có thể thấy một số tài liệu cũ hơn (như trên RHEL 6) sử dụng sudo_provider = ldap. Tuy nhiên, vì chúng ta đang dùng id_provider = ad (do realmd tự cấu hình), SSSD đã “hiểu” toàn bộ cấu trúc AD.

    Việc đặt sudo_provider = ad là cách làm hiện đại và chính xác nhất. Nó cho phép SSSD tự động tìm kiếm các quy tắc Sudo bằng cách sử dụng Global Catalog của AD.

  3. Sửa /etc/nsswitch.conf: Cuối cùng, bạn phải bảo hệ điều hành Linux “hãy hỏi SSSD” khi tra cứu quyền sudo.
    • Mở file: sudo nano /etc/nsswitch.conf
    • Tìm dòng sudoers: và thêm sss vào.
      # Dòng cũ:
      # sudoers: files
      
      # Dòng mới:
      sudoers: files sss

Sau khi hoàn tất 3 bước này và khởi động lại SSSD, VPS sẽ tự động nhận các quy tắc sudo mà bạn định nghĩa tập trung trên AD.

Tinh chỉnh SSSD: Tối ưu trải nghiệm và hiệu suất

Đây là các tinh chỉnh “chất lượng cuộc sống” (quality-of-life) và hiệu suất để hoàn thiện cấu hình của bạn.

Mở file /etc/sssd/sssd.conf và thêm các dòng sau vào mục [domain/...]:

[domain/ad.example.com]
...
# ================================
# QoL & PERFORMANCE TWEAKS
# ================================

# 1. Đặt shell mặc định là /bin/bash (thay vì /bin/sh)
default_shell = /bin/bash

# 2. Đặt template thư mục home (đẹp hơn)
# Đổi /home/user@ad.example.com thành /home/user
override_homedir = /home/%u
fallback_homedir = /home/%u

# 3. Tối ưu hiệu suất cho mạng lớn (Tùy chọn)
# Buộc SSSD chỉ dùng DC tại site gần nhất (ví dụ: "Default-First-Site-Name")
ad_site = TenSiteCuaBan

# 4. Cấu hình tên đăng nhập ngắn (Chọn 1 trong 2 cách)

# Cách A (Phổ biến): Cho phép đăng nhập bằng "user" thay vì "user@domain.com"
use_fully_qualified_names = False

# Cách B (Linh hoạt): Giữ tên đầy đủ, nhưng thêm 1 domain mặc định
# Cho phép "user" tự động thành "user@ad.example.com"
# default_domain_suffix = ad.example.com

Giải thích:

Áp dụng cấu hình và khắc phục sự cố

Sau khi chỉnh sửa file /etc/sssd/sssd.conf, bạn bắt buộc phải làm 2 việc sau:

Bước 1: Khởi động lại SSSD

sudo systemctl restart sssd

Dịch vụ SSSD phải được khởi động lại để đọc file .conf mới.

Bước 2: Xóa cache SSSD (Cực kỳ quan trọng)

SSSD lưu cache (bộ đệm) thông tin người dùng và nhóm để tăng tốc độ. Nếu bạn vừa thay đổi quyền truy cập (simple_allow_groups), bạn phải xóa cache cũ.

sudo sss_cache -E

Lệnh này sẽ xóa toàn bộ cache, buộc SSSD phải liên hệ lại với AD để lấy thông tin mới nhất.

Bước 3: Kiểm tra

Các lỗi thường gặp (Troubleshooting)

  1. Lỗi: SSSD không khởi động (Job failed to start)
    • Nguyên nhân 1: Bạn gõ sai cú pháp trong file sssd.conf.
    • Nguyên nhân 2: Quyền (permission) file sai.
    • Giải pháp: Đảm bảo file /etc/sssd/sssd.conf có quyền là 600 và chủ sở hữu là root:root.
      sudo chmod 600 /etc/sssd/sssd.conf
      sudo chown root:root /etc/sssd/sssd.conf
  2. Lỗi: Vẫn đăng nhập được (dù đã cấm) hoặc không đăng nhập được (dù đã cho phép)
    • Nguyên nhân: Do SSSD cache.
    • Giải pháp: Chạy sudo sss_cache -E và thử lại.
  3. Lỗi: Đăng nhập báo “Authentication failure” (dù đúng mật khẩu)
    • Nguyên nhân: Lỗi Kerberos, 99% là do lệch thời gian.
    • Giải pháp: Đảm bảo VPS và Domain Controller của bạn đồng bộ thời gian (dùng chrony). Kerberos không chấp nhận chênh lệch thời gian quá 5 phút. Nếu chrony đã đúng, hãy kiểm tra DNS, bạn có thể dùng các công cụ khắc phục sự cố DNS để xác minh.
  4. Lỗi: id user@domain báo “no such user” (không tìm thấy user)
    • Nguyên nhân: SSSD không thể liên lạc với AD hoặc có lỗi cấu hình sâu.
    • Giải pháp: Bật gỡ lỗi (debug) SSSD. Sửa file sssd.conf, trong mục [domain/...] thêm debug_level = 9. Khởi động lại sssd và xem log chi tiết tại /var/log/sssd/sssd_ad.example.com.log. (Nhớ tắt debug_level sau khi sửa xong).

Câu hỏi thường gặp (FAQ)

1. Sự khác biệt giữa simple_allow_groupsad_access_filter là gì?

Cả hai đều dùng để giới hạn ai được phép đăng nhập, nhưng khác nhau về độ phức tạp:

2. Làm cách nào để giới hạn chỉ cho phép nhóm ‘Linux_Admins’ đăng nhập VPS?

Cách đơn giản và an toàn nhất là sử dụng simple_allow_groups. Mở file /etc/sssd/sssd.conf, tìm đến mục [domain/...] của bạn và thêm 2 dòng: access_provider = simplesimple_allow_groups = Linux_Admins@tenmien.com. Sau đó, chạy sudo systemctl restart sssdsudo sss_cache -E để áp dụng.

3. Làm cách nào để kiểm tra user AD có quyền đăng nhập không (trước khi thử SSH)?

Bạn có thể dùng công cụ sssctl (với quyền sudo hoặc root) để kiểm tra. Lệnh này sẽ cho bạn biết SSSD có cho phép user đăng nhập hay không, dựa trên các quy tắc access_provider bạn đã thiết lập: sudo sssctl user-checks user_ad@tenmien.com. Nếu thấy dòng “User is allowed to login”, nghĩa là cấu hình của bạn đã đúng.

4. Cấp quyền sudo cho nhóm AD (‘Domain Admins’) như thế nào là dễ nhất?

Cách dễ nhất là tạo file cấu hình sudo local. Chạy lệnh sudo visudo -f /etc/sudoers.d/ad_admins. Bên trong file, thêm dòng sau (lưu ý dấu % cho nhóm và dấu \ nếu tên nhóm có khoảng trắng): %Domain\ Admins@tenmien.com ALL=(ALL) ALL. Lưu file lại, quyền sudo sẽ có hiệu lực cho lần đăng nhập tiếp theo của user.

5. sudo_provider = adsudo_provider = ldap khác gì nhau?

sudo_provider = ldap là cách cấu hình cũ hơn. sudo_provider = ad là cách làm hiện đại, được khuyến nghị khi id_provider của bạn cũng là ad. Nó cho phép SSSD tự động tìm quy tắc sudo bằng Global Catalog của AD mà không cần bạn chỉ định máy chủ LDAP cụ thể, giúp cấu hình đơn giản và linh hoạt hơn.

6. Làm sao để đăng nhập bằng tên ngắn (user) thay vì (user@tenmien.com)?

Bạn có thể làm điều này bằng cách thêm một dòng vào file /etc/sssd/sssd.conf trong mục [domain/...]: use_fully_qualified_names = False. Sau khi lưu file, hãy nhớ chạy sudo systemctl restart sssdsudo sss_cache -E.

7. Tôi đã thay đổi sssd.conf nhưng không thấy tác dụng?

Bạn gần như chắc chắn đã quên một trong hai bước bắt buộc sau khi sửa file sssd.conf:

  1. Khởi động lại dịch vụ: sudo systemctl restart sssd
  2. Xóa cache SSSD để buộc nó đọc lại quyền mới: sudo sss_cache -E

8. Tại sao tôi phải dùng sss_cache -E sau khi thay đổi?

SSSD lưu trữ (cache) thông tin người dùng và nhóm trong một cơ sở dữ liệu cục bộ để tăng tốc độ. Khi bạn thay đổi quyền trong sssd.conf (ví dụ: thêm nhóm vào simple_allow_groups), SSSD không tự động biết điều đó; nó vẫn đọc từ cache cũ. Lệnh sss_cache -E buộc SSSD xóa toàn bộ cache và tải lại thông tin mới nhất từ Active Directory. Điều này đảm bảo các quy tắc truy cập mới của bạn được áp dụng ngay lập tức.

Kết luận

Bạn đã hoàn tất cấu hình SSSD nâng cao! VPS Linux của bạn giờ đây không chỉ là một thành viên của AD, mà còn là một thành viên được bảo vệ chặt chẽ.

Bằng cách giới hạn đăng nhập (simple_allow_groups) và phân quyền sudo chi tiết (/etc/sudoers.d/), bạn đã áp dụng các nguyên tắc bảo mật then chốt, đảm bảo chỉ những quản trị viên có thẩm quyền mới có thể truy cập và quản lý máy chủ. Việc cấu hình Sudo tập trung là một giải pháp tuyệt vời cho các môi trường doanh nghiệp lớn, giúp bạn quản lý hàng trăm VPS từ một nơi duy nhất.

Tài liệu tham khảo

Exit mobile version