Linux經常使用服務之ftp服務(使用vsftpd實現)

文件共享服務mysql

應用層:ftplinux

內核:NFSsql

跨平臺:sambashell

在linux實現CIFS(SMB)協議數據庫


RPC:遠程過程調用(主要功能,讓位於不一樣主機上的倆個進程可以基於二進制格式進行數據通訊)vim

    ftp :(基於RPC的文件共享服務)(明文傳輸)工做於應用層安全

   ftp協議服務端與客戶端交互時有倆種鏈接:(容許併發鏈接)服務器

命令鏈接:文件管理類命令,始終在線的鏈接session

數據鏈接:數據傳輸,按需建立及關閉的鏈接併發

數據傳輸格式(使用何種格式傳輸,由客戶端和服務器自行協商):

文本傳輸

二進制傳輸

主動模式(Active FTP):由服務器建立鏈接

命令鏈接:

客戶端:隨機端口 --->服務端:21端口

客戶端向服務器端發送用來創建數據鏈接的高位端口號

    數據鏈接:

服務端:20/tcp--->客戶端:隨機端口

服務器的20端口僅僅負責創建數據鏈接,真正傳輸數據的是其餘隨機端口,20端口只是個監聽套接字,鏈接套接字是隨機的

     

被動模式(Passive FTP):由客戶端建立鏈接

    命令鏈接:

客戶端:隨機端口 --->服務端:21端口

數據鏈接:(服務端此時使用的端口,已經在命令鏈接中通知給客戶端)

    客戶端:隨機端口--->服務端:隨機端口


    (服務器防火牆經過鏈接追蹤功能放行服務器使用的隨機端口)

    ftp協議中定義的典型消息,用來判斷問題:

    125:數據鏈接打開,傳輸開始

    200:命令OK

    226:數據傳輸完畢

    331:用戶名OK,須要輸入密碼

    425:不能打開數據鏈接

    426:數據鏈接被關閉,傳輸被中斷

    452:錯誤寫文件

    500:語法錯誤,不可識別的命令

    530:未登入

vsftp  (支持虛擬用戶,基於PAM實現用戶認證)

/etc/vsftpd  配置文件目錄

/etc/vsftpd/vsftpd.conf  配置文件

/etc/init.d/vsftpd 啓動腳本

/usr/sbin/vsftpd   主程序


針對系統帳號來給予阻擋的配置文件:

/etc/vsftpd/ftpusers:PAM模塊的阻擋訪問設置項目

/etc/vsftpd/user_list:vsftpd自定義的阻擋訪問項目




   vsftpd受Selinux控制


    基於PAM實現用戶認證:(PAM:可插入式認證模塊)

    /etc/pam.d/*

    /lib64/security/*

  支持虛擬用戶 


  /var/ftp  vsftp根目錄(不容許除root用戶外其餘用戶擁有寫權限)

  匿名用戶訪問目錄

  /var/ftp/pub 存儲公開數據




     ftp用戶:

      匿名用戶(anonymous 匿名用戶登陸也需輸入匿名用戶用戶名 anonymous )

      系統用戶

      /var/ftp/系統用戶名       系統用戶家目錄

      虛擬用戶(訪客身份)(被映射爲ftp用戶)


      (匿名用戶,虛擬用戶最終都要映射爲某系統用戶)



      vsftpd經常使用配置

     /etc/vsftpd/vsftpd.conf 

      anonymous_enable=YES  是否容許匿名用戶登陸(ftp和anonymous倆個名稱都被認爲是匿名用戶)

      local_enable=YES      是否啓用系統用戶登陸

        write_enable=YES      系統用戶是否能夠上傳文件

        anon_upload_enable=YES 匿名用戶是否要上傳文件



        某用戶是否能夠能在ftp服務器上上傳文件,除了要看是否具備上傳文件的權限嘛,還要看用戶是否對相應目錄具備寫權限。

        (文件服務權限和文件共享權限的交集)


        connect_from_port_20=YES      ftp爲主動模式時(由服務器建立數據鏈接),服務器使用默認的20號端口


        anon_mkdir_write_enable=YES   匿名用戶是否能夠建立目錄

        anon_other_write_enable=YES   匿名用戶是否擁有其餘寫權限(刪除權限)

        anon_world_readable_only=YES  僅容許匿名用戶具備下載可讀文件的權限

        anon_upload_enable=YES        是否容許匿名用戶具備上傳數據的權限(若是容許則anon_other_write_enable=YES必須設置)

        anon_umask=077                匿名用戶上傳文件的權限

        no_anon_password=YES          匿名用戶是否能夠免密登陸


        dirmessage_enable=YES         當用戶進入一個目錄時是否顯示歡迎信息(在相應目錄下建立.message文件,在.message文件裏編輯歡迎信息)

        xferlog_enable=YES            是否打開傳輸日誌

        xferlog_file=/var/log/xferlog 傳輸日誌存放路徑


        chown_uploads=YES            用戶上傳文件後是否將用戶上傳的文件的屬主改成其餘用戶     

        chown_username=whoever       改成那個用戶


        idle_session_timeout=600      用戶會話超時時間



        userlist_enable=YES           是否容許/etc/vsftpd/user_list 文件生效,阻擋指定的用戶訪問ftp服務器

        userlist_deny=YES|NO          如爲YES則 /etc/vsftpd/user_list 爲黑名單 如爲NO 則/etc/vsftpd/user_list爲白名單            



        chroot_list_enable=YES        是否是用一個文件將特定用戶鎖在家目錄下

        chroot_list_file=/etc/vsftpd/chroot_list  將用戶鎖定在家目錄下的用戶列表文件存放路徑


        chroot_local_user=YES         將全部用戶禁錮在家目錄下(此命令如生效則 chroot_list_file=/etc/vsftpd/chroot_list 無效 )


        listen=YES                   是否將vsftpd運行爲一個獨立守護進程


        守護進程:

        獨立守護進程

        瞬時守護進程(由xinetd代爲管理)


        pam_service_name=vsftpd  pam配置文件名字


        資源訪問控制

        max_clients=xx 最多容許多少用戶同時訪問ftp服務

        max_per_ip=xx 每一個IP最同時多能夠發起多少鏈接


        idle_session_timeout=xxx 空閒的用戶會話在空閒多久後中斷(單位秒)

        date_connection_timeout=xxx 空閒的數據鏈接在空閒多久後中斷(單位秒)


        設置客戶端空閒時的自動中斷和激活鏈接的時間

        accept_timeout=xx  客戶端空閒多長時間後中斷鏈接

            connect_timeout=xx 客戶端中斷多長時間後自動激活鏈接

        設置客戶端鏈接時的端口範圍:

        pasv_min_port=xxxx

        pasv_max_port=xxxx


        虛擬用戶相關設置

         guest_enable=YES 是否容許使用虛擬用戶

         guest_username=xxx 指定虛擬用戶映射的系統帳戶



        是否支持TCP_Wrappers的防火牆機制

         tcp_wrappers=YES




    ftp服務的安全通訊方式:

    ftps:ftp+ssl/tls

    sftp:openssh的一個子系統,基於ssh來實現



       ftps安全通訊相關設置:

        ssl_enable=YES  是否容許客戶端使用ssl鏈接

        ssl_sslv2=NO   是否容許使用ssl2進行鏈接

        ssl_sslv3=NO   是否容許使用ssl3進行鏈接

        ssl_tlsv1=YES  是否容許使用tls1進行鏈接(推薦使用)

        allow_anon_ssl=NO 是否容許匿名用戶使用ssl鏈接

        force_local_data_ssl=YES 是否強制非匿名用戶必須使用ssl鏈接發送和接收數據

            force_local_logins_ssl=YES 是否強制非匿名用戶登陸時必須使用ssl鏈接

            rsa_cert_file=xxxx   用於SSL鏈接的RSA證書文件位置

            rsa_private_key_file=xxx 用於SSL鏈接的RSA私鑰文件的位置,(none)表示私鑰文件就存放於證書文件中

  


  vsftpd虛擬用戶

   虛擬用戶和本地用戶不能夠同時存在

   傳統的 FTP 服務器採用以下的方法實現虛擬用戶:

   在本地創建普通用戶帳號並設置密碼

   將其登陸 shell 設爲不可登陸

   由 passwd/shadow 口令系統進行認證

   特別提醒,在vsftpd的設置中,必須把local_enable=YES 打開才能設置虛擬用戶登陸

  全部虛擬用戶都會統一映射爲一個指定的系統帳號:訪問的共享位置既爲此係統帳號的家目錄

  各虛擬用戶可被賦予不一樣的訪問權限,經過匿名用戶的權限控制參數進行指定


  虛擬用戶帳號的存儲方式:

  文件:編輯文本文件,此文件須要被編碼爲hash格式

  奇數行爲用戶名,偶數行爲密碼


  基於文件驗證的vsftpd虛擬用戶

  1.建立用戶數據庫文件

  a. 建立用戶文件

    vim /etc/vsftpd/vusers.txt

        格式:

            用戶名

            密碼

            ...

  b. 進入到相應目錄下

  cd /etc/vsftpd



  c. 使用 db_load 命令生成口令庫文件

  db_load -T -t hash -f vusers.txt vusers.db


  d. 修改修改口令庫文件權限

     chmod 600 vusers.db 

      2.建立虛擬用戶映射的系統用戶和訪問FTP目錄

      a.建立系統用戶並指定家目錄

      useradd -d /var/ftproot -s /sbin/nologin vuser  #建立系統用戶vuser 家目錄爲/var/ftproot且不容許登陸(ftproot目錄會自動建立)

      b.修改家目錄權限

      chmod +rx /var/ftproot


      c.pam配置文件,編輯生成虛擬用戶所需的 PAM 配置文件

      建立vsftpd的pam模塊的配置文件,/etc/pam.d/vsftpd.db 讓vsftpd支持pam模塊進行驗證

      在/etc/pam.d/vsftpd.db中添加如下內容:

         auth       required     pam_userdb.so db=/etc/vsftpd/vusers

                           account    required     pam_userdb.so db=/etc/vsftpd/vusers



                    



                3.修改vsftpd配置文件/etc/vsftpd/vsftpd.conf 給vsftpd指定pam模塊

                        添加如下內容:

                         guest_enable=YES           #容許虛擬用戶登陸 

guest_username=vuser       #將虛擬用戶映射問本地vuser用戶

pam_service_name=vsftpd.db    # /var/pam.d目錄下的 關於vsftpd的配置文件



    4. 爲虛擬用戶創建獨立的配置文件


       a.修改vsftpd配置文件/etc/vsftpd/vsftpd.conf ,爲虛擬用戶指定配置文件的存儲路徑

        添加如下內容:

        user_config_dir=/etc/vsftpd/vusers.d/


                   b.在/etc/目錄下建立虛擬用戶的目錄 


                             mkdir /etc/vsftpd/vusers.d/



                   c.進入到虛擬用戶的目錄中/etc/vsftpd/vusers.d/ 建立與虛擬用戶同名的配置文件

                      將下面的內容寫入配置文件中,就能夠進行權限控制


                        #虛擬用戶的上傳權限


                           anon_upload_enable=YES

                        # 虛擬用戶建立文件夾的權限

                           anon_mkdir_write_enable=YES


                        #虛擬的其餘用戶對指定用戶目錄的寫權限

                         anon_other_write_enable=YES



                

                   


            虛擬用戶的權限注意事項:

            當一個虛擬用戶登陸 FTP 服務器時,vsftpd 的守護進程首先

查看主配置文件的權限配置,而後再用此用戶單獨的配置文件

中的配置覆蓋主配置文件中的配置。

vsftpd 的這種配置機制,相似於 Apache 配置中的 httpd.conf

和.htaccess。只不過前者是針對不一樣虛擬用戶的,然後者是針

對不一樣目錄的。

所以在對不一樣虛擬用戶進行配置時要注意:

(1)在主配置文件中設置最低的權限,這些設置對虛擬用戶

口令庫中的全部用戶均生效;

(2)分別在不一樣的虛擬用戶的配置文件中開放此虛擬用戶應

該具備的權限。

                         






  關係型數據庫的表中:

  實時查詢數據庫完成用戶認證:

  mysql庫:pam要依賴於pam-mysql插件


    ftp支持倆種安全通訊方式:

    ftps:ftp+ssl/tls

    sftp:基於ssh的安全傳輸功能




    ftps的配置過程:


    1、建立私有CA:

    在肯定配置爲CA的服務器上生成一個自簽證書,併爲CA提供所須要的目錄及文件便可;

                  

                       1.爲CA提供所需的目錄及文件:

                             mkdir -pv /etc/pki/CA/{certs,crl,newcerts}

                             touch /etc/pki/CA/{serial,index.txt}

                             echo ca序列號 > /etc/pki/CA/serial

                             



                       2.生成私鑰(生成的私鑰存放於openssl配置文件中配置的目錄)

                       (umask 077; openssl genrsa -out private/cakey.pem 2048)

   3.生成自簽證書

         


          openssl req -new -x509 -key private/cakey.pem -out cacert.pem  -days 365

          ( -new 生成新證書籤署請求

                                  -x509 生成自籤格式證書(專用於建立私有CA使用)

                                  -key 生成請求時用到的私鑰文件路徑

                                  -out 生成的證書文件路徑,若是是自籤操所將直接生成簽署過的證書

                                  -days  證書的有效時長(單位天)

             )

                                (本身向本身申請自簽證書則使用-x509選項)

                                       輸入國家代碼

                                       輸入地區代碼

                                       輸入城市代碼

                                       輸入企業代碼

                                       輸入部門代碼

                                       輸入主機名或我的名

                                       輸入管理員名


        2、爲vsftpd請求CA

        1.建立存放CA的目錄

        mkdir /etc/vsftpd/ssl

        2.進入CA目錄,生成私鑰

        (umask 077; openssl genrsa -out vsftpd.key 2048)

        3.生成證書籤署請求

        openssl req -new  -key vsftpd.key -out vsftpd.csr -days 360


        輸入國家代碼

                                       輸入地區代碼

                                       輸入城市代碼

                                       輸入企業代碼

                                       輸入部門代碼

                                       輸入主機名或我的名

                                       輸入管理員名


        4.編輯openssl配置文件

        修改CA工做目錄爲:

        dir = /etc/pki/CA 

        4.簽署CA(在/etc/vsftpd/ssl 目錄下執行)

        openssl ca -in  vsftpd.csr -out vsftpd.crt -days 360


        5.編輯vsftpd配置文件,使vsftpd可使用ssl

        添加如下內容:



ssl_enable=YES

ssl_tlsv1=YES

ssl_sslv3=YES

allow_anon_ssl=NO

force_local_data_ssl=YES

force_local_logins_ssl=YES

rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt                CA證書位置

rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key         私鑰文件路徑



6.重啓vsftpd服務






源碼安裝vsftpd:


1.下載vsftpd

http://vsftpd.beasts.org/

2.備份vsftpd配置文件


3.

//進入存放 vsftpd 源代碼的目錄

# cd /usr/local/src

# ls

vsftpd-1.1.3.tar.gz

//解包

# tar -zxvf vsftpd-1.1.3.tar.gz

# cd vsftpd-1.1.3



//編譯 vsftpd

# make

//查看是否編譯成功

# ls -l vsftpd

-rwxr-xr-x 1 root root 65996 3 月 12 18:56 vsftpd

//安裝 vsftpd

# make install

//安裝過程執行了以下操做

// cp vsftpd /usr/local/sbin/vsftpd

// cp vsftpd.conf.5 /usr/local/man/man5

// cp vsftpd.8 /usr/local/man/man8

// cp xinetd.d/vsftpd /etc/xinetd.d/

#

//複製默認配置文件到/etc 目錄

# cp vsftpd.conf /etc

//複製本地用戶所需的 PAM 配置文件

# cp RedHat/vsftpd.pam /etc/pam.d/ftp

//從新啓動 xinetd

# service xinetd restart

//安裝結束






高安全級別匿名 FTP 服務器的配置要求

.  僅僅容許匿名用戶訪問

.  不容許本地用戶訪問

.  關閉全部寫權限

.  不容許匿名用戶上傳

.  設置客戶端鏈接時的端口範圍

.  設置 匿名用戶的最大傳輸速率限制

.  設置空閒的數據鏈接的的中斷時間

.  設置客戶端空閒時的自動中斷和激活鏈接的時間

.  配置每一個主機的最大鏈接數

.  配置總的併發鏈接數

.  配置禁止訪問的主機

.  配置安全日誌

相關文章
相關標籤/搜索