Linux系統(tǒng)搭建FTP服務(wù)器完整步驟
FTP協(xié)議:文件傳輸協(xié)議(File Transfer Protocol)
- 協(xié)議定義了一個(gè)在遠(yuǎn)程計(jì)算機(jī)系統(tǒng)和本地計(jì)算機(jī)系統(tǒng)之間傳輸文件的一個(gè)標(biāo)準(zhǔn)
- FTP運(yùn)行在OSI模型的應(yīng)用層,并利用傳輸協(xié)議TCP在不同的主機(jī)之間提供可靠的數(shù)據(jù)傳輸
- FTP 在文件傳輸中還支持?jǐn)帱c(diǎn)續(xù)傳功能,可以大幅度減少CPU網(wǎng)絡(luò)帶寬的開銷
FTP模型
- 用戶接口:提供一個(gè)用戶接口并使用客戶端協(xié)議解釋器的服務(wù)
- 客戶端協(xié)議解釋器:向遠(yuǎn)程服務(wù)器發(fā)送命令 并建立客戶數(shù)據(jù)傳輸過程
- 服務(wù)端協(xié)議解釋器:響應(yīng)客戶協(xié)議機(jī)發(fā)出的命令并驅(qū)動(dòng)服務(wù)端數(shù)據(jù)傳輸過程
- 客戶端數(shù)據(jù)傳輸協(xié)議:負(fù)責(zé)完成和服務(wù)器數(shù)據(jù)傳輸過程及客戶端本地文件系統(tǒng)的通信
- 服務(wù)端數(shù)據(jù)傳輸協(xié)議:負(fù)責(zé)完成和客戶數(shù)據(jù)過程及服務(wù)器端文件系統(tǒng)的通信
控制連接(端口號(hào)21)
- 主要用來傳送在實(shí)際通信過程中需要執(zhí)行的FTP命令以及命令的響應(yīng)
- 只需要很小的網(wǎng)絡(luò)帶寬
- FTP服務(wù)端監(jiān)聽21端口號(hào)來等待控制連接建立
- 建立控制連接后,還需要驗(yàn)證客戶身份,決定是否建立數(shù)據(jù)連接
- 當(dāng)需要目錄列表,傳輸文件時(shí),才建立數(shù)據(jù)連接,并且每次客戶端都是用不同的端口號(hào)來建立數(shù)據(jù)連接。數(shù)據(jù)傳輸完畢,就中斷這條臨時(shí)的數(shù)據(jù)連接
- 在FTP連接期間,控制連接始終保持通常的連接狀態(tài)。在數(shù)據(jù)連接存在期間,控制連接必須存在;一旦控制連接斷開,數(shù)據(jù)連接會(huì)自動(dòng)關(guān)閉。
數(shù)據(jù)連接(端口號(hào)20)
- FTP服務(wù)端監(jiān)聽20端口來等待數(shù)據(jù)連接
- 數(shù)據(jù)連接依賴于控制連接
- 建立方式(主動(dòng)被動(dòng)都是相對(duì)服務(wù)器而言)
主動(dòng)模式
- 通過三次握手,建立控制連接;客戶端的源端口是高位隨機(jī)端口,目標(biāo)端口是21端口
- 控制連接建立后,客戶端進(jìn)行身份驗(yàn)證,協(xié)商數(shù)據(jù)連接采用主動(dòng)模式;隨后客戶端會(huì)向FTP服務(wù)器發(fā)送Port報(bào)文,表明自己監(jiān)聽的IP+端口,并等待FTP服務(wù)器(20端口)向自己監(jiān)聽的IP+端口發(fā)起數(shù)據(jù)連接請(qǐng)求。
- 服務(wù)端發(fā)起數(shù)據(jù)連接請(qǐng)求,建立數(shù)據(jù)連接
被動(dòng)模式
- 通過三次握手,建立控制連接;客戶端的源端口是高位隨機(jī)端口,目標(biāo)端口是21端口;
- 控制連接建立后,客戶端進(jìn)行身份驗(yàn)證,協(xié)商數(shù)據(jù)連接采用被動(dòng)模式;隨后客戶端會(huì)向服務(wù)器發(fā)送PASV報(bào)文,表示我們用被動(dòng)模式
- 服務(wù)端收到PASV報(bào)文,于是向客戶端發(fā)送Port報(bào)文,表明自己監(jiān)聽的IP+端口
- 客戶端發(fā)起數(shù)據(jù)連接請(qǐng)求,建立數(shù)據(jù)連接
VSFTPD服務(wù)介紹
- 服務(wù)包:vsftpd
- 服務(wù)類型:由Systemd啟動(dòng)的守護(hù)進(jìn)程
- 配置單元: /usr/lib/systemd/system/vsftpd.service
- 守護(hù)進(jìn)程: /usr/sbin/vsftpd
- 端口: 21(ftp) , 20(ftp‐data)
- 主配置文件: /etc/vsftpd/vsftpd.conf
- 用戶訪問控制配置文件: /etc/vsftpd/ftpusers /etc/vsftpd/user_list
- 日志文件: /etc/logrotate.d/vsftpd
- 配置文件參數(shù)
| 參數(shù) | 作用 |
|---|---|
| listen=NO | 是否以獨(dú)立運(yùn)行的方式監(jiān)聽服務(wù) |
| listen_address=ip地址 | 設(shè)置要監(jiān)聽的IP地址 |
| listen_port=21 | 設(shè)置FTP服務(wù)的監(jiān)聽端口 |
| download_enable=YES | 是否允許下載文件 |
| userlist_enable=YES | 設(shè)置用戶列表為"允許" |
| userlist_deny=YES | 設(shè)置用戶列表為"禁止" |
| max_clients=0 | 最大客戶端連接數(shù),0為不限制 |
| max_per_ip=0 | 同一IP地址的最大連接數(shù),0為不限制 |
| anonymous_enable=YES | 是否允許匿名用戶訪問 |
| anon_upload_enable=YES | 是否允許匿名用戶上傳文件 |
| anon_umask | 匿名用戶上傳文件的umask |
| anon_root=/var/ftp | 匿名用戶的ftp根目錄 |
| anon_mkdir_write_enable=YES | 是否允許匿名用戶創(chuàng)建目錄 |
| anon_other_write_enable=YES | 是否開放匿名用戶的其他寫入權(quán)限(重命名、刪除等) |
| anon_max_rate=0 | 匿名用戶的最大傳輸速率,0為不限制 |
| local_enable=yes | 是否允許本地用戶登錄 |
| local_umask=022 | 本地用戶上傳文件的umask值 |
| local_root=/vat/ftp | 本地用戶的ftp根目錄 |
| chroot_local_user=YES | 是否將用戶權(quán)限禁錮在ftp目錄,以確保安全 |
| local_max_rate=0 | 本地用戶的最大傳輸速率,0為不限制 |
基礎(chǔ)配置
安裝vsftp
[root@localhoust ~]#yum -y install vsftpd
準(zhǔn)備分發(fā)的文件
[root@localhoust ~]#touch /var/ftp/abd.txt
啟動(dòng)服務(wù)
[root@localhost ~]#systemctl start vsftpd [root@localhost ~]#systemctl enable vsftpd
關(guān)閉防火墻
[root@localhost ~]#systemctl stop firewalld [root@localhost ~]#setenforce 0
客戶端工具
Linux中
1.使用ftp工具
[root@localhost ~]# yum install ftp -y [root@localhost ~]# ftp <IP地址> Name (192.168.175.10:root):anonymous password:直接回車
ftp工具一定要輸入用戶名和密碼,匿名用戶登陸用戶名寫anonymous,密碼直接回車,登陸成功或者失敗都會(huì)給出提示
2.使用lftp工具
[root@localhost ~]# yum install lftp -y [root@localhost ~]# lftp <IP地址>
lftp工具不需要輸入用戶名和密碼直接登陸,不會(huì)直接給出登陸成功或者失敗的提示,需要輸入ls工具才能知道是否連接成功,優(yōu)點(diǎn)在于連接更加方便
Windows中
1.在瀏覽器中訪問
可以在瀏覽器、運(yùn)行窗口或者資源管理器中輸入 ftp://IP地址/ ,這樣訪問的是ftp的根位置,如果需要訪問相關(guān)目錄可以輸入 ftp://IP地址/目錄/文件名
2.在控制管理器中訪問
在cmd窗口中,輸入命令 ftp <IP地址> 即可訪問
需要注意的是直接訪問ftp服務(wù)器的IP地址時(shí)訪問的根位置目錄是 /var/ftp,如果需要訪問pub里的test可以訪問 ftp://192.168.80.129/pub/test 。
案例
案例1,匿名用戶訪問(默認(rèn)開啟)
修改配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf anonymous_enable=YES anon_umask=022 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES [root@localhost ~]# systemctl restart vsftpd #重啟配置
新版本的vsftp針對(duì)用戶安全性進(jìn)行了升級(jí),普通用戶無法在/var/ftp下新建文件,如果直接添加目錄的w權(quán)限會(huì)觸發(fā)安全判斷問題,因?yàn)?var/ftp目錄下的文件只能是默認(rèn)的755權(quán)限,普通用戶沒有w權(quán)限,而且/var/ftp目錄的屬主必須是root,如果修改所屬主或者權(quán)限則會(huì)觸發(fā)完全問題。欲使普通用戶可以在ftp中上傳文件,就在/var/ftp下新建一個(gè)用于普通用戶上傳文件的目錄,比如/var/ftp/pub,將/var/ftp/pub目錄的屬主和屬組改成ftp,并且添加w權(quán)限
chown ftp.ftp /var/ftp/pub chmod 777 /var/ftp/pub
現(xiàn)在就可以在里面寫文件了
案例2,本地用戶訪問
這些用戶就是Linux下的用戶,使用本地用戶登陸,登陸成功時(shí)位置在該用戶的家目錄。如:用戶han登陸時(shí),輸入han在Linux下的密碼,登陸成功后位置在/home,han可以在該目錄下創(chuàng)建或者刪除文件
修改配置文件
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO #不允許匿名用戶訪問 local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES [root@localhost ~]# systemctl restart vsftpd #重啟配置 [root@localhost ~]# systemctl enable vsftpd
本地用戶登陸時(shí),密碼使用的是該用戶在Linux下登陸時(shí)的密碼,而不是ftp的密碼
注意:出現(xiàn)在/etc/vsftpd/ftpusers /etc/vsftpd/user_list這兩個(gè)文件中的內(nèi)容將會(huì)被定義為黑名單
案例3,虛擬用戶訪問
只用于登陸ftp的用戶,不是Linux下的用戶。
- 創(chuàng)建用于進(jìn)行FTP認(rèn)證的用戶數(shù)據(jù)庫文件,其中奇數(shù)行為用戶名,偶數(shù)行為密碼。
[root@localhost ~]# cd /etc/vsftpd/ [root@localhost vsftpd]# vim vuser.list #創(chuàng)建文件,稍后虛擬用戶信息從這個(gè)文件讀取 eagle #用戶名 centos #密碼 cisco #用戶名 centos #密碼 huawei #用戶名 centos #密碼
- 使用db_load命令用哈希(hash)算法將原始的明文信息文件轉(zhuǎn)換成數(shù)據(jù)庫文件。
[root@localhost vsftpd]# db_load -T -t hash -f vuser.list vuser.db
由于文件vuser.list中含有密碼等敏感信息,所以使用加密算法加密。轉(zhuǎn)換完后新的文件vuser.db就是用戶數(shù)據(jù)庫,里面是加密后的信息。
查看vuser.db的文件類型:
[root@localhost vsftpd]# file vuser.db vuser.db: Berkeley DB (Hash, version 9, native byte-order)
- 降低數(shù)據(jù)庫文件的權(quán)限(避免其他人看到數(shù)據(jù)庫文件的內(nèi)容)。加強(qiáng)數(shù)據(jù)庫vuser.db的安全性,防止破解
[root@localhost vsftpd]# chmod 600 vuser.db
- 把原始的明文信息文件刪除。
[root@localhost vsftpd]# rm -f vuser.list
- 創(chuàng)建一個(gè)本地用戶,用來做虛擬用戶在本地的代理,為了安全起見,禁止這個(gè)本地用戶登錄。
[root@localhost vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual #-d 指定用戶的家目錄為/var/ftproot -s 指定為不能登陸的用戶 [root@localhost vsftpd]# ls -ld /var/ftproot/ drwx------. 2 virtual virtual 59 8月 10 23:04 /var/ftproot/ [root@localhost vsftpd]# chmod -Rf 755 /var/ftproot/
新建一個(gè)用于虛擬用戶認(rèn)證的PAM文件vsftpd.vu,利用pam模塊(linux內(nèi)核的一個(gè)認(rèn)證模塊)做一個(gè)認(rèn)證
[root@localhost vsftpd]# vi /etc/pam.d/vsftpd.vu auth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser
- 配置文件
[root@localhost vsftpd]# cat /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES guest_enable=YES guest_username=virtual #名為virtual的用戶做代理 allow_writeable_chroot=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd.vu #記得修改這里為我們自己的認(rèn)證文件 userlist_enable=YES tcp_wrappers=YES [root@localhost vsftpd]# systemctl restart vsftpd
這時(shí)用戶創(chuàng)建完畢,可以登陸,但是不能寫文件,需要給權(quán)限
- 如果想要針對(duì)不同的用戶設(shè)置不同的權(quán)限
[root@localhost vsftpd]# mkdir /etc/vsftpd/vusers_dir/ #創(chuàng)建一個(gè)目錄用于存放各個(gè)虛擬用戶的配置文件 [root@localhost vsftpd]# cd /etc/vsftpd/vusers_dir/ [root@localhost vusers_dir]# touch huawei #創(chuàng)建huawei的配置文件,如果不給任何權(quán)限,則默認(rèn)為主配置文件 [root@localhost vusers_dir]# vim cisco #創(chuàng)建cisco的配置文件,并修改配置文件 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES #與配置匿名用戶權(quán)限一樣 [root@localhost vusers_dir]# vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO local_enable=YES guest_enable=YES guest_username=virtual allow_writeable_chroot=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd.vu userlist_enable=YES tcp_wrappers=YES user_config_dir=/etc/vsftpd/vusers_dir #在主配置文件中加上這一行,告訴主配置文件我們這里還有配置 [root@localhost vusers_dir]# systemctl restart vsftpd 配置完后,huawei沒權(quán)限,cisco有權(quán)限
總結(jié)
到此這篇關(guān)于Linux系統(tǒng)搭建FTP服務(wù)器的文章就介紹到這了,更多相關(guān)Linux搭建FTP服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Serv-U 無法連接到服務(wù)器127.0.0.1,端口43958 之解決辦法
今天在幫朋友配置服務(wù)器的時(shí)候發(fā)現(xiàn)的一個(gè)問題,進(jìn)入serv-u管理員工具的時(shí)候提示無法連接,非常的討厭,后來參考了這篇文章和先前自己操作的幾個(gè)步驟,解決了這個(gè)問題。2009-09-09
Windows?Server2012?R2?FTP服務(wù)器配置圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows?Server2012R2?FTP服務(wù)器配置圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
IIS本地FTP服務(wù)器搭建的實(shí)現(xiàn)方法
本文主要介紹了IIS本地FTP服務(wù)器搭建的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
serv_u要關(guān)閉被動(dòng)模式(PASV),使用PORT模式才能連接FTP的解決辦法
使用 flashfxp 或傳東西時(shí)必須要關(guān)閉被動(dòng)模式,否則無法連接,連接FTP時(shí)客戶端總是提示:PORT 模式成功, 請(qǐng)更新你的站點(diǎn)配置文件2013-09-09
filezilla Failed to create listen socket on port 21 for IPv4
今天幫一個(gè)客戶配置filezilla的時(shí)候,提示filezilla Failed to create listen socket on port 21 for IPv4,原來是因?yàn)?1端口被占用了,換個(gè)端口就可以了2013-09-09

