免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1198 | 回复: 0
打印 上一主题 下一主题

利用LDAP 整合Apache 網頁驗證 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-10 09:12 |只看该作者 |倒序浏览
利用LDAP 整合Apache 網頁驗證
1/18
Enterprise Linux 實戰講座
利用LDAP 整合Apache 網頁驗證
上期的Enterprise Linux 實戰講座「利用MySQL 整合Apache 網頁驗證」,筆
者介紹利用MySQL 資料庫伺服器來存放帳號及密碼,藉以整合Apache 網頁驗
證,以達集中管理之目的。此法雖好,但唯一美中不足的是很多的應用程式並無
法與MySQL 整合,所以此篇文章,筆者介紹利用LDAP 整合Apache 網頁驗證,
因為很多的應用程式,都可以與LDAP 整合,所以用LDAP 來整合Apache 網
頁驗證才是王道。
利用LDAP 整合Apache 網頁驗證
2/18
1 LDAP 簡介
LDAP(Lightweight Directory Access Protocol;輕量型目錄存取協定)是
一個利用目錄將資訊以層級架構的方法組織起來。可以把它想像成一個簡單的資
料庫系統。在完成建立後,可透過網路來存取它們。LDAP 是根據X.500 目錄分
享的標準,但並不如X.500 複雜。實際上,LDAP 有時候被稱為X.500 的輕量簡
化版。LDAP 目錄伺服器可以儲存很多不同的資訊,並允許使用者從支援LDAP
協定的應用程式來存取他們的帳戶資料。
LDAP 是一個客戶端/伺服器系統。伺服器可使用不同的資料庫來儲存目
錄,每一個皆最佳化以提供快速及大量的存取要求。當LDAP 客戶端應用程式
連線至LDAP 伺服器時,它可以查詢目錄資訊或上載資料。當進行查詢時,伺
服器可回答查詢,或者如果該伺服器無法提供答案的話,則會將查詢轉至能夠答
覆的較高一層的LDAP 伺服器。如果客戶端企圖將資料上載至LDAP 目錄,伺
服器會先驗證使用者擁有更改的權限,然後才允許新增或更新資料。
RHEL 4 內附的LDAP 伺服器為OpenLDAP 2.2.13-2 版,OpenLDAP 2.x
包括數個重要功能﹕
􀁺 支援 LDAPv3 - OpenLDAP 2.0 除了其他改善外還支援SASL(Simple
Authentication and Security Layer)、TLS(Transport Layer Security)以
及SSL(Secure Sockets Layer)。LDAPv2 之後通訊協定很多的改變都是
為了加強LDAP 的安全性。
􀁺 支援IPv6 - OpenLDAP 支援新一代的網際網路通訊協定第6 版。
􀁺 LDAP Over IPC - OpenLDAP 能夠使用IPC 在系統內進行通訊。這可藉由
避免使用網路通訊以增加安全性。
􀁺 新版C 應用程式界面 - 改善程式設計人員連線及使用程式的方法。
利用LDAP 整合Apache 網頁驗證
3/18
􀁺 支援LDIFv1 - 完全合乎LDIF(LDAP Data Interchange Format)第一版的
標準。
􀁺 增強獨立LDAP 伺服器 - 包括新版的存取控制系統及較佳的工具。
􀁺 內建提供InnoDB 表格型別,支援標準二進位格式資料及資料庫交易異動
(Transactions)機制及row-level locking 和foreign keys。
利用LDAP 整合Apache 網頁驗證
4/18
2 實戰原理及流程
LDAP 的原理及相關名詞、設計、協定...等相關文件常動輒百頁甚至上千頁,常
令人望之卻步。其實筆者覺得一個技術的提出,目的也不外乎是要解決許多人會
遇到的共同問題。如果太難不免就失去實用的價值。若讀者從未接觸過LDAP,
也不用擔心此篇文章看不懂,就把LDAP 伺服器想成一本公司通訊錄,這個通
訊錄記錄各個部門員工的相關資料,例如:姓名、性別、密碼、電話、住址、e-mail…
等資訊。而利用LDAP 完成Apache 網頁認證工作的原理其實很簡單,當Apache
收到使用者在對話框輸入的帳號/密碼後,將其送給LDAP 伺服器,LDAP 將帳
號/密碼和其資料庫中的資料比對,查看輸入的帳號/密碼是否有誤。
所以此實戰演練必須先架設LDAP 伺服器,由於要在LDAP 伺服器新增人員紀
錄,通常要編寫複雜的LDIF 檔,通常不是初接觸LDAP 的人可輕易完成的。所
以筆者的想法為:先在利用Linux 上用傳統方法建立帳號並為其設定密碼;然後
將此台伺服器轉為LDAP 伺服器,並將原Linux 帳號轉為LDAP 伺服器內的人
員紀錄。由於RHEL 4 預設並未提供一個圖形化的LDAP 管理介面,筆者將會
安裝phpldapadmin,讀者可利用phpldapadmin 這個Web 介面來管理LDAP 的
資料,最後修改Apache 設定檔,讓網頁認證機制與LDAP 整合。
綜合上述,整個實作流程如下:
利用LDAP 整合Apache 網頁驗證
5/18
圖 1:實作流程
利用LDAP 整合Apache 網頁驗證
6/18
3 實戰演練:LDAP 整合Apache 網頁驗證
3.1 建立傳統Linux 帳號
筆者利用Shell Script 來建立多個使用者帳號,步驟如下:
步驟1:建立使用者清單users.lst
筆者所撰寫的shell script 需要新增使用者的清單,其中只需包含兩個欄位,第
一個欄位為使用者名稱;第二個欄位為預設密碼,中間必須用空格隔開。
# cat users.list
www1 1234
www2 1234
www3 1234
www4 1234
www5 1234
www6 1234
www7 1234
www8 1234
www9 1234
www10 1234
步驟2:撰寫大量建立帳號的shell script:batch-add-users.sh
# vi batch-add-users.sh
#!/bin/bash
#awk 兩旁的是反單引號,就是鍵盤數字鍵1 左邊的符號鍵
for i in `awk '{print $1}' users.list `
do
useradd $i
grep "\" users.list | awk '{print $2}' | passwd --stdin $i
􀃅設定使用者的密碼
利用LDAP 整合Apache 網頁驗證
7/18
done
步驟3:執行batch-add-users.sh
修改batch-add-users.sh 權限,使其可以被執行。執行完batch-add-users.sh
後,會發現/etc/passwd、/etc/group 和/etc/shadow 多了這些使用者的相關記錄。
步驟4:測試,利用新建的帳號登入
可在Virtual Console(Ctrl+Alt+F1~F6)或圖形登入畫面(Ctrl+Alt+F7)利用這
些帳號登入,測試帳號/密碼可否順利運作。\n3.2 架設LDAP 伺服器並移轉帳號
步驟1:安裝LDAP 伺服器
以root 的身份登入系統,開啟終端視窗,鍵入「system-config-packages」。
利用GUI 套件管理工具「system-config-packages」􀃆「網路伺服器」(圖2),
點選「詳細資訊」,然後勾選「openldap-server」(圖3),便會提示放入適當
的光碟片,順利完成安裝LDAP 伺服器的工作。
利用LDAP 整合Apache 網頁驗證
8/18
圖 2:增加或移除套件
利用LDAP 整合Apache 網頁驗證
9/18
圖 3:選取openldap-servers 套件
待安裝完成後,可利用「rpm -qa | grpe ‘^openldap’」檢查是否安裝成功。
除了採用「system-config-packages」工具安裝外,亦可利用rpm –ivh 指令進
行安裝。
# rpm -qa | grep ‘^openldap’
openldap-devel-2.2.13-2
openldap-servers-2.2.13-2
openldap-2.2.13-2
openldap-clients-2.2.13-2
openldap-servers-sql-2.2.13-2
步驟2:修改/etc/openldap/slapd.conf
#vi /etc/openldap/slapd.conf
68 database bdb
69 suffix "dc=example,dc=com"
利用LDAP 整合Apache 網頁驗證
10/18
70 rootdn "cn=Manager,dc=example,dc=com"
74 rootpw redhat
步驟3:將原有Linux 帳號轉為LDIF 檔
原有Linux 伺服器上有www1~www10 這些使用者帳號,密碼均為1234;筆者
欲將這些帳號/密碼轉換至LDAP 伺服器上,也就是在LDAP 伺服器上新增10
個員工紀錄。先撇開複雜的LDAP 理論,前面提到LDAP 伺服器就想成公司通
訊錄,那這本通訊錄就得註明是那家公司的通訊錄;對應原有Linux 伺服器的觀
念,讀者可以這樣想,原本每台Linux 主機都會有主機名稱,例如
server1.example.com,其中example.com 為網域名稱,網域名稱不就是代表那
家公司。
原有Linux 帳號管理的觀念為使用者(/etc/passwd)及群組(/etc/group),所
以筆者為了對應原有的Linux 帳號管理結構,便將這個公司(example.com)的
通訊錄分為兩大組織:1.people,2.group,整個公司通訊錄結構應如圖4。
圖 4:LDAP 通訊錄架構
接著利用Linux 的工具將原有Linux 帳號轉換至LDAP 通信錄,這些轉換工具置
於/usr/share/openldap/migration 目錄,下面便是轉換的步驟。
# cd /usr/share/openldap/migration
利用LDAP 整合Apache 網頁驗證
11/18
# vi migrate_common.ph
71 $DEFAULT_MAIL_DOMAIN = "example.com";
72
73 # Default base
74 $DEFAULT_BASE = "dc=example,dc=com";
# ./migrate_passwd.pl /etc/passwd > /worktmp/user.ldif
# ./migrate_group.pl /etc/group > /worktmp/group.ldif
步驟4:建立example.ldif,ou_people.ldif, ou_group.ldif
example.ldif 這個檔案是為了建立example.com 這個最上層的物件;
ou_people.ldif 是為了建立people 這個組織物件;ou_group.ldif 是為了建立
group 這個組織物件。
#cat example.ldif
dn: dc=example,dc=com
dc: example
objectClass: dcObject
objectClass: organizationalUnit
ou: example.com
#cat ou_people.ldif
dn: ou=people, dc=example, dc=com
objectclass: organizationalunit
ou: people
#cat ou_group.ldif
dn: ou=group, dc=example, dc=com
objectclass: organizationalunit
ou: group
利用LDAP 整合Apache 網頁驗證
12/18
步驟5:轉換原有Linux 帳號至LDAP Server 上
#slapadd -vl example.ldif
added: "dc=example,dc=com" (00000001)
#slapadd -vl ou_people.ldif
added: "ou=people,dc=example,dc=com" (00000002)
#slapadd -vl ou_group.ldif
added: "ou=group,dc=example,dc=com" (00000043)
#slapadd -vl user.ldif
#slapadd -vl group.ldif
步驟6:啟動LDAP Server 並檢查其資料庫
記得把/var/lib/ldap/目錄內的檔案變更擁有者及群組為ldap。
#chown ldap.ldap /var/lib/ldap/*
#service ldap start
利用ldapsearch 指令可搜尋LDAP 伺服器的資料,若是可看到以下的資料,代
表整個設定正確無誤。
#ldapsearch -x -b "dc=example,dc=com"
# extended LDIF
#
# LDAPv3
# base  with scope sub
利用LDAP 整合Apache 網頁驗證
13/18
# filter: (objectclass=*)
# requesting: ALL
#
# example.com
dn: dc=example,dc=com
dc: example
objectClass: dcObject
objectClass: organizationalUnit
ou: example.com
..
# www9, Group, example.com
dn: cn=www9,ou=Group,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: www9
userPassword:: e2NyeXB0fXg=
gidNumber: 508
# www10, Group, example.com
dn: cn=www10,ou=Group,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: www10
userPassword:: e2NyeXB0fXg=
gidNumber: 509
# search result
search: 2
利用LDAP 整合Apache 網頁驗證
14/18
result: 0 Success
# numResponses: 141
# numEntries: 140
3.3 安裝phpldapadmin
phpldapAdmin 是免費的工具,可以管理LDAP 伺服器,使用phpldapAdmin
只需透過瀏覽器就可管理LDAP 伺服器。筆者所用的版本的為0.9.4b 版本,讀
者可至
http://phpldapadmin.sourceforge.net/download.php
下載。
步驟 1:下載phpldapadmin-0.9.4b.tar.gz
將phpldapadmin-0.9.4b.tar.gz 下載至/tmp,並執行下列指令將其解壓縮至
/var/www/html。
# tar zxvf phpldapadmin-0.9.4b.tar.gz -C /var/www/html/
步驟 2:為了操作方便起見,建立Soft link。
#cd /var/www/html
# ln -s phpldapadmin-0.9.4b phpldapadmin
步驟3:修改phpMyadmin 設定檔。
#cd /var/www/html/phpldapadmin
#cp config.php.example config.php
# vi config.php
20 $servers[$i]['host'] = 'ldap.localhost';
27 $servers[$i]['base'] = 'dc=example,dc=com'; 􀃅不用改
51 $servers[$i]['login_pass'] = 'secretredhat';
利用LDAP 整合Apache 網頁驗證
15/18
步驟4:http://主機/phpldapadmin。
圖 5:phpldapadmin 畫面
3.4 利用LDAP 整合網頁認證
步驟1:建立測試網頁。
#mkdir /var/www/html/ldap
#echo “LDAP Auth Test Page” > /var/www/html/ldap/index.html
步驟2:安裝mod_authz_ldap 模組
要讓Apache伺服器可以存取LDAP伺服器上的資料,必須利用mod_authz_ldap
模組作為Apache 和LDAP 伺服器之間認證的介面,所以必須安裝
mod_authz_ldap 模組。
# rpm -ivh mod_authz_ldap*.rpm
利用LDAP 整合Apache 網頁驗證
16/18
步驟3:修改/etc/httpd/conf.d/auth_mysql.conf。
若之前曾安裝mod_auth_mysql 模組,則必須將mod_auth_mysql 模組功能關
閉。
6 #LoadModule mysql_auth_module modules/mod_auth_mysql.so
全部加以註解
步驟4:修改/etc/httpd/conf.d/authz_ldap.conf。
#
# AuthzLDAPEngine on
#
# AuthzLDAPServer localhost
# AuthzLDAPUserBase ou=People,dc=example,dc=com
# AuthzLDAPUserKey uid
# AuthzLDAPUserScope base
#
# AuthType basic
# AuthName "
ldap@example.com
"
# require valid-user
#
#
修改為以下文字
LoadModule authz_ldap_module modules/mod_authz_ldap.so
利用LDAP 整合Apache 網頁驗證
17/18
AuthzLDAPMethod ldap 􀃅RHEL 4 bug

https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=164620
AuthzLDAPServer localhost
AuthzLDAPUserBase ou=People,dc=example,dc=com
AuthzLDAPUserKey uid
AuthzLDAPUserScope base 或用subtree
AuthType basic
AuthName "
ldap@example.com
"
require valid-user
#service httpd restart
停止 httpd: [ 確定 ]
啟動 httpd: [ 確定 ]
步驟5:用帳號www1~www10 測試「
http://localhost/ldap/
」。
利用LDAP 整合Apache 網頁驗證
18/18
後記:
本期文章介紹利用LDAP 來整合網頁認證,除了Apache 外,現今很多的應用程
式均可以與LDAP 整合,運用LDAP 來扮演帳號管理的角色是現今企業運用的\n主流。
作者簡介
林彥明(Alex Lin):現任職於IBM Taiwan 技術支援中心,負責Linux、AIX、
WebSphere 相關技術支援工作。具有RHCX(RedHat 認證主考官)、RHCE、
NCLP(Novell Linux 認證專家)、LPIC、IBM AIX Expert、IBM MQ、SCJP、
SCWCD 等國際認證,參與建置臺灣第一套商業用IBM 1350 Linux 叢集系統及
RHEL 4、SLES 9 on zSeries 等Linux 專案。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/47853/showart_378105.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP