Thông tin đăng nhập đi qua, đường hầm bắt đầu dựng lên, rồi phiên đăng nhập thất bại với thông báo về nhóm chứ không phải về mật khẩu. Sự kết hợp đó đặt lỗi vào nửa sau công việc của plugin LDAP: liên kết và kiểm tra mật khẩu thành công, còn quyết định về thành viên theo sau thì không. Hai nửa đọc từ cùng một khối cấu hình, vì thế một bản sửa ở một chỗ có thể để yên chỗ kia. Hãy bắt đầu từ dòng nhật ký nêu tên bước, không phải từ tài khoản mà bạn tình cờ đang thử.

Coi sự từ chối là câu trả lời về cấp quyền

Plugin thực hiện liên kết dịch vụ, tìm tài khoản, xác minh mật khẩu đã cung cấp và sau đó hỏi tài khoản đó có thuộc nhóm được phép hay không. Đó là bốn thao tác riêng biệt, và chỉ thao tác cuối là về nhóm. Vì vậy một sự từ chối đến sau liên kết thành công không nói gì về mật khẩu, ngay cả khi máy khách hiển thị lỗi xác thực chung. Nâng mức nhật ký của plugin trước khi thay đổi cấu hình là thứ tách bốn thao tác đó trong kết quả.

Tìm chính phần đánh giá nhóm. Khi không có truy vấn nhóm nào xuất hiện, khối cấp quyền không được tới, điều thường có nghĩa là một chỉ thị nằm ngoài khối sở hữu nó hoặc thiếu một tùy chọn bắt buộc. Khi truy vấn xuất hiện mà không trả về gì, điểm cuối hoặc bộ lọc đang trả lời một câu hỏi khác với câu bạn định hỏi.

Quyết định thành viên sống trong bộ lọc hay trong khối nhóm

Có hai dạng được hỗ trợ, và trộn chúng là cách một cấu hình đang chạy thôi chạy. Dạng thứ nhất đẩy thành viên vào tìm kiếm người dùng bằng cách yêu cầu một thuộc tính trên đối tượng người dùng; dạng thứ hai để yên tìm kiếm người dùng và cho plugin tìm đối tượng nhóm sau đó. Chọn một dạng cho mỗi lần triển khai và ghi lại bạn chọn dạng nào.

<Authorization>
    BaseDN       "OU=People,DC=example,DC=org"
    SearchFilter "(&(sAMAccountName=%u)(memberOf=CN=VPN Access,OU=Groups,DC=example,DC=org))"
    RequireGroup false
</Authorization>

Với dạng đó bộ lọc quyết định mọi thứ, nên RequireGroup phải là false, nếu không plugin sẽ đi tìm một đối tượng nhóm mà bộ lọc chưa từng nhắc tới. Thuộc tính trong bộ lọc phải tồn tại trên đối tượng người dùng và phải được điền, điều không được bảo đảm khi các nhóm lồng nhau.

Dạng còn lại giữ tìm kiếm đơn giản và thêm một lần tra nhóm sau đó. Đối tượng nhóm được đặt tên rõ ràng, và plugin so sánh người dùng với các thành viên mà thư mục trả về cho nó. Không có gì trong bộ lọc người dùng thay đổi, điều khiến dạng này dễ kiểm toán hơn khi một nhóm khác quản lý nhóm.

<Authorization>
    BaseDN       "OU=People,DC=example,DC=org"
    SearchFilter "(sAMAccountName=%u)"
    RequireGroup true
    Group        "CN=VPN Access,OU=Groups,DC=example,DC=org"
</Authorization>

Điểm mù là chung: so sánh thành viên đơn giản không mở rộng các nhóm lồng nhau, nên một tài khoản có quyền truy cập đến qua nhóm cha sẽ thất bại trong khi bảng điều khiển vẫn hiển thị thành viên. Active Directory công bố member trên nhóm, các lược đồ khác dùng uniqueMember, và trỏ vào thuộc tính sai sẽ trả về kết quả rỗng thay vì lỗi.

Chọn một điểm cuối chứa đối tượng nhóm

URL quyết định plugin hỏi thư mục nào, và một bộ điều khiển miền trên cổng 389 chỉ trả lời cho ngữ cảnh tên của chính nó. Một danh mục toàn cầu trên cổng 3268 trả lời cho toàn bộ rừng, chỉ đọc và với bộ thuộc tính một phần. Khi các tài khoản ở một miền và nhóm VPN ở miền khác, truy vấn một miền có thể tìm thấy người dùng mà vẫn bỏ sót thành viên. Đây là trường hợp chuyển URL sang cổng danh mục giải quyết sự từ chối, và cũng là trường hợp người ta khái quát quá xa.

Bộ thuộc tính một phần là giới hạn: một thuộc tính mà danh mục không có thì không thể lọc theo, nên cùng một thay đổi có thể làm một lần triển khai chạy và một lần khác trả về rỗng. Xác nhận điều điểm cuối thực sự trả về cho người dùng và nhóm thật trước khi viết lại khối này. Chuyển tiếp và TLS lại là những vấn đề riêng, vì phải theo chuyển tiếp và một điểm cuối yêu cầu TLS cần các tệp tin cậy tương ứng.

Giữ trạng thái tài khoản và phạm vi tìm kiếm trong trường riêng của chúng

Cờ vô hiệu hóa thuộc về bộ lọc, không thuộc về kiểm tra nhóm. Trong Active Directory nó là bit thứ hai của userAccountControl, và không có điều kiện đó một tài khoản bị vô hiệu hóa với mật khẩu hợp lệ vẫn xác thực rồi thất bại ở bước nhóm, điều trông như một lỗi cấp quyền. Phạm vi tìm kiếm thuộc về DN cơ sở, vì bắt đầu từ gốc miền chậm hơn và có thể khớp với các đối tượng ngoài đơn vị tổ chức mà bạn định bao phủ.

Giữ quyền của tài khoản liên kết hẹp lại. Quyền thư mục rộng biến một bộ lọc cấu hình sai thành một truy vấn thành công và giấu lỗi cho tới khi ai đó kiểm toán tài khoản. Thay đổi thành viên trong chính thư mục, không bao giờ trong danh sách ngoại lệ cục bộ, để việc vô hiệu hóa tài khoản là đủ để thu hồi quyền truy cập. Nếu một nhóm khác quản lý nhóm, hãy thống nhất về thuộc tính họ điền trước khi viết bộ lọc dựa trên nó.

Chứng minh kết quả bằng ba tài khoản

Chạy cấu hình với ba danh tính: một thành viên được phép, một tài khoản hợp lệ ngoài nhóm và một tài khoản đã bị vô hiệu hóa. Nếu cả ba bị từ chối, liên kết hoặc truy vấn nhóm bị hỏng; nếu cả ba được chấp nhận, không có điều kiện nhóm nào được áp dụng. Một kết quả hỗn hợp là kết quả duy nhất chứng minh cấu hình phân biệt được những trường hợp bạn quan tâm.

Đọc chính ba câu trả lời đó trực tiếp từ thư mục trước khi đổ lỗi cho plugin. Truy vấn thứ nhất cho thấy thuộc tính nhóm mà bộ lọc phụ thuộc, và truy vấn thứ hai cho thấy giá trị điều khiển tài khoản. Thay bằng DN cơ sở, tài khoản và điểm cuối của bạn:

ldapsearch -H ldap://dc01.example.org:3268 -x -D "[email protected]" -W -b "DC=example,DC=org" "(sAMAccountName=alice)" memberOf
ldapsearch -H ldap://dc01.example.org:3268 -x -D "[email protected]" -W -b "DC=example,DC=org" "(sAMAccountName=bob)" userAccountControl

Một người dùng có memberOf trả về rỗng là sự thật của thư mục, không phải lỗi plugin, và một tài khoản vẫn xác thực sau khi bị vô hiệu hóa nghĩa là bộ lọc thiếu điều kiện điều khiển tài khoản. Sửa bằng chứng đó trước, rồi chạy lại bài kiểm tra ba tài khoản. Giữ dòng nhật ký nêu tên bước thất bại bên cạnh thay đổi cấu hình, để người tiếp theo có thể tách cấp quyền khỏi xác thực mà không phải lặp lại việc tìm kiếm.

Bài viết liên quan