顯示具有 Linux 標籤的文章。 顯示所有文章
顯示具有 Linux 標籤的文章。 顯示所有文章

2010年11月11日 星期四

利用netstat找出怪怪的連線

起因:
主機上偶爾有一個httpd的線程佔用大量記憶體,但一直不確定是那個網頁造成的
它會造成網路,暫時沒反應...>.<
努力找了很久都沒找到...(是我太笨嗎??)


後來先利用top來看出是那個httpd及其PID,
再利用netstat -ntup | grep ESTAB 來比對查詢是來自那一個ip
這樣就可以到httpd的log去查是那一個網頁

不過,查出來後竟然是因為mysql搜尋出來的資料量太大
它一直在收資料,整個頻寬都被它佔去了

所幸主機上還有另一張對內的網卡,於是把mysql的連線都轉而走那張對內的卡
這樣就解決這問題了
(這好像是早就應該要這麼做的事了....>.<)


以下是一些實用的 netstat 語法,可以檢查主機的連線數量:

netstat -na
顯示主機上所有已建立的連線。
netstat -an | grep :80 | sort
顯示所有 port 80 的連線,並把結果排序。
netstat -n -p|grep SYN_REC | wc -l
列出主機上有多少個 SYNC_REC,一般上這個數字應該相當低。
netstat -n -p | grep SYN_REC | sort -u
同樣是列出 SYNC_REC,但不只列出數字,而是將每個 SYNC_REC 的連線列出。
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出發送 SYNC_REC 的所有 ip 地址。
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
計算每一個 ip 在主機上建立的連線數量。
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出從 TCP 或 UDP 連線到主機的 ip 的數量。
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
列出每個 ip 建立的 ESTABLISHED 連線數量。
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
列出每個 ip 建立的 port 80 連線數量。



參考資料:使用 netstat 找出不正常的連線
起因:
主機上偶爾有一個httpd的線程佔用大量記憶體,但一直不確定是那個網頁造成的
它會造成網路,暫時沒反應...>.<
努力找了很久都沒找到...(是我太笨嗎??)


後來先利用top來看出是那個httpd及其PID,
再利用netstat -ntup | grep ESTAB 來比對查詢是來自那一個ip
這樣就可以到httpd的log去查是那一個網頁

不過,查出來後竟然是因為mysql搜尋出來的資料量太大
它一直在收資料,整個頻寬都被它佔去了

所幸主機上還有另一張對內的網卡,於是把mysql的連線都轉而走那張對內的卡
這樣就解決這問題了
(這好像是早就應該要這麼做的事了....>.<)


以下是一些實用的 netstat 語法,可以檢查主機的連線數量:

netstat -na
顯示主機上所有已建立的連線。
netstat -an | grep :80 | sort
顯示所有 port 80 的連線,並把結果排序。
netstat -n -p|grep SYN_REC | wc -l
列出主機上有多少個 SYNC_REC,一般上這個數字應該相當低。
netstat -n -p | grep SYN_REC | sort -u
同樣是列出 SYNC_REC,但不只列出數字,而是將每個 SYNC_REC 的連線列出。
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出發送 SYNC_REC 的所有 ip 地址。
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
計算每一個 ip 在主機上建立的連線數量。
netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出從 TCP 或 UDP 連線到主機的 ip 的數量。
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
列出每個 ip 建立的 ESTABLISHED 連線數量。
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
列出每個 ip 建立的 port 80 連線數量。



參考資料:使用 netstat 找出不正常的連線

2010年9月14日 星期二

lsattr以及chattr的用法

前一陣子幫手上管理的網站換到別台主機
要去修改sshd登入時要用的key時..竟然不能修改..
我己經是root了耶...它竟然跟我說沒有權限修改這個檔案...>.<
差點沒瘋掉....研究好一陣子後...才知道原因
原來是該台主機安全性做得比較嚴謹,就是利用chattr來把部份檔案加上隱藏屬性

謎之音:你還有得學呢...


底下是chattr及lsattr的用法


[root@www ~]# chattr [+-=][ASacdistu] 檔案或目錄名稱
選項與參數:
+ :增加某一個特殊參數,其他原本存在參數則不動。
- :移除某一個特殊參數,其他原本存在參數則不動。
= :設定一定,且僅有後面接的參數

A :當設定了 A 這個屬性時,若你有存取此檔案(或目錄)時,他的存取時間 atime將不會被修改,可避免I/O較慢的機器過度的存取磁碟。這對速度較慢的電腦有幫助
S :一般檔案是非同步寫入磁碟的(原理請參考第五章sync的說明),如果加上 S 這個屬性時,當你進行任何檔案的修改,該更動會『同步』寫入磁碟中。
a :當設定 a 之後,這個檔案將只能增加資料,而不能刪除也不能修改資料,只有root才能設定這個屬性。
c :這個屬性設定之後,將會自動的將此檔案『壓縮』,在讀取的時候將會自動解壓縮,但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大檔案似乎蠻有用的!)
d :當 dump 程序被執行的時候,設定 d 屬性將可使該檔案(或目錄)不會被 dump 備份
i :這個 i 可就很厲害了!他可以讓一個檔案『不能被刪除、改名、設定連結也無法寫入或新增資料!』對於系統安全性有相當大的助益!只有 root 能設定此屬性
s :當檔案設定了 s 屬性時,如果這個檔案被刪除,他將會被完全的移除出這個硬碟空間,所以如果誤刪了,完全無法救回來了喔!
u :與 s 相反的,當使用 u 來設定檔案時,如果該檔案被刪除了,則資料內容其實還存在磁碟中,可以使用來救援該檔案喔!
注意:屬性設定常見的是 a 與 i 的設定值,而且很多設定值必須要身為 root 才能設定




[root@www ~]# lsattr [-adR] 檔案或目錄
選項與參數:
-a :將隱藏檔的屬性也秀出來;
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名;
-R :連同子目錄的資料也一併列出來!


參考資料來源:鳥哥的Linux私房菜
前一陣子幫手上管理的網站換到別台主機
要去修改sshd登入時要用的key時..竟然不能修改..
我己經是root了耶...它竟然跟我說沒有權限修改這個檔案...>.<
差點沒瘋掉....研究好一陣子後...才知道原因
原來是該台主機安全性做得比較嚴謹,就是利用chattr來把部份檔案加上隱藏屬性

謎之音:你還有得學呢...


底下是chattr及lsattr的用法


[root@www ~]# chattr [+-=][ASacdistu] 檔案或目錄名稱
選項與參數:
+ :增加某一個特殊參數,其他原本存在參數則不動。
- :移除某一個特殊參數,其他原本存在參數則不動。
= :設定一定,且僅有後面接的參數

A :當設定了 A 這個屬性時,若你有存取此檔案(或目錄)時,他的存取時間 atime將不會被修改,可避免I/O較慢的機器過度的存取磁碟。這對速度較慢的電腦有幫助
S :一般檔案是非同步寫入磁碟的(原理請參考第五章sync的說明),如果加上 S 這個屬性時,當你進行任何檔案的修改,該更動會『同步』寫入磁碟中。
a :當設定 a 之後,這個檔案將只能增加資料,而不能刪除也不能修改資料,只有root才能設定這個屬性。
c :這個屬性設定之後,將會自動的將此檔案『壓縮』,在讀取的時候將會自動解壓縮,但是在儲存的時候,將會先進行壓縮後再儲存(看來對於大檔案似乎蠻有用的!)
d :當 dump 程序被執行的時候,設定 d 屬性將可使該檔案(或目錄)不會被 dump 備份
i :這個 i 可就很厲害了!他可以讓一個檔案『不能被刪除、改名、設定連結也無法寫入或新增資料!』對於系統安全性有相當大的助益!只有 root 能設定此屬性
s :當檔案設定了 s 屬性時,如果這個檔案被刪除,他將會被完全的移除出這個硬碟空間,所以如果誤刪了,完全無法救回來了喔!
u :與 s 相反的,當使用 u 來設定檔案時,如果該檔案被刪除了,則資料內容其實還存在磁碟中,可以使用來救援該檔案喔!
注意:屬性設定常見的是 a 與 i 的設定值,而且很多設定值必須要身為 root 才能設定




[root@www ~]# lsattr [-adR] 檔案或目錄
選項與參數:
-a :將隱藏檔的屬性也秀出來;
-d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名;
-R :連同子目錄的資料也一併列出來!


參考資料來源:鳥哥的Linux私房菜

2010年8月27日 星期五

linux 單一目錄檔案太多時該怎麼刪?

今天為了要清出硬碟空間...
硬是要刪掉一些東西
但老是遇到幾個目錄出現
bash: /bin/rm: Argument list too long
這樣的訊息....找了一下文章

發現原來是 rm 有最大一次刪除的數量,所以當一個目錄裡有太多的檔案或目錄時,就會出現錯誤,估計應該是在二萬以下,可以使用 find ./ | xargs rm -rf 來刪除,在這邊的目的是先使用 find 列出檔案,再導向到 xargs,xargs 再餵給 rm,在這裡,xargs 會分批依照 rm 的最大數量餵給 rm,然後就可以順利刪除檔案了

相關文章內容請詳閱文章出处:飞诺网(www.firnow.com) 今天為了要清出硬碟空間...
硬是要刪掉一些東西
但老是遇到幾個目錄出現
bash: /bin/rm: Argument list too long
這樣的訊息....找了一下文章

發現原來是 rm 有最大一次刪除的數量,所以當一個目錄裡有太多的檔案或目錄時,就會出現錯誤,估計應該是在二萬以下,可以使用 find ./ | xargs rm -rf 來刪除,在這邊的目的是先使用 find 列出檔案,再導向到 xargs,xargs 再餵給 rm,在這裡,xargs 會分批依照 rm 的最大數量餵給 rm,然後就可以順利刪除檔案了

相關文章內容請詳閱文章出处:飞诺网(www.firnow.com)

2010年5月25日 星期二

vsftpd denyhost

本來打算改一下denyhosts的設定檔就好
但一直無法成功
只好另外找一個專門寫來檢查vsftpd.log的python程式

用法也很簡單,直接執行該檔案就好
(系統要安裝python)


下載點:
vsftpd_denyhost.py
本來打算改一下denyhosts的設定檔就好
但一直無法成功
只好另外找一個專門寫來檢查vsftpd.log的python程式

用法也很簡單,直接執行該檔案就好
(系統要安裝python)


下載點:
vsftpd_denyhost.py

2010年4月22日 星期四

How to use ftp in a shell script

公司內部在用的備份機制原本用wput來上傳的
但無奈換個ftp server後,就一直無法順利上傳
研判應該是wput無法針對新版的ftp server正確使用PASV模式
於是只好改用shell script直接上傳
下面的資料摘自How to use ftp in a shell script


Example (non-working) script

#!/bin/sh
HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp $HOST <<END_SCRIPT
user $USER
$PASSWD
put $FILE
quit
END_SCRIPT
exit 0

The above script will just hang if run in the foreground (in an xterm), or if run in the background (from a cron job), it will fail to perform the work of transferring file.txt.

/dev/tty names a strange, magic device. Each process (more strictly each process group) has a different /dev/tty, and you can not naively make ftp clients read the password from some non-magic, yet convenient source, like a "here document". When run in an xterm, the script above appears to hang because it reads the password from /dev/tty. The xterm constitutes the script's /dev/tty, so the script waits for keyboard input.

Example Working Script

#!/bin/sh
HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put $FILE
quit
END_SCRIPT
exit 0

公司內部在用的備份機制原本用wput來上傳的
但無奈換個ftp server後,就一直無法順利上傳
研判應該是wput無法針對新版的ftp server正確使用PASV模式
於是只好改用shell script直接上傳
下面的資料摘自How to use ftp in a shell script


Example (non-working) script

#!/bin/sh
HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp $HOST <<END_SCRIPT
user $USER
$PASSWD
put $FILE
quit
END_SCRIPT
exit 0

The above script will just hang if run in the foreground (in an xterm), or if run in the background (from a cron job), it will fail to perform the work of transferring file.txt.

/dev/tty names a strange, magic device. Each process (more strictly each process group) has a different /dev/tty, and you can not naively make ftp clients read the password from some non-magic, yet convenient source, like a "here document". When run in an xterm, the script above appears to hang because it reads the password from /dev/tty. The xterm constitutes the script's /dev/tty, so the script waits for keyboard input.

Example Working Script

#!/bin/sh
HOST='ftp.users.qwest.net'
USER='yourid'
PASSWD='yourpw'
FILE='file.txt'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put $FILE
quit
END_SCRIPT
exit 0

2010年3月16日 星期二

使用yum時遇到的錯誤

常會遇見在CentOS下使用yum或rpm指令時,發生錯誤:
錯誤訊息大概都大同小異
例:
rpmdb: Lock table is out of available locker entries
rpmdb: Unknown locker ID: xxxx.....

主要做法如下,更新後即可使用


1. rm /var/lib/rpm/__db.00*
2. rpm --rebuilddb

rebuilddb之後,再重新執行安裝即可。

參考資料來源:http://www.kume.idv.tw/read-254.html
常會遇見在CentOS下使用yum或rpm指令時,發生錯誤:
錯誤訊息大概都大同小異
例:
rpmdb: Lock table is out of available locker entries
rpmdb: Unknown locker ID: xxxx.....

主要做法如下,更新後即可使用


1. rm /var/lib/rpm/__db.00*
2. rpm --rebuilddb

rebuilddb之後,再重新執行安裝即可。

參考資料來源:http://www.kume.idv.tw/read-254.html

2010年3月8日 星期一

刪除特定的process

由於有些程式會當掉,於是用了笨方法,每n小時就重啟
原本是用killall xxxx 來把程式砍掉
但現在有一支程式不能刪...於是找了一些方式來過濾,語法如下



ps aux grep 關鍵字 grep -v grep awk '{print $2}'

但是這樣只會列出PID數字,還無法達成一行刪除,問了同事發現有個 xargs的好東西

所以要刪掉某個程式的所有 Process 的語法如下

ps aux grep 關鍵字 grep -v grep awk '{print $2}' xargs -L1 kill

這樣就會把前面 stdout 出來的 PID 數字,再倒給 kill 去砍囉~

參考資料: 一行刪除程式所有的 Process字串處理工具: Awk

由於有些程式會當掉,於是用了笨方法,每n小時就重啟
原本是用killall xxxx 來把程式砍掉
但現在有一支程式不能刪...於是找了一些方式來過濾,語法如下



ps aux grep 關鍵字 grep -v grep awk '{print $2}'

但是這樣只會列出PID數字,還無法達成一行刪除,問了同事發現有個 xargs的好東西

所以要刪掉某個程式的所有 Process 的語法如下

ps aux grep 關鍵字 grep -v grep awk '{print $2}' xargs -L1 kill

這樣就會把前面 stdout 出來的 PID 數字,再倒給 kill 去砍囉~

參考資料: 一行刪除程式所有的 Process字串處理工具: Awk

2009年5月20日 星期三

linux安裝程式的指令(apt-get、yum)

早期是用rpm
但後來fc,suse,centos,ubuntu都有發展出內建的一套介面程式
目前我有用過的就這幾套
大致上是
yum -->fc,centos,suse
yast -->suse
apt-get -->ubuntu(debian)
(當然..你想在ubuntu上使用yum或是centos上使用apt-get也是可以啦,自己裝一裝就是了)

安裝指令
yum install 套件名稱
apt-get install 套件名稱

搜尋指令
yum provides 關鍵字
apt-cache search 關鍵字


基本上..大概就這二個比較常用,其他像update,remove等參數都是同樣的用法

但在fc6上,我有遇到一個問題..就是用yum install 會無法安裝
它會顯示找不到檔案(那是因為fc6以後,它預設的更新站台己轉移)
要解決這個問題,需要去修改/etc/yum.repos.d/這個目錄下的幾個.repo檔
例如:fedora-core.repo這個檔案
修改原本的
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/os/

改成
baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/$releasever/$basearch/os/


fc6的/etc/yum.repos.d/這個目錄下...預設有

fedora-core.repo fedora-legacy.repo
fedora-development.repo fedora-updates.repo
fedora-extras-development.repo fedora-updates-testing.repo
fedora-extras.repo

這幾個檔...原則上每個都要參照原本的路徑去修正
不然就會遇到類似
Error: Cannot find a valid baseurl for repo: extras
這樣的錯誤訊息 ----> 看最後是什麼關鍵字..就去改 fedora-xxxx.repo

這裡要說的是,suse預設是沒有這東西的,即使裝好yum,它的/etc/yum.repos.d/下仍然是空的
得自己新增一個abc.repo的檔案在該目錄下,如下範例

[base]
name=SUSE LINUX 10.0 - Base
#baseurl=ftp://ftp.gwdg.de/pub/opensuse/distribution/SL-10.0-OSS/inst-source/suse
mirrorlist=/etc/yum.repos.d/base.mirrors
enabled=1
gpgcheck=1
gpgkey=ftp://ftp.gwdg.de/pub/opensuse/distribution/SL-10.0-OSS/inst-source/pubring.gpg

相關的詳細資料,請參閱http://liquidat.wordpress.com/2005/10/16/setting-up-yum-on-suse-linux-100-3/


最後摘錄一些從 yum apt 常用指令索引看來的資料

APT 常用指令如下:

apt-get update
更新套件列表

apt-get dist-upgrade
升級 rpm

apt-cache search
搜尋套件,ex: apt-cache search httpd

apt-get install
安裝套件,這裡的套件安裝,會考慮到相依性的問題。 ex: apt-get install httpd

apt-get remove
移除套件,這裡的套件移除,也會考慮到相依性的問題。 ex: apt-get remove httpd

apt-get clean
清除安裝時下載的暫存套件原始檔案,位於 /var/cache/apt/archives

YUM 常用指令如下:

yum update
更新套件, ex: yum update httpd,如果只有 yum update ,會更新所有已經安裝的套件。

yum search
搜尋套件,ex: yum search httpd*,會搜尋所有跟 httpd 有關的套件。

yum install
安裝套件,這裡的套件安裝,會考慮到相依性的問題。 ex: yum install httpd

yum remove
移除套件,這裡的套件移除,也會考慮到相依性的問題。 ex: yum remove httpd

yum clean
清除安裝時下載的暫存套件原始檔案,位於 /var/cache/yum,因為這裡可以清除的項目很多,我最常用的是 yum clean all ,一次給他清掉 :p

yum list
列出套件名稱,用法常用有分以下幾種:

yum list updates
列出所有可以更新的套件

yum list installed
列出所有已安裝的套件

更多的中文參考資訊,可以見以下兩個網站:
YUM的使用
APT 的安裝、使用
早期是用rpm
但後來fc,suse,centos,ubuntu都有發展出內建的一套介面程式
目前我有用過的就這幾套
大致上是
yum -->fc,centos,suse
yast -->suse
apt-get -->ubuntu(debian)
(當然..你想在ubuntu上使用yum或是centos上使用apt-get也是可以啦,自己裝一裝就是了)

安裝指令
yum install 套件名稱
apt-get install 套件名稱

搜尋指令
yum provides 關鍵字
apt-cache search 關鍵字


基本上..大概就這二個比較常用,其他像update,remove等參數都是同樣的用法

但在fc6上,我有遇到一個問題..就是用yum install 會無法安裝
它會顯示找不到檔案(那是因為fc6以後,它預設的更新站台己轉移)
要解決這個問題,需要去修改/etc/yum.repos.d/這個目錄下的幾個.repo檔
例如:fedora-core.repo這個檔案
修改原本的
#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/os/

改成
baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/$releasever/$basearch/os/


fc6的/etc/yum.repos.d/這個目錄下...預設有

fedora-core.repo fedora-legacy.repo
fedora-development.repo fedora-updates.repo
fedora-extras-development.repo fedora-updates-testing.repo
fedora-extras.repo

這幾個檔...原則上每個都要參照原本的路徑去修正
不然就會遇到類似
Error: Cannot find a valid baseurl for repo: extras
這樣的錯誤訊息 ----> 看最後是什麼關鍵字..就去改 fedora-xxxx.repo

這裡要說的是,suse預設是沒有這東西的,即使裝好yum,它的/etc/yum.repos.d/下仍然是空的
得自己新增一個abc.repo的檔案在該目錄下,如下範例

[base]
name=SUSE LINUX 10.0 - Base
#baseurl=ftp://ftp.gwdg.de/pub/opensuse/distribution/SL-10.0-OSS/inst-source/suse
mirrorlist=/etc/yum.repos.d/base.mirrors
enabled=1
gpgcheck=1
gpgkey=ftp://ftp.gwdg.de/pub/opensuse/distribution/SL-10.0-OSS/inst-source/pubring.gpg

相關的詳細資料,請參閱http://liquidat.wordpress.com/2005/10/16/setting-up-yum-on-suse-linux-100-3/


最後摘錄一些從 yum apt 常用指令索引看來的資料

APT 常用指令如下:

apt-get update
更新套件列表

apt-get dist-upgrade
升級 rpm

apt-cache search
搜尋套件,ex: apt-cache search httpd

apt-get install
安裝套件,這裡的套件安裝,會考慮到相依性的問題。 ex: apt-get install httpd

apt-get remove
移除套件,這裡的套件移除,也會考慮到相依性的問題。 ex: apt-get remove httpd

apt-get clean
清除安裝時下載的暫存套件原始檔案,位於 /var/cache/apt/archives

YUM 常用指令如下:

yum update
更新套件, ex: yum update httpd,如果只有 yum update ,會更新所有已經安裝的套件。

yum search
搜尋套件,ex: yum search httpd*,會搜尋所有跟 httpd 有關的套件。

yum install
安裝套件,這裡的套件安裝,會考慮到相依性的問題。 ex: yum install httpd

yum remove
移除套件,這裡的套件移除,也會考慮到相依性的問題。 ex: yum remove httpd

yum clean
清除安裝時下載的暫存套件原始檔案,位於 /var/cache/yum,因為這裡可以清除的項目很多,我最常用的是 yum clean all ,一次給他清掉 :p

yum list
列出套件名稱,用法常用有分以下幾種:

yum list updates
列出所有可以更新的套件

yum list installed
列出所有已安裝的套件

更多的中文參考資訊,可以見以下兩個網站:
YUM的使用
APT 的安裝、使用

2009年5月18日 星期一

新增swap的大小

主機因故把swap都吃光了...
但又無法有效釋放....只好手動幫它增swap了
下述內容是從 2.2. 增加 Swap 空間 摘錄,若需要詳細內容
請自行前往
http://www.aliok.net/study/linux/rhl-cg-zh_TW-9/index.html
這邊閱讀

由於主機上己無空閒的磁區可供分割出新的swap分割區
於是就利用新增swap檔案的方式來增加swap空間

新增一個 swap 檔案:

請先決定新 swap 檔案的大小,然後乘以 1024 以取得磁碟區塊(block)的大小,例如 64MB 之 swap 檔案的區塊大小為 65536。

請以 root 身份在 shell 提示符號下輸入下列指令,並包括 count 等於區塊大小的數值:

dd if=/dev/zero of=/swapfile bs=1024 count=65536


並使用以下指令來設定 swap 檔案:

mkswap /swapfile


如要立即啟用 swap 檔案(非開機時自動啟動),請使用下列指令:

swapon /swapfile


如要在開機時啟動它,請編輯 /etc/fstab 以包含:

/swapfile swap swap defaults 0 0


下次系統開機時,它將會啟用新的 swap 檔案。

在增加新的 swap 檔案並啟用它後,請檢視 cat /proc/swaps 或 free 指令的輸出以確定它已經被啟用。

主機因故把swap都吃光了...
但又無法有效釋放....只好手動幫它增swap了
下述內容是從 2.2. 增加 Swap 空間 摘錄,若需要詳細內容
請自行前往
http://www.aliok.net/study/linux/rhl-cg-zh_TW-9/index.html
這邊閱讀

由於主機上己無空閒的磁區可供分割出新的swap分割區
於是就利用新增swap檔案的方式來增加swap空間

新增一個 swap 檔案:

請先決定新 swap 檔案的大小,然後乘以 1024 以取得磁碟區塊(block)的大小,例如 64MB 之 swap 檔案的區塊大小為 65536。

請以 root 身份在 shell 提示符號下輸入下列指令,並包括 count 等於區塊大小的數值:

dd if=/dev/zero of=/swapfile bs=1024 count=65536


並使用以下指令來設定 swap 檔案:

mkswap /swapfile


如要立即啟用 swap 檔案(非開機時自動啟動),請使用下列指令:

swapon /swapfile


如要在開機時啟動它,請編輯 /etc/fstab 以包含:

/swapfile swap swap defaults 0 0


下次系統開機時,它將會啟用新的 swap 檔案。

在增加新的 swap 檔案並啟用它後,請檢視 cat /proc/swaps 或 free 指令的輸出以確定它已經被啟用。

2009年5月5日 星期二

pure-ftpd + mysql + web_manage

之前己經建置過了,但沒仔細記錄
這次就好好的記錄起來吧~~
參考了很多地方...但總是有缺了一些狀況的說明...
首先先去下載二個檔案
1.pure-ftpd-1.0.22.tar.gz
2.pure-ftpd_user_manage-2.1.tar.tgz

然後就是一連串的安裝過程了...


首先安裝 pure-ftpd-1.0.22.tar.gz
解開後,到目錄下執行
./configure \
--prefix=/usr/local/pureftpd \
--with-mysql \
--with-paranoidmsg \
--with-shadow \
--with-welcomemsg \
--with-uploadscript \
--with-quotas \
--with-cookie \
--with-virtualhosts \
--with-virtualchroot \
--with-diraliases \
--with-sysquotas \
--with-ratios \
--with-ftpwho \
--with-throttling

#make
#make install
#cd configuration-file
#chmod u+x pure-config.pl
#cp pure-config.pl /usr/local/pureftpd/sbin/
#cp pure-ftpd.conf /etc/pureftpd/

到這裡算是做好pure-ftpd的準備工作
======================================================================
若遇到
configure: error: libmysqlclient is needed for MySQL support

則先安裝mysql-devel,即可解決這問題
(yum install mysql-devel)
以及
將/usr/lib64/mysql/内的libmysqlclient.so.15.0.0做個軟連結到/usr/lib下即可
PHP預設是去的 /usr/lib/搜尋的,所以會找不到

上面的資訊來自: E点废墟(www.xok.la) 详细出处参考:http://xok.la/2008/08/configure_error_cannot_find_libmysqlclient_under.html

======================================================================
接下來安裝 pure-ftpd_user_manage-2.1.tar.tgz
解開它
tar -xvzf pure-ftpd_user_manage-2.1.tar.tgz
然後從網頁去做設定
http://xxxxxxx/pure-ftpd_user_manage/install.php
照著它的步驟一步一步設定好

然後將它最後產生的pureftpd-mysql設定檔複製起來
將它存到 /etc/pureftpd/pureftpd-mysql.conf
(記得將install.php刪除)
接下來修改
/etc/pureftpd/pure-ftpd.conf

# MySQL configuration file (see README.MySQL)
MySQLConfigFile /etc/pureftpd/pureftpd-mysql.conf

# Minimum UID for an authenticated user to log in.
MinUID 100
------->這個要注意一下,利用mysql設定帳號時,選登入的身份時
所選的UID記得要比這個數字高才可以登入

======================================================================
然後...就是執行程式了
依照剛才拷貝的pure-config.pl以及pure-ftpd.conf的路徑
/usr/local/pureftpd/sbin/pure-config.pl /etc/pureftpd/pure-ftpd.conf
這樣即可順利開啟起來

之前己經建置過了,但沒仔細記錄
這次就好好的記錄起來吧~~
參考了很多地方...但總是有缺了一些狀況的說明...
首先先去下載二個檔案
1.pure-ftpd-1.0.22.tar.gz
2.pure-ftpd_user_manage-2.1.tar.tgz

然後就是一連串的安裝過程了...


首先安裝 pure-ftpd-1.0.22.tar.gz
解開後,到目錄下執行
./configure \
--prefix=/usr/local/pureftpd \
--with-mysql \
--with-paranoidmsg \
--with-shadow \
--with-welcomemsg \
--with-uploadscript \
--with-quotas \
--with-cookie \
--with-virtualhosts \
--with-virtualchroot \
--with-diraliases \
--with-sysquotas \
--with-ratios \
--with-ftpwho \
--with-throttling

#make
#make install
#cd configuration-file
#chmod u+x pure-config.pl
#cp pure-config.pl /usr/local/pureftpd/sbin/
#cp pure-ftpd.conf /etc/pureftpd/

到這裡算是做好pure-ftpd的準備工作
======================================================================
若遇到
configure: error: libmysqlclient is needed for MySQL support

則先安裝mysql-devel,即可解決這問題
(yum install mysql-devel)
以及
將/usr/lib64/mysql/内的libmysqlclient.so.15.0.0做個軟連結到/usr/lib下即可
PHP預設是去的 /usr/lib/搜尋的,所以會找不到

上面的資訊來自: E点废墟(www.xok.la) 详细出处参考:http://xok.la/2008/08/configure_error_cannot_find_libmysqlclient_under.html

======================================================================
接下來安裝 pure-ftpd_user_manage-2.1.tar.tgz
解開它
tar -xvzf pure-ftpd_user_manage-2.1.tar.tgz
然後從網頁去做設定
http://xxxxxxx/pure-ftpd_user_manage/install.php
照著它的步驟一步一步設定好

然後將它最後產生的pureftpd-mysql設定檔複製起來
將它存到 /etc/pureftpd/pureftpd-mysql.conf
(記得將install.php刪除)
接下來修改
/etc/pureftpd/pure-ftpd.conf

# MySQL configuration file (see README.MySQL)
MySQLConfigFile /etc/pureftpd/pureftpd-mysql.conf

# Minimum UID for an authenticated user to log in.
MinUID 100
------->這個要注意一下,利用mysql設定帳號時,選登入的身份時
所選的UID記得要比這個數字高才可以登入

======================================================================
然後...就是執行程式了
依照剛才拷貝的pure-config.pl以及pure-ftpd.conf的路徑
/usr/local/pureftpd/sbin/pure-config.pl /etc/pureftpd/pure-ftpd.conf
這樣即可順利開啟起來

2009年5月4日 星期一

建立Mass Virtual Hosting

前面記了一篇virtual host快速設定法
裡面有提到Mass Virtual Hosting的做法,但覺得不是很清楚
於是再去找了 Hayes’s Blog 所寫的 Mass Virtual Hosting
這一篇就真的很詳細了....把內容直接做個記錄
方便往後自己要設定時,有整理過的資料可以參考

以前要新增一個 Virtual Host, 都必須寫類似以下這幾行的code在設定檔裡,
然後重啟 apache, 這樣對於架設大量 vhost 的 server 也太辛苦了

< Virtualhost 111.123.231.220 >
ServerName www.i-bbs.tw
DocumentRoot /var/www/
< /Virtualhost >

趁著伺服器下線研究了好幾個方案, 最後選擇了用 rewrite 的方法加上一些修改..

Step1 : edit /usr/local/etc/apache22/httpd.conf ,
把 mod_rewrite.so 這個 module 打開 , 然後在最低部加上



RewriteLog /var/log/rewrite_log # 自訂 log 的 path
RewriteLogLevel 0 # level 一定要設 0, 不然噴出來的 log 會擠爆硬碟 :p
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteMap vhost txt:/etc/vhost.map # vhost.map 的 path
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1 [L]

Step2 : edit /etc/vhost.map

#domain doc’s path
i-bbs.tw /usr/local/www/apache22/data/
www.i-bbs.tw /usr/local/www/apache22/data/www.i-bbs.tw
hayes.i-bbs.tw /usr/local/www/apache22/data/hayes.i-bbs.tw
mysql.i-bbs.tw /usr/local/www/apache22/data/phpMyAdmin

這裡有一個要注意的地方
由於我們要讓apache去讀取系統預設的/var/www以外的地方
所以得把selinux關掉(selinux的說明)
詳細做法-How to Disable SELinux
簡單來說...就是修改/etc/selinux/config 然後重開機就可以了
前面記了一篇virtual host快速設定法
裡面有提到Mass Virtual Hosting的做法,但覺得不是很清楚
於是再去找了 Hayes’s Blog 所寫的 Mass Virtual Hosting
這一篇就真的很詳細了....把內容直接做個記錄
方便往後自己要設定時,有整理過的資料可以參考

以前要新增一個 Virtual Host, 都必須寫類似以下這幾行的code在設定檔裡,
然後重啟 apache, 這樣對於架設大量 vhost 的 server 也太辛苦了

< Virtualhost 111.123.231.220 >
ServerName www.i-bbs.tw
DocumentRoot /var/www/
< /Virtualhost >

趁著伺服器下線研究了好幾個方案, 最後選擇了用 rewrite 的方法加上一些修改..

Step1 : edit /usr/local/etc/apache22/httpd.conf ,
把 mod_rewrite.so 這個 module 打開 , 然後在最低部加上



RewriteLog /var/log/rewrite_log # 自訂 log 的 path
RewriteLogLevel 0 # level 一定要設 0, 不然噴出來的 log 會擠爆硬碟 :p
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteMap vhost txt:/etc/vhost.map # vhost.map 的 path
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1 [L]

Step2 : edit /etc/vhost.map

#domain doc’s path
i-bbs.tw /usr/local/www/apache22/data/
www.i-bbs.tw /usr/local/www/apache22/data/www.i-bbs.tw
hayes.i-bbs.tw /usr/local/www/apache22/data/hayes.i-bbs.tw
mysql.i-bbs.tw /usr/local/www/apache22/data/phpMyAdmin

這裡有一個要注意的地方
由於我們要讓apache去讀取系統預設的/var/www以外的地方
所以得把selinux關掉(selinux的說明)
詳細做法-How to Disable SELinux
簡單來說...就是修改/etc/selinux/config 然後重開機就可以了

2009年2月20日 星期五

rsync的文章

公司的主機資料同步都是用rsync來做的
rsync 也有支援 SSH,也就是加密傳輸。
目前主機上就都是這樣在做的,但這些都是前人做好的

一直沒花時間去弄懂它..
直到前一陣子為了弄unix -> windows的資料同步
才把它稍微搞懂了一下

以下記錄網路上二篇文章的連結以及安裝過程跟所遇到的問題


介紹一下 rsync 這個同步備份程式
這一篇主要教了以下幾種方式的同步
unix -> unix
unix -> windows
windows -> unix
windows -> windows


然後....
Rsync + SSH — 讓 Server 自動異地備援也加密
這一篇就是講到怎麼讓rsync透過ssh來同步


下面記錄一下我的安裝過程

1.安裝cwrsync server(連結)

2.安裝完成後,在windows的服務裡,啟動 Openssh SSHD 和 RsyncServer 這兩個服務
註:若遇到無法啟動RsyncServer時,請先去C:\Program Files\cwRsyncServe下,把rsyncd.pid刪除,再啟動

3.把C:\Program Files\cwRsyncServer\var\SvcwRsync\.ssh\cwrsync 這個檔案丟到unix主機上
要執行rsync to windows.sh這個程式的user目錄下的.ssh裡面,權限設成600

4.設定windows上的rsync.conf以及要在unix上執行的shell script檔
註:這邊是利用在柚可椰小站所分享的shell script來做
要改的是restore to windows.sh中的
# identity: private key file for cwRsyncServer service account (available from Start Menu)
identity='/.ssh/cwrsync'

# which ps? /usr/ucb/ps for Solaris and /bin/ps for others
PS=/usr/ucb/ps

這二行,依自己的需求更改即可(修改cwrsync放的位置,以及ps這個程式所在的位置)
然後rsync.conf則是在C:\Program Files\cwRsyncServer\下
例:
[backupWeb]
path = /cygdrive/f/e-rent/web
read only = false
transfer logging = yes

節錄文章中二段比較需要注意的地方,script的用法,以及rsync.conf的設定說明以及使用restore to windows.sh的語法注意事項

cwRsync 的網站上介紹了一個 shell script 。我把那個 shell script 稍微改寫一下,改成 backup_from_windows.shrestore_to_windows.sh

backup_from_windows.sh 的用途是 windows -> unix,用法是
backup_from_windows.sh <windows_ip><windows_module><unix_directory>

restore_to_windows.sh 的用途是 unix -> windows,用法是
restore_to_windows.sh <windows_ip><unix_directory><windows_module>


另外要特別提一點,在 windows 的 rsyncd.conf 裡的一個標準的 module 寫法是像這樣

[test1]
path = /cygdrive/d/16
read only = false
transfer logging = yes


這個 module 的名稱是 test1 ,所定義的目錄是 D:\16,read only 是 false,所以除了備份之外也可以回存。所以想要在 unix 上把 windows 上的 D:\16 備份到 /work/16,就會下像這樣的指令,

backup_from_windows.sh 10.0.0.50 test1 /work/16

這樣 D:\16 下的所有目錄和檔案就會全部備份到 /work/16 去了。

但是,如果要把 /work/16 回存到 D:\16 的話,請記得要用 /work/16/ 而不是 /work/16,也就是說指令要這樣下,

restore_to_windows.sh 10.0.0.50 /work/16/ test1

如果不用 /work/16/ 而用 /work/16 的話,在 windows 裡的 D:\16 裡就會多一個目錄 D:\16\16,這就不是我們所期待的結果了。

這個部份的語法問題,在另一篇文章裡有說明到


上面用到的檔案若無法連結,我有自己上傳一份備用的
cwRsyncServer
back from windows.sh
restore to windows.sh
公司的主機資料同步都是用rsync來做的
rsync 也有支援 SSH,也就是加密傳輸。
目前主機上就都是這樣在做的,但這些都是前人做好的

一直沒花時間去弄懂它..
直到前一陣子為了弄unix -> windows的資料同步
才把它稍微搞懂了一下

以下記錄網路上二篇文章的連結以及安裝過程跟所遇到的問題


介紹一下 rsync 這個同步備份程式
這一篇主要教了以下幾種方式的同步
unix -> unix
unix -> windows
windows -> unix
windows -> windows


然後....
Rsync + SSH — 讓 Server 自動異地備援也加密
這一篇就是講到怎麼讓rsync透過ssh來同步


下面記錄一下我的安裝過程

1.安裝cwrsync server(連結)

2.安裝完成後,在windows的服務裡,啟動 Openssh SSHD 和 RsyncServer 這兩個服務
註:若遇到無法啟動RsyncServer時,請先去C:\Program Files\cwRsyncServe下,把rsyncd.pid刪除,再啟動

3.把C:\Program Files\cwRsyncServer\var\SvcwRsync\.ssh\cwrsync 這個檔案丟到unix主機上
要執行rsync to windows.sh這個程式的user目錄下的.ssh裡面,權限設成600

4.設定windows上的rsync.conf以及要在unix上執行的shell script檔
註:這邊是利用在柚可椰小站所分享的shell script來做
要改的是restore to windows.sh中的
# identity: private key file for cwRsyncServer service account (available from Start Menu)
identity='/.ssh/cwrsync'

# which ps? /usr/ucb/ps for Solaris and /bin/ps for others
PS=/usr/ucb/ps

這二行,依自己的需求更改即可(修改cwrsync放的位置,以及ps這個程式所在的位置)
然後rsync.conf則是在C:\Program Files\cwRsyncServer\下
例:
[backupWeb]
path = /cygdrive/f/e-rent/web
read only = false
transfer logging = yes

節錄文章中二段比較需要注意的地方,script的用法,以及rsync.conf的設定說明以及使用restore to windows.sh的語法注意事項

cwRsync 的網站上介紹了一個 shell script 。我把那個 shell script 稍微改寫一下,改成 backup_from_windows.shrestore_to_windows.sh

backup_from_windows.sh 的用途是 windows -> unix,用法是
backup_from_windows.sh <windows_ip><windows_module><unix_directory>

restore_to_windows.sh 的用途是 unix -> windows,用法是
restore_to_windows.sh <windows_ip><unix_directory><windows_module>


另外要特別提一點,在 windows 的 rsyncd.conf 裡的一個標準的 module 寫法是像這樣

[test1]
path = /cygdrive/d/16
read only = false
transfer logging = yes


這個 module 的名稱是 test1 ,所定義的目錄是 D:\16,read only 是 false,所以除了備份之外也可以回存。所以想要在 unix 上把 windows 上的 D:\16 備份到 /work/16,就會下像這樣的指令,

backup_from_windows.sh 10.0.0.50 test1 /work/16

這樣 D:\16 下的所有目錄和檔案就會全部備份到 /work/16 去了。

但是,如果要把 /work/16 回存到 D:\16 的話,請記得要用 /work/16/ 而不是 /work/16,也就是說指令要這樣下,

restore_to_windows.sh 10.0.0.50 /work/16/ test1

如果不用 /work/16/ 而用 /work/16 的話,在 windows 裡的 D:\16 裡就會多一個目錄 D:\16\16,這就不是我們所期待的結果了。

這個部份的語法問題,在另一篇文章裡有說明到


上面用到的檔案若無法連結,我有自己上傳一份備用的
cwRsyncServer
back from windows.sh
restore to windows.sh

[Ubuntu]關於update-rc.d 用法

如果在 /etc/init.d 中加入一個 script,還須要製作相關的 link
存到 /etc/rc*.d 中。
K 開頭是 kill , S 開頭是 start , 數字順序代表啟動的順序。
這些動作都可以利用update-rc.d來完成。


例:
在 /etc/init.d 中建立一個叫作 zope 的 script , 然後

update-rc.d zope defaults

就會產生以下連結::

Adding system startup for /etc/init.d/zope ...
/etc/rc0.d/K20zope -> ../init.d/zope
/etc/rc1.d/K20zope -> ../init.d/zope
/etc/rc6.d/K20zope -> ../init.d/zope
/etc/rc2.d/S20zope -> ../init.d/zope
/etc/rc3.d/S20zope -> ../init.d/zope
/etc/rc4.d/S20zope -> ../init.d/zope
/etc/rc5.d/S20zope -> ../init.d/zope

其他進階使用方式請 man update-rc.d

延伸閱讀: Debian和RH的差異這一篇內容是在講下述內容
<使用Debian工具進行工作>
RH包含了一些用於自動管理SysV初始腳本過程的工具,也就是chkconfig民service。
Debian並包含這些工具,但是卻提供相似的管理工具:update-rc.d與invoke-rc.d。

如果在 /etc/init.d 中加入一個 script,還須要製作相關的 link
存到 /etc/rc*.d 中。
K 開頭是 kill , S 開頭是 start , 數字順序代表啟動的順序。
這些動作都可以利用update-rc.d來完成。


例:
在 /etc/init.d 中建立一個叫作 zope 的 script , 然後

update-rc.d zope defaults

就會產生以下連結::

Adding system startup for /etc/init.d/zope ...
/etc/rc0.d/K20zope -> ../init.d/zope
/etc/rc1.d/K20zope -> ../init.d/zope
/etc/rc6.d/K20zope -> ../init.d/zope
/etc/rc2.d/S20zope -> ../init.d/zope
/etc/rc3.d/S20zope -> ../init.d/zope
/etc/rc4.d/S20zope -> ../init.d/zope
/etc/rc5.d/S20zope -> ../init.d/zope

其他進階使用方式請 man update-rc.d

延伸閱讀: Debian和RH的差異這一篇內容是在講下述內容
<使用Debian工具進行工作>
RH包含了一些用於自動管理SysV初始腳本過程的工具,也就是chkconfig民service。
Debian並包含這些工具,但是卻提供相似的管理工具:update-rc.d與invoke-rc.d。

2009年2月5日 星期四

Apache 防止 Dos 攻擊套件

Denial of Service 可以稱為 “阻絕服務攻擊”。這個名稱也經常聽見,在很多地方都發生。
其實 Denial of Service 所傳送的請求和正常的是一樣,只是每分鐘傳送數以十計以上請求傳送至伺服器中。令伺服器每秒處理十分大量的工作。

受到這一種攻擊,輕則只有伺服器暫時停止服務。重則會把伺服器中的硬體破壞。有不少例子都是由於伺服器在同一時間處理十分大量的工作後,CPU 最後壞了。最近公司的其中一個網站受到這些不明來歷的 Denial of Service 攻擊,伺服器一直當機。
搜尋了不少網站,終於找到了一個方法。不過不知道是否可行的。所使用的是 mod_dosevasive。
雖然是第一次用,不過是否真的能夠防止就必須等到下一次受到攻擊使知道。
(雖然一裝好就有阻斷了很多IP,但是不是真的從此相安無事,就得等時間來驗證了)


1.首次下載 mod_dosevasive 1.1 版本。

2.然後解壓 mod_dosevasive_1.10.tar.gz

tar zxvf mod_dosevasive_1.10.tar.gz


3.把您的 httpd.conf 備份

4.開始安裝mod_dosevasive

Apache 1.3.x:
cd mod_dosevasive
apxs -cia mod_dosevasive.c


Apache 2.0.x:
cd mod_dosevasive
apxs -cia mod_dosevasive20.c


註:若沒安裝apxs,可執行yum provides <some_file_name>去搜尋需要的套件
例如:yum provides spxs

在這裡,要安裝的指令是yum install httpd-devel


5.修改您的 httpd.conf 加入
Apache 1.3.x:


DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600


Apache 2.0.x:


DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
DOSBlockingPeriod 600



最後是在httpd.conf 當中的設定參數解釋:

DOSHashTableSize
 這是佔中您記憶體的大小。當數目越大處理越快,當您的伺服器是很多人流的,您必須加大這個數字。
DOSPageCount
 同一頁同一人時能夠在同一個時段中最多可請求幾次,超過會禁止。時段可以在 DOSPageInterval 中設定。
DOSSiteCount
 同一個網站同一人在伺服器中最多可佔有幾個 Object,超過會禁止。時段可以在 DOSSiteInterval 中設定。
DOSPageInterval
 DOSPageCount 中所計算的每一個時間區段,以秒計算。預設是 1 秒。
DOSSiteInterval
 DOSSiteCount 中所計算的每一個時間區段,以秒計算。預設是 1 秒。
DOSBlockingPeriod
 當發現疑似攻擊後暫停多久?預設是 10 秒。當發現後,使用者會接收到 403 (Forbidden) 的訊息。

以下三個參數要放在IfModule外面

DOSEmailNotify
設定接收攻擊信息的電郵地址。
例:DOSEmailNotify you@yourdomain.com

DOSSystemCommand
這是收到攻擊信息時所使用的指令。
例:DOSSystemCommand ”su - someuser -c \’/sbin/… %s …\’”
  /bin/mail -t %s (%s指的是DOSEmailNotify設定的email address)

DOSLogDir
記錄檔案設定。
例:DOSLogDir ”/var/lock/mod_dosevasive”

Denial of Service 可以稱為 “阻絕服務攻擊”。這個名稱也經常聽見,在很多地方都發生。
其實 Denial of Service 所傳送的請求和正常的是一樣,只是每分鐘傳送數以十計以上請求傳送至伺服器中。令伺服器每秒處理十分大量的工作。

受到這一種攻擊,輕則只有伺服器暫時停止服務。重則會把伺服器中的硬體破壞。有不少例子都是由於伺服器在同一時間處理十分大量的工作後,CPU 最後壞了。最近公司的其中一個網站受到這些不明來歷的 Denial of Service 攻擊,伺服器一直當機。
搜尋了不少網站,終於找到了一個方法。不過不知道是否可行的。所使用的是 mod_dosevasive。
雖然是第一次用,不過是否真的能夠防止就必須等到下一次受到攻擊使知道。
(雖然一裝好就有阻斷了很多IP,但是不是真的從此相安無事,就得等時間來驗證了)


1.首次下載 mod_dosevasive 1.1 版本。

2.然後解壓 mod_dosevasive_1.10.tar.gz

tar zxvf mod_dosevasive_1.10.tar.gz


3.把您的 httpd.conf 備份

4.開始安裝mod_dosevasive

Apache 1.3.x:
cd mod_dosevasive
apxs -cia mod_dosevasive.c


Apache 2.0.x:
cd mod_dosevasive
apxs -cia mod_dosevasive20.c


註:若沒安裝apxs,可執行yum provides <some_file_name>去搜尋需要的套件
例如:yum provides spxs

在這裡,要安裝的指令是yum install httpd-devel


5.修改您的 httpd.conf 加入
Apache 1.3.x:


DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600


Apache 2.0.x:


DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
DOSBlockingPeriod 600



最後是在httpd.conf 當中的設定參數解釋:

DOSHashTableSize
 這是佔中您記憶體的大小。當數目越大處理越快,當您的伺服器是很多人流的,您必須加大這個數字。
DOSPageCount
 同一頁同一人時能夠在同一個時段中最多可請求幾次,超過會禁止。時段可以在 DOSPageInterval 中設定。
DOSSiteCount
 同一個網站同一人在伺服器中最多可佔有幾個 Object,超過會禁止。時段可以在 DOSSiteInterval 中設定。
DOSPageInterval
 DOSPageCount 中所計算的每一個時間區段,以秒計算。預設是 1 秒。
DOSSiteInterval
 DOSSiteCount 中所計算的每一個時間區段,以秒計算。預設是 1 秒。
DOSBlockingPeriod
 當發現疑似攻擊後暫停多久?預設是 10 秒。當發現後,使用者會接收到 403 (Forbidden) 的訊息。

以下三個參數要放在IfModule外面

DOSEmailNotify
設定接收攻擊信息的電郵地址。
例:DOSEmailNotify you@yourdomain.com

DOSSystemCommand
這是收到攻擊信息時所使用的指令。
例:DOSSystemCommand ”su - someuser -c \’/sbin/… %s …\’”
  /bin/mail -t %s (%s指的是DOSEmailNotify設定的email address)

DOSLogDir
記錄檔案設定。
例:DOSLogDir ”/var/lock/mod_dosevasive”

2008年1月23日 星期三

apache vhost 最快速設法

無法查看此摘要。請 按這裡查看文章。 無法查看此摘要。請 按這裡查看文章。

2007年10月2日 星期二

Apache 檔案上傳限制設定

要修改的地方有二個
1.Apache的httpd.conf
2.PHP的phi.ini

httpd.conf的部份

< f i l e s >
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 524288
註:524288是512*1024,單位為bit
< / f i l e s >


php.ini的部份

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 20000

;Maximum execution time of each script, in seconds
max_input_time = 20000

; Maximum amount of time each script may spend parsing request data
memory_limit = 50M

; Maximum amount of memory a script may consume (50MB,default =8MB)

post_max_size = 50M

; Maximum size of POST data that PHP will accept.

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
upload_max_filesize = 100M

要修改的地方有二個
1.Apache的httpd.conf
2.PHP的phi.ini

httpd.conf的部份

< f i l e s >
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 524288
註:524288是512*1024,單位為bit
< / f i l e s >


php.ini的部份

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 20000

;Maximum execution time of each script, in seconds
max_input_time = 20000

; Maximum amount of time each script may spend parsing request data
memory_limit = 50M

; Maximum amount of memory a script may consume (50MB,default =8MB)

post_max_size = 50M

; Maximum size of POST data that PHP will accept.

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
upload_max_filesize = 100M

2007年9月3日 星期一

unix-like底下 apache2+php5+mysql5安裝方式

節錄自[分享] unix-like底下 apache2+php5+mysql5安裝方式
感謝acman's 便利地毯的分享

紅字部份為輸入之指令
切換目錄至/usr/local/src ;準備自行編譯
cd /usr/local/src

到以下的官方網站下載需要的版本
MySQL官方網站:http://www.mysql.com
Apache官方網站:http://www.apache.org
PHP官方網站:http://www.php.net

安裝mysqld:mysql-5.0.37
解開tarball
tar -zxvf mysql-5.0.37.tar.gz
切換到解開的目錄下
cd mysql-5.0.37
1.組態:(編譯參數參考原廠doc或是google找其它人的經驗或是依之前經驗)
./configure --prefix=/usr/local/mysql --localstatedir=/home/mysql --with-mysqld-user=mysql --enable-large-files
2.編譯
make
3.安裝
make install
4.複製系統設定檔至指定位置:
cp support-files/my-medium.cnf /etc/my.cnf
5.增加mysqld要使用的user跟group
vi /etc/group
新增一行內容為:mysql:x:60:
vi /etc/passwd
新增一行內容為:mysql:x:60:60:mysql:/home/mysql:/bin/false
6.切換資料夾
cd /usr/local/mysql
7.安裝系統資料庫
bin/mysql_install_db --user=mysql
8.更改目錄權限
chown -R root:mysql /home/mysql
9.啟動 MySql Server
bin/mysqld_safe --user=mysql &
10.更改資料庫管理者的管理密碼("new-password"部分請自行輸入):
bin/mysqladmin -u root password new-password

安裝apache:httpd-2.2.4
切換目錄
cd /usr/local/src
解開tarball
tar -zxvf httpd-2.2.4.tar.gz
切換到解開的目錄下
cd httpd-2.2.4
1.組態:
./configure --prefix=/home/apache --enable-shared=max --enable-module=most --enable-so
祝註:因為我偷懶的原因,所以apache的module是直接掛載,不在httpd.conf中一個一個自行選定是否載入
有空再做自行選擇的部份
2.編譯:
make
3.安裝:
make install

安裝php:php-5.2.1
安裝php前:為讓php support更多模組,以下部份先安裝(常用的)
指令:
gentoo適用:
emerge zlib
emerge libpng
emerge freetype
emerge jpeg
emerge gd
emerge libxml2

自行編譯者:自行找到tarball後(問google),直接組態->編譯->安裝,無需加任何參數
安裝php:php-5.2.1
切換目錄
cd /usr/local/src
解開tarball
tar -jxvf php-5.2.1.tar.bz2
切換到解開的目錄下
cd php-5.2.1

1.組態:
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.2.4/bin/apxs --with-config-file-path=/usr/local/php --with-mysql=/usr/local/mysql --with-gd --with-jpeg --with-zlib --with-libxml --enable-socket --with-iconv --with-pear --enable-zend-multibyte
這部份同apache,php可以把許多功能都編成extensions,僅載入需要的部份,這也是我偏愛的方式.....不過在這邊也偷懶
2.編譯
make
3.安裝
make install
4. 檢查是否有生成apache需要的php module
ls -al /usr/local/apache2.2.4/modules/libphp5.so
5. 複制php的設定檔
cp /usr/local/src/php-5.2.1/php.ini-dist /usr/local/php/

設定apache的httpd.conf
1. 查看是否有增加這一行
LoadModule php5_module modules/libphp5.so
2.更改admin信箱:
ServerAdmin 你的emailaddress
3.設定伺服器名稱(可以使用dmian:www.ooo.net:80 或 192.168.1.1:80)
ServerName 192.168.1.1:80(用你自己機器的ip address啊)
4.找到DirectoryIndex敘述,設定首頁名稱加上 index.php
DirectoryIndex index.htm index.html index.php
5.找到AddType部份,增加一行:
AddType application/x-httpd-php .php
6.啟動apache
/usr/local/apache2.2.4/bin/apachectl start
7.檢查php是否有正常運作
在/usr/local/apache2.2.4/htdocs/底下新增一個檔案:info.php,內容如下:
<?
phpinfo();
?>

8.用瀏覽器看 http://你的ip/info.php
有phpinfo畫面生成的話就ok啦 節錄自[分享] unix-like底下 apache2+php5+mysql5安裝方式
感謝acman's 便利地毯的分享

紅字部份為輸入之指令
切換目錄至/usr/local/src ;準備自行編譯
cd /usr/local/src

到以下的官方網站下載需要的版本
MySQL官方網站:http://www.mysql.com
Apache官方網站:http://www.apache.org
PHP官方網站:http://www.php.net

安裝mysqld:mysql-5.0.37
解開tarball
tar -zxvf mysql-5.0.37.tar.gz
切換到解開的目錄下
cd mysql-5.0.37
1.組態:(編譯參數參考原廠doc或是google找其它人的經驗或是依之前經驗)
./configure --prefix=/usr/local/mysql --localstatedir=/home/mysql --with-mysqld-user=mysql --enable-large-files
2.編譯
make
3.安裝
make install
4.複製系統設定檔至指定位置:
cp support-files/my-medium.cnf /etc/my.cnf
5.增加mysqld要使用的user跟group
vi /etc/group
新增一行內容為:mysql:x:60:
vi /etc/passwd
新增一行內容為:mysql:x:60:60:mysql:/home/mysql:/bin/false
6.切換資料夾
cd /usr/local/mysql
7.安裝系統資料庫
bin/mysql_install_db --user=mysql
8.更改目錄權限
chown -R root:mysql /home/mysql
9.啟動 MySql Server
bin/mysqld_safe --user=mysql &
10.更改資料庫管理者的管理密碼("new-password"部分請自行輸入):
bin/mysqladmin -u root password new-password

安裝apache:httpd-2.2.4
切換目錄
cd /usr/local/src
解開tarball
tar -zxvf httpd-2.2.4.tar.gz
切換到解開的目錄下
cd httpd-2.2.4
1.組態:
./configure --prefix=/home/apache --enable-shared=max --enable-module=most --enable-so
祝註:因為我偷懶的原因,所以apache的module是直接掛載,不在httpd.conf中一個一個自行選定是否載入
有空再做自行選擇的部份
2.編譯:
make
3.安裝:
make install

安裝php:php-5.2.1
安裝php前:為讓php support更多模組,以下部份先安裝(常用的)
指令:
gentoo適用:
emerge zlib
emerge libpng
emerge freetype
emerge jpeg
emerge gd
emerge libxml2

自行編譯者:自行找到tarball後(問google),直接組態->編譯->安裝,無需加任何參數
安裝php:php-5.2.1
切換目錄
cd /usr/local/src
解開tarball
tar -jxvf php-5.2.1.tar.bz2
切換到解開的目錄下
cd php-5.2.1

1.組態:
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2.2.4/bin/apxs --with-config-file-path=/usr/local/php --with-mysql=/usr/local/mysql --with-gd --with-jpeg --with-zlib --with-libxml --enable-socket --with-iconv --with-pear --enable-zend-multibyte
這部份同apache,php可以把許多功能都編成extensions,僅載入需要的部份,這也是我偏愛的方式.....不過在這邊也偷懶
2.編譯
make
3.安裝
make install
4. 檢查是否有生成apache需要的php module
ls -al /usr/local/apache2.2.4/modules/libphp5.so
5. 複制php的設定檔
cp /usr/local/src/php-5.2.1/php.ini-dist /usr/local/php/

設定apache的httpd.conf
1. 查看是否有增加這一行
LoadModule php5_module modules/libphp5.so
2.更改admin信箱:
ServerAdmin 你的emailaddress
3.設定伺服器名稱(可以使用dmian:www.ooo.net:80 或 192.168.1.1:80)
ServerName 192.168.1.1:80(用你自己機器的ip address啊)
4.找到DirectoryIndex敘述,設定首頁名稱加上 index.php
DirectoryIndex index.htm index.html index.php
5.找到AddType部份,增加一行:
AddType application/x-httpd-php .php
6.啟動apache
/usr/local/apache2.2.4/bin/apachectl start
7.檢查php是否有正常運作
在/usr/local/apache2.2.4/htdocs/底下新增一個檔案:info.php,內容如下:
<?
phpinfo();
?>

8.用瀏覽器看 http://你的ip/info.php
有phpinfo畫面生成的話就ok啦

2007年8月15日 星期三

讓 crontab 自動排程執行 php

前一陣公司的網站改了很多東西...
寫了很多需要利用 crontab 去跑的php
當時利用的方法是
寫一支程式,讓crontab去跑..
內容是

lnyx http://myweb/test.php > /dev/null
2>&2

剛剛在Real-Blog看到這篇文章--讓 crontab 自動排程執行 php

才發現也有這樣的方式可以寫...記錄一下~~

要用 crontab 自動執行 php 程式,可以這樣做:
方法一
1. 在 php 程式的第一行加入:

#!/usr/local/php/bin/php -q
例如:

#!/usr/local/php/bin/php -q
< ? php $foo = 123; ? >
請留意,我的 php 是安裝在 /usr/local/php,請根據你的 php 執行檔位置作出修改。

2. 將 php 程式給予可執行權限:

chmod +x testing.php

3. 執行 crontab -e,然後加入以下內容:

00 00 * * * /path/to/testing.php > /dev/null 2>&2
以上語法會在每天的零時零分執行 /path/to/testing.php

方法二
另一個方法是不用在 php 程式的第一行加入 "#!/usr/local/php/bin/php -q",
可以省略第一步及第二步
直接執行 crontab -e,並輸入以下內容:
00 00 * * * usr/local/php/bin/php -q /path/to/testing.php > /dev/null 2>&2

這個方法的結果跟方法一的結果相同。 前一陣公司的網站改了很多東西...
寫了很多需要利用 crontab 去跑的php
當時利用的方法是
寫一支程式,讓crontab去跑..
內容是

lnyx http://myweb/test.php > /dev/null
2>&2

剛剛在Real-Blog看到這篇文章--讓 crontab 自動排程執行 php

才發現也有這樣的方式可以寫...記錄一下~~

要用 crontab 自動執行 php 程式,可以這樣做:
方法一
1. 在 php 程式的第一行加入:

#!/usr/local/php/bin/php -q
例如:

#!/usr/local/php/bin/php -q
< ? php $foo = 123; ? >
請留意,我的 php 是安裝在 /usr/local/php,請根據你的 php 執行檔位置作出修改。

2. 將 php 程式給予可執行權限:

chmod +x testing.php

3. 執行 crontab -e,然後加入以下內容:

00 00 * * * /path/to/testing.php > /dev/null 2>&2
以上語法會在每天的零時零分執行 /path/to/testing.php

方法二
另一個方法是不用在 php 程式的第一行加入 "#!/usr/local/php/bin/php -q",
可以省略第一步及第二步
直接執行 crontab -e,並輸入以下內容:
00 00 * * * usr/local/php/bin/php -q /path/to/testing.php > /dev/null 2>&2

這個方法的結果跟方法一的結果相同。

2007年6月4日 星期一

[轉貼].htaccess檔製作

轉貼自網站建置百寶箱

.htaccess 檔是 apache http 伺服器上的一個設定檔。
一般來說,管理人員都會開放部份功能給你自行設定,也有的會完全關閉對 .htaccess 的支援。

設定網頁密碼;
設定發生錯誤時出現的文件;
改變首頁的檔案 (index.html);
禁止讀取檔案;
重新導向文件;
加上 MIME 類別;
防止列出目綠內的檔案..等等一般常用功能
(其他進階功能則不在此談)

【.htaccess 簡介 】
.htaccess 是一個文字檔,你可以做任何好像 notepad 的文字編輯器去寫一個。
或者你會對 .htaccess 這個名字有點困惑,其實 .htaccess 是一個完全的檔案名,不是 filaname.htaccess 或者甚麼的(當然也有管理員故意把它設定成其他名字,但一般都是用 .htaccess 的)。為何是 .htaccess?因為所有以 "." 開頭的檔名在 *nix 系統中也是有屬性隱藏的,平常列出資料夾時不會出現,所以保安會好一點。你可能會問:『MS Windows 要我一定給它一個名字,如何把它存檔成為 .htaccess?』 其實方法有兩個。第一個是到 ms-dos 的視窗中,按 ren filename.xxx .htaccess 就可以了;第二個是在上傳到伺服器時才改名做 .htaccess。
而 .htaccss 內設定的格式是一行一個指令,如果你的 notepad 設定了自動換行的話,請關上它,這樣會比較安全。
一點要注意, .htaccess 是 apache 的產物,不是 IIS 的。IIS 伺服器不支援它,也就是說你不能以簡單地上傳一個 ASCII 檔去設定在 IIS 伺服器上的 http 服務。
在上載 .htaccess 時,必需使用 ASCII 模式!你或許還要 chmod 它到 644(RW_R__R_)。
每一個放了 .htaccess 的目錄和它的子目錄都會被 .htaccess 影響。如果我在 /abc/ 放了一個 .htaccess,那麼 /abc/ 和 /abc/def/ 內所有 file 都會被它影響,但 /index.html 不會被它影響 ←← 這一點是很重要的。

【密碼保護 】

這是最常見 .htaccess 被使用的功能之一,資料夾密碼保護。
這種方法可以使沒有授權的瀏覽者不能進入你所設定的限制區域,使用了 Javacript 設的密碼太簡單了,一下字就會被破解,而使用 .htaccess 系統就比使用 CGI 程式保護會員專頁將更為有效,更安全。更重要的是使用 .htaccess 方式去設定不需要編寫程式的技能。
首先,你要開啟一般文字編輯工具,做出一個名叫 .htpasswd 的檔名(當然又可能是其他,但一般伺服器都會設定 .htpasswd 是不能經由 http 讀到的。檔案中的的每一句代表一個使用者,使用者名稱以及加密了的密碼是以冒號(分隔。而密碼必須經過加密才可以使用。加密的方法是一般密碼使用了的 crypt,如果你不知如何加密,請到以下的網頁。
UHome
http://www.euronet.nl/~arnow/htpasswd/


注: Win32 版本的 apache 好像不支援用了 crypt 加密法的密碼檔,只支援 SHA1 和 MD5 的。如果你是使用 apahce for win32 版本,請使用 appserv\apache\bin\htpasswd.exe 做出以 MD5 加密的密碼檔!!

再在 .htaccess 中,加上以下句子
AuthName MemberPage
AuthType Basic
AuthUserFile /absolute/path/.htpasswd
require valid-user

AuthName 就是當 browser 得知要密碼時所出現的句字,你可以自行改動 MemberPage;而第二句的 AuthType Basic 就千萬不要去改;第三句的 AuthUserFile 就是設定所使用的 .htpasswd 檔,要留意它好像必需是在伺服器上的絕對路徑。請留意,這不是 URL 的位置、也不一定是在 ftp 中看到的位置、就算是由 CGI 自行測到的路徑也未必準確,請細看伺服器上的說明 (例如在 virtualave.net,URL 是 /.htpasswd ftp 看到的是 /public_html/.htpasswd,CGI 測到 /home/public_html/.htpasswd,但是事實上你要設定路徑為 /data1/virtualave.net/USERNAME/public_html/.htpasswd)。
為了保安理由,不建議把 .htpasswd 放到可以用 http 讀到的目錄;
最後的 require 就是命令伺服器誰可以進入,require valid-user 就是指只要是 .htpasswd 中的任何一人就可了;你也可以指定在名單上只有某人可以通過,require user username 或 require user username1 username2 username3;也可以指定是某組人才可以,require group groupname。

而設定組的方法是再做一個叫 .htgroup 的文字檔,內容如下:
groupname1: username1 username2 username3
groupname2: username1 username3 username4

再在 .htaccess 中加多一句 AuthGroupFile /absolute/path/.htgroup
方法和加入 .htpasswd 的一樣。 轉貼自網站建置百寶箱

.htaccess 檔是 apache http 伺服器上的一個設定檔。
一般來說,管理人員都會開放部份功能給你自行設定,也有的會完全關閉對 .htaccess 的支援。

設定網頁密碼;
設定發生錯誤時出現的文件;
改變首頁的檔案 (index.html);
禁止讀取檔案;
重新導向文件;
加上 MIME 類別;
防止列出目綠內的檔案..等等一般常用功能
(其他進階功能則不在此談)

【.htaccess 簡介 】
.htaccess 是一個文字檔,你可以做任何好像 notepad 的文字編輯器去寫一個。
或者你會對 .htaccess 這個名字有點困惑,其實 .htaccess 是一個完全的檔案名,不是 filaname.htaccess 或者甚麼的(當然也有管理員故意把它設定成其他名字,但一般都是用 .htaccess 的)。為何是 .htaccess?因為所有以 "." 開頭的檔名在 *nix 系統中也是有屬性隱藏的,平常列出資料夾時不會出現,所以保安會好一點。你可能會問:『MS Windows 要我一定給它一個名字,如何把它存檔成為 .htaccess?』 其實方法有兩個。第一個是到 ms-dos 的視窗中,按 ren filename.xxx .htaccess 就可以了;第二個是在上傳到伺服器時才改名做 .htaccess。
而 .htaccss 內設定的格式是一行一個指令,如果你的 notepad 設定了自動換行的話,請關上它,這樣會比較安全。
一點要注意, .htaccess 是 apache 的產物,不是 IIS 的。IIS 伺服器不支援它,也就是說你不能以簡單地上傳一個 ASCII 檔去設定在 IIS 伺服器上的 http 服務。
在上載 .htaccess 時,必需使用 ASCII 模式!你或許還要 chmod 它到 644(RW_R__R_)。
每一個放了 .htaccess 的目錄和它的子目錄都會被 .htaccess 影響。如果我在 /abc/ 放了一個 .htaccess,那麼 /abc/ 和 /abc/def/ 內所有 file 都會被它影響,但 /index.html 不會被它影響 ←← 這一點是很重要的。

【密碼保護 】

這是最常見 .htaccess 被使用的功能之一,資料夾密碼保護。
這種方法可以使沒有授權的瀏覽者不能進入你所設定的限制區域,使用了 Javacript 設的密碼太簡單了,一下字就會被破解,而使用 .htaccess 系統就比使用 CGI 程式保護會員專頁將更為有效,更安全。更重要的是使用 .htaccess 方式去設定不需要編寫程式的技能。
首先,你要開啟一般文字編輯工具,做出一個名叫 .htpasswd 的檔名(當然又可能是其他,但一般伺服器都會設定 .htpasswd 是不能經由 http 讀到的。檔案中的的每一句代表一個使用者,使用者名稱以及加密了的密碼是以冒號(分隔。而密碼必須經過加密才可以使用。加密的方法是一般密碼使用了的 crypt,如果你不知如何加密,請到以下的網頁。
UHome
http://www.euronet.nl/~arnow/htpasswd/


注: Win32 版本的 apache 好像不支援用了 crypt 加密法的密碼檔,只支援 SHA1 和 MD5 的。如果你是使用 apahce for win32 版本,請使用 appserv\apache\bin\htpasswd.exe 做出以 MD5 加密的密碼檔!!

再在 .htaccess 中,加上以下句子
AuthName MemberPage
AuthType Basic
AuthUserFile /absolute/path/.htpasswd
require valid-user

AuthName 就是當 browser 得知要密碼時所出現的句字,你可以自行改動 MemberPage;而第二句的 AuthType Basic 就千萬不要去改;第三句的 AuthUserFile 就是設定所使用的 .htpasswd 檔,要留意它好像必需是在伺服器上的絕對路徑。請留意,這不是 URL 的位置、也不一定是在 ftp 中看到的位置、就算是由 CGI 自行測到的路徑也未必準確,請細看伺服器上的說明 (例如在 virtualave.net,URL 是 /.htpasswd ftp 看到的是 /public_html/.htpasswd,CGI 測到 /home/public_html/.htpasswd,但是事實上你要設定路徑為 /data1/virtualave.net/USERNAME/public_html/.htpasswd)。
為了保安理由,不建議把 .htpasswd 放到可以用 http 讀到的目錄;
最後的 require 就是命令伺服器誰可以進入,require valid-user 就是指只要是 .htpasswd 中的任何一人就可了;你也可以指定在名單上只有某人可以通過,require user username 或 require user username1 username2 username3;也可以指定是某組人才可以,require group groupname。

而設定組的方法是再做一個叫 .htgroup 的文字檔,內容如下:
groupname1: username1 username2 username3
groupname2: username1 username3 username4

再在 .htaccess 中加多一句 AuthGroupFile /absolute/path/.htgroup
方法和加入 .htpasswd 的一樣。