OpenVPN PAM: đối số đăng nhập là tên dịch vụ, không phải người dùng
Từ sau đường dẫn của plugin auth-pam chọn một ngăn xếp PAM. Hãy đọc ngăn xếp đó, tìm nguồn tài khoản của nó, rồi kiểm tra bằng pamtester trước khi sửa hồ sơ.
Một người dùng đã được thêm trên máy chủ, mật khẩu được gõ đúng, và kết nối vẫn kết thúc bằng AUTH_FAILED. Dòng plugin thường giải thích vì sao: từ sau đường dẫn plugin là tên dịch vụ PAM, và nó quyết định ngăn xếp mô-đun nào trả lời câu hỏi. Đó không phải tên người dùng, và cũng không phải con trỏ tới tệp mật khẩu mà OpenVPN tự đọc.
Từ thứ hai chọn điều gì
Dòng cấu hình nhận một đường dẫn plugin và một đối số:
plugin /usr/lib/openvpn/plugins/openvpn-plugin-auth-pam.so openvpnĐối số đó được truyền cho thư viện PAM làm tên dịch vụ, khiến ngăn xếp tại /etc/pam.d/openvpn là ngăn xếp được chạy. Ghi login vào đó và bạn sẽ nhận được chính sách đăng nhập tương tác thay vào đó, cùng với bất kỳ mô-đun nào mà chính sách ấy bao gồm trên bản phân phối của bạn.
Hãy dùng đường dẫn plugin mà gói đã cài cung cấp, không dùng đường dẫn sao chép từ máy khác. Tên tệp và thư mục khác nhau giữa các bản phân phối, và đường dẫn sai sẽ thất bại khi khởi động với lỗi tải plugin, không phải khi xác thực.
Ngăn xếp thực sự đọc tài khoản từ đâu
PAM là bộ điều phối. Tệp dịch vụ liệt kê các mô-đun theo thứ tự, và mô-đun đầu tiên có thể trả lời sẽ quyết định kết quả. Ngăn xếp gọi pam_unix đọc tài khoản cục bộ; ngăn xếp gọi mô-đun LDAP hoặc RADIUS sẽ gửi thông tin đăng nhập tới nơi hoàn toàn khác.
Hãy đọc tệp mà tên dịch vụ phân giải tới, kể cả mọi thứ nó bao gồm:
cat /etc/pam.d/openvpn
grep -H pam_ /etc/pam.d/openvpn /etc/pam.d/common-authNếu ngăn xếp ủy quyền cho một thư mục, việc thêm tài khoản cục bộ không thay đổi gì. Nếu nó đọc tài khoản cục bộ, việc tạo người dùng trong thư mục cũng không thay đổi gì. Tài khoản phải tồn tại ở nơi ngăn xếp nhìn vào, và đó là toàn bộ chẩn đoán trong hầu hết các báo cáo này.
Một lần thử, hai nhật ký
Hãy đối chiếu một kết nối thất bại ở cả hai phía. Nhật ký OpenVPN cho thấy kết quả của plugin và sự từ chối của máy khách; nhật ký xác thực của hệ thống cho thấy mô-đun nào đã chạy và nó đã quyết định gì. Đọc cả hai trong cùng một khoảng thời gian là điều phân biệt tệp dịch vụ bị thiếu với thời gian chờ của backend. Một khoảng trống trong nhật ký xác thực nghĩa là ngăn xếp chưa từng được chạm tới.
journalctl -u openvpn-server@server --since "-2 min"
journalctl -t sshd -t sudo --since "-2 min"Hãy kiểm tra dịch vụ trực tiếp bằng một tiện ích nói được PAM, để bạn không gỡ lỗi cả VPN lẫn ngăn xếp cùng lúc. Một lần kiểm tra trực tiếp thành công với cùng tên dịch vụ và tài khoản thu hẹp vấn đề vào cách daemon truyền thông tin đăng nhập, không phải vào bản thân tài khoản.
pamtester openvpn alice authenticateNếu lần kiểm tra trực tiếp thất bại với đúng thông tin đăng nhập hoạt động trên console, thì ngăn xếp không đọc nguồn tài khoản mà bạn giả định. Nếu nó thành công, hãy xem cuộc trao đổi mà plugin thực hiện và những gì máy khách thực sự gửi. Hãy chạy nó một lần với mật khẩu cố ý sai nữa, để bạn thấy khác biệt giữa từ chối và lỗi mô-đun. Hai kết quả đó trông giống hệt nhau trong nhật ký VPN và hoàn toàn khác ở đây.
Một dịch vụ riêng tốt hơn sửa đăng nhập
Hãy cấp cho VPN một tệp dịch vụ riêng khi yêu cầu của nó khác với đăng nhập tương tác, điều thường xảy ra. Sửa login hoặc common-auth thay đổi chính sách cho mọi chương trình bao gồm chúng, và người tiếp theo gỡ lỗi một vấn đề đăng nhập không liên quan sẽ thừa hưởng thay đổi của bạn.
Sao chép các mô-đun bạn cần vào một tệp dịch vụ nhỏ, giữ thứ tự rõ ràng, và ghi lại ai sở hữu nó. Tệp đó là thứ cần kiểm tra khi việc đặt lại mật khẩu có vẻ không có tác dụng.
Máy khách gửi gì, và không gửi gì
Máy khách cung cấp tên người dùng và mật khẩu qua lời nhắc hoặc tệp được hỗ trợ. Plugin máy chủ truyền các giá trị đó vào cuộc trao đổi PAM; nó không đọc chúng từ cấu hình máy chủ. Một dòng phía máy chủ trông như định nghĩa mật khẩu thì không làm vậy, và không chỉnh sửa hồ sơ nào tạo ra tài khoản.
Tên người dùng và mật khẩu có thể tồn tại song song với chứng chỉ máy khách, và việc bật PAM không phải lý do để ngừng xác minh chứng chỉ. Hãy giữ các lớp mà việc triển khai dự định và chỉ sửa nguồn tài khoản.
Chấp nhận là hai chiều: tài khoản dự định thành công, và tài khoản lẽ ra phải bị từ chối vẫn thất bại. Tệp README của plugin auth-pam ghi lại đối số dịch vụ và các backend mà nó có thể đứng trước, và đó là nơi để xác nhận cách bố trí mà bạn đang cố xây dựng.