Nhiều dịch vụ Linux (apache, nginx, v.v.) có thể sử dụng 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 giữ tên của các nguyên tắc của Kerberos và các khóa được mã hóa tương ứng (lấy từ mật khẩu Kerberos). Trong bài viết này, chúng tôi sẽ hướng dẫn cách tạo tệp keytab cho SPN của tài khoản Active Directory được liên kết bằng cách sử dụng ktpass dụng cụ.
Thông thường nhất, một tài khoản người dùng Active Directory riêng biệt được tạo cho một dịch vụ yêu cầu sử dụng tệp keytab. Tuy nhiên, bạn cũng có thể sử dụng một đố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 sử dụng bởi xác thực Kerberos để ánh xạ một phiên bản dịch vụ với tài khoản AD (đây là lý do tại sao các ứng dụng có thể xác thực dưới dạng dịch vụ ngay cả khi chúng không biết tên người dùng).
Đầu tiên, tạo một tài khoản dịch vụ trong AD và đặt mộ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 ADUC đồ họa (dsa.msc) hoặc sử dụng lệnh ghép ngắn New-ADUser trong PowerShell (từ mô-đun PowerShell Active Directory):
New-ADUser -Name "web" -GivenName "nginx web app" -SamAccountName "web" -UserPrincipalName "[email protected]" -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 “Người dùng không thể thay đổi mật khẩu” và “Mật khẩu không bao giờ hết hạn” cho tài khoản dịch vụ trong bảng điều khiển đồ họa hoặc trong PowerShell:
Get-ADUser web|Set-ADUser -PasswordNeverExpires:$True -CannotChangePassword:$true
Trong bước tiếp theo, liên kết tên chính của dịch vụ (SPN) với tài khoản người dùng. Bạn không cần phải thực hiện bước này một cách riêng biệt, vì ktpass thực hiện nó tự động khi tạo tệp keytab (tôi sẽ làm điều đó để bạn hiểu rõ hơn về quy trình).
Liên kết bản ghi SPN sau với web tài khoản:
setspn -A HTTP/[email protected] web
Hiển thị danh sách các bản ghi SPN được liên kết với người dùng AD:
setspn -L web
Để tạo tệp keytab, lệnh sau được sử dụng:
ktpass -princ HTTP/[email protected] -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/[email protected] ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x73f868856e046449)
Lệnh đã tạo một tệp keytab (c:\ share \ webt.keytab) cho bản ghi SPN của dịch vụ HTTP/[email protected]. Bản ghi SPN được liên kết với tài khoản web bằng mật khẩu được chỉ định.
Đảm bảo rằng bản ghi SPN cho dịch vụ đã được tạo thành công (nếu bạn không tạo theo cách thủ công):
setspn -Q */[email protected]
Bạn có thể thấy rằng bản ghi SPN đã được tìm thấy ( Đã tìm thấy SPN hiện tại! ). Nó được liên kết với tài khoản web.
Windows không có các công cụ tích hợp để xem nội dung của tệp keytab. Nhưng nếu Java JRE được cài đặt trên máy tính của bạn, bạn có thể sử dụng klist.exe bao gồm 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 của tệp keytab. SPN, khóa, dấu thời gian, thuật toán mã hóa và phiên bản khóa (KVNO - số phiên bản khóa) được chỉ định tại đây.
Khi tạo tệp keytab, ktpass tăng msDS-KeyVersionNumber giá trị thuộc tính của tài khoản người dùng (bạn có thể xem nó trong Trình chỉnh sửa thuộc tính quảng cáo) và sử 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 sẽ tăng lên một và các mục nhập keytab với KVNO trước đó sẽ trở nên không hợp lệ (ngay cả khi mật khẩu mới hoàn toàn khớp 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.
Tệp keytab có thể giữ các khóa của các SPN khác nhau. SPN và khóa bổ sung được thêm vào tệp keytab bằng ktpass tham số (-in
, - setupn
, -setpass
).
Việc sử dụng thêm tệp keytab mà bạn có tùy thuộc vào dịch vụ mà tệp đó được áp dụng. Ví dụ:tại đây, bạn có thể tìm hiểu cách sử dụng tệp keytab để xác thực người dùng SSO minh bạch trong Zabbix. Ngoài ra, đừng quên giữ an toàn cho các tệp keytab của bạn (bất kỳ ai có thể đọc nội dung của tệp keytab sẽ có thể sử dụng bất kỳ khóa nào từ đó).