• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • VSFTPD 服務器安裝配置

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    1. 聲明 版本信息: 本文檔的最新版本將張貼于: LinuxSir.Org論壇 Debian 發行版討論區 ; 也可以從 http://www.debsir.org/ 獲取. 反饋: 所有評論, 錯誤報告, 其他信息以及批評, 請郵寄到 etony@tom.com ; 或在LinuxSir.Org論壇 Debian發行版討論區 張貼. 版

    1. 聲明

    版本信息:
    本文檔的最新版本將張貼于: LinuxSir.Org論壇 Debian 發行版討論區 ;

    也可以從 http://www.debsir.org/ 獲取.

    反饋:
    所有評論, 錯誤報告, 其他信息以及批評, 請郵寄到 etony@tom.com ;

    或在LinuxSir.Org論壇 Debian發行版討論區 張貼.

    版權信息:
    本文檔的版權(c)2006-2007 歸 etony C.F.AN 所有.

    轉載請注明源自 http://www.debsir.org/ .

    2. FTP 原理
    FTP Transfer Protocol 件傳輸協議的縮寫,在RFC 959中具體說明。

    FTP會話時包含了兩個通道,一個叫控制通道,一個叫數據通道。

    控制通道:控制通道是和FTP服務器進行溝通的通道,連接FTP,發送FTP指令都是通過控制通道來完成的。

    數據通道:數據通道是和FTP服務器進行文件傳輸或者列表的通道。

    FTP協議中,控制連接均有客戶端發起,而數據連接有兩種工作方式:PORT方式和PASV方式


    PORT模式(主動方式)
    FTP 客戶端首先和FTP Server的TCP 21端口建立連接,通過這個通道發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。 PORT命令包含了客戶端用什么端口(一個大于1024的端口)接收數據。在傳送數據的時候,服務器端通過自己的TCP 20端口發送數據。 FTP server必須和客戶端建立一個新的連接用來傳送數據。

    PASV模式(被動方式)
    在建立控制通道的時候和PORT模式類似,當客戶端通過這個通道發送PASV 命令的時候,FTP server打開一個位于1024和5000之間的隨機端口并且通知客戶端在這個端口上傳送數據的請求,然后FTP server 將通過這個端口進行數據的傳送,這個時候FTP server不再需要建立一個新的和客戶端之間的連接傳送數據。


    如果從C/S模型這個角度來說,PORT對于服務器來說是OUTBOUND,而PASV模式對于服務器是INBOUND,這一點請特別注意,尤其是在使用防火墻的企業里,這一點非常關鍵,如果設置錯了,那么客戶將無法連接。

    3. VSFTPD
    vsftpd 是一個 UNIX 類操作系統上運行的服務器的名字,它可以運行在諸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面。它支持很多其他的 FTP 服務器不支持的特征。比如:

    非常高的安全需求
    帶寬限制
    良好的可伸縮性
    創建虛擬用戶的可能性
    IPv6支持
    中等偏上的性能
    分配虛擬 IP 的可能性
    高速
    vsftpd 的名字代表"very secure FTP daemon", 安全是它的開發者 Chris Evans 考慮的首要問題之一。在這個 FTP 服務器設計開發的最開始的時候,高安全性就是一個目標。

    一個例子就是 vsftpd 是在 chroot 模式下工作的,chroot 模式就是為程序(這里就是 vsftpd 了)單獨指定一個新的目錄,它也就不能訪問那個目錄之外的程序和文件了 --- 所以這也稱為“被鎖上的”。一個可能被潛在的攻擊者破壞的 FTP 服務器將被從系統的其他部分獨立開來,從而避免了更大的損失。

    由于有了如此多的特性,其中 FTP 服務的安全性應該是最重要的,vsftpd 比其他 FTP 服務器更加優越。WU-FTPD http://www.wu-ftpd.org/ 在這里可以被視作一個反面的例子,因為它在過去的幾年中出現了太多的安全缺陷。

    4. VSFTPD的基本配置
    4.1 安裝

    源代碼安裝
    詳細參閱:http://www.vsftpdrocks.org/source/

    下載源代碼

    wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-1.2.1.tar.gz


    解壓

    tar zxvf vsftpd-1.2.1.tar.gz


    進入源代碼目錄

    cd vsftpd-1.2.1


    編譯

    make


    創建用戶
    如果不存在 nobody用戶,請創建


    useradd nobody


    創建目錄
    vsftpd 需要 /usr/share/empty 目錄,如果不存在,請創建:


    mkdir /usr/share/empty


    安裝

    make install


    復制配置文件到/etc目錄

    cp vsftpd.conf /etc


    以獨立方式啟動vsftpd服務

    /usr/local/sbin/vsftpd &

     

    4.2 使用Debian的方式安裝

            # aptitude update
            # aptitude install vsftpd( 2.0.5)

    5. 配置文件說明

    /etc/vsftpd.conf
    vsftpd的主配置文件 /etc/ftpusers 記錄不允許訪問FTP服務器的用戶名單管理員可以把一些對系統安全有威脅的敏感賬戶記錄在這個文件中,以免對系統造成威脅


            # /etc/ftpusers: list of users disallowed FTP aclearcase/" target="_blank" >ccess. See ftpusers(5).

            root
            daemon
            bin
            sys
            sync
            games
            man
            lp
            mail
            news
            uucp
            nobody


    /etc/vsftpd.user_list
    此文件與userlist_file 選項有關, 也可通過userlist_file選項指定其他文件, 默認為/etc/vsftpd.user_list,設置userlist_enable=YES時方可生效, 默認(userlist_deny=YES)指定不能訪問服務器的用戶列表,如設定userlist_deny=NO,則FTP服務器僅允許此列表中的用戶訪問。

    /etc/init.d/vsftpd
    vsftpd的啟動腳本

    /var/log/vsftpd.log
    vsftpd的日志文件


    5.1 配置相關內容參閱:

            man vsftpd.conf

    或參閱:我翻譯的VSFTPD.CONF聯機手冊 http://etony.9966.org/doc/other/vsftpd-man-zh.html

    5.2 系統的啟動與停止

    啟動服務

            /etc/init.d/vsftpd start


    重啟服務

            /etc/init.d/vsftpd restart


    停止服務

            /etc/init.d/vsftpd stop

    也可以使用 rcconf 工具設置vsftpd 服務是否在系統引導時啟動

    6. 配置示例
    一個示例文件


            # 以獨立模式啟動
            listen=YES


            #同時允許200客戶端連入,每個IP最多允許4個進程
            max_clients=200
            max_per_ip=4

            允許匿名訪問,只有下載權限。 禁止本地(系統)用戶登錄
            # Access rights
            anonymous_enable=YES
            local_enable=NO
            write_enable=NO
            anon_upload_enable=NO
            anon_mkdir_write_enable=NO
            anon_other_write_enable=NO


            # 禁止匿名用戶下載具有全局讀取權限的文件,目錄中的用戶和組信息列取時都顯示為 "ftp".
            #被動模式下,服務器端口范圍限制在50000~60000

            anon_world_readable_only=YES
            connect_from_port_20=YES
            hide_ids=YES
            pasv_min_port=50000
            pasv_max_port=60000

            # 生成詳細的上載和下載日志,禁止使用"ls -R"命令,

            xferlog_enable=YES
            ls_recurse_enable=NO
            ascii_download_enable=NO
            async_abor_enable=YES


            # 以節省資源模式運行(針對 Linux 2.4 內核),
            #遠程客戶端最大 FTP 命令間隔超過120秒,或空閑的數據連接超過300秒,都將被斷開
            #匿名客戶端允許的最大數據傳輸速率50000b/s
            one_process_model=YES
            idle_session_timeout=120
            data_connection_timeout=300
            anon_max_rate=50000

    7. 為VSFTPD配置虛擬用戶(文本方式)
    7.1 創建虛擬與用戶數據庫
    1. 創建loguser.txt,格式如下:

                    userid
                    pass
           


    比如我創建兩個用戶:tony 密碼為tonypass,etony密碼為etonypass 則loguser.txt的內容如下:


                    tony
                    tonypass
                    etony
                    etonypass
           


    2. 安裝數據庫生成工具:


                    # aptitude install  libdb3-util
           


    3. 生成數據庫:


                    # db_load -T -t hash -f loguser.txt /etc/vsftpd_login.db
           


    4. 設置數據庫文件的訪問權限:


                    # chmod 600 /etc/vsftpd_login.db
           


    7.2 配置PAM文件
    修改/etc/pam.d/vsftpd 內容如下:


            auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
            account required /lib/security/pam_userdb.so db=/etc/vsftpd_login


    7.3 為虛擬用戶創建本地系統用戶

            useradd -d /home/ftpsite virtual
            mkdir /home/ftpsite
            chown virtual.virtual /home/ftpsite
            ls -ld /home/ftpsite
            drwxr-sr-x 2 virtual virtual 48 2006-08-18 05:48 /home/ftpsite


    在目錄下創建一些內容


            echo "etony's vsftpd server" > /home/ftpsite/msg

            chown virtual.virtual /home/ftpsite/msg


    7.4 創建/etc/vsftpd.conf
    根據需要創建/etc/vsftpd.conf,但要確保含有一下設置:


            anonymous_enable=NO
            local_enable=YES
            write_enable=NO
            anon_upload_enable=NO
            anon_mkdir_write_enable=NO
            anon_other_write_enable=NO
            chroot_local_user=YES
            guest_enable=YES
            guest_username=virtual
            listen=YES
            listen_port=21
            pasv_min_port=30000
            pasv_max_port=30999

     

    7.5 啟動vsftpd

            /etc/init.d/vsftpd start|restart


    7.6 測試


            $ lftp localhost -u tony,tonypass
            lftp tony@localhost:~> ls
            -rw-r--r--    1 1001     1001           22 Aug 17 21:49 msg
            lftp tony@localhost:/> exit
            $ lftp localhost -u tony,tonyp
            lftp tony@localhost:~> ls
            ls: Login failed: 530 Login incorrect.

    8. 為VSFTPD配置虛擬用戶(數據庫方式)
    8.1 安裝MySQL數據庫

            # aptitude install  mysql-server  libpam-mysql


    當前MySQL數據庫版本為5.0.24-1 libpam-mysql 0.6.2-1


            tonybox:/var/log# mysql -u root
            Welcome to the MySQL monitor.  Commands end with ; or \g.
            Your MySQL connection id is 7 to server version: 5.0.22-Debian_4-log

            Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

            mysql>
            mysql>
            mysql> create database vsftpd;
            Query OK, 1 row affected (0.04 sec)

            mysql> use vsftpd
            Database changed
            mysql> create table users(name char(20), passwd char(20));
            Query OK, 0 rows affected (0.02 sec)

            mysql> insert into users values('tony',password('passtony'));
            Query OK, 1 row affected (0.02 sec)

            mysql> insert into users values('etony',password('passetony'));
            Query OK, 1 row affected (0.01 sec)

            mysql> grant select, insert on vsftpd.users to vsftpduser@localhost identified by 'vsftpdpass';
            Query OK, 0 rows affected (0.02 sec)


    8.2 創建用戶

            tonybox:/var/log# mysql -u vsftpduser -p
            Enter password:
            Welcome to the MySQL monitor.  Commands end with ; or \g.
            Your MySQL connection id is 10 to server version: 5.0.22-Debian_4-log

            Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

            mysql> use vsftpd
            Reading table information for completion of table and column names
            You can turn off this feature to get a quicker startup with -A

            Database changed

            mysql> select * from users;
            +----+-------+------------------+
            | id | name  | passwd           |
            +----+-------+------------------+
            |  1 | tony  | 2351315b1bd1bd58           |
            |  2 | etony | 59c0cde4781fb0be |
            +----+-------+------------------+
            2 rows in set (0.00 sec)


            mysql>


    8.3 配置PAM文件
    修改/etc/pam.d/vsftpd 內容如下:

            auth required /lib/security/pam_mysql.so user=vsftpduser passwd=vsftpdpass host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2

            account required /lib/security/pam_mysql.so user=vsftpduser passwd=vsftpdpass host=localhost db=vsftpd
           
            table=users usercolumn=name passwdcolumn=passwd crypt=2


    crypt 的值

            0: 在數據庫中明文存儲
            1: 使用crypt()函數加密存儲
            2: 使用MySQL PASSWORD()函數加密存儲


    8.4 其他配置
    同 為VSFTPD配置虛擬用戶(文本方式)

    8.5 測試

            tonybox:~# lftp localhost -u etony,passetony
            lftp etony@localhost:~> ls
            -rw-r--r--    1 1001     1001           22 Aug 17 21:49 msg
            lftp etony@localhost:/>


    注:

    與mysql-server-5.0對應的libpam-mysql由于使用的PASSWORD()函數與服務器端使用的PASSWORD()不匹配, 故無法實現密碼加密,僅可實現在數據庫中明文存儲ftp用戶密碼。 mysql-server-4.1 與 libpam-mysql( 0.5.0-6)可以實現在數據庫中使用加密存儲ftp用戶密碼

    9. 關于日志
    libpam-mysql 0.6.2-1模塊仍然不是很完善等待添加... ...

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>