Enterprise Linux 實 戰 講 座 利 用 LDAP 整 合 Apache 網 頁 驗 證 上 期 的 Enterprise Linux 實 戰 講 座 利 用 MySQL 整 合 Apache 網 頁 驗 證, 筆 者 介 紹 利 用 MySQL 資 料 庫 伺 服 器 來 存 放 帳 號 及 密 碼, 藉 以 整 合 Apache 網 頁 驗 證, 以 達 集 中 管 理 之 目 的 此 法 雖 好, 但 唯 一 美 中 不 足 的 是 很 多 的 應 用 程 式 並 無 法 與 MySQL 整 合, 所 以 此 篇 文 章, 筆 者 介 紹 利 用 LDAP 整 合 Apache 網 頁 驗 證, 因 為 很 多 的 應 用 程 式, 都 可 以 與 LDAP 整 合, 所 以 用 LDAP 來 整 合 Apache 網 頁 驗 證 才 是 王 道 1/18 <2005-12-26 >
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 應 用 程 式 界 面 - 改 善 程 式 設 計 人 員 連 線 及 使 用 程 式 的 方 法 2/18 <2005-12-26 >
支 援 LDIFv1 - 完 全 合 乎 LDIF(LDAP Data Interchange Format) 第 一 版 的 標 準 增 強 獨 立 LDAP 伺 服 器 - 包 括 新 版 的 存 取 控 制 系 統 及 較 佳 的 工 具 內 建 提 供 InnoDB 表 格 型 別, 支 援 標 準 二 進 位 格 式 資 料 及 資 料 庫 交 易 異 動 (Transactions) 機 制 及 row-level locking 和 foreign keys 3/18 <2005-12-26 >
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 整 合 綜 合 上 述, 整 個 實 作 流 程 如 下 : 4/18 <2005-12-26 >
圖 1: 實 作 流 程 5/18 <2005-12-26 >
3 實 戰 演 練 :LDAP 整 合 Apache 網 頁 驗 證 利 用 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 "\<$i\>" users.list awk '{print $2}' passwd --stdin $i 設 定 使 用 者 的 密 碼 6/18 <2005-12-26 >
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) 利 用 這 些 帳 號 登 入, 測 試 帳 號 / 密 碼 可 否 順 利 運 作 3.2 架 設 LDAP 伺 服 器 並 移 轉 帳 號 步 驟 1: 安 裝 LDAP 伺 服 器 以 root 的 身 份 登 入 系 統, 開 啟 終 端 視 窗, 鍵 入 system-config-packages 利 用 GUI 套 件 管 理 工 具 system-config-packages 網 路 伺 服 器 ( 圖 2), 點 選 詳 細 資 訊, 然 後 勾 選 openldap-server ( 圖 3), 便 會 提 示 放 入 適 當 的 光 碟 片, 順 利 完 成 安 裝 LDAP 伺 服 器 的 工 作 7/18 <2005-12-26 >
圖 2: 增 加 或 移 除 套 件 8/18 <2005-12-26 >
圖 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" 9/18 <2005-12-26 >
70 rootdn "cn=manager,dc=example,dc=com" 74 rootpw redhat 利 用 LDAP 整 合 Apache 網 頁 驗 證 步 驟 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 10/18 <2005-12-26 >
# 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 11/18 <2005-12-26 >
步 驟 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 <dc=example,dc=com> with scope sub 12/18 <2005-12-26 >
# 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 13/18 <2005-12-26 >
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'; 14/18 <2005-12-26 >
步 驟 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 15/18 <2005-12-26 >
步 驟 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 <IfModule mod_authz_ldap.c> # <Location /private> # AuthzLDAPEngine on # # AuthzLDAPServer localhost # AuthzLDAPUserBase ou=people,dc=example,dc=com # AuthzLDAPUserKey uid # AuthzLDAPUserScope base # # AuthType basic # AuthName "ldap@example.com" # require valid-user # # </Location> </IfModule> 修 改 為 以 下 文 字 LoadModule authz_ldap_module modules/mod_authz_ldap.so <IfModule mod_authz_ldap.c> 16/18 <2005-12-26 >
<Directory /var/www/html/ldap> 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 </Directory> </IfModule> #service httpd restart 停 止 httpd: [ 確 定 ] 啟 動 httpd: [ 確 定 ] 步 驟 5: 用 帳 號 www1~www10 測 試 http://localhost/ldap/ 17/18 <2005-12-26 >
後 記 : 本 期 文 章 介 紹 利 用 LDAP 來 整 合 網 頁 認 證, 除 了 Apache 外, 現 今 很 多 的 應 用 程 式 均 可 以 與 LDAP 整 合, 運 用 LDAP 來 扮 演 帳 號 管 理 的 角 色 是 現 今 企 業 運 用 的 主 流 作 者 簡 介 林 彥 明 (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 專 案 18/18 <2005-12-26 >