0%

Nginx通过PAM进行OpenLDAP认证

所需模块安装

Nginx通过PAM进行简单认证的模块
ngx_http_auth_pam_module

Ubuntu(18.04)可通过apt安装

1
root@jp-vps:~$apt-get install libnginx-mod-http-auth-pam

安装OK的话会在/etc/nginx/modules-enabled看到一个50-mod-http-auth-pam.conf链接文件

1
2
root@jp-vps:~$cat /etc/nginx/modules-enabled/50-mod-http-auth-pam.conf
load_module modules/ngx_http_auth_pam_module.so;

LDAP认证模块pam_ldap.so

1
root@jp-vps:~$apt-get install libpam-ldap

为了更加灵活, 使用pam_listfile.so模块控制哪些用户可以登录

配置

Nginx配置: 下载目录需要认证

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_name _;
root /home/web/download;

location / {
auth_pam 'test auth';
auth_pam_service_name 'nginx-download';
autoindex on;
}
}

名为nginx-downloadPAM相关配置,只允许/etc/nginx/download-users中的用户登录

1
2
3
4
5
root@jp-vps:~$cat /etc/pam.d/nginx-download
auth required pam_listfile.so onerr=fail item=user sense=allow file=/etc/nginx/download-users
auth required pam_ldap.so try_first_pass ignore_unknown_user config=/etc/ldap-nginx.conf
account required pam_ldap.so
#auth required pam_ldap.so

pam_ldap配置详情

1
2
3
4
5
6
7
8
9
root@jp-vps:~$cat /etc/ldap-nginx.conf
uri ldap://127.0.0.1

base ou=People,dc=intra,dc=test,dc=com

ldap_version 3

#pam_filter (&(objectClass=posixAccount)(ou=People))
pam_login_attribute uid

测试

可用之前章节配置的OpenLDAP服务进行测试,预期结果:

  • /etc/nginx/download-users的用户(tom)可登录
  • peter不可登录

怎样排错

可能出现问题的地方

  • 拼写错误或参数错误,需认真核查;必要的话一项一项比对man pam_ldap man pam_listfile
  • /etc/ldap-nginx.conf中的base和pam_filter最有可能出错
  • 将ldap服务端的日志打开,通过日志比对filter信息是否符合预期