<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Natural

     

    [ZT]Cygwin上的服務

    原文鏈接: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 在本地安裝cvs

    1) 在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

    posted on 2012-11-26 14:01 此號已被刪 閱讀(781) 評論(0)  編輯  收藏 所屬分類: Cygwin

    導航

    統計

    常用鏈接

    留言簿(8)

    隨筆分類(83)

    隨筆檔案(78)

    文章檔案(2)

    相冊

    收藏夾(7)

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 少妇高潮太爽了在线观看免费| 13一14周岁毛片免费| 免费人成在线观看播放国产| 亚洲色成人WWW永久在线观看| 亚洲免费视频观看| 亚洲国语在线视频手机在线| 亚洲免费福利视频| 亚洲人成电影网站| 成人毛片免费观看视频在线| 亚洲成AV人影片在线观看| 浮力影院第一页小视频国产在线观看免费 | 亚洲色婷婷一区二区三区| 国产免费福利体检区久久| 亚洲乱码国产一区三区| 免费萌白酱国产一区二区三区| 亚洲乱码无码永久不卡在线| 亚洲一区免费观看| 亚洲国产成人久久77| 成年女人午夜毛片免费看| 婷婷亚洲综合五月天小说在线| 波多野结衣免费视频观看| 七次郎成人免费线路视频 | 91精品国产亚洲爽啪在线影院 | 亚洲AV无码乱码在线观看代蜜桃| 成年男女男精品免费视频网站| 亚洲av无码成人精品区一本二本| 大胆亚洲人体视频| 精品免费tv久久久久久久| 亚洲福利视频网址| 国产日产成人免费视频在线观看| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 亚洲国产香蕉人人爽成AV片久久 | 最近2019免费中文字幕视频三| 亚洲一级高清在线中文字幕| 又粗又大又长又爽免费视频| 好紧我太爽了视频免费国产| 亚洲人成日本在线观看| 亚洲一级Av无码毛片久久精品 | 日本视频在线观看永久免费| 亚洲av无码片区一区二区三区| 免费在线观看中文字幕|