Tôi có một ứng dụng cũ nhận được yêu cầu tên người dùng/mật khẩu không đồng bộ trên dây. Vì tôi đã có tên người dùng và mật khẩu được lưu trữ dưới dạng biến, cách nào là cách tốt nhất để xác thực với PAM trên Linux (Debian 6)?Xác thực PAM cho Ứng dụng kế thừa
Tôi đã thử viết chức năng hội thoại của riêng mình, nhưng tôi không chắc chắn cách tốt nhất để nhận mật khẩu vào đó. Tôi đã xem xét việc lưu trữ nó trong appdata và tham khảo từ cấu trúc pam_conv, nhưng hầu như không có tài liệu hướng dẫn về cách thực hiện điều đó.
Có cách nào đơn giản hơn để xác thực người dùng mà không có chức năng cuộc trò chuyện quá mức không? Tôi không thể sử dụng thành công pam_set_data, và tôi không chắc chắn điều đó có phù hợp hay không.
Đây là những gì tôi đang làm:
user = guiMessage->username;
pass = guiMessage->password;
pam_handle_t* pamh = NULL;
int pam_ret;
struct pam_conv conv = {
my_conv,
NULL
};
pam_start("nxs_login", user, &conv, &pamh);
pam_ret = pam_authenticate(pamh, 0);
if (pam_ret == PAM_SUCCESS)
permissions = 0xff;
pam_end(pamh, pam_ret);
Và ban đầu nỗ lực chức năng trò chuyện dẫn đến (mật khẩu được mã hóa cứng để thử nghiệm):
int
my_conv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *data)
{
struct pam_response *aresp;
if (num_msg <= 0 || num_msg > PAM_MAX_NUM_MSG)
return (PAM_CONV_ERR);
if ((aresp = (pam_response*)calloc(num_msg, sizeof *aresp)) == NULL)
return (PAM_BUF_ERR);
aresp[0].resp_retcode = 0;
aresp[0].resp = strdup("mypassword");
*resp = aresp;
return (PAM_SUCCESS);
}
Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn bạn!
Cảm ơn! Và ở đây tôi đã cố gắng tìm cách để giao tiếp _into_ chức năng hội thoại thay vì chỉ bỏ qua và làm việc với phản ứng bên ngoài nó. –
Thao tác này không hoạt động đối với 'root' (chỉ là 'root', tất cả những người dùng khác đều được xác thực là tốt). Đó có phải là một lỗi không? – alexandernst
Tôi không biết. Tôi đã không cố gắng root. Bạn có thể làm điều gì đó sai nếu bạn cần sử dụng mật khẩu gốc một cách thường xuyên. – Fantius