Linux下搭建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ò)帶寬的開(kāi)銷(xiāo)
FTP模型
- 用戶接口:提供一個(gè)用戶接口并使用客戶端協(xié)議解釋器的服務(wù)
- 客戶端協(xié)議解釋器:向遠(yuǎn)程服務(wù)器發(fā)送命令 并建立客戶數(shù)據(jù)傳輸過(guò)程
- 服務(wù)端協(xié)議解釋器:響應(yīng)客戶協(xié)議機(jī)發(fā)出的命令并驅(qū)動(dòng)服務(wù)端數(shù)據(jù)傳輸過(guò)程
- 客戶端數(shù)據(jù)傳輸協(xié)議:負(fù)責(zé)完成和服務(wù)器數(shù)據(jù)傳輸過(guò)程及客戶端本地文件系統(tǒng)的通信
- 服務(wù)端數(shù)據(jù)傳輸協(xié)議:負(fù)責(zé)完成和客戶數(shù)據(jù)過(guò)程及服務(wù)器端文件系統(tǒng)的通信
控制連接(端口號(hào)21)
- 主要用來(lái)傳送在實(shí)際通信過(guò)程中需要執(zhí)行的FTP命令以及命令的響應(yīng)
- 只需要很小的網(wǎng)絡(luò)帶寬
- FTP服務(wù)端監(jiān)聽(tīng)21端口號(hào)來(lái)等待控制連接建立
- 建立控制連接后,還需要驗(yàn)證客戶身份,決定是否建立數(shù)據(jù)連接
- 當(dāng)需要目錄列表,傳輸文件時(shí),才建立數(shù)據(jù)連接,并且每次客戶端都是用不同的端口號(hào)來(lái)建立數(shù)據(jù)連接。數(shù)據(jù)傳輸完畢,就中斷這條臨時(shí)的數(shù)據(jù)連接
- 在FTP連接期間,控制連接始終保持通常的連接狀態(tài)。在數(shù)據(jù)連接存在期間,控制連接必須存在;一旦控制連接斷開(kāi),數(shù)據(jù)連接會(huì)自動(dòng)關(guān)閉。
數(shù)據(jù)連接(端口號(hào)20)
- FTP服務(wù)端監(jiān)聽(tīng)20端口來(lái)等待數(shù)據(jù)連接
- 數(shù)據(jù)連接依賴(lài)于控制連接
- 建立方式(主動(dòng)被動(dòng)都是相對(duì)服務(wù)器而言)
主動(dòng)模式
- 通過(guò)三次握手,建立控制連接;客戶端的源端口是高位隨機(jī)端口,目標(biāo)端口是21端口
- 控制連接建立后,客戶端進(jìn)行身份驗(yàn)證,協(xié)商數(shù)據(jù)連接采用主動(dòng)模式;隨后客戶端會(huì)向FTP服務(wù)器發(fā)送Port報(bào)文,表明自己監(jiān)聽(tīng)的IP+端口,并等待FTP服務(wù)器(20端口)向自己監(jiān)聽(tīng)的IP+端口發(fā)起數(shù)據(jù)連接請(qǐng)求。
- 服務(wù)端發(fā)起數(shù)據(jù)連接請(qǐng)求,建立數(shù)據(jù)連接
被動(dòng)模式
- 通過(guò)三次握手,建立控制連接;客戶端的源端口是高位隨機(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)聽(tīng)的IP+端口
- 客戶端發(fā)起數(shù)據(jù)連接請(qǐng)求,建立數(shù)據(jù)連接
VSFTPD服務(wù)介紹
- 服務(wù)包:vsftpd
- 服務(wù)類(lèi)型:由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
- 用戶訪問(wèn)控制配置文件: /etc/vsftpd/ftpusers /etc/vsftpd/user_list
- 日志文件: /etc/logrotate.d/vsftpd
- 配置文件參數(shù)
參數(shù) | 作用 |
---|---|
listen=NO | 是否以獨(dú)立運(yùn)行的方式監(jiān)聽(tīng)服務(wù) |
listen_address=ip地址 | 設(shè)置要監(jiān)聽(tīng)的IP地址 |
listen_port=21 | 設(shè)置FTP服務(wù)的監(jiān)聽(tīng)端口 |
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 | 是否允許匿名用戶訪問(wèn) |
anon_upload_enable=YES | 是否允許匿名用戶上傳文件 |
anon_umask | 匿名用戶上傳文件的umask |
anon_root=/var/ftp | 匿名用戶的ftp根目錄 |
anon_mkdir_write_enable=YES | 是否允許匿名用戶創(chuàng)建目錄 |
anon_other_write_enable=YES | 是否開(kāi)放匿名用戶的其他寫(xiě)入權(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:直接回車(chē)
ftp工具一定要輸入用戶名和密碼,匿名用戶登陸用戶名寫(xiě)anonymous,密碼直接回車(chē),登陸成功或者失敗都會(huì)給出提示
2.使用lftp工具
[root@localhost ~]# yum install lftp -y
[root@localhost ~]# lftp <IP地址>
lftp工具不需要輸入用戶名和密碼直接登陸,不會(huì)直接給出登陸成功或者失敗的提示,需要輸入ls工具才能知道是否連接成功,優(yōu)點(diǎn)在于連接更加方便
Windows中
1.在瀏覽器中訪問(wèn)
可以在瀏覽器、運(yùn)行窗口或者資源管理器中輸入 ftp://IP地址/ ,這樣訪問(wèn)的是ftp的根位置,如果需要訪問(wèn)相關(guān)目錄可以輸入 ftp://IP地址/目錄/文件名
2.在控制管理器中訪問(wèn)
在cmd窗口中,輸入命令 ftp <IP地址> 即可訪問(wèn)
需要注意的是直接訪問(wèn)ftp服務(wù)器的IP地址時(shí)訪問(wèn)的根位置目錄是 /var/ftp,如果需要訪問(wèn)pub里的test可以訪問(wèn) ftp://192.168.80.129/pub/test 。
案例
案例1,匿名用戶訪問(wèn)(默認(rèn)開(kāi)啟)
修改配置文件
[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í),普通用戶無(wú)法在/var/ftp下新建文件,如果直接添加目錄的w權(quán)限會(huì)觸發(fā)安全判斷問(wèn)題,因?yàn)?var/ftp目錄下的文件只能是默認(rèn)的755權(quán)限,普通用戶沒(méi)有w權(quán)限,而且/var/ftp目錄的屬主必須是root,如果修改所屬主或者權(quán)限則會(huì)觸發(fā)完全問(wèn)題。欲使普通用戶可以在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)在就可以在里面寫(xiě)文件了
案例2,本地用戶訪問(wèn)
這些用戶就是Linux下的用戶,使用本地用戶登陸,登陸成功時(shí)位置在該用戶的家目錄。如:用戶han登陸時(shí),輸入han在Linux下的密碼,登陸成功后位置在/home,han可以在該目錄下創(chuàng)建或者刪除文件
修改配置文件
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #不允許匿名用戶訪問(wèn)
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,虛擬用戶訪問(wèn)
只用于登陸ftp的用戶,不是Linux下的用戶。
- 創(chuàng)建用于進(jìn)行FTP認(rèn)證的用戶數(shù)據(jù)庫(kù)文件,其中奇數(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ù)庫(kù)文件。
[root@localhost vsftpd]# db_load -T -t hash -f vuser.list vuser.db
由于文件vuser.list中含有密碼等敏感信息,所以使用加密算法加密。轉(zhuǎn)換完后新的文件vuser.db就是用戶數(shù)據(jù)庫(kù),里面是加密后的信息。
查看vuser.db的文件類(lèi)型:
[root@localhost vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
- 降低數(shù)據(jù)庫(kù)文件的權(quán)限(避免其他人看到數(shù)據(jù)庫(kù)文件的內(nèi)容)。加強(qiáng)數(shù)據(jù)庫(kù)vuser.db的安全性,防止破解
[root@localhost vsftpd]# chmod 600 vuser.db
- 把原始的明文信息文件刪除。
[root@localhost vsftpd]# rm -f vuser.list
- 創(chuàng)建一個(gè)本地用戶,用來(lái)做虛擬用戶在本地的代理,為了安全起見(jiàn),禁止這個(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)證文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-781174.html
[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)建完畢,可以登陸,但是不能寫(xiě)文件,需要給權(quán)限文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-781174.html
- 如果想要針對(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沒(méi)權(quán)限,cisco有權(quán)限
到了這里,關(guān)于Linux下搭建FTP服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!