centos7 nginx集成ldap认证

    xiaoxiao2022-07-06  206

    此文章已不再更新,查看最新版内容和更多内容:

    《Centos7 nginx集成ldap认证实现静态网页认证》

     

    -------------------------------------------------- 分隔符 --------------------------------------------------

    概述

        nginx作为反向代理服务器,也作为http服务器,被广泛使用。而很多时候,会有一些无密码的网站,比如公司内部的wiki,静态网站等等,不管处于何种原因,突然就想加上认证,但网站网站本身不具备认证功能,那么就可以通过集成ldap认证来实现统一认证。这里就详细记录一下如何实现nginx的ldap认证。

       

        nginx的ldap认证实现,网上有有两种方法:

    1. 通过auth_request模块,启动一个ldap认证服务,访问网页时,先跳转到认证服务上认证,根据返回状态,再继续访问网站

    2. 通过nginx-auth-ldap第三方模块,直接在配置中定义ladp服务,然后在访问时去ldap服务中进行查找认证来实现。

     

    这两种办法呢,我这里推荐使用第二种,为什么呢,因为配置简单,安装第三方模块后,直接简单配置ldap服务即可。然后在相应的server和location中直接使用即可。我这里也是详细讲一下第二种方式集成ldap的步骤。

     

     

    正文

    1. nginx新增第三方模块:nginx-auth-ldap

    nginx-auth-ldap模块github:https://github.com/kvspb/nginx-auth-ldap

    # 下载nginx-auth-ldap $ git clone https://github.com/kvspb/nginx-auth-ldap.git # 下载后,nginx-auth-ldap目录为:/root/nginx-auth-ldap

    模块下载后,需要新增模块到nginx中,如果是yum安装的nginx,请参考这边博文,新增nginx-auth-ldap模块:

    《centos7 yum安装的nginx添加模块》

    如果nginx是源码安装的,请参考这篇博文,新增nginx-auth-ldap模块。

    《centos7.2 源码编译安装nginx,新增编译模块,实现tcp反向代理》

     

    注意事项:nginx添加第三方模块时,--add-module=后面跟的是第三方模块的路径,所以这里我们下载的模块的路径为:/root/nginx-auth-ldap。所以nginx在./configure设置时,加在最后面的参数为:--add-module=/root/nginx-auth-ldap

     

     

    2. 配置ldap server

        nginx-auth-ldap模块新增后,修改nginx配置,添加ldap server

    # 修改nginx主配置 $ vim /etc/nginx/nginx.conf -------------------------------------------------------------------------------- # 注意这里是在http下面添加内容 http { # openldap为ldap server的名称,可以自定义 ldap_server openldap { # 指定url url ldap://172.18.73.129:389/dc=test,dc=com?uid?sub?(objectClass=posixAccount); # 管理dn binddn "cn=admin,dc=test,dc=com"; # 密码 binddn_passwd "admin-password"; group_attribute memberOf; group_attribute_is_dn on; # require valid_user; } } --------------------------------------------------------------------------------

    说明: 

    url:ldap的连接url,指定dc,还有属性,和筛选过滤器。这个要根据你的ldap服务来自定义修改。

    binddn:管理员dn的全名

    binddn_passwd:管理员dn的密码

    group_attribute 和 group_attribute_is_dn,我也没明白具体有什么用,不管怎么设置,不太影响使用,按github上默认设置也行。

    require:这里是个坑,在模块的c语言源代码中,根本没有require这个参数,但github上却有这个默认的设置,删掉就好,不然启动nginx时,会报错parser_error解析错误。虽然就算报这个错误也还是能正常使用。

    satisfy:这个参数在github上有,但是在源码中也是一样,并没有此参数的解析,设置后同上会报parse_error解析错误

     

    另外: 不管怎么设置,启动nginx后,在nginx的error日志中,会一直输出:http_auth_ldap: Could not connect。这个问题在源码中能找到,但可惜本人不会c语言,所以没发修改,但是此报错并不影响使用。

     

    总之:这个工具的坑比较明显,但还好并不影响正常使用,由于此工具的主要文件ngx_http_auth_ldap_module.c文件,上次更新已经是2年前,有坑是正常的,这样希望有懂c语言的朋友,有兴趣可能看看此源码并适当优化更新,以方便更多人使用。

     

    3. 配置server或location

    在nginx的http中定义好了ldap server后,接下来,在自己需要用到的server或location中,类似如下增加配置接口使用ldap认证

    # 在nginx配置中,类似如下进行设置,在server中设置ldap认证 server { listen 8000; server_name localhost; # 这里是验证提示内容,随便自定义 auth_ldap "LDAP Authentication"; # 上面我们设置的ldap server的名称为openldap auth_ldap_servers openldap; location / { root /usr/share/nginx/html; index index.html index.htm; } } # 也可以类似如下,在location中设置ldap认证,这样只有location内的才会走ldap认证 server { listen 80; server_name localhost; location / { proxy_pass http://localhost:8888; } location /wiki { root /usr/share/nginx/html; index index.html index.htm; # 这里是验证是,验证框显示的内容 auth_ldap "LDAP Authentication"; # 上面我们设置的ldap server的名称为openldap auth_ldap_servers openldap; } }

     

    4. 重启nginx生效

    重启nginx后,访问网页,会弹出登录框:

     

    输入ldap账号后,正常进入网站,查看nginx的访问日志,可以看到自己账号登录后的访问日志:

     

    清空cookie,再测试,随便输入错误的密码,会发现被拒接,无法访问,再nginx的访问日志中也能看到401的被拒请求记录,这里就不去一一找了。大家自行去测试就好

     

     

    结束

        ok,到此就完成了nginx的ldap集成,此方法非常方便,只需一次配置,就可能在所有的nginx代理的网站上进行ldap集成使用。且配置简单方便。虽然源码存在一些坑,但不影响使用,很方便但实现来ldap认证。

     

     

     

     

    最新回复(0)