Nginx 利用Linux 的PAM 机制整合各种登录
来源:互联网 发布:php的缺点 编辑:程序博客网 时间:2024/05/16 09:15
需求
公司内部有各种各样的系统,每个系统都要用户登录密码,能否只采用一个用户名和密码来访问所有系统?
我的方案
1. 所有的用户都采用公司邮箱和邮箱密码来登录系统,一旦用户离职后,删除邮箱后保证用户不能再登录到各个系统。
2. 基于 Linux PAM 机制
3. 所有的应用都在Nginx 后面,Nginx 负责与PAM系统的交互。
4. 各个系统的应用程序应该不关心用户认证,可以通过HTTP Header获得当前登录的用户。
具体步骤
1. 根据认证应用系统编写认证的URL请求
比如 http://xxxxx/login.jsp?user=xxxx&password=xxxx
认证成功返回 0,不成功返回 -1
2. 采用PAM_SCRIPT 来整合这个URL认证
注意:不要用 yum install pam_script
1) 下载并编译 PAM_SCRIPT 模块
下载地址:https://github.com/jeroennijhof/pam_script
2) 编译步骤
aclocal
autoheader
libtoolize
automake -a
autoconf
./configure
make
将编译好的pam_script.so 复制到 lib 目录,我的是 /lib64/security/pam_script.so
3) 按照文档建立相应的脚本
pam_script_acct
pam_script_auth
pam_script_passwd
pam_script_ses_close
pam_script_ses_open
pam_script_auth 用于认证,与认证系统对接,脚本如下:
stamp=`/bin/date +'%Y%m%d%H%M%S %a'`# get the script name (could be link)script=`basename $0`#LOGFILE=/var/log/pam-script.logecho $stamp $script $PAM_SERVICE $PAM_TYPE \ user=$PAM_USER ruser=$PAM_RUSER rhost=$PAM_RHOST \ tty=$PAM_TTY \ args=["$@"] \ >> $LOGFILEchmod 666 $LOGFILE > /dev/null 2>&1
认证URL
URL="http://authUrl?user=$PAM_USER&password=$PAM_AUTHTOK";RET=`curl $URL 2>/dev/null`#echo "-----------------------"#echo $RETif [ "$RET" = "0" ]; then exit 1;fi# successexit 0
3. 在PAM机制里增加认证
/etc/pam.d 下新建一个 neulion 的认证模块
内容如下:
auth required pam_script.so dir=/usr/bin/neulion <<<<目录下就是pam_script 的几个脚本account required pam_permit.so
4. 写一个test.sh 进行验证
PAM_USER=neil.mao
PAM_AUTHTOK=xxxxxxx
/usr/bin/neulion/pam_script_auth
5. 下载 Nginx 的 PAM 模块
http://web.iti.upv.es/~sto/nginx/
6. 下载Nginx
wget http://nginx.org/download/nginx-1.4.4.tar.gz
编译脚本类似:
./configure--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid--lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp--http-proxy-temp-path=/var/cache/nginx/proxy_temp--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp--http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx--with-http_ssl_module --with-http_realip_module --with-http_addition_module--with-http_sub_module --with-http_dav_module --with-http_flv_module--with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module--with-http_random_index_module --with-http_secure_link_module--with-http_stub_status_module --with-mail --with-mail_ssl_module--with-file-aio --with-ipv6 --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2-fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'--add-module=/root/ngx_http_auth_pam_module-1.3
7 . 整合测试
nginx 的conf 加入
location /vos {
auth_pam "Please specify loginId"; <<<登录提示
auth_pam_service_name "neulion"; <<<< 认证模块,根据上面配置的
auth_pam_set_pam_env on;
proxy_pass http://10.7.1.70:80; <<<<<<<<< 后端的系统系统
client_max_body_size 1000m;
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_set_header Remote-User $remote_user; <<<<<<<< 登录的用户
}
然后浏览器访问: 输入用户名和密码,认证通过后,就可以访问应用了。
8. 进一步
1.如何限定某些用户 访问应用?
可以增加一项pam配置。
auth required pam_listfile.so item=user sense=allow file=/etc/security/api.allow onerr=fail
只允许在 这个列表里的用户才能进行登录,
2.认证的日志在哪里看?
/var/log/pam_script.log 里可以看到
3. 注意事项
- Nginx 利用Linux 的PAM 机制整合各种登录
- login (登录)的 PAM 验证机制流程
- Linux的鉴别(Authentication)机制--PAM
- Linux PAM 机制
- linux控制用户的登录地点以及PAM的用法
- LINUX控制用户的登录地点以及PAM的用法
- linux的pam验证
- CentOS 利用pam控制ssh用户的登录及SSH安全配置
- PAM机制
- Linux 用户认证---PAM验证机制
- Linux-PAM(Linux下的密碼認證和安全机制)系統管理員指南(中文版)
- Linux-PAM
- linux pam
- Linux-PAM
- Linux-PAM
- linux pam
- Linux如何通过PAM限制用户登录失败次数
- nginx中使用pam
- 鼠标控制摄像机围绕物体旋转拍摄
- android为RadioButton动态添加style样式
- 使用DevExpress的WebChartControl控件绘制图表(柱状图、折线图、饼图)
- kksfbc child completion
- Session state has been disabled for ASP.NET.
- Nginx 利用Linux 的PAM 机制整合各种登录
- C# 关闭、开始、回收应用程序进程池
- 卡特兰数
- PL2303串口模块研究
- Yii CFileHelper常见的文件操作方法
- topcoder 刷题笔录 初级篇(一)
- GCD-queue介绍
- Android深入浅出之Audio 第一部分 AudioTrack分析
- Java自学--二叉树排序