原文鏈接:
http://guoyoooping.blog.163.com/blog/static/13570518320110953550756/#Author: ypguo<guoyoooping@163.com>
#Date: 2011/01/9
#Version: 1.0
[目錄]content(Created by
TxtBrowser)
1. cygrunsrv程序
2. inetd服務:
. 2.1 cvspserver服務
. 2.1.1 在本地安裝cvs
. 2.1.2 安裝cvspserver服務
3. xinetd服務
4. cygserver服務:
5. sshd服務
6. proftpd服務
. 6.1 proftpd服務的安裝
. 6.2 proftpd建立虛擬用戶
7. apache服務
. 7.1 關于配置
. 7.1 啟動和停止httpd服務
8. syslogd服務
[摘要]: 本文總結了如何在cygwin上安裝服務及其配置, 涉及到的服務主要有: sshd, ftp, cygserver, inetd, apache等.
首先回憶一下Linux下的服務有兩種方式[1]:
* stand_alone: 就字面上的意思來說,stand alone 就是『獨立的啟動』的意思,也就是說,該 daemon 啟動之后,就直接常駐在內存當中啰!他雖然會一直的占用系統的資源,但最大的優點就是,他會一直啟動的啦!所以當有要求來的時候,他就會很快速的響應啰! 常常用在這一種 daemon 的網絡服務如常見的 httpd 這一個即是一例!
* super daemon: 相對于 stand alone 的執行方式,這一種服務的啟動方式則是藉由統一的一個 daemon 來負責喚起該服務!這一個統一負責的 daemon 就是 inet這支服務啦!不過,在后來的 Linux 發展套件中,則是使用 xinet 這個設定啰!我們這里以 Mandrake 的 xinet 來做說明。當有網絡的服務要求來的時候,該要求會先送給 xinet 這個服務,然后 xinet 根據該網絡要求送來的數據封包的內容 ( 該內容會記錄 IP 與 port ) 來將數據封包送給實際運作的服務!而該服務這個時候才會啟動的!最常見到的就是 ftp 這支網絡服務啦!這種最大的優點就是當沒有數據封
包來的時候,該服務不會一直占據系統資源 ( 該服務會在 sleeping 的狀態吧!),但是相對的,他的反應時間也會比較慢,因為還要花費一段時間去『喚醒』該服務呀!
把 一個程序注冊為cygwin的服務, 總的來說就是調用cygrunsrv將其注冊為Windows的服務, 但是根據上面的回憶, 在cygwin上啟動服務也有兩種方式, 一是將inetd(或xinetd)注冊為系統的超級服務, 再由inetd.conf(或xinetd.conf)配置啟動該服務, 另一種就是直接調用cygrunsrv將該服務注冊成一個stand_alone服務.
兩種方式的優缺點參考[1]已經介紹的很多了, 現在提一下實現方式上的不同: 第一種方式完全依靠inetd(或xinetd)來啟動或關閉服務, 第二種方式則可以利用Windows的服務管理器里設置服務的啟動狀態(自己, 手動還是禁止), 也可以手動開啟, 關閉服務.
所以, 首先我們討論兩個超級服務inetd和xinetd的啟動, 其次再討論可以作為stand_alone啟動的服務.
1. cygrunsrv程序#摘自cygrunsrv README:
|cygrunsrv is an implementation of an NT/W2K service starter, similar to
|Microsoft's INSTSRV and SRVANY programs, or the FireDaemon program. However,
|cygrunsrv is a cygwin program itself, so it obviously supports Cygwin
|applications better.
在討論之前, 我們先認識一下注冊, 啟動, 注銷服務的一般性方法, 也即cygrunsrv的用法, 詳細的使用方法請參考cygrunsrv的Readme文檔[2]和cygrunsrv --help, 這里僅用例子給出使用的一般方法:
#將cygwin下不帶參數的應用程序/bin/foo安裝成服務"foo":
|$ cygrunsrv -I foo -p /bin/foo
#將帶參數的應用程序/bin/foo安裝為服務"bar":
|$ cygrunsrv -I bar -p /bin/foo -a '--opt1 --opt2 -x'
#將帶命令行可選項(有空格)的應用程序/bin/foo安裝為服務"baz":
|$ cygrunsrv -I baz -p /bin/foo -a "-x 'this has spaces inside'"
|或者:
|$ cygrunsrv -I baz -p /bin/foo -a '-x "this has spaces inside"'
#將應用程序/bin/foo安裝為手動啟動的服務"foo bar"
|$ cygrunsrv -I "foo bar" -p /bin/foo -t manual
#將需要環境變量的應用程序/bin/foo安裝為服務"bongo"
|$ cygrunsrv -I bongo -p /bin/foo -e "ENV_VAR_1=important_1" -e "ENV_VAR_2=also_important"
#將sshd安裝為用戶"joey"下的服務
|$ cygrunsrv -I "Joey sshd" -p /usr/sbin/sshd -a '-d' -u joey
#cygrunsrv訪問用戶joey的密碼, 比如說為"privy23":
|$ cygrunsrv -I "Joey sshd" -p /usr/sbin/sshd -a '-D' -u joey -w privy23
#啟動服務"foo"
|$ cygrunsrv -S foo(或者net start foo)
|也可以在Windows服務管理器里手動啟動該服務.
#停止服務"foo"
|$ cygrunsrv -E foo(或者net stop foo)
|也可以在Windows服務管理器里手動停止該服務.
#卸載服務"foo"
|$ cygrunsrv -R foo
2. inetd服務:inetd 被叫做 “超級 Internet 服務器”, 因為它能夠管理許多不同的服務程序的連接。 當 inetd 接到連入的連接時, 它就會判斷連接所需要啟動的服務程序,并運行它們, 然后將連接轉交給這些服務程序 (在啟動程序時,這些程序的標準輸入、輸出和錯誤輸出描述符被替換為連入的連接)。與一個一個地運行單獨的服務程序相比, 只啟動一個inetd 能夠削減平均的系統負荷. 換句話說, inetd提供了一種用一個服務偵聽多個服務的機制. 當一個請求到達由inetd管理的服務端口, inetd將調用相應的注冊程序完成相應的服務請求.
因此我們可以在cygwin上啟動一個inetd服務, 然后在/etc/inetd.conf里注冊自己的服務(如:ftpd、 telnet), 這樣就起到了Linux標準inetd相應的功能.
1) 首先將cygserver注冊為Windows的一個服務并起動該服務:
|$ cygrunsrv -I inetd -d "CYGWIN inetd" -p /usr/sbin/inetd -a -d -e CYGWIN=ntsec -t manual
|$ cygrunsrv -S inetd
2) 配置inetd.conf
#inetd.conf的例子
|#<service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
|
|ftp stream tcp nowait root /usr/sbin/ftpd ftpd
|telnet stream tcp nowait root /usr/sbin/telnetd telnetd
|cvspserver stream tcp nowait cvsroot /usr/bin/cvs cvs -f --allow-root=/cygdrive/d/cvsroot pserver
如果該服務是新加的服務, 需要編輯修改/etc/services,加入:
#/etc/services文件:
|cvspserver 2401/tcp #cvs server tcp port
|cvspserver 2401/udp #cvs server udp port
3) 啟動和停止inetd服務:
|$ net start inetd(cygrunsrv -S inetd)
|$ net stop inetd
2.1 cvspserver服務cvspserver 只能在inetd或者xinetd下才能被做為服務啟動, 本文只介紹作為inetd啟動的方法, xientd啟動的方法類似. 在cygwin上安裝cvspserver應該和Linux上沒有太大的區別, 為了方便參考, 還是將詳細步驟摘錄如下:
2.1.1 在本地安裝cvs1) 在windows下建立一個cvsroot的用戶。這個用戶需要是本地用戶,不要是域用戶,確定在Cygwin/home目錄下有cvsroot戶。如果沒有切換windows登錄到這個用戶下,運行cygwin就可以了, 這個步驟相當于Linux上的命令:
#建立cvs用戶組和cvsroot用戶的Linux命令:
|#groupadd cvs
|#useradd -g cvs -s /sbin/nologin cvsroot
2)初始化cvs源代碼庫, 假設resository目錄為/cygdrive/d/cvsroot:
#初始化cvs源代碼庫的命令:
|$ mkdir /cygdrive/d/cvsroot
|$ cvs -d /cygdrive/d/cvsroot init
|$ chmod -R 755 /cygdrive/d/cvsroot
3) 創建可以登陸cvs服務的用戶及密碼: 對 repository 初始化后,會在其目錄下生成CVSROOT 子目錄。然后,在 CVSROOT 目錄中創建 passwd 文件,設置使用 cvs 的virtual 用戶名、密碼,及其所映射的操作系統用戶:
#文件CVSROOT/passwd, 需要具有可讀權限:
|foo:******:cvsroot
|goo::******:cvsroot
這里即將 cvs 的 virtual 用戶 foo 和 goo 映射為操作系統用戶 cvsroot 。而******部分對應的是由下面的 Perl 腳本加密后生成的密碼:
#用于生成密碼的腳本crypt.pl的內容, 需要具有可執行權限:
|#!/usr/bin/perl
|# Run me like this: crypt.pl "username"
|
|srand (time());
|my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
|my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
|my $plaintext = shift;
|my $crypttext = crypt ($plaintext, $salt);
|
|print "${crypttext}\n";
#如果需要密碼為:123456, 則執行腳本crypt.pl:
|$ ./crypt.pl "123456"
回車即可得到加密密碼,用其替換passwd文件中的xxxxxx.
4) 最 后,對生成的 repository 及其所有子目錄設置相應的用戶與組權限。權限的設置可以通過設置文件與目錄的操作系統級權限,也可以在 CVSROOT 下建立 readers 或writers 文件,來控制 cvs virtual 用戶的訪問權限。這兩個文件中均是 cvs 虛擬用戶名的列表,每行寫一個用戶名,且在文件末尾留一空白行。寫在 readers 文件中的用戶只有 read-only 權限,寫在 writers 中的用戶同時擁有讀寫權限。若在 CVSROOT 下存
在 writers 文件,則凡是未列入該文件的用戶都只有 read-only 權限。
2.1.2 安裝cvspserver服務1) 在services里加入cvspserver服務:
#編輯修改/etc/services,加入下面的兩行:
|cvspserver 2401/tcp #cvs server tcp port
|cvspserver 2401/dup #cvs server udp port
2) 添加cvspserver到inetd.conf(或xinetd.d)文件中:
#編輯修改/etc/inetd.conf文件,加入下面的一行:
|cvspserver stream tcp nowait cvsroot /bin/cvs cvs -f --allow-root=/cygdrive/d/cvsroot pserver
如果使用xinetd, 則需要在xinetd.d里修改(或添加)cvspserver文件如下:
#文件cvspserver的內容:
|service cvspserver
|{
|disable = no
|flags = REUSE
|socket_type = stream
|wait = no
|user = root
|server = /usr/bin/cvs
|server_args = -f --allow-root=/home/cvsroot pserver
|log_on_failure += USERID
|}
3) 重新啟動inetd或者xinetd: 參考本文第2節"2. inetd服務".
#重啟后然后察看cvs服務器是否已經運行:
|# netstat -a
|TCP cnrd-ypguo-hp7700:cvspserver cnrd-ypguo-hp7700.jnpr.net:0 LISTENING
#或
|# netstat -a |grep cvspserver
|tcp 0 0 *:cvspserver *:* LISTEN
則說明cvs服務器已經運行。
4) 驗證CVS服務是否已經配置成功(用戶cvsroot, 密碼111111,IP192.168.0.2)
#驗證CVS服務, 如果不出現其它信息表示已經配置成功
|$ cvs -d :pserver:cvsroot@192.168.0.2/cygdrive/d/cvsroot login
|Logging in to :pserver:cvsroot@192.168.0.2:2401/cygdrive/d/cvsroot
|CVS password:
|$
5) 設置只讀,寫入權限設置:在CVSROOT目錄建立readers,writers文件把需要設定的用戶名直接寫入即可。注意:
* 首先需要在passwd文件中存在該用戶名。
* writers中的用戶不能在readers中,要不然不能上傳更新文件。
cvs服務器上的用戶(本文中是cvsroot用戶)必須是cvs組的才能用, 如果還是報repository找不到, 在客戶端用戶的home目錄下touch文件.cvspass, 文件是空的,但是當你login一次服務器后自動就有內容
用戶名必須/cvsroot/CVSROOT/passwd 下已經加入的CVS用戶。這樣可以在客戶端創建模塊,和添加文件,提交等CVS操作了。
3. xinetd服務xinetd(eXtended InterNET services daemon)提供類似于inetd+tcp_wrapper的功能,但是更加強大和安全。
|$ cygrunsrv -R xinetd
|$ cygrunsrv -I xinetd -p /usr/sbin/xinetd -d 'CYGWIN xinetd' -1 /dev/null -2 /dev/null -t manual
|$ cygrunsrv -S xinetd
[注意]: 根據我的經驗, xinetd一旦啟動, 就沒有辦法用命令行的辦法停止或卸載. 只能在Windows的任務管理器里強行殺死該進程, 這也許是一個bug.
當你的xinetd的服務能過cygrunsrv -S xinetd或windows的服務管理器啟動xinetd服務后,在windows命令行中運行netstat -a 可以看到許多類似于下面:
|TCP HJLeoChen:telnet HJLeoChen:0 LISTENING
的很多的網絡監聽,這說明你開啟的這服務,你可以在cygwind的/etc/xinetd.d(Cygwin安裝目錄,如:F:\cygwin\etc\xinetd.d下)中看到很多對應的文件,這些就是服務的配置文件,你可以編輯這些文件把不需要的服務中的:
|disable= no
一行改為 disable= yes 來禁用這些服務,一方面提高系統安全性,一方面減少內存占用(?)。(我是把除了telnet外的所有服務都關閉了).
4. cygserver服務:Cygwin 有一些特殊的功能, 如IPC Message Queues, XSI IPC Semaphores, XSI IPCShared Memory.默認是沒有打開的, 大概是為了安全等問題. 要想使用這些功能, 必須先啟動cygserver程序或服務. 否則會報錯: "Bad system call"
1) 首先將cygserver注冊為Windows的一個服務:
|$ set CYGWIN=server(或者加到$CYGWIN/Cygwin.bat, 一勞永逸)
|$ cygserver-config(按照提示配置, 注冊cygserver服務)
2) 啟動或停止cygserver服務:
|$ net start cygserver(cygwinserver &)
|$ net stop cygserver (也可以在Windows任務管理器里結束進程)
注意, 以下的服務都是以stand_alone方式開啟的.
5. sshd服務sshd 服務在cygwin上默認是不開啟的, 可能是出于安全的需要. 但是有些服務可能需要cygwin作為一個sshd服務器. 這時你需要手動打開sshd服務.[4]
1) 先確認一下cygrunsrv.exe 已經安裝.
|whereis cygrunsrv
2) 利用ssh-host-config命令將sshd注冊為Windows的一個服務, 并生成配置文件:
|$ ssh-host-config
運行ssh-host-config 會提示你一些信息, 照著做就是了, 多數是yes, 在選擇是否加載為service的時候小心一點, 這里的service是指windows的service, 即使cygwin不啟動,sshd也會在開機的時候啟動起來.
3) 啟動或停止sshd
|$ net start sshd (cygrunsrv -S sshd)
|$ net stop sshd (或$ cygrunsrv -R sshd)
6. proftpd服務6.1 proftpd服務的安裝cygwin有兩個程序可以做為ftpd服務, ftpd和proftpd, 我們選擇proftpd, 因為這個比較專業一點. 首先介紹一下proftpd:
#This is the README for the Cygwin ProFTPD distribution.
|ProFTPD is an enhanced FTP server with a focus toward simplicity, security,
|and ease of configuration. It features a very Apache-like configuration
|syntax, and a highly customizable server infrastructure, including support for
|multiple 'virtual' FTP servers, anonymous FTP, and permission-based directory
|visibility.
1) 首先保證ftpd不以inetd方式運行. 這很好理解, 因為inetd和standalone都可以啟動ftpd服務, 但同一時刻只能有一個起作用, 所以修改inetd.conf(或xinet.conf), 禁止ftpd啟動:
#對于inetd, 在/etc/inetd.conf里注釋掉下面的話:
|#ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd
#對于xinetd, 在/etc/xinetd.d/ftpd里注釋掉下面的話:
|#server = /usr/sbin/in.ftpd
完成上述配置后應重啟inetd(或xinetd), 保證上一步的修改生效:
|$ net stop inetd(net stop inetd);
|$ net start xinetd (net start xinetd)
2) 將ProFTPD安裝為Windows的服務:
#將ProFTPD安裝為Windows的服務:
|$ cygrunsrv -I proftpd -p /usr/sbin/proftpd -d 'CYGWIN proftpd' -a --nodaemon --termsig TERM --shutdown
|$ cygrunsrv -I telnetd -p /usr/sbin/telnetd -d 'CYGWIN telnetd'
#也可以用下面的命令把proftpd從Windows的服務列表里去掉:
|$ cygrunsrv -R proftpd
3) 啟動或停止ProFTPD服務
#啟動或停止ProFTPD服務
|$ net start proftpd
|$ net stop proftpd
關于proftpd的配置請參考[9], [10].
6.2 proftpd建立虛擬用戶在Windows下FTPD以某一個帳號運行,所有的FTP用戶權限管理全部由FTPD來完成與系統帳號無關。但是在xNix下則不同,FTPD只允許那些系統帳號登陸。但是我們往往希望FTPD用戶和系統帳號分離方便管理。這樣就需要使用ProFTPD的虛擬用戶功能。
1) 安裝ftpasswd工具:
#安裝ftpasswd工具:
|cd /tmp
|wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.1rc2.tar.bz2
|tar xjvf proftpd-1.3.1rc2.tar.bz2
|cd proftpd-1.3.1rc2
|./configure –with-modules=mod_quotatab:mod_quotatab_file
|make
|cp contrib/ftpasswd /usr/local/bin/
|cp contrib/ftpquota /usr/local/bin/
|make install
2) 在/etc/proftpd.conf中加入
|RequireValidShell off
|AuthOrder mod_auth_file.c
|AuthUserFile /usr/local/etc/proftpd/passwd
|AuthGroupFile /usr/local/etc/proftpd/group(這一行貌似不是必須)
其中,AuthOrder指定了權限檢查的順序。這里只使用虛擬用戶。AuthUserFile和AuthGroupFile的文件格式看passwd(5)和group(5)。如果用戶名和組名與系統的重復,看DirFakeUser和DirFakeGroup。
3) 使用ftpasswd創建passwd和group文件
#創建了一個ftpuser和test2用戶
|$ ftpasswd --passwd --file=/usr/local/etc/proftpd/passwd --name=ftpuser
| --uid=2001 --home=/home/nohome --shell=/bin/false
|$ ftpasswd --passwd --file=/usr/local/etc/proftpd/passwd --name=test2
| --uid=2002 --home=/home/nohome --shell=/bin/false
#把ftpuser和test2加入ftpgroupt組, 成員有ftpuser和test2(貌似不是必須)
|$ ftpasswd --group --file=/usr/local/etc/proftpd/group --name=ftpgroup --gid=2001 --member=ftpuser --member=test2
4) 用虛擬用戶更新proftpd.conf, 重啟proftpd
7. apache服務7.1 關于配置我的cygwin版本已經有了apache 和 apache2兩個版本,第一個版本配置好在/etc/apache/httpd.conf 的內容后,在/usr/sbin/下運行“apachectl start”即可運行。
而apache2的配置文檔在/etc/apache2/httpd.conf
更改信息如下:
(1)找到被注釋了的#Listen 12.34.56.78:80這個地方,在下面添加“Listen127.0.0.1:8080”,IP和端口號可根據實際需要更改
(2)找到被注釋了的149行“#ServerName ”,“ServerName 127.0.0.1:8080”.
但在/usr/sbin/下運行“apachectl2 start”會報錯,錯誤信息為“Bad system call”. 需要啟動cygserver程序, 參考本文第4部分: cygserver服務的安裝和啟動.
然后重新打開XTerm,進入cygwin命令窗口,輸入“/usr/sbin/apachectl2 start” 然后查看進程即可發現已經有httpd后臺服務進程在運行了。
在windows操作系統的IE瀏覽器打開地址“http://localhost:8080”,打開網頁顯示“Itworks!”。
注:兩個版本的文件存放地不同
apache存放在:/var/www/htdocs (httpd.conf中由下面內容指定DocumentRoot "/var/www/htdocs")
apache2的文件存放在:/srv/www/htdocs (由httpd.conf中下面內容指定 DocumentRoot"/srv/www/htdocs")
7.1 啟動和停止httpd服務#手動啟動httpd
|$ /usr/sbin/apachectl2 start
#手動停止httpd
|$ /usr/sbin/apachectl2 stop
#注冊服務
|$ cygrunsrv -I httpd -p /usr/sbin/httpd2.exe -d 'CYGWIN httpd' -t manual --args "-D NO_DETACH -k start" --dep cygserver --shutdown
#注銷服務:
|$ cygrunsrv -R httpd
#啟動服務
|$ cygrunsrv -S httpd(net start httpd)
# 停止服務:
|$ cygrunsrv -E httpd(net stop httpd)
8. syslogd服務#安裝syslogd服務的過程:
|ypguo@localhost ~
|$ syslogd-config
|*** Query: Overwrite existing /etc/syslog.conf file? (yes/no) yes
|*** Info: Creating default /etc/syslog.conf file
|
|*** Warning: The following function requires administrator privileges!
|*** Query: Do you want to install syslogd as service? (yes/no) yes
|
|*** Info: The syslogd service has been installed under the LocalSystem
|*** Info: account (also known as SYSTEM). To start the service now, call
|*** Info: `net start syslogd' or `cygrunsrv -S syslogd'. Otherwise, it
|*** Info: will start automatically after the next reboot.
|
|*** Info: Check /etc/syslog.conf first, if it suits your needs.
|
|*** Info: Keep in mind that any file mentioned in /etc/syslog.conf
|*** Info: must exist and be readable and writable for the SYSTEM account.
|*** Info: Oh and, use tabs, not spaces in /etc/syslog.conf...
|
|Configuration finished. Have fun!
#啟動syslogd的過程:
|ypguo@localhost ~
|$ net start syslogd
|The CYGWIN syslogd service is starting.
|The CYGWIN syslogd service was started successfully.
#停止syslogd的過程:
|ypguo@localhost ~
|$ net stop syslogd
|The CYGWIN syslogd service is stopping.
|The CYGWIN syslogd service was stopped successfully.
[參考資料][1] 鳥哥的 Linux 與 ADSL 私房菜--認識系統服務 daemons, 鳥哥,
http://linux-vbird.bluedata.org/linux_base/0560daemons.htm[2] cygrunsrv.README,
http://web.mit.edu/cygwin/cygwin_v1.3.2/usr/doc/Cygwin/cygrunsrv.README[3] 對inetd、xinetd與TCP_Wrapper的基本了解, 非偶然的博客,
http://blog.chinaunix.net/u1/44257/showart_689244.html[4] cygwin問題, epeaktop的博客:
http://hi.baidu.com/epeak/blog/item/c35f79ee48b991feb3fb95c7.html[5] Cygwin上的ssh服務的putty自動登錄問題,
http://markli.javaeye.com/blog/39661[6]proftpd with cygwin on windows 2003 server, cifan的博客,
http://blog.chinaunix.net/u/22117/showart_318515.html[7] proftpd新建虛擬用戶, yaoge123的博客,
http://www.huomo.cn/sysapp/article-10fc.html[8] 樓氏博客, proftpd建立虛擬用戶,
http://blog.ednchina.com/loudongming/231651/message.aspx[9] proftpd實現虛擬用戶和quota(不用數據庫), 嘻嘻哈哈的部落格,
http://www.haw-haw.org/node/213[10] CVS 服務基本配置, Posted by Orlando on October 9, 2010,
http://www.orlando-tian.net/blog/2010/10/cvs-%E6%9C%8D%E5%8A%A1%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE.html[11] cygwin+cvs+pserver, 后發之人的博客,
http://www.cublog.cn/u3/95649/showart_1917076.html[12] cygwin下配置subversion, ivaneeo's blog,
http://www.tkk7.com/ivanwan/archive/2006/03/13/35092.html[13] cvs服務 - cvs服務器端配置 - 客戶端使用, Linux教程網,
http://linux.sheup.com/linux/linux556.htm[14] Example Configurations, proftpd官方網站:
http://www.proftpd.org/docs/configs/anonymous.conf[15] 教你配置安全的ProFTPD服務器, 華江,
http://publish.it168.com/2006/0830/20060830001801.shtml[16] 如何在 Cygwin 上安裝 Syslogd, cheeren,
http://www.cheeren.com/node/6[17] cygwin下使用apache2,
http://it.chinawin.net/internet/article-12c17.html[18] apache2 as a cygwin service, maelstrom's blog,
http://blogs.thegotonerd.com/maelstrom/archives/000511.html