Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Tạo tệp Keytab cho xác thực Kerberos trong Active Directory

Nhiều dịch vụ Linux (apache, nginx, v.v.) có thể dùng tệp keytab để xác thực Kerberos trong Active Directory mà không cần nhập mật khẩu. Tệp keytab lưu tên các principal Kerberos và khóa mã hóa tương ứng (được lấy từ mật khẩu Kerberos). Trong bài viết này, chúng tôi sẽ chỉ cách tạo tệp keytab cho SPN của tài khoản Active Directory liên kết bằng công cụ ktpass.

Thường thì, một tài khoản người dùng Active Directory riêng được tạo cho dịch vụ yêu cầu dùng tệp keytab. Tuy nhiên, bạn cũng có thể dùng đối tượng máy tính để làm điều đó. Sau đó tên dịch vụ được liên kết với tài khoản (ServicePrincipalName — SPN). SPN được dùng bởi xác thực Kerberos để ánh xạ instance dịch vụ đến tài khoản AD (đây là lý do ứng dụng có thể xác thực như dịch vụ ngay cả khi chúng không biết tên người dùng).

Trước hết, tạo tài khoản dịch vụ trong AD và đặt mật khẩu biết cho nó. Bạn có thể tạo tài khoản từ bảng điều khiển đồ họa ADUC (dsa.msc) hoặc dùng cmdlet New-ADUser trong PowerShell (từ module Active Directory cho PowerShell):

New-ADUser -Name "web" -GivenName "nginx web app" -SamAccountName "web" -UserPrincipalName "web@test.com" -Path "OU=Services,OU=Munich,OU=DE,DC=test,DC=com" –AccountPassword (ConvertTo-SecureString “Sup6r!Pa$s” -AsPlainText -force) -Enabled $true

Bật tùy chọn “User cannot change password” và “Password never expires“ cho tài khoản dịch vụ trong bảng điều khiển đồ họa hoặc PowerShell:

Get-ADUser web|Set-ADUser -PasswordNeverExpires:$True -CannotChangePassword:$true

Bước tiếp theo liên kết service principal name (SPN) với tài khoản người dùng. Bạn không cần thực hiện bước này riêng biệt, vì ktpass làm tự động khi tạo tệp keytab (tôi làm để bạn hiểu quy trình tốt hơn).

Liên kết bản ghi SPN sau với tài khoản web:

setspn -A HTTP/www.test.com@test.com web

Hiển thị danh sách bản ghi SPN liên kết với người dùng AD:

setspn -L web

Để tạo tệp keytab, lệnh sau được dùng:

ktpass -princ HTTP/www.test.com@TEST.COM -mapuser web -crypto ALL -ptype KRB5_NT_PRINCIPAL -pass Sup6r!Pa$s -target mundc01.test.com -out c:\share\web.keytab

Successfully mapped HTTP/www.test.com to web. Password successfully set! Key created. Output keytab to c:\share\webt.keytab: Keytab version: 0x502 keysize 53 HTTP/www.test.com@test.com ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x73f868856e046449)

Lệnh đã tạo tệp keytab (c:\share\webt.keytab) cho bản ghi SPN của dịch vụ HTTP/www@test.com. Bản ghi SPN liên kết với tài khoản web với mật khẩu chỉ định.

Đảm bảo bản ghi SPN cho dịch vụ đã được tạo thành công (nếu bạn không tạo thủ công):

setspn -Q */www.test.com@test.com
Bạn thấy bản ghi SPN đã được tìm thấy (Existing SPN found!). Nó liên kết với tài khoản web.

Windows không có công cụ tích hợp xem nội dung tệp keytab. Nhưng nếu Java JRE cài trên máy tính, bạn có thể dùng klist.exe trong gói phân phối Java.

cd "c:\Program Files\Java\jre1.8.0_181\bin"
klist.exe -K -e -t -k c:\PS\web_host.keytab

Key tab: c:\PS\web_host.keytab, 5 entries found.

Hãy xem nội dung tệp keytab. SPNs, khóa, dấu thời gian, thuật toán mã hóa và phiên bản khóa (KVNO — key version number) được chỉ định ở đây.

Khi tạo tệp keytab, ktpass tăng giá trị thuộc tính msDS-KeyVersionNumber của tài khoản người dùng (bạn thấy trong AD Attribute Editor) và dùng giá trị đó làm KVNO trong bảng keytab.

Nếu bạn thay đổi mật khẩu tài khoản, giá trị thuộc tính tăng thêm một, và tất cả mục keytab với KVNO trước đó trở nên vô hiệu (ngay cả khi mật khẩu mới khớp hoàn toàn với mật khẩu cũ). Nếu mật khẩu người dùng trong AD thay đổi, bạn sẽ phải tạo lại tệp keytab.

Một tệp keytab có thể lưu khóa của nhiều SPN khác nhau. SPN và khóa bổ sung được thêm vào tệp keytab dùng tham số ktpass (-in,-setupn,-setpass).

Việc sử dụng tiếp theo của tệp keytab bạn đã có phụ thuộc vào dịch vụ nó được áp dụng. Ví dụ, ở đây bạn có thể học cách dùng tệp keytab cho xác thực SSO minh bạch người dùng trong Zabbix. Cũng đừng quên bảo mật tệp keytab (bất kỳ ai có thể đọc nội dung tệp keytab sẽ có thể dùng bất kỳ khóa nào từ nó).