烂泥:openldap与nginx集成

本文由ilanniweb微信公众号提供友情赞助,首发于烂泥行天下

jenkins技术分享QQ群:571981257

前几篇文章中,我们都是介绍openldap的基本知识。从这篇文章开始,我们着重介绍openldap与其他系统集成的配置。

这篇文章,我们来介绍下nginx如何与openldap进行集成。

业务场景,如下:

nginx可以通过autoindex来对外提供目录索引的功能,也即是可以通过浏览器来查看并下载该目录下的所有文件,相当于一个文件服务器,该功能被使用的比较多。

默认情况下该目录下的所有文件对所有的用户都可以访问,但是因为其他原因,我们希望只有具有指定的用户或者用户组可以访问。

上述需求我们可以使用apache的认证模块,但是该模块只能是比较简单的认证。如果我们要使用比较复杂的权限控制的话,该模块就无法满足我们的要求了。

此时我们就可以通过nginx与openldap集成来实现上述要求,该方案中nginx提供目录索引功能,所有的认证通过nginx-auth-ldap模块实现,用户和用户组可以调用openldap。

PS:在此nginx我们必须使用源码编译安装,而且为了让nginx的目录索引功能显示的比较好看,我们还启用了目录索引美化模块fancyindex。

除此之外,openldap我们也已经配置完毕,相关的用户及用户组都已经存在。

该文章最终的nginx配置文件,点我下载

一、具体需求

现在要求openldap的yunweizu用户组对/opt/yunweizu目录下的文件具有查看下载权限,而对/opt/share/目录下的文件所有用户都可以查看,并且要对该目录显示进行美化。

相关信息截图,如下:

clip_image001

clip_image002

二、安装基础依赖

首先安装nginx编译安装所需要的基础依赖,如下:

yum -y install git wget gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel openldap openldap-devel libxml2 libxml2-devel libxslt libxslt-devel gd gd-devel perl-devel perl-ExtUtils-Embed GeoIP GeoIP-devel gperftools

clip_image003

相关依赖安装完毕后,我们开始安装nginx的nginx-auth-ldap和ngx-fancyindex模块。

三、安装nginx及其相关模块

默认情况下无论是yum安装的nginx,还是源码编译安装的nginx都没有包含ldap的认证模块,所以就需要我们在进行nginx源码编译安装时,把ldap模块配置上。

3.1 下载nginx源码

本次试验我们使用nginx最新的版本进行,下载nginx源码如下:

wget http://nginx.org/download/nginx-1.15.4.tar.gz

clip_image004

3.2 下载nginx-auth-ldap模块

nginx官方默认是不支持openldap认证的,所以我们需要使用第三方认证模块nginx-auth-ldap。

nginx-auth-ldap我们可以直接在github上获取到最新源码,如下:

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

clip_image005

考虑到众所周知的原因,我把该仓库在码云上做了镜像,同时该仓库会定期与github上对应的仓库进行同步,码云上该仓库地址如下:

https://gitee.com/ilanni/nginx-auth-ldap.git

现在我们下载nginx-auth-ldap源码到/tmp目录下,如下:

git clone https://gitee.com/ilanni/nginx-auth-ldap.git /tmp/nginx-auth-ldap

clip_image006

3.3 下载ngx-fancyindex模块

nginx的目录索引功能,默认样式比较简单,所以在此我们使用第三方的样式美化模块ngx-fancyindex。

ngx-fancyindex我们可以直接在github上获取到最新源码,github上该仓库地址如下:

https://github.com/aperezdc/ngx-fancyindex

clip_image007

考虑到众所周知的原因,我也把该仓库在码云上做了镜像,同时该仓库会定期与github上对应的仓库进行同步,码云上该仓库地址如下:

https://gitee.com/ilanni/ngx-fancyindex.git

现在我们下载ngx-fancyindex源码到/tmp目录下,如下:

git clone https://gitee.com/ilanni/ngx-fancyindex.git /tmp/ngx-fancyindex

clip_image008

3.4 编译安装nginx

以上准备完毕后,我们就可以正式进行对nginx进行编译安装。

解压nginx压缩包,并进入该目录,如下:

tar -xf nginx-1.15.4.tar.gz

cd nginx-1.15.4

clip_image009

./configure –add-module=/tmp/ngx-fancyindex –add-module=/tmp/nginx-auth-ldap –with-threads –with-file-aio –with-http_auth_request_module –with-http_ssl_module –with-http_v2_module –with-http_realip_module –with-http_addition_module –with-http_xslt_module=dynamic –with-http_image_filter_module=dynamic –with-http_geoip_module=dynamic –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_degradation_module –with-http_slice_module –with-http_stub_status_module –with-http_perl_module=dynamic –with-mail=dynamic –with-mail_ssl_module –without-mail_pop3_module –without-mail_imap_module –without-mail_smtp_module –with-pcre –with-pcre-jit –with-stream –with-stream=dynamic –with-stream_ssl_module –with-stream_ssl_preread_module –with-google_perftools_module –with-debug

clip_image010

clip_image011

make && make install

clip_image012

clip_image013

测试nginx是否安装成功,如下:

/usr/local/nginx/sbin/nginx -t

clip_image014

有关nginx的源码编译安装详细过程,可以参考这篇文章《烂泥:CentOS上nginx与tengine服务器源码安装》。

3.5 nginx加入系统服务

nginx编译安装完毕后,我们现在把nginx加入系统服务,使用systemctl命令进行控制。

如下:

cat > /usr/lib/systemd/system/nginx.service << “EOF”

[Unit]

Description=nginx

After=network.target

[Service]

Type=forking

PIDFile=/usr/local/nginx/logs/nginx.pid

ExecStartPre=/usr/local/nginx/sbin/nginx -t

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/usr/local/nginx/sbin/nginx -s reload

ExecStop=/usr/local/nginx/sbin/nginx -s stop

PrivateTmp=true

[Install]

WantedBy=multi-user.target

EOF

clip_image015

systemctl enable nginx

systemctl start nginx

systemctl status nginx

clip_image016

3.6 nginx加入到系统命令

为了更好的使用nginx,我们现在把nginx加入到系统命令中。如下:

cat >> /etc/profile << “EOF”

export PATH=$PATH:/usr/local/nginx/sbin/

EOF

source /etc/profile

nginx -t

clip_image017

四、nginx与openldap集成

在第三章节nginx安装完毕后,我们来配置使其与openldap集成。配置文件如下:

cat > /usr/local/nginx/conf/nginx.conf << “EOF”

user ftp;

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

log_format htlog ‘[$time_local] [FROM:$remote_addr][TO:$scheme://$server_name][FORWARD:$upstream_addr] $status’

‘”$request” $body_bytes_sent’ ‘ Bytes, ‘

‘”request_uri”: “$request_uri”, ‘

‘”http_cookie”: “$http_cookie”, ‘

‘”remote_user”: “$remote_user”, ‘

‘”request_time”: “$request_time”, ‘

‘”$http_referer” “$http_user_agent” “$http_x_forwarded_for”‘;

sendfile on;

keepalive_timeout 65;

gzip on;

ldap_server ilannildap_yunweizu {

auth_ldap_cache_enabled on;

auth_ldap_cache_expiration_time 10000;

auth_ldap_cache_size 1000;

connect_timeout 5s;

bind_timeout 5s;

request_timeout 5s;

satisfy any;

url ldap://192.168.123.8:389/dc=ilanni,dc=com?uid?sub;

binddn “cn=root,dc=ilanni,dc=com”;

binddn_passwd ilanni;

group_attribute uniquemember;

group_attribute_is_dn on;

require group “cn=yunweizu,ou=Group,dc=ilanni,dc=com”;

}

server {

listen 80;

server_name yunweizu.ilanni.com;

access_log /var/log/nginx/yunweizu.ilanni.com-access.log htlog;

error_log /var/log/nginx/yunweizu.ilanni.com-error.log;

charset utf-8,gbk;

location / {

root /opt/yunweizu/;

fancyindex on;

fancyindex_exact_size off;

fancyindex_localtime on;

fancyindex_default_sort name_desc;

fancyindex_time_format “%Y-%m-%d %H:%M”;

add_header ‘Cache-Control’ ‘no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0’;

expires -1;

auth_ldap “Forbidden”;

auth_ldap_servers ilannildap_yunweizu;

}

}

}

EOF

clip_image018

clip_image019

clip_image020

以上就是nginx与openldap集成的配置文件部分,下面我们进行测试。

五、测试访问权限

在浏览器中输入yunweizu.ilanni.com,如下:

clip_image021

通过上图,我们可以很明显的看出现在需要输入用户名和密码才能访问,输入openldap中我们配置的对应权限的用户名和密码。如下:

clip_image022

clip_image023

通过上图,我们可以很明显的看出现在可以访问相关的目录和下载相关文件。

如果我们输入没有权限的用户呢,如下:

clip_image024

你会发现会一直提示,让你输入用户名和密码。这也证明了nginx与openldap集成成功,并且权限的控制也确实如我们前面的需求一样。

六、目录美化主题

按理说到上一章节,本篇文章就应该结束了。但是第一章节中还有一个需求,我们没有去验证目录索引的美化。

因为nginx-auth-ldap模块与ngx-fancyindex模块的之间bug,导致目录索引美化模板与openldap认证冲突。所以在此我们使用新的域名来验证目录索引的美化。

6.1 下载美化主题

目录索引美化主题,我们可以从github上下载最新的模板。如下:

https://github.com/Naereen/Nginx-Fancyindex-Theme

clip_image025

下载主题仓库,如下:

git clone https://github.com/Naereen/Nginx-Fancyindex-Theme /tmp/Nginx-Fancyindex-Theme

clip_image026

以上主题仓库里面有两个主题,我们现在使用其中一个,如下:

cp -a /tmp/Nginx-Fancyindex-Theme/Nginx-Fancyindex-Theme-light /opt/share/

ls -al /opt/share/

clip_image027

6.2 修改nginx配置文件

现在我们要启用美化主题,需要修改nginx配置文件,内容如下:

server {

listen 80;

server_name share.ilanni.com;

access_log /var/log/nginx/share.ilanni.com-access.log htlog;

error_log /var/log/nginx/share.ilanni.com-error.log;

charset utf-8,gbk;

location / {

root /opt/share/;

fancyindex on;

fancyindex_localtime on;

fancyindex_exact_size off;

fancyindex_header “/Nginx-Fancyindex-Theme-light/header.html”;

fancyindex_footer “/Nginx-Fancyindex-Theme-light/footer.html”;

fancyindex_ignore “Nginx-Fancyindex-Theme-light”;

fancyindex_name_length 255;

fancyindex_default_sort name_desc;

fancyindex_time_format “%Y-%m-%d %H:%M”;

}

}

clip_image028

访问share.ilanni.com,如下:

clip_image029

通过上图,我们可以很明显的看出最新的页面显示的样式已经和原来不一样了,而且该页面还支持搜索功能。

到此有关nginx的目录索引与openldap的集成,以及目录索引美化,已经全部介绍完毕。

未经允许不得转载:烂泥行天下 » 烂泥:openldap与nginx集成

赞 (8) 打赏

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

支付宝扫一扫打赏

微信扫一扫打赏