Apache 整合 Acitve Directory 達成 one single signon
阿維的公司使用AD進行使用者驗證,因此在使用者操作的便利性考量前提下.如何讓使用者不需要重覆輸入帳號與密碼,而直接抓取使用者已經登入AD的帳號資訊,已經變成系統開發必須要考量的項目之一 (至少阿維自己是這樣認為啦 @@)
.NET整合AD的資訊已經有大大實做成功並且實際運用於目前的系統上.由於都是微軟家族的產品,因此整合上比較容易.
但是目前公司存在有Apache+PHP+MySQL on Windows的架構,因此如何讓這樣的架構也可以快速的抓取使用者AD資訊是阿維今天要介紹的項目.
[版本需求]
1. Apache 2.x 以上
2. PHP和MySQL都沒有特殊的版本要求,不過阿維還是建議安裝PHP 5.x和MySQL 4.1.x以上的版本
[安裝過程]
1. 將mod_auth_sspi.so (下載位址)放到path_to_apache/modules這個目錄下面
2. 在httpd.conf裡面加上下面兩段
(1) LoadModule sspi_auth_module modules/mod_auth_sspi.so
(2)在需要進行驗證的目錄設定加上下面的內容,並且將AllowOverride開啟
AuthName "A Protected Place"
AuthType SSPI
SSPIDomain tpe.compalcomm.com
SSPIAuth On
SSPIAuthoritative On
SSPIOfferBasic On
require valid-user
修改後應該會像這樣
<Directory "D:/Develop/htdocs">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
AuthName "A Protected Place"
AuthType SSPI
SSPIDomain tpe.compalcomm.com
SSPIAuth On
SSPIAuthoritative On
SSPIOfferBasic On
require valid-user
</Directory>
3. 重新啟動Apache
[如何抓取使用者登入AD的帳號]
程式只有一行,真的只有一行.
$_SERVER["REMOTE_USER"] 就只需要這行就可以抓到使用者登入AD的帳號.
後面要怎麼達成one single signon,阿維相信各位程式高手都知道該怎麼做了,阿維就不獻醜了.
[如何抓取使用者在AD中的其他資訊]
阿維之前有找到一個adLDAP.php的class,只需要確定ldap_binding正常,
然後將剛剛抓到的使用者AD帳號傳進去,AD裡面所有的資訊全部都可以抓出來.
adLDAP http://adldap.sourceforge.net/
» 目前回應(1) » 發表回應 » 標籤 : mod_auth_sspi.so 整合驗證 AD Directory Active Apache 裝機記錄
» 引用網址
阿維的黑手日誌 - 安裝ClamAV
前天有使用者反應,登入系統之後,PC上面安裝的防毒軟體會跳出警告訊息.
而這台主機上面因為阿維偷懶加上相信Linux要中毒不太容易,所以就沒有安裝防毒軟體.
不過因為使用者有提出這樣的問題,為了解決使用者心中的疑惑.
於是阿維就著手安裝防毒軟體.
以下是阿維的操作歷程
透過urpmi進行安裝1. [root@localhost init.d]# urpmi clamav
2. [root@localhost init.d]# urpmi clamd
3. 安裝完畢之後啟動 clamav : [root@localhost init.d]# clamd start
4. 更新病毒碼 : [root@localhost init.d]# freshclam
結果顯示ClamAV update process started at Wed May 30 20:10:51 2007
WARNING: Your ClamAV installation is OUTDATED!
居然過期了....

查了一下ClamAV官方網站,阿維透過urpmi安裝的版本是0.87,最新版是0.90.2
台灣的mirror站,版本實在是太舊了,於是阿維就透過easy urpmi去找國外的mirror站
移除台灣的來源[root@localhost init.d]# urpmi.removemedia -a
removing medium "main"
found 0 headers in cache
removing 0 obsolete headers in cache
wrote config file [/etc/urpmi/urpmi.cfg]
換上美國的mirror站[root@localhost init.d]# urpmi.addmedia main ftp://mirrors.usc.edu/pub/linux/distributions/mandrakelinux/devel/2006.0/i586/media/main with media_info/hdlist.cz
[root@localhost init.d]# urpmi.addmedia contrib ftp://mirrors.usc.edu/pub/linux/distributions/mandrakelinux/devel/2006.0/i586/media/contrib with media_info/hdlist.cz
然後移除舊的Clamav 下urpme clamav-db這個指令之後,會把clamd,clamav也一併移除掉
再次透過urpmi進行安裝[root@localhost init.d]# urpmi clamav
To satisfy dependencies, the following 3 packages are going to be installed (10 MB):
clamav-0.90-0.1.20060mdk.i586
clamav-db-0.90-0.1.20060mdk.i586
libclamav1-0.90-0.1.20060mdk.i586
Is this OK? (Y/n)
還是一樣是舊版的.
看來還是下載Source Code回來自己Complie吧阿維最後放棄使用urpmi來安裝了,於是又回到最古老的方法,下載Source Code回來安裝.
以下是操作的步驟
檢查一下自己的kernel是否符合要求[root@localhost init.d]# uname -r
建立群組和使用者
因為剛剛已經有使用過urpmi進行過安裝,所以現在系統裡面會有clamav群組和clamav這個使用者
如果沒有的話下面是建立的方法[root@localhost init.d]# groupadd -g 40 clamav
[root@localhost init.d]# useradd -c "CLAMAV Owner" -g clamav
開始進行Complie
[root@localhost init.d]# ./configure --prefix=/usr/local/clamav --libexecdir=/usr/local/sbin --disable-clamuko --with-usr=clamav --with-group=clamav ( 全部打在同一行上)
Disable Clamuko的原因Clamuko settings
WARNING: This is experimental software. It is very likely it will hang up your system!!!
make
make install
建立相關目錄與設定權限
mkdir /usr/local/clamav/run
mkdir /usr/local/clamav/db
chown -R clamav:clamav /usr/local/clamav
修改clamd.conf 和 freshclam.conf 設定檔 : 藍色字是阿維修改過的
vi /usr/local/clamav/etc/clamd.confLine 8 : Example -> #Example
Line 14 : #LogFile /tmp/clamd.log -> LogFile /var/log/clamav/clamd.log
Line 30 : LogFileMaxSize 2M -> LogFileMaxSize 0
Line 65 : #DatabaseDirectory /var/lib/clamav -> DatabaseDirectory /usr/local/clamav/db
Line 72 : LocalSocket /tmp/clamd -> LocalSocket /usr/local/clamav/run/clamav.sock
Line 145 : #User clamav -> User clamav
vi /usr/local/clamav/etc/freshclam.conf : 藍色字是阿維修改過的Line 8 : Example -> #Example
Line 13 : #DatabaseDirectory /var/lib/clamav -> DatabaseDirectory /usr/local/clamav/db
Line 34 : #PidFile /var/run/freshclam.pid -> PidFile /usr/local/clamav/run/freshclam.pid
Line 95 : #NotifyClamd /path/to/clamd.conf -> NotifyClamd /usr/local/clamav/etc/clamd.conf
接著執行啟動 clamav : [root@localhost init.d]# clamd start
更新病毒碼 : [root@localhost init.d]# freshclam
耶~~順利更新病毒碼囉
開始進行掃毒[root@localhost init.d]# clamscan -l /data/virus_scan/scan_logs/scan.log -r /www ( 全部打在同一行上)
-l /data/virus_scan/scan_logs/scan.log : 阿維指定掃毒的log存放位置與檔案名稱
-r /www : 掃描的目錄
--move=/data/virus_scan/infect_files/ : 如果檔案受到感染,將檔案移動到這個目錄
寫進排程 : crontab -e## Clamav batch
* 6,12,18,00 * * * clamav /usr/local/clamav/bin/freshclam ## 六個小時檢查一次更新
* 00 * * 6 clamav /usr/local/clamav/bin/clamscan -l /data/virus_scan/scan_logs/scan.log -r /www --move=/data/virus_scan/infect_files/ ## 每個星期六凌晨12點進行掃毒
阿維今天到公司之後,更新病毒碼又出現. WARNING: Your ClamAV installation is OUTDATED!是超級無言的啦!! 所以就將舊版的ClamAV砍掉,下載最新版本0.90.3,
接著又重複了以上的步驟一次,ClamAV難道不能夠提供引擎在更新的時候也一併更新嗎?
老是要這樣砍掉,然後再重新安裝一次,是很累人的耶.
» 引用網址
使用urpmi將sendmail換成POSTFIX
背景
阿維原本在大陸的主機是沒有安裝sendmail的,
因為原本的功能需求並不需要,所以阿維也乾脆連PORT 25都一併關掉.
後來公司的大陸企業網站也架在這台主機上後,
負責企業網站的那組人需要寄發郵件的功能.
於是阿維就將PORT 25打開,並且讓他們使用PEAR MAIL的方式去寄信.
可是今天他們跟我反應說,功能無法正常執行.
阿維自己測試了一下,的確每次寄信的response都很久.
於是就想說乾脆重新編譯PHP,將sendmail的功能也編進去.
可是重新編譯完PHP之後,response緩慢的情形一樣沒有改善.
再和阿凱討論之後,決定使用POSTFIX取代sendmail
主機的Linux版本 : Mandriva Linux release 2006.0 (Official) for i586
設定urpmi
首先我們必須先將安裝過程中的urpmi先清除掉,這樣我們使用urpmi的時候,他才不會去找CDROM
指令 urpmi.removemedia -a
到 Easy Urpmi找出離你最近的主機做更新
Easy Urpmi
基本上只需要做main的部份.
主機的話就選離你最近的,因為列表中沒有大陸的主機,
所以阿維就選台灣,想說應該不會太慢.
選擇完之後它會顯示更新的網址.
阿維得到的結果是
指令 urpmi.addmedia main ftp://mdk.linux.org.tw/pub/mandrakelinux/official/2006.0/i586/media/main
with media_info/hdlist.cz
輸入這段結果後,系統會進行更新.
阿維昨天在更新的時候,速度還蠻快的,平均在200K~203K,只花兩分半鐘就做完更新了
安裝POSTFIX
指令 urpmi postfix
因為阿維一開始有安裝sendmail,因此在安裝postfix的時候,他會問要不要移除sendmail.
為了讓系統乾淨一點,所以當然是選擇移除sendmail.
安裝的時候會出現syslog的錯誤,
阿維在安裝完嘗試將syslog restart可是一樣會有問題.
不過在最後重起POSTFIX的時候,POSTFIX是可以正常運作的.
所以阿維就也先不去理會它了
指令 postfix restart
測試
阿維在啟動POSTFIX之後,將原本執行很慢的PEAR MAIL和使用PHP MAIL function的程式又重新跑了一次.
效能果然好很多,程式很快就有response,而且信件也都正常寄達
系統操作歷程
[root@localhost etc]# urpmi.removemedia -a
<br>removing medium "Installation Free CD1 (cdrom1)"
<br>removing medium "Installation Free CD2 (cdrom2)"
<br>removing medium "updates"
<br>removing medium "main"
<br>removing medium "contrib"
<br>found 0 headers in cache
<br>removing 0 obsolete headers in cache
<br>wrote config file [/etc/urpmi/urpmi.cfg]
<br>[root@localhost etc]# urpmi.addmedia main ftp://mdk.linux.org.tw/pub/mandrakelinux/official/2006.0/i586/media/main with media_info/hdlist.cz
<br>added medium main
<br>wrote config file [/etc/urpmi/urpmi.cfg]
<br>computing md5sum of existing source hdlist (or synthesis)
<br>retrieving source hdlist (or synthesis) of "main"...
<br> ftp://mdk.linux.org.tw/pub/mandrakelinux/official/2006.0/i586/media/main/media_info/hdlist.cz
<br>found probed hdlist (or synthesis) as media_info/hdlist.cz
<br>...retrieving done
<br>examining hdlist file [/var/cache/urpmi/partial/hdlist.main.cz]
<br>examining pubkey file of "main"...
<br>performing second pass to compute dependencies
<br>
<br>examining hdlist file [/var/lib/urpmi/hdlist.main.cz]
<br>built hdlist synthesis file for medium "main"
<br>found 0 headers in cache
<br>removing 0 obsolete headers in cache
<br>wrote config file [/etc/urpmi/urpmi.cfg]
<br>[root@localhost etc]# urpmi postfix
<br>The following packages have to be removed for others to be upgraded:
<br>sendmail-8.13.4-6mdk.i586 (due to conflicts with postfix) (y/N) y
<br>
<br> ftp://mdk.linux.org.tw/pub/mandrakelinux/official/2006.0/i586/media/main/postfix-2.2.5-7mdk.i586.rpm
<br>installing postfix-2.2.5-7mdk.i586.rpm from /var/cache/urpmi/rpms
<br>removing sendmail-8.13.4-6mdk.i586
<br>Preparing... #############################################
<br> 1/1: postfix #############################################
<br>Shutting down kernel logger: [ OK ]
<br>Shutting down system logger: [ OK ]
<br>Starting system logger: /etc/init.d/syslog: line 41: 25192 Terminated $*
<br>[FAILED]
<br>Starting kernel logger: [ OK ]
<br>
<br>[root@localhost etc]# /etc/rc.d/init.d/syslog restart
<br>Shutting down kernel logger: [ OK ]
<br>Shutting down system logger: [ OK ]
<br>Starting system logger: /etc/rc.d/init.d/syslog: line 41: 25568 Terminated $*
<br> [FAILED]
<br>Starting kernel logger: [ OK ]
<br>
<br>[root@localhost etc]# rc.d/init.d/postfix restart
<br>Shutting down postfix: [ OK ]
<br>Starting postfix: [ OK ]
<br>[root@localhost etc]
» 引用網址
PHP 升級到5.2.1完成
因為今天有同事需要PHP有sendmail的功能,
加上PHP剛好釋出了5.2.1的版本.
因此阿維今天下班的時候就順便增加sendmail功能和升級PHP.
以往的phpinfo都會帶出 ./configure .... 這後面一長串的資訊.
安裝PHP 5.2.1之後變成只會顯示Apache和MySQL的編譯資訊.
或許是阿維已經太習慣手動編譯這些東西了,
原本想説可能要花兩三個小時才能完成,
沒想到29分鐘就完成了PHP和eAccelerator的編譯以及設定.
終於不用很晚才能下班回家了.
» 引用網址
