PHP pam_auth()最佳管理指南
好的,所以我正在为一个新网站开发一个小的、临时的欢迎登录页面。公众访问者可以选择提交他们的电子邮件地址,如果他们愿意的话。但我还想为开发人员添加一个用户/通行证登录,以查看当前开发阶段的完整站点。开发者在本地LAMP系统上都有一个用户/通行证 现在,我想确定一个开发者,而不是在一个合适的网站用户系统上创建两个独立的用户系统,就是快速检查该用户是否可以使用本地系统登录。如果(pam_auth($_POST[“u”],$_POST[“p”])确实这样做了。简单,漂亮 但后来我发现,您需要允许apache用户访问*/security/pam_passwd文件(或者更好一点:pam_tally*)。这样做会造成安全漏洞 我想知道其他开发人员通过PHP(+apache)验证用户并通过本地LAMP安全系统做了什么?这是唯一的办法,还是有其他办法?有更好的建议吗PHP pam_auth()最佳管理指南,php,linux,security,administration,pam,Php,Linux,Security,Administration,Pam,好的,所以我正在为一个新网站开发一个小的、临时的欢迎登录页面。公众访问者可以选择提交他们的电子邮件地址,如果他们愿意的话。但我还想为开发人员添加一个用户/通行证登录,以查看当前开发阶段的完整站点。开发者在本地LAMP系统上都有一个用户/通行证 现在,我想确定一个开发者,而不是在一个合适的网站用户系统上创建两个独立的用户系统,就是快速检查该用户是否可以使用本地系统登录。如果(pam_auth($_POST[“u”],$_POST[“p”])确实这样做了。简单,漂亮 但后来我发现,您需要允许apac
最好的答案不一定是代码,而更多的是库名称的建议或指向其他解决方案描述的链接。我发现有人使用libpam API组合了这个实现 c实现
- 原文:
- 原文:
ssh
进入系统并尝试登录和DoS帐户没有什么不同,因此我认为您的方法是有效的,关于这是一个坏主意的评论是严厉的。这正式描述了我尝试过的过程:简单地使用一个标准的http基本身份验证系统并使用它生成一些用户名/密码有什么问题?将网站登录绑定到底层服务器登录系统是一个非常糟糕的主意。当然,它提供了一种简单的强制方式,但随后您需要进行端口扫描或类似的操作,以了解哪些守护进程正在运行,您也可以在这些守护进程上尝试强制方式,仅限于http。如果有使用root登录的路径,那么如果只是临时登录,为什么不使用该网站呢?此外,我还了解到,您可以使用tally,这几乎可以消除暴力攻击的成功。在多次尝试之后,大多数底层系统都可以通过锁定帐户来限制/关闭。这些变化现在可以被视为DoS载体,但这与如果有人可以ssh
进入系统并尝试登录和拒绝帐户没有什么不同,因此我认为你的方法是有效的,关于这是一个坏主意的评论是严厉的。
#include <security/pam_appl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct pam_response *reply;
int null_conv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) {
*resp = reply;
return PAM_SUCCESS;
}
static struct pam_conv conv = { null_conv, NULL };
int main(int argc, char *argv[]) {
int retval;
char *user, *pass;
if(argc == 3) {
user = argv[1];
pass = strdup(argv[2]);
} else {
fprintf(stderr, "Usage: login [username] [password]\n");
exit(1);
}
return authenticate("system-auth", user, pass);
}
int authenticate(char *service, char *user, char *pass) {
pam_handle_t *pamh = NULL;
int retval = pam_start(service, user, &conv, &pamh);
if (retval == PAM_SUCCESS) {
reply = (struct pam_response *)malloc(sizeof(struct pam_response));
reply[0].resp = pass;
reply[0].resp_retcode = 0;
retval = pam_authenticate(pamh, 0);
if (retval == PAM_SUCCESS)
fprintf(stdout, "Authenticated\n");
else
fprintf(stdout, "Not Authenticated\n");
pam_end(pamh, PAM_SUCCESS);
return ( retval == PAM_SUCCESS ? 0:1 );
}
return ( retval == PAM_SUCCESS ? 0:1 );
$ gcc -g -lpam -o chkpasswd pam.c
$ ./chkpasswd myusername mypassword