Centos搭建FTP服務(wù)器

概述

linux在傳輸文件方面,大多數(shù)選擇必然是scp、WinScp等等,但是老實(shí)講小文件還好,傳輸大文件真心慢,nc或者其他的比如壓縮、bbcp等技術(shù),不甚了解又擔(dān)心會(huì)影響包含特殊字符的文件,所以還是FTP最適合做大文件傳輸了。

????網(wǎng)絡(luò)上搜索了很多版本的教程,或是版本不對(duì)應(yīng)或是問(wèn)題不同一,很多同學(xué)照著做了還是會(huì)遇到很多無(wú)法解決的問(wèn)題,這里用我自己的版本和實(shí)踐來(lái)做演示,centos7,阿里云輕量級(jí)服務(wù)器。

版本信息

[我的bash]#lsb_release -a

LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.3.1611 (Core) 
Release:    7.3.1611
Codename:   Core

開(kāi)始搭建

1. 檢查是否安裝vsftpd
vsftpd -v
若輸出版本號(hào)則已安裝,否則需要自行安裝

2. 安裝vsftpd
yum install vsftpd

3. 啟動(dòng)vsftpd
systemctl start vsftpd
或者
service vsftpd start

4. 查看端口監(jiān)聽(tīng)

netstat -nltp | grep 21

5. vsftp擴(kuò)展信息介紹(不想看可以跳過(guò)直接看配置)

I. 配置文件

vsftpd 的配置目錄為 /etc/vsftpd,包含下列的配置文件:

  • vsftpd.conf 為主要配置文件
  • ftpusers 配置禁止訪問(wèn) FTP 服務(wù)器的用戶列表
  • user_list 配置用戶訪問(wèn)控制

我們?cè)趘sftpd.conf中完成絕大部分配置,簡(jiǎn)單的ftp功能也可以只配置此文件。安裝完成后服務(wù)會(huì)新建一個(gè)ftp用戶和ftp的組,通常指向home目錄為/var/ftp,默認(rèn)是nologin(不能登錄系統(tǒng)),具體的可以去/etc/passwd下查看:cat /etc/passwd

II. 用戶類型

  • 本地用戶(local):用戶在FTP服務(wù)器擁有賬號(hào),且該賬號(hào)為本地用戶的賬號(hào),可以通過(guò)自己的賬號(hào)和口令進(jìn)行授權(quán)登錄,登錄目錄為自己的home目錄$HOME
  • 虛擬用戶(guest):用戶在FTP服務(wù)器上擁有賬號(hào),但該賬號(hào)只能用于文件傳輸服務(wù)。登錄目錄為某一特定的目錄,通??梢陨蟼骱拖螺d
  • 匿名用戶(anonymous):用戶在FTP服務(wù)器上沒(méi)有賬號(hào),登錄目錄為/var/ftp
  • 對(duì)于vsftpd默認(rèn)配置是開(kāi)啟了本地用戶和匿名用戶,可以直接登錄的。

III. 連接模式

FTP的連接一般是有兩個(gè)連接的,一個(gè)是客戶程和服務(wù)器傳輸命令的,另一個(gè)是數(shù)據(jù)傳送的連接。FTP服務(wù)程序一般會(huì)支持兩種不同的模式,一種是主動(dòng)(Port)模式,一種是被動(dòng)(Passive)模式(又稱Pasv Mode),我先說(shuō)說(shuō)這兩種不同模式連接方式的分別。(先假設(shè)客戶端為C,服務(wù)端為S。)

  • 主動(dòng)(Port)模式:
    當(dāng)客戶端C向服務(wù)端S連接后,使用的是Port模式,那么客戶端C會(huì)發(fā)送一條命令告訴服務(wù)端S(客戶端C在本地打開(kāi)了一個(gè)端口N在等著你進(jìn)行數(shù)據(jù)連接),當(dāng)服務(wù)端S收到這個(gè)Port命令后 就會(huì)向客戶端打開(kāi)的那個(gè)端口N進(jìn)行連接,這種數(shù)據(jù)連接就生成了。

  • 被動(dòng)(Pasv)模式:
    當(dāng)客戶端C向服務(wù)端S連接后,服務(wù)端S會(huì)發(fā)信息給客戶端C,這個(gè)信息是(服務(wù)端S在本地打開(kāi)了一個(gè)端口M,你現(xiàn)在去連接我吧),當(dāng)客戶端C收到這個(gè)信息后,就可以向服務(wù)端S的M端口進(jìn)行連接,連接成功后,數(shù)據(jù)連接也建立了。

  • 從上面的解釋中,大家可以看到兩種模式主要的不同是數(shù)據(jù)連接建立的不同,對(duì)于Port模式,是客戶端C在本地打開(kāi)一個(gè)端口等服務(wù)端S去連接建立數(shù)據(jù)連接;而Pasv模式就是服務(wù)端S打開(kāi)一個(gè)端口等待客戶端C去建立一個(gè)數(shù)據(jù)連接。

IV. 防火墻管理

對(duì)于CentOS 7 它的默認(rèn)防火墻已改為FireWall進(jìn)行管理,但還是有用iptables的,以及SELinux。

  • firewall

    • firewall能夠允許哪些服務(wù)可用,那些端口可用…. 屬于更高一層的防火墻。
    • firewall的底層是使用iptables進(jìn)行數(shù)據(jù)過(guò)濾,建立在iptables之上。
    • firewall是動(dòng)態(tài)防火墻,使用了D-BUS方式,修改配置不會(huì)破壞已有的數(shù)據(jù)鏈接。
  • iptables

    • iptables用于過(guò)濾數(shù)據(jù)包,屬于網(wǎng)絡(luò)層防火墻.
    • 在設(shè)置iptables后需要重啟iptables,會(huì)重新加載防火墻模塊,而模塊的裝載將會(huì)破壞狀態(tài)防火墻和確立的連接。會(huì)破壞已經(jīng)對(duì)外提供數(shù)據(jù)鏈接的程序??赡苄枰貑⒊绦?。
  • SELinux

    • SELinux(Security-Enhanced Linux) 是美國(guó)國(guó)家安全局(NSA)對(duì)于強(qiáng)制訪問(wèn)控制的實(shí)現(xiàn),是 Linux歷史上最杰出的新安全子系統(tǒng)。它不是用來(lái)防火墻設(shè)置的。但它對(duì)Linux系統(tǒng)的安全很有用。Linux內(nèi)核(Kernel)從2.6就有了SELinux。
    • SELinux是一種基于 域-類型 模型(domain-type)的強(qiáng)制訪問(wèn)控制(MAC)安全系統(tǒng),它由NSA編寫并設(shè)計(jì)成內(nèi)核模塊包含到內(nèi)核中,相應(yīng)的某些安全相關(guān)的應(yīng)用也被打了SELinux的補(bǔ)丁,最后還有一個(gè)相應(yīng)的安全策略。任何程序?qū)ζ滟Y源享有完全的控制權(quán)。假設(shè)某個(gè)程序打算把含有潛在重要信息的文件扔到/tmp目錄下,那么在DAC情況下沒(méi)人能阻止他。SELinux提供了比傳統(tǒng)的UNⅨ權(quán)限更好的訪問(wèn)控制。
  1. 安裝ftp客戶端組件
    yum -y install ftp

  2. 嘗試登陸
    初始時(shí)還沒(méi)有進(jìn)行配置,所以默認(rèn)是允許匿名登錄的,用戶名用ftp,密碼隨便輸(不輸密碼也行),登陸成功即表示我們的ftp初步搭建成功,之后就只是進(jìn)行相關(guān)屬性配置以及讓外網(wǎng)能夠訪問(wèn)了。

ftp localhost

  1. 開(kāi)啟端口以及設(shè)置防火墻規(guī)則
    具體信息參考上面對(duì)防火墻管理的介紹,我這里用的是阿里云的學(xué)生輕量級(jí)服務(wù)器,默認(rèn)未開(kāi)啟防火墻,所以還算方便,不用配置那么多,只需要前往阿里云控制臺(tái)對(duì)安全組規(guī)則進(jìn)行一下配置(打開(kāi)端口)即可

其他根據(jù)自己版本需求進(jìn)行配置,放開(kāi)端口開(kāi)啟服務(wù),比如:
由于ftp是默認(rèn)監(jiān)聽(tīng)的是21端口,因此我們需要在防火墻里面添加開(kāi)放21端口,CentOS 7默認(rèn)使用的是FireWall防火墻,因此我們需要配置該防火墻,開(kāi)啟ftp協(xié)議服務(wù),如下所示:

# firewall-cmd --zone=public --permanent --add-port=21/tcp
# firewall-cmd --zone=public --permanent --add-service=ftp
# firewall-cmd --reload

其他的諸如使用iptables或者SELinux 的,根據(jù)命令配置即可,原理都是一樣的。

  1. 修改配置文件

/etc/vsftpd/vsftpd.conf

---------------------------------------主機(jī)相關(guān)----------------------------------------------
*   connect_from_port_20=YES (NO)
    ftp-data 的埠號(hào);

*   listen_port=21
    vsftpd 使用的命令通道之端口號(hào),如果您想要使用非正規(guī)的埠號(hào),在這個(gè)設(shè)定項(xiàng)目修改吧! 不過(guò)你必須要知道,這個(gè)設(shè)定值僅適合以 stand alone 的方式來(lái)啟動(dòng)喔!(對(duì)于 super daemon 無(wú)效)

*   dirmessage_enable=YES (NO)
    當(dāng)用戶進(jìn)入某個(gè)目錄時(shí),會(huì)顯示該目錄需要注意的內(nèi)容,顯示的檔案默認(rèn)是 .message ,你可以使用底下的設(shè)定項(xiàng)目來(lái)修訂!

*   message_file=.message
    當(dāng) dirmessage_enable=YES 時(shí),可以設(shè)定這個(gè)項(xiàng)目來(lái)讓 vsftpd 尋找該檔案來(lái)顯示訊息!

*   listen=YES (NO)
    若設(shè)定為 YES 表示 vsftpd 是以 standalone 的方式來(lái)啟動(dòng)的!

*   pasv_enable=YES (NO)
    啟動(dòng)被動(dòng)式聯(lián)機(jī)模式(passive mode),一定要設(shè)定為 YES 的啦!

*   use_localtime=YES (NO)
    是否使用本地時(shí)間?vsftpd 預(yù)設(shè)使用 GMT 時(shí)間(格林威治),所以會(huì)比臺(tái)灣晚 8 小時(shí),建議設(shè)定為 YES 吧!

*   write_enable=YES (NO)
    如果你允許用戶上傳數(shù)據(jù)時(shí),就要啟動(dòng)這個(gè)設(shè)定值;

*   connect_timeout=60
    單位是秒,在數(shù)據(jù)連接的主動(dòng)式聯(lián)機(jī)模式下,我們發(fā)出的連接訊號(hào)在 60 秒內(nèi)得不到客戶端的響應(yīng),則不等待并強(qiáng)制斷線咯。

*   accept_timeout=60
    當(dāng)用戶以被動(dòng)式 PASV 來(lái)進(jìn)行數(shù)據(jù)傳輸時(shí),如果主機(jī)啟用 passive port 并等待 client 超過(guò) 60 秒而無(wú)回應(yīng), 那么就給他強(qiáng)制斷線!這個(gè)設(shè)定值與 connect_timeout 類似,不過(guò)一個(gè)是管理主動(dòng)聯(lián)機(jī),一個(gè)管理被動(dòng)聯(lián)機(jī)。

*   data_connection_timeout=300
    如果服務(wù)器與客戶端的數(shù)據(jù)聯(lián)機(jī)已經(jīng)成功建立 (不論主動(dòng)還是被動(dòng)聯(lián)機(jī)),但是可能由于線路問(wèn)題導(dǎo)致 300 秒內(nèi)還是無(wú)法順利的完成數(shù)據(jù)的傳送,那客戶端的聯(lián)機(jī)就會(huì)被我們的 vsftpd 強(qiáng)制剔除!

*   idle_session_timeout=300
    如果使用者在 300 秒內(nèi)都沒(méi)有命令動(dòng)作,強(qiáng)制脫機(jī)!

*   max_clients=0
    如果 vsftpd 是以 stand alone 方式啟動(dòng)的,那么這個(gè)設(shè)定項(xiàng)目可以設(shè)定同一時(shí)間,最多有多少 client 可以同時(shí)連上 vsftpd 哩?。?
*   max_per_ip=0
    與上面 max_clients 類似,這里是同一個(gè) IP 同一時(shí)間可允許多少聯(lián)機(jī)?

*   pasv_min_port=0, pasv_max_port=0
    上面兩個(gè)是與 passive mode 使用的 port number有關(guān),如果您想要使用 65400 到 65410 這 11 個(gè) port 來(lái)進(jìn)行被動(dòng)式聯(lián)機(jī)模式的連接,可以這樣設(shè)定 pasv_max_port=65410 以及 pasv_min_port=65400。 如果是 0 的話,表示隨機(jī)取用而不限制。

*   ftpd_banner=一些文字說(shuō)明
    當(dāng)使用者聯(lián)機(jī)進(jìn)入到 vsftpd 時(shí),在 FTP 客戶端軟件上頭會(huì)顯示的說(shuō)明文字。不過(guò),這個(gè)設(shè)定值數(shù)據(jù)比較少啦! 建議你可以使用底下的設(shè)定值來(lái)取代這個(gè)項(xiàng)目;

*   banner_file=/path/file
    這個(gè)項(xiàng)目可以指定某個(gè)純文本檔作為使用者登入 vsftpd 服務(wù)器時(shí)所顯示的歡迎字眼。

-----------------------------與實(shí)體用戶較相關(guān)的設(shè)定值----------------------

*   anonymous_enable=YES (NO)
    是否允許匿名登錄!預(yù)設(shè)是 YES ,底下的所有相關(guān)設(shè)定都需要將這個(gè)設(shè)定為 anonymous_enable=YES 之后才會(huì)生效!

*   anon_world_readable_only=YES (NO)
    僅允許 anonymous 具有下載可讀檔案的權(quán)限,預(yù)設(shè)是 YES。

*   anon_other_write_enable=YES (NO)
    是否允許 anonymous 具有寫入的權(quán)限?預(yù)設(shè)是 NO!如果要設(shè)定為 YES, 那么開(kāi)放給 anonymous 寫入的目錄亦需要調(diào)整權(quán)限,讓 vsftpd 的 PID 擁有者可以寫入才行!

*   anon_mkdir_write_enable=YES (NO)
    是否讓 anonymous 具有建立目錄的權(quán)限?默認(rèn)值是 NO!如果要設(shè)定為 YES, 那么 anony_other_write_enable 必須設(shè)定為 YES !

*   anon_upload_enable=YES (NO)
    是否讓 anonymous 具有上傳數(shù)據(jù)的功能,默認(rèn)是 NO,如果要設(shè)定為 YES , 則 anon_other_write_enable=YES 必須設(shè)定。

*   deny_email_enable=YES (NO)
    將某些特殊的 email address 抵擋住,不讓那些 anonymous 登入! 如果以 anonymous 登入主機(jī)時(shí),不是會(huì)要求輸入密碼嗎?密碼不是要您 輸入您的 email address 嗎?如果你很討厭某些 email address , 就可以使用這個(gè)設(shè)定來(lái)將他取消登入的權(quán)限!需與下個(gè)設(shè)定項(xiàng)目配合:

*   banned_email_file=/etc/vsftpd.banned_emails
    如果 deny_email_enable=YES 時(shí),可以利用這個(gè)設(shè)定項(xiàng)目來(lái)規(guī)定哪個(gè) email address 不可登入我們的 vsftpd 喔!在上面設(shè)定的檔案內(nèi),一行輸入一個(gè) email address 即可!

*   no_anon_password=YES (NO)
    當(dāng)設(shè)定為 YES 時(shí),表示 anonymous 將會(huì)略過(guò)密碼檢驗(yàn)步驟,而直接進(jìn)入 vsftpd 服務(wù)器內(nèi)喔!所以一般預(yù)設(shè)都是 NO 的!

*   anon_max_rate=0
    這個(gè)設(shè)定值后面接的數(shù)值單位為 bytes/秒 ,限制 anonymous 的傳輸速度,如果是 0 則不限制(由最大帶寬所限制),如果您想讓 anonymous 僅有 30 KB/s 的速度,可以設(shè)定『anon_max_rate=30000』

*   anon_umask=077
    限制 anonymous 的權(quán)限!如果是 077 則 anonymous 傳送過(guò)來(lái)的檔案 權(quán)限會(huì)是 -rw------- 喔!

-----------------------------系統(tǒng)安全方面的設(shè)定值----------------------
*   ascii_download_enable=YES (NO)
    如果設(shè)定為 YES ,那么 client 就可以使用 ASCII 格式下載文件。

*   ascii_upload_enable=YES (NO)
    與上一個(gè)設(shè)定類似的,只是這個(gè)設(shè)定針對(duì)上傳而言!預(yù)設(shè)是 NO

*   one_process_model=YES (NO)
    這個(gè)設(shè)定項(xiàng)目比較危險(xiǎn)一點(diǎn)~當(dāng)設(shè)定為 YES 時(shí),表示每個(gè)建立的聯(lián)機(jī) 都會(huì)擁有一支 process 在負(fù)責(zé),可以增加 vsftpd 的效能。不過(guò), 除非您的系統(tǒng)比較安全,而且硬件配備比較高,否則容易耗盡系統(tǒng)資源喔!一般建議設(shè)定為 NO 的啦!

*   tcp_wrappers=YES (NO)
    當(dāng)然我們都習(xí)慣支持 TCP Wrappers的啦!所以設(shè)定為 YES 吧!

*   xferlog_enable=YES (NO)
    當(dāng)設(shè)定為 YES 時(shí),使用者上傳與下載文件都會(huì)被紀(jì)錄起來(lái)。記錄的檔案與下一個(gè)設(shè)定項(xiàng)目有關(guān):

*   xferlog_file=/var/log/vsftpd.log
    如果上一個(gè) xferlog_enable=YES 的話,這里就可以設(shè)定了!這個(gè)是登錄檔的檔名啦!

*   xferlog_std_format=YES (NO)
    是否設(shè)定為 wu ftp 相同的登錄檔格式?!預(yù)設(shè)為 NO ,因?yàn)榈卿洐n會(huì)比較容易讀! 不過(guò),如果您有使用 wu ftp 登錄文件的分析軟件,這里才需要設(shè)定為 YES

*   nopriv_user=nobody
    我們的 vsftpd 預(yù)設(shè)以 nobody 作為此一服務(wù)執(zhí)行者的權(quán)限。因?yàn)?nobody 的權(quán)限 相當(dāng)?shù)牡?,因此即使被入侵,入侵者僅能取得 nobody 的權(quán)限喔!

*   pam_service_name=vsftpd
    這個(gè)是 pam 模塊的名稱,我們放置在 /etc/pam.d/vsftpd 
  • 這里僅陳列常見(jiàn)配置參數(shù),更多內(nèi)容通過(guò)man 5 vsftpd.conf查看

配置的時(shí)候按照需要更改相應(yīng)配置信息即可,比較方便的就是只設(shè)置共享文件夾、用戶以及共享文件夾的權(quán)限即可,之后訪問(wèn)會(huì)自動(dòng)跳轉(zhuǎn)到用戶的家目錄中,復(fù)雜一點(diǎn)的就需要按照配置文件自行設(shè)置其他的高級(jí)屬性,比如匿名、自定義共享目錄,配速限制、限制用戶僅能用ftp訪問(wèn)等等。 我這里僅配置了禁止匿名和可寫、可上傳,用戶自行添加

image.png
image.png

References:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容