ldap集成nginx
nginx版本:1.10.2
nginx安装:
wget http://nginx.org/download/nginx-1.10.2.tar.gz
tar zxvf nginx-1.10.2.tar.gz
cd nginx-1.10.2
./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_ssl_module --with-http_sub_module --with-http_auth_request_module --with-http_stub_status_module
make
make install
已安装nginx服务的话,通过 nginx -V 检查是否支持编译时是否添加 --with-http_auth_request_module,因为认证需要用到ngx_http_auth_request_module,如果不支持,需要重新编译添加(参考:https://anyof.me/articles/236)。
nginx的ldap认证需要通过nginx官方提供的服务去实现,首先需要把代码下载下来。
git clone https://github.com/nginxinc/nginx-ldap-auth
nginx-ldap-auth主要涉及的有两个脚本:
backend-sample-app.py:提供登录服务
nginx-ldap-auth-daemon.py:提供认证服务
脚本需要ldap模块支持: yum install python-ldap -y
backend-sample-app.py的登录界面会将密码明文显示,很不友好,将html内容替换成:
- html="""
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf8"/>
- <title>登陆框</title>
- </head>
- <style>
- *{margin:0;padding:0;}
- .login{
- width:334px;
- height:220px;
- margin:0 auto;
- position:absolute;
- left:40%;
- top:40%;
- }
- .login_title{
- color: #000000;
- font: bold 14px/37px Arial,Helvetica,sans-serif;
- height: 37px;
- padding-left: 35px;
- text-align: left;
- }
- .login_cont {
- background: none repeat scroll 0 0 #FFFFFF;
- border: 1px solid #B8B7B7;
- height: 152px;
- padding-top: 30px;
- }
- .form_table {
- float: left;
- margin-top: 10px;
- table-layout: fixed;
- width: 100%;
- }
- .form_table th {
- color: #333333;
- font-weight: bold;
- padding: 5px 8px 5px 0;
- text-align: right;
- white-space: nowrap;
- }
- .form_table td {
- color: #717171;
- line-height: 200%;
- padding: 6px 0 5px 10px;
- text-align: left;
- }
- .login_cont input.submit {
- background-position: 0 -37px;
- height: 29px;
- margin: 10px 14px 0 0;
- width: 82px;
- }
- </style>
- <body>
- <div class="login">
- <div class="login_cont">
- <form action='/login' method='post'>
- <table class="form_table">
- <col width="90px" />
- <col />
- <tr>
- <th>用户名:</th><td><input class="normal" type="text" name="username" alt="请填写用户名" /></td>
- </tr>
- <tr>
- <th>密码:</th><td><input class="normal" type="password" name="password" alt="请填写密码" /></td>
- </tr>
- <tr>
- <th></th><td><input class="submit" type="submit" value="登录" /><input class="submit" type="reset" value="取消" /></td>
- </tr>
- </table>
- <input type="hidden" name="target" value="TARGET">
- </form>
- </div>
- </div>
- </body>
- </html>"""
接下来把两个脚本运行起来:
nohup python backend-sample-app.py > login.log 2>&1 &
nohup python nginx-ldap-auth-daemon.py --host 0.0.0.0 >auth.log 2>&1 &
脚本默认监听localhost,根据需要自行修改。
nginx ldap认证 配置
在需要认证的server里加入以下:
location / {
#auth_basic "Welcome to solr";
#auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
auth_request /auth-proxy;
error_page 401 403 =200 /login;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#需要认证的服务
proxy_pass http://dev-solr:8983;
}
location /login {
#登录服务
proxy_pass http://172.31.29.18:9000/login;
proxy_set_header X-Target $request_uri;
}
location = /auth-proxy {
internal;
#认证服务
proxy_pass http://172.31.29.18:8888;
proxy_cache_key "$http_authorization$cookie_nginxauth";
proxy_cache_valid 200 403 1m;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Ldap-URL "ldap://ldap.xxxx.net:389";
proxy_set_header X-Ldap-BaseDN "DC=ldap,DC=xxxx,DC=net";
#proxy_set_header X-Ldap-Template "(|(cn=xxxxx@xxxxx.com)(cn=xxxxx@xxxxxx.com))";
proxy_set_header X-Ldap-BindDN "cn=Manager,dc=ldap,dc=xxxxx,dc=net";
proxy_set_header X-Ldap-BindPass "xxxxxxx";
proxy_set_header X-CookieName "nginxauth";
proxy_set_header Cookie nginxauth=$cookie_nginxauth;
}
可以通过X-Ldap-Template配置ldap某个组的用户访问server:proxy_set_header X-Ldap-Template "(&(cn=%(username)s)(memberOf=cn=groupname,cn=Users,dc=ldap,dc=xxxxx,dc=com))";
但我这边配置后发现ldap 不支持 memberOf,需要手动开启。因为是一些内部服务,这边采用一个折中的方法,设置白名单方式限制访问。
缺陷:
不支持权限控制
管理账号明文显示,有风险(可以把账号配置在nginx-ldap-auth-daemon.py脚本里)
参考链接:https://sapser.github.io/devops/2016/07/22/nginx-ldap
ldap集成nginx的更多相关文章
- ldap集成bitbucket
confluence ldap配置跟jira ldap集成一样,请参考:https://www.cnblogs.com/imcati/p/9378668.html 需在 Global permissi ...
- ldap集成jenkins
jenkins版本:2.5.3,ldap插件:1.15 jenkins ldap支持需要安装ldap plugin,强烈建议插件安装版本为1.15及以上(支持ldap 配置测试) 安装插件: 系统管理 ...
- ldap集成confluence
confluence ldap配置跟jira ldap集成一样,请参考:https://www.cnblogs.com/imcati/p/9378668.html
- CAS与LDAP集成
参考文献: CAS集成ldap:https://wiki.jasig.org/display/CASUM/LDAP CAS集成restful api:https://wiki.jasig.org/di ...
- apache+svn+ldap集成
apache+svn搭建方式如下:http://www.cnblogs.com/uglyliu/p/6914056.html SVN和ldap集成,我用的方式只需要更改 /etc/http/conf. ...
- 【Web】Rest && 权限管理 && LDAP && OAuth && Nginx && Lua 等
最好的8个 Java RESTful 框架:http://www.importnew.com/17138.html 如何设计RESTful的API权限:https://segmentfault.com ...
- tomcat集群搭建集成nginx负载均衡
软件基础+版本: 1.3台centos7系统,其中都已经配置完成了jdk环境,jdk的版本为 [root@node03 bin]# java -version java version "1 ...
- ldap 集成harbor
harbor: 1.6 默认配置文件在harbor.cfg,我们可以先不添加配置,直接在harbor web界面进行配置(harbor 1.6 如果db 启动失败提示postgresql 数据目录已存 ...
- ldap集成grafana
grafana版本: 5.0.3 grafana通过k8s方式安装,所以需将配置文件挂载过去. cat grafana-configmap.yaml apiVersion: v1 kind: Conf ...
随机推荐
- 《算法笔记》8.1小节——搜索专题->深度优先搜索(DFS)
http://codeup.cn/contest.php 5972 这是递归的入门题,求全排列,第一种方法用STL中的函数next_permutation,可以很容易的实现.首先建立好数组,将需要全排 ...
- Xampp单独升级某个软件
XAMPP是一个集合的PHP+Apache+MySQL的工具包. 现在PHP升级到了7.0.6,而XAMPP目前在7.0.5,所以我需要将其升级到7.0.6. 首先将php.ini备份好,然后是php ...
- nginx 日志详解及自定义日志配置
nginx的log日志分为access log 和 error log 其中access log 记录了哪些用户,哪些页面以及用户浏览器.ip和其他的访问信息 error log 则是记录服务器错误日 ...
- mysql优化(二)
一.客户端分担. 1.大量的复杂的运算放在客户端处理. 什么是复杂运算,一般我认为是一秒钟CPU只能做10万次以内的运算.如含小数的对数及指数运算.三角函数.3DES及BASE64数据加密算法等等.如 ...
- Redis Cluster(集群)的搭建
一.Redis的下载.安装.启动(单实例) 我们统一将Redis安装在/opt目录下,执行命令如下: $ cd /opt $ wget http://download.redis.io/release ...
- hdu5293 lca+dp+树状数组+时间戳
题意是给了 n 个点的树,会有m条链条 链接两个点,计算出他们没有公共点的最大价值, 公共点时这样计算的只要在他们 lca 这条链上有公共点的就说明他们相交 dp[i]为这个点包含的子树所能得到的最 ...
- Spark学习之路 (二十七)图简介
一.图 1.1 基本概念 图是由顶点集合(vertex)及顶点间的关系集合(边edge)组成的一种数据结构. 这里的图并非指代数中的图.图可以对事物以及事物之间的关系建模,图可以用来表示自然发生的连接 ...
- QT 继承QWidget && 继承QDialog
工作项目中,利用到Qt对话框,场景需求: 1. 一部分窗体需要继承自QWidget 2. 一部分窗体需要继承自QDialog 3. 两者均需要去掉标题栏图标,同时能够自由拖动. 如果两者分开继承实现, ...
- C/C++笔试题(基础题)
为了便于温故而知新,特于此整理 C/C++ 方面相关面试题.分享,共勉. (备注:各题的重要程度与先后顺序无关.不断更新中......欢迎补充) (1)分析下面程序的输出(* 与 -- 运算符优先级问 ...
- HCatalog 学习之路
最近在使用sqoop把数据从hive数仓导出到mysql数据库中接触到了hcatalog,所以特意学习了解一下相关知识,据悉hcatalog还是apache顶级项目. 学习参考: HCatalog 介 ...