Có lẽ đối với những người làm về công nghệ thì đa số đều đã được nghe, được tiếp xúc hoặc được làm việc trực tiếp với hệ thống xác thực tập trung, thời gian vừa qua team mình được nghiên cứu về xác thực tập trung tuy nhiên các tài liệu về xác thực tập trung đã quá cũ và khó tìm kiếm, có lẽ đây cũng là những khó khăn đối với người mới tìm hiểu do đó team mình muốn chia sẻ những gì đã nghiên cứu được trong thời gian vừa qua để mọi người có cái nhìn tổng quan cũng như tiếp cận được với xác thực tập trung nhanh nhất cho những người mới bắt đầu. Show
Xác thực tập trung là gì?Đặt bài toán : Trong một công ty có nhiều hệ thống cần sử dụng tài khoản để truy cập cho mỗi nhân viên, đối với những công ty lớn hơn thì mỗi người trong một phòng ban cũng đã có rất nhiều tài khoản cho các hệ thống. Ví dụ như với một nhận viên của phòng R&D mỗi người cần có 1 tài khoản của cụm lab, 1 tài khoản gitlab để quản lý mã nguồn, 1 tài khoản VPN,…. Và rất nhiều tài khoản khác từ những ứng dụng làm việc cũng như sản phẩm phát triển riêng của công ty, lúc này việc nhớ hết toàn bộ những tài khoản cũng là thử thách hơn nữa mỗi khi có nhân viên mới hoặc nhân việc nghỉ việc thì người quản lý cũng phải vào từng hệ thống để cấp phát / thu hồi tài khoản . Lúc này một giải pháp được công ty yêu cầu đưa vào sử dụng đó là xác thực tập trung. Xác thực tập trung có có thể hiểu đơn giản là nhiều hệ thống cũng sử dụng một backend để xác thực, chỉ cần có account trên hệ thống xác thực thì người dùng có thể dùng account đó để đăng nhập tất cả các hệ thống sử dụng backend xác thực này. Vậy chúng ta sẽ dùng cái gì để tích hợp với tất cả các hệ thống, làm sao để gom tất cả account về một mối để quản lý? Câu trả lời đó là LDAP (Lightweight Directory Access Protocol) là một giao thức phát triển trên chuẩn X500. Đây là một chuẩn cho dịch vụ thư mục chạy trên nền tảng OSI. LDAP là gì?
Phương thức hoạt động của LDAP.LDAP hoạt động theo mô hình client-server, client gửi yêu cầu đến LDAP server, server này sẽ nhận yêu cầu và thực hiện tìm kiếm và trả lại kết quả cho client. Trình tự khi có kết nối LDAP : Trình tự kết nối như sau :
LDAP là giao thức hướng thông điệp.Do client và server giao tiếp thông qua các thông điệp. Client tạo một thông điệp (LDAP message) chứa yêu cầu và gửi nó đến cho server. Server nhận được thông điệp và xử lý yêu cầu của client sau đó gửi trả cho client cũng bằng một thông điệp LDAP. Nếu client tìm kiếm thư mục và nhiều kết quả được tìm thấy thì các kết quả này được gửi đến client bằng nhiều thông điệp. Chi tiết như hình bên dưới : Do LDAP là giao thức hướng thông điệp cho nên client được phép phát ra nhiều thông điệp yêu cầu cùng một lúc. Trong LDAP message ID dùng để phân biệt các yêu cầu của client và kết quả trả về của server. Việc cho phép nhiều thông điệp cùng xử lý đồng thời làm cho LDAP linh động hơn các giao thức khác. Cấu trúc file LDIF.LDIF (LDAP Interchange Format) được định nghĩa trong RFC 2849, là một chuẩn định dạng file text lưu trữ thông tin cấu hình LDAP và nội dung thư mục. File LDIF thường được sử dụng để import dữ liệu mới vào trong directory của chúng ta hoặc thay đổi dữ liệu đã có. Dữ liệu có trong file LDIF cần phải tuân theo luật schema của LDAP directory. Schema là một loại dữ liệu đã được định nghĩa từ trước trong directory của chúng ta. Mọi thành phần được thêm vào hoặc thay đổi trong directory của chúng ta đều được kiểm tra lại trong schema để đảm bảo sự chính xác. Lỗi vi phạm schema sẽ xuất hiện nếu dữ liệu không đúng với quy luật đã có. Đây là giải pháp import dữ liệu lớn vào LDAP. Nếu như dữ liệu được lưu trong excel khoảng vài chục nghìn mẫu tin chúng ta có thể viết tool chuyển lại định dạng rồi import vào LDAP. Thông thường một file LDIF sẽ có khuôn dạng như sau :
Ví dụ : Những quy định khi báo nội dung file LDIF:
Một entry là tập hợp của các thuộc tính, từng thuộc tính sẽ mô tả một nét đặc trưng tiêu biểu của đối tượng. Một entry bao gồm nhiều thuộc tính, ví dụ về một entry như sau :
Mô hình đặt tên LDAP (LDAP Naming model)Mô hình LDAP Naming định nghĩa ra cách để chúng ta có thể sắp xếp và tham chiếu đến dữ liệu của mình, hay có thể nói mô hình này mô tả cách sắp xếp các entry vào một cấu trúc có logic và mô hình LDAP Naming chỉ ra cách để chúng ta có thể tham chiếu đến bất kỳ một entry thư mục nào nằm trong cấu trúc đó. Mô hình LDAP Naming cho phép chúng ta có thể đặt dữ liệu vào thư mục theo cách mà chúng ta có thể dễ dàng quản lý nhất. Giống như đường dẫn của hệ thống tập tin, tên của một entry LDAP được hình thành bằng cách nối tất cả các tên của từng entry cấp trên(cha) cho đến cấp cao nhất root. Mô hình chức năng LDAP (LDAP Function model)Đây là mô hình mô tả các thao tác cho phép chúng ta có thể thao tác trên thư mục. Mô hình LDAP Functional chứa một tập các thao tác chia thành 3 nhóm:
Thao tác thẩm tra (Tìm kiếm).Cho phép client có thể tìm và nhận lại thông tin từ thư mục. Thao tác tìm kiếm (LDAP search operation) yêu cầu 8 tham số:
Thao tác cập nhật.Chúng ta có 4 thao tác cập nhật đó là add, delete, rename (modify DN), và modify. Add: tạo ra một entry mới với tên DN và danh sách các thuộc tính truyền vào, khi thực hiện add một entry mới vào thư mục phải thoả các điều kiện sau :
Delete: thao tác xóa chỉ cần truyền vào tên của entry cần xóa và thực hiện thao tác nếu:
Rename: sử dụng để đổi tên hay di chuyển các entry trong thư mục Update: cập nhật với tham số DN và tập hợp các thay đổi được áp dụng nếu:
Thao tác xác thực và điều khiển.Thao tác xác thực gồm: thao tác bind và unbind:
Thao tác điều kiển chỉ có abandon:
Một số phương thức để xác thực người dùng trong LDAP.Xác thực người dùng chưa xác định :
Xác thực người dùng đơn giản :
Xác thực đơn giản thông qua SSL/TLS:
Tổng kết.Trên đây là những khái niệm, những kiến thức mà mình cóp nhặt được cũng như ghi chép lại trong quá trình tìm hiểu về LDAP, trong bài sau mình sẽ hướng dẫn mọi người cách cài đặt OpenLDAP trên CentOS 7. |