linux入門系列15--文件傳輸之vsftp服務(wù)

前面的系列文章基本講完了linux管理相關(guān)的基礎(chǔ)知識,從本篇開始講解centos7中服務(wù)程序的部署和配置划提,以便為外部提供各種服務(wù)。

日常工作和娛樂中,我們所需的各種資源都離不開網(wǎng)絡(luò)以及各種服務(wù)慨蛙,我們通過網(wǎng)絡(luò)獲取部署在其他服務(wù)器上的各種服務(wù)資源,這些服務(wù)包括文件服務(wù)纪挎、郵件服務(wù)、媒體服務(wù)等等跟匆。

一般情況下异袄,我們使用計(jì)算機(jī)上網(wǎng)的一個(gè)重要目的就是為了獲取資料,而文件傳輸則是獲取資料的方式玛臂。因此烤蜕,我們首先來了解下linux中文件傳輸相關(guān)的知識。

一迹冤、文件傳輸協(xié)議FTP

1.1 FTP產(chǎn)生背景

“無規(guī)矩不成方圓”讽营,這說明了規(guī)則的重要性。同樣泡徙,當(dāng)今的互聯(lián)網(wǎng)由成千上萬臺機(jī)器組成橱鹏,這些機(jī)器包括個(gè)人計(jì)算機(jī)、工作站、服務(wù)器莉兰、巨型機(jī)等各種形形色色的設(shè)備挑围,并且這些設(shè)備中使用的操作系統(tǒng)還不一樣玄柠,有的可能是用的windows邓了,而有的則是Linux或其他系統(tǒng)振湾。

要在這么紛繁復(fù)雜的設(shè)備之間傳輸文件寻仗,那就必須要有一定的規(guī)則皇帮,大家都按規(guī)則辦事勾缭,傳輸?shù)奈募拍芟嗷プR別妈候,達(dá)到正確傳遞信息的目的埠忘。在這種背景下综看,為了解決文件傳輸?shù)膯栴}品腹,文件傳輸協(xié)議應(yīng)運(yùn)而生。

1.2 FTP相關(guān)概念

文件傳輸協(xié)議(File Transfer Protocol寓搬,F(xiàn)TP)珍昨,是一種在互聯(lián)網(wǎng)中進(jìn)行文件傳輸?shù)膮f(xié)議,基于客戶端/服務(wù)器模式句喷,默認(rèn)使用 20镣典、21 號端口,其中20端口是數(shù)據(jù)端口用于進(jìn)行數(shù)據(jù)傳輸唾琼,21端口為命令端口兄春,用于接收客戶端發(fā)出的相關(guān)FTP命令和參數(shù)。

本系列文章第三篇提到的所有工具都可以實(shí)現(xiàn)在Windows中遠(yuǎn)程到Linux主機(jī)并上傳下載文件锡溯,并且在Linux主機(jī)之間也可以通過scp命令上傳文件赶舆,那為什么還需要FTP呢?個(gè)人認(rèn)為應(yīng)該是因?yàn)镕TP一般搭建與內(nèi)網(wǎng)之中祭饭,有具有容易搭建芜茵、方便管理的特點(diǎn),并且一些FTP客戶端工具還具有文件多點(diǎn)下載以及斷點(diǎn)續(xù)傳等功能倡蝙,這些是scp做不到的九串。

FTP是C/S架構(gòu),也就是基于客戶端/服務(wù)器的模式寺鸥,F(xiàn)TP服務(wù)器是按照FTP協(xié)議在互聯(lián)網(wǎng)上提供文件存儲和訪問服務(wù)的主機(jī)猪钮,F(xiàn)TP客戶端則是向服務(wù)器發(fā)送連接請求,以建立數(shù)據(jù)傳輸鏈路的主機(jī)胆建。

FTP協(xié)議的傳輸拓?fù)浣Y(jié)構(gòu)如下:

file

FTP協(xié)議工作模式有兩種:主動模式和被動模式烤低,其中被動模式是默認(rèn)的工作模式

  • 主動模式:FTP 服務(wù)器主動向客戶端發(fā)起連接請求笆载。

  • 被動模式:FTP 服務(wù)器等待客戶端發(fā)起連接請求扑馁。

由于FTP一般部署在企業(yè)內(nèi)網(wǎng)涯呻,如果開啟并配置了防火墻,有時(shí)候需要將FTP的工作模式設(shè)置為主動模式檐蚜,才可以傳輸數(shù)據(jù)魄懂。

二、Linux下基于FTP協(xié)議工具

2.1 vsftpd服務(wù)安裝

vsftpd(very secure ftp daemon)非常安全的FTP守護(hù)進(jìn)程闯第,是一款運(yùn)行在Linux系統(tǒng)上的免費(fèi)開源的FTP服務(wù)端程序市栗。其主要特點(diǎn)是:安全性高、傳輸速度快咳短、支持虛擬用戶驗(yàn)證填帽。

默認(rèn)情況Centos7中是沒有安裝vsftpd的,因此需要手動通過yum倉庫安裝咙好,根據(jù)前文的講解可以用光盤資源自帶的yum源篡腌,也可以直接配置外網(wǎng)源。本例采用默認(rèn)的外網(wǎng)yum源進(jìn)行安裝勾效。

[root@origin ~]# rpm -q vsftpd
package vsftpd is not installed
[root@origin ~]# yum install vsftpd
Loaded plugins: fastestmirror, langpacks
...省略部分內(nèi)容
Installed size: 353 k
Is this ok [y/d/N]: y
Downloading packages:
vsftpd-3.0.2-25.el7.x86_64.rpm                             | 171 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : vsftpd-3.0.2-25.el7.x86_64                                   1/1 
  Verifying  : vsftpd-3.0.2-25.el7.x86_64                                   1/1 
Installed:
  vsftpd.x86_64 0:3.0.2-25.el7                                                 
Complete!
[root@origin ~]# rpm -q vsftpd     
vsftpd-3.0.2-25.el7.x86_64
[root@origin ~]# 

通過rpm命令查看是否已經(jīng)安裝過vsftpd嘹悼,如果沒有安裝則通過yum install命令安裝即可,安裝過程中需要按提示輸入y繼續(xù)下載并安裝层宫。

注意:從現(xiàn)在開始杨伙,凡是涉及到服務(wù)的配置,就要考慮防火墻和SELinux的因素萌腿,很多教程和書籍上都是直接關(guān)閉防火墻和selinux限匣,雖然這樣在學(xué)習(xí)階段可以避免干擾,但是這樣非常不安全毁菱。另外凡是配置了服務(wù)米死,都要加入開機(jī)啟動中,讓其每次重啟自動生效贮庞。

安裝vsftpd服務(wù)后峦筒,會在/etc下自動生成配置文件

[root@ftpserver ~]# ll /etc/vsftpd/
total 20
-rw-------. 1 root root  125 Oct 31  2018 ftpusers
-rw-------. 1 root root  361 Oct 31  2018 user_list
-rw-------. 1 root root 5116 Oct 31  2018 vsftpd.conf
-rwxr--r--. 1 root root  338 Oct 31  2018 vsftpd_conf_migrate.sh

各個(gè)文件的解釋

文件名 作用
vsftpd.conf 主配置文件
ftpusers 黑名單
vsftpd_conf_migrate.sh 遷移腳本
user_list 用戶列表,與userlist_enbale和userlist_deny選項(xiàng)密切相關(guān)

查看主配置文件vsftpd.conf內(nèi)容可以看到各項(xiàng)配置信息窗慎,需要根據(jù)實(shí)際情況來進(jìn)行配置勘天,其中主要的參數(shù)和作用如下:

參數(shù) 作用
listen=[YES|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|NO] 是否允許下載文件
userlist_enable=[YES|NO] 設(shè)置用戶列表為“允許”操作
userlist_deny=[YES|NO] 設(shè)置用戶列表為“禁止”操作
max_clients=0 最大客戶端連接數(shù),0為不限制
max_per_ip=0 同一IP地址的最大連接數(shù),0為不限制
anonymous_enable=[YES|NO] 是否允許匿名用戶訪問
anon_upload_enable=[YES|NO] 是否允許匿名用戶上傳文件
anon_umask=022 匿名用戶上傳文件的umask值
anon_root=/var/ftp 匿名用戶的 FTP 根目錄
anon_mkdir_write_enable=[YES|NO] 是否允許匿名用戶創(chuàng)建目錄
anon_other_write_enable=[YES|NO] 是否開放匿名用戶的其他寫入權(quán)限(包括重命名捉邢、刪 除等操作權(quán)限)
anon_max_rate=0 匿名用戶的最大傳輸速率(字節(jié)/秒),0 為不限制
local_enable=[YES|NO] 是否允許本地用戶登錄FTP
local_umask=022 本地用戶上傳文件的umask值
local_root=/var/ftp 本地用戶的 FTP 根目錄
chroot_local_user=[YES|NO] 是否將用戶權(quán)限禁錮在FTP目錄商膊,以確保安全
local_max_rate=0 本地用戶最大傳輸速率(字節(jié)/秒)伏伐,0為不限制

不用完全記住這些參數(shù),需要時(shí)再來查看即可晕拆。

2.2 ftp客戶端安裝

ftp是Linux系統(tǒng)中以命令行界面的方式來管理FTP傳輸服務(wù)的客戶端工具材蹬。默認(rèn)也是沒有安裝的,需要手動安裝吝镣。

[root@origin ~]# rpm -q ftp
package ftp is not installed
[root@origin ~]# yum install ftp
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
...省略部分內(nèi)容
Total download size: 61 k
Installed size: 96 k
Is this ok [y/d/N]: y
Downloading packages:
ftp-0.17-67.el7.x86_64.rpm                                 |  61 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : ftp-0.17-67.el7.x86_64                                       1/1 
  Verifying  : ftp-0.17-67.el7.x86_64                                       1/1 
Installed:
  ftp.x86_64 0:0.17-67.el7                                                     
Complete!
[root@origin ~]# rpm -q ftp     
ftp-0.17-67.el7.x86_64
[root@origin ~]# 

通過yum install命令即可安裝成功堤器,ftp客戶端工具安裝成功后,接下來就是及操作下文件傳輸?shù)墓δ堋?/p>

2.3 vsftpd三種認(rèn)證模式

vsftpd作為更加安全的文件傳輸?shù)姆?wù)程序末贾,允許用戶以三種認(rèn)證模式登錄到FTP服務(wù)器上:匿名開放模式闸溃、本地用戶模式、虛擬用戶模式拱撵。實(shí)際生產(chǎn)環(huán)境中虛擬用戶模式用的較多辉川。

  • 匿名開放模式:任何人都可以無需密碼驗(yàn)證而直接登錄到FTP服務(wù)器,是一種最不安全的認(rèn)證模式拴测。

  • 本地用戶模式:是通過Linux系統(tǒng)本地的賬戶密碼信息進(jìn)行認(rèn)證的模式乓旗。如果被黑客破解了賬戶信息,就可以暢通無阻地登錄FTP服務(wù)器集索,從而完全控制整臺服務(wù)器屿愚。

  • 虛擬用戶模式:需要為FTP服務(wù)單獨(dú) 建立用戶數(shù)據(jù)庫文件,虛擬出用來進(jìn)行口令驗(yàn)證的賬戶信息务荆,而這些賬戶信息在 服務(wù)器系統(tǒng)中實(shí)際上是不存在的妆距,僅供 FTP 服務(wù)程序進(jìn)行認(rèn)證使用。這樣蛹含,即使 黑客破解了賬戶信息也無法登錄服務(wù)器毅厚,從而有效降低了破壞范圍和影響。是三種模式中最安全的一種認(rèn)證模式浦箱。

2.4 匿名開放模式

匿名開放模式是最不安全的一種認(rèn)證模式吸耿,任何人都可以無需密碼驗(yàn)證而直接登錄到FTP服務(wù)器。針對匿名用戶放開這些權(quán)限會帶來潛在危險(xiǎn)酷窥,生產(chǎn)環(huán)境不建議這樣做咽安,因此一般不會用匿名模式,盡管如此蓬推,但本節(jié)還是實(shí)際演示一下妆棒。

按之前的方法克隆準(zhǔn)備2臺虛擬機(jī):一臺主機(jī)名為:ftpserver ,用于安裝vsftpd服務(wù)沸伏;另外一臺主機(jī)名為:ftp糕珊,用于安裝ftp客戶端。

vsftpd 服務(wù)程序默認(rèn)開啟了匿名開放模式毅糟,我們需要做的就是開放匿名用戶的上傳红选、下 載文件的權(quán)限,以及讓匿名用戶創(chuàng)建姆另、刪除喇肋、更名文件的權(quán)限坟乾。

針對匿名模式的配置主要有如下幾個(gè)參數(shù):

參數(shù) 作用
anonymous_enable=YES 允許匿名訪問模式
anon_umask=022 匿名用戶上傳文件的umask值
anon_upload_enable=YES 允許匿名用戶上傳文件
anon_mkdir_write_enable=YES 允許匿名用戶創(chuàng)建目錄
anon_other_write_enable=YES 允許匿名用戶修改目錄名稱或刪除目錄

配置匿名模式主要步驟如下:

2.4.1 服務(wù)器配置vsftp服務(wù),開啟匿名模式

只需要按照上表查找主配置文件中對應(yīng)的參數(shù)蝶防,如果是注射掉的就把注射去掉甚侣,如果是沒有的就新加即可。

但是考慮到該配置文件里邊的注釋信息是在是太多了间学,影響配置殷费,干脆我們把與配置無關(guān)的注射直接去掉。

[root@ftpserver ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
[root@origin ~]# grep -v "#" /etc/vsftpd/vsftpd.conf.bak >/etc/vsftpd/vsftpd.conf
[root@ftpserver ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_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@ftpserver ~]# 

上邊示例中菱鸥,我們先把主配置文件備份宗兼,然后通過grep命令匹配出非注釋的參數(shù),然后再重定向?qū)⑵鋵懭氲街髋渲梦募伞_@樣配置文件看起來內(nèi)容就簡潔多了殷绍。

然后我們將上表的參數(shù)配置到主配置文件即可:

[root@origin ~]# vi /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

實(shí)際上第一行已經(jīng)默認(rèn)開啟了,等于是添加第二到第五行即可鹊漠。保存并退出主到,這樣就完成了vsftpd服務(wù)的配置。

配置完成后重啟服務(wù)躯概,并添加到開機(jī)啟動登钥。配置并開啟vsftp服務(wù)后,就可以在客戶端執(zhí)行ftp命令連接到遠(yuǎn)程的FTP服務(wù)器了娶靡。

[root@ftpserver ~]# systemctl restart vsftpd
[root@ftpserver ~]# systemctl enable vsftpd
ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'
[root@ftpserver ~]# 
[root@ftpserver ~]# ll /var/ftp/pub/
total 0
[root@ftpserver ~]# echo "ftp server content">/var/ftp/pub/ftpserver.txt
[root@ftpserver ~]# ll /var/ftp/pub/
total 4
-rw-r--r--. 1 root root 19 Jan 13 23:09 ftpserver.txt
[root@ftpserver ~]# 

在/var/ftp/pub目錄下準(zhǔn)備文件牧牢,供ftp客戶端下載。因?yàn)榭蛻舳诉B接到FTP服務(wù)器后姿锭,默認(rèn)訪問的是服務(wù)器的/var/ftp目錄(該目錄下還有一個(gè)pub目錄)塔鳍。

2.4.2 客戶機(jī)使用ftp服務(wù)下載文件

在vsftpd服務(wù)程序的匿名開放認(rèn)證模式下,其賬戶統(tǒng)一為 anonymous呻此,密碼為空

[root@ftp ~]# ftp 192.168.78.101
ftp: connect: No route to host
ftp>

發(fā)現(xiàn)報(bào)錯(cuò)了轮纫,此時(shí)我們首先應(yīng)該想到的就是ftpserver服務(wù)器的防火墻,因此我們關(guān)閉防火墻來驗(yàn)證一下

[root@ftpserver ~]# firewall-cmd --state
running
[root@ftpserver ~]# systemctl stop firewalld.service 
[root@ftpserver ~]# firewall-cmd --state
not running
[root@ftpserver ~]# 

在ftpserver服務(wù)器關(guān)閉防火墻后焚鲜,在嘗試連接就可以正常連接并下載服務(wù)器上的ftpserver.txt文件了掌唾。

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,78,101,132,61).
150 Here comes the directory listing.
-rw-r--r--    1 0        0              19 Jan 13 15:09 ftpserver.txt
226 Directory send OK.
ftp> get ftpserver.txt
local: ftpserver.txt remote: ftpserver.txt
227 Entering Passive Mode (192,168,78,101,115,121).
150 Opening BINARY mode data connection for ftpserver.txt (19 bytes).
226 Transfer complete.
19 bytes received in 7e-05 secs (271.43 Kbytes/sec)
ftp> 

這樣就把ftpserver服務(wù)器上的ftpserver.txt文件下載到了當(dāng)前用戶的家目錄下

[root@ftp ~]# ll
-rw-r--r--. 1 root root   19 Jan 13 23:20 ftpserver.txt
...省略部分無關(guān)的文件
[root@ftp ~]# cat ftpserver.txt 
ftp server content
[root@ftp ~]# 

到此我們就可以使用ftp下載服務(wù)器上的文件了。但是有個(gè)問題必須的說明一下忿磅,前邊遇到ftp連接問題時(shí)糯彬,我們直接關(guān)閉了服務(wù)器上的防火墻。但這是非常不安全的葱她,生產(chǎn)環(huán)境中一般都是要求開啟防火墻情连。

那么防火墻是如何阻止了ftp客戶端連接呢?其實(shí)就是因?yàn)閒irewall防火墻默認(rèn)禁止了ftp傳輸?shù)亩丝谔柪佬В虼丝梢郧宄阑饓Φ哪J(rèn)策略

[root@ftpserver ~]# systemctl start firewalld.service 
[root@ftpserver ~]# firewall-cmd --state              
running
[root@ftpserver ~]# iptables -F
[root@ftpserver ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@ftpserver ~]# 

清除防火墻默認(rèn)策略并保存却舀,這樣即使服務(wù)器不關(guān)閉防火墻也可以正常使用功能ftp功能下載文件了。

2.4.3 通過ftp客戶端在服務(wù)器上創(chuàng)建目錄

接下來我們切換到pub目錄锤灿,并嘗試創(chuàng)建一個(gè)目錄test

ftp> cd pub
250 Directory successfully changed.
ftp> mkdir test
550 Create directory operation failed.
ftp> 

好神奇挽拔,居然報(bào)錯(cuò)了。大家不用擔(dān)心但校,學(xué)習(xí)階段要的就是這種效果螃诅,遇到的錯(cuò)誤越多,越能快速積累經(jīng)驗(yàn)状囱,并建立一套分析問題和解決問題的邏輯思維套路术裸。

分析一下,我們第一步時(shí)已經(jīng)在主配置文件中添加了運(yùn)行匿名用戶創(chuàng)建目錄和寫入文件的權(quán)限亭枷,但為何還是會報(bào)錯(cuò)呢袭艺?既然排除了是用戶權(quán)限的問題,那么是不是/var/ftp這個(gè)目錄的權(quán)限問題呢叨粘?

[root@ftpserver ~]# ll -d /var/ftp/pub
drwxr-xr-x. 2 root root 26 Jan 13 23:09 /var/ftp/pub
[root@ftpserver ~]# chown -Rf ftp /var/ftp/pub
[root@ftpserver ~]# ll -d /var/ftp/pub        
drwxr-xr-x. 2 ftp root 26 Jan 13 23:09 /var/ftp/pub
[root@ftpserver ~]# ll -d /var/ftp/
drwxr-xr-x. 3 root root 16 Jan 13 22:59 /var/ftp/

通過查看猾编,果然發(fā)現(xiàn)/var/ftp目錄只有root用戶才有寫入的權(quán)限,因此我們直接把pub目錄所有者改為ftp用戶升敲,讓ftp用戶擁有寫入的權(quán)限答倡,我們再次來試下看能否創(chuàng)建文件夾

ftp> mkdir test
550 Create directory operation failed.
ftp> 

奇怪,依然報(bào)錯(cuò)驴党。前面排除了用戶權(quán)限瘪撇、目錄權(quán)限之外,我們應(yīng)該想到很有可能是SELinux造成的港庄,因此我們關(guān)閉SELinux再來驗(yàn)證一下

[root@ftpserver ~]# setenforce 0
[root@ftpserver ~]# 

關(guān)閉SeLinux后后倔既,再去創(chuàng)建目錄,發(fā)現(xiàn)創(chuàng)建成功

ftp> mkdir test
257 "/pub/test" created
ftp> 

因此攘轩,說明不僅要讓pub目錄的屬主擁有寫入權(quán)限叉存,并且同時(shí)還要關(guān)閉SELinux才能創(chuàng)建目錄。

但是實(shí)際生產(chǎn)環(huán)境中不建議關(guān)閉SELinux度帮,所以我們要弄清楚究竟SELinux哪個(gè)配置影響了

[root@ftpserver ~]# setenforce 1
[root@origin ~]# getenforce 
Enforcing
[root@origin ~]# getsebool -a | grep ftp
ftp_home_dir --> off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@origin ~]# 

我們查看下SELinux狀態(tài)為開啟歼捏,查看與ftp域相關(guān)的策略,其中有一條ftpd_full_access --> off其實(shí)就是這條規(guī)則導(dǎo)致了操作失敗笨篷。

修改該策略瞳秽,并使用-P參數(shù)使其永久生效。

[root@origin ~]# setsebool -P ftpd_full_access=on

再次登錄創(chuàng)建目錄率翅,發(fā)現(xiàn)成功了

ftp> mkdir test2
257 "/pub/test2" created
ftp> 

因此遇到問題练俐,從用戶權(quán)限、目錄權(quán)限冕臭、網(wǎng)絡(luò)防火墻腺晾、SELinux服務(wù)幾個(gè)方面去逐個(gè)排查燕锥。

2.5 本地用戶模式

本地模式比匿名模式更加安全,現(xiàn)在繼續(xù)在前面的虛擬機(jī)中做實(shí)驗(yàn)悯蝉,開始之前先關(guān)閉上一實(shí)驗(yàn)中開啟的匿名模式归形。

[root@ftpserver ~]# vim /etc/vsftpd/vsftpd.conf
[root@ftpserver ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
#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@ftpserver ~]# 

將anonymous_enable=YES改為NO,即關(guān)閉了本地模式鼻由,此時(shí)就不能在使用匿名模式登陸了暇榴。

另外前面新加的與匿名配置參數(shù)可以保留,也可以直接刪除蕉世,只要總開關(guān)anonymous_enable關(guān)閉了就禁用了匿名登錄蔼紧。

現(xiàn)在開始演示本地用戶模式操作ftp。

其實(shí)從前面的配置文件可以看出狠轻,vsfftpd服務(wù)默認(rèn)既開啟了匿名模式也開啟了本地用戶模式(local_enable=YES)奸例。以下幾個(gè)參數(shù)是本地用戶模式相關(guān)的配置

參數(shù) 作用
local_enable=YES 允許本地用戶模式
write_enable=YES 設(shè)置可寫權(quán)限
local_umask=022 本地用戶模式創(chuàng)建文件的 umask 值
userlist_enable=YES 啟用“禁止用戶名單”,名單文件為 ftpusers 和 user_list
userlist_deny=YES 開啟用戶作用名單文件功能
2.5.1 配置本地用戶模式

其實(shí)vsftpd默認(rèn)已經(jīng)開啟了本地用戶模式哈误,因此沒什么可以配置的哩至,查看下配置文件:

[root@ftpserver ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
#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@ftpserver ~]# 

參考上表,與本地用戶配置相關(guān)的主要參數(shù)為:local_enable=YES蜜自,write_enable=YES菩貌,local_umask=022。如果你的配置文件默認(rèn)沒配置這幾個(gè)項(xiàng)則手動配置一下即可重荠。

注意箭阶,如果修改了配置需要從新啟動下vsftpd服務(wù)

[root@ftpserver ~]# systemctl restart vsftpd
[root@ftpserver ~]# systemctl enable vsftpd
[root@ftpserver ~]# 

另外再創(chuàng)建一個(gè)普通用戶ftptest并設(shè)置密碼,用于客戶端登錄

[root@ftpserver home]# useradd ftptest
[root@ftpserver home]# passwd ftptest
Changing password for user ftptest.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@ftpserver home]# 

這樣ftp服務(wù)器就準(zhǔn)備好了戈鲁。

特別說明:根據(jù)前文的經(jīng)驗(yàn)仇参,需要按前文方法設(shè)置防火墻和SELinux策略客戶端才能使用,由于我們是沿用之前的配置婆殿,之前已經(jīng)配置好了诈乒,所以這里不用配置。默認(rèn)情況下防火墻將限制登錄婆芦、SELinux則限制創(chuàng)建目錄等操作怕磨。

2.5.2 ftp客戶端操作服務(wù)器

現(xiàn)在就可以直接采用ftpserver服務(wù)器上的普通賬戶ftptest進(jìn)行文件操作了。

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): ftptest
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir test
257 "/home/ftptest/test" created
ftp> rename test test1
350 Ready for RNTO.
250 Rename successful.
ftp> ls
227 Entering Passive Mode (192,168,78,101,106,178).
150 Here comes the directory listing.
drwxr-xr-x    2 1001     1001            6 Jan 14 09:01 test1
226 Directory send OK.
ftp> rmdir test1
250 Remove directory operation successful.
ftp> exit
221 Goodbye.
[root@ftp ~]# 

案例中成功通過ftp服務(wù)器中的ftptest用戶對目錄進(jìn)行創(chuàng)建消约、重命名肠鲫、刪除等操作。并且ftp客戶端創(chuàng)建的目錄或粮,在ftpserver服務(wù)器對應(yīng)的用戶目錄下也可以查到新建的目錄导饲。

因此可以看到,本地用戶模式相對匿名模式,配置更簡單一些渣锦。但是大家想過為啥ftptest用戶登錄后就可以對目錄進(jìn)行創(chuàng)建硝岗、刪除等操作嗎?那是因?yàn)楸镜赜脩裟J降卿汧TP服務(wù)器后袋毙,默認(rèn)訪問的是該用戶的家目錄辈讶,即/home/ftptest目錄,它的默認(rèn)所有者娄猫、所屬組都是該用戶自己,因此不存在寫入權(quán)限不足的情況生闲。

2.5.3 本地用戶登錄模式之填坑

如果你是按照我的文章步驟操作媳溺,一定會很順暢,但是如果一開始并不是新建ftptest用戶來登錄碍讯,而是直接使用root用戶來進(jìn)行遠(yuǎn)程登錄悬蔽,那就有個(gè)坑需要注意一下。

在客戶端用root登錄試試看

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): root
530 Permission denied.
Login failed.
ftp> 

哦豁捉兴,目前的系統(tǒng)root是擁有最高權(quán)限的蝎困,居然被拒了,而前邊創(chuàng)建的普通用戶ftptest用戶居然可以正常使用ftp功能倍啥!我就遇到過禾乘,哈哈哈哈,百思不得解虽缕。

如果是初次接觸真可能懷疑是自己哪個(gè)步驟操作錯(cuò)了始藕,其實(shí)這里有一個(gè)規(guī)則:

vsftpd服務(wù)程序配置目錄存放著兩個(gè)“用戶名單”的文件:ftpusers、user_list氮趋。原因就在這2個(gè)文件伍派,只要這2個(gè)文件中存在的用戶,就不允許登錄FTP服務(wù)器上剩胁。

來看看這2個(gè)文件內(nèi)容:

[root@ftpserver ~]# cat /etc/vsftpd/user_list 
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@ftpserver ~]# cat /etc/vsftpd/ftpusers 
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@ftpserver ~]# 

果然里邊存在root用戶诉植,這正是vsftpd服務(wù)為了保證服務(wù)器安全默認(rèn)就禁止了root和大部分系統(tǒng)用戶登錄ftp。這樣做的好處是避免黑客通過FTP服務(wù)器對root密碼進(jìn)行暴力破解昵观。

而為啥之前創(chuàng)建的ftptest用戶可以登錄ftp呢晾腔,那是因?yàn)閯?chuàng)建的用戶并沒有被默認(rèn)寫入這2個(gè)文件。如果確保在生產(chǎn)環(huán)境中直接使用root用戶對安全性沒有影響索昂,則直接在這2個(gè)文件中把root刪除即可建车,否則請使用這2個(gè)文件中不存在的普通用戶來登錄ftp服務(wù)器。

刪除這2個(gè)文件中的root用戶椒惨,然后重啟vsftpd服務(wù)缤至,再次使用root登錄ftp即可成功操作。

2.6 虛擬用戶模式

再來看一種更加安全的認(rèn)證模式即虛擬用戶模式,因?yàn)楦影踩耘渲闷饋砩晕⒁闊┮恍?/p>

我們?nèi)匀辉谥暗臋C(jī)器上繼續(xù)操作领斥,步驟步驟如下:

2.6.1 創(chuàng)建用戶數(shù)據(jù)庫文件

在ftpserver服務(wù)器中的vsftpd配置目錄下創(chuàng)建包含用戶信息的文件vuser.list(文件名字任意燃档健)

[root@ftpserver ~]# cd /etc/vsftpd/
[root@ftpserver vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd.conf.bak  vsftpd_conf_migrate.sh
[root@ftpserver vsftpd]# vim vuser.list
vuser1
123456
vuser2
123456

vuser.list文件中包含vuser1和vuser2兩個(gè)用戶,密碼均為123456月洛。文件中奇數(shù)行表示賬號名何恶,偶數(shù)行表示密碼。

接下來要將vuser.list文件轉(zhuǎn)換為vsftpd服務(wù)程序能直接加載的格式嚼黔,轉(zhuǎn)換格式使用db_load命令细层,該命令用哈希算法將原始的明文信息文件轉(zhuǎn)換為數(shù)據(jù)庫文件。

在使用db_load命令前唬涧,查看該命令是否安裝

[root@ftpserver vsftpd]# db_load
usage: db_load [-nTV] [-c name=value] [-f file]
        [-h home] [-P password] [-t btree | hash | recno | queue] db_file
usage: db_load -r lsn | fileid [-h home] [-P password] db_file
[root@ftpserver vsftpd]# 

出現(xiàn)該命令的用法疫赎,說明默認(rèn)已經(jīng)安裝了。

如果未安裝需要手動安裝碎节,該命令包含在db4包中捧搞,使用命令yum -y install db4安裝即可。

既然安裝了db_load命令狮荔,那就使用它來轉(zhuǎn)換用戶文件格式

[root@ftpserver vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@ftpserver vsftpd]# file vuser.db 
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@ftpserver vsftpd]# ll vuser.db 
-rw-r--r--. 1 root root 12288 Jan 14 21:16 vuser.db
[root@ftpserver vsftpd]# chmod 600 vuser.db 
-rw-------. 1 root root 12288 Jan 14 21:16 vuser.db
[root@ftpserver vsftpd]# rm -rf vuser.list 
[root@ftpserver vsftpd]# 

通過db_load命令就把明文的vuser.list文件轉(zhuǎn)換為了vuser.db格式的文件胎撇,并通過chmod命令降低該文件的權(quán)限,從而避免其他人查看到該數(shù)據(jù)庫文件的內(nèi)容殖氏,最后直接把明文的vuser.list文件刪除晚树。

2.6.2 創(chuàng)建PAM文件

PAM(Pluggable Authentication Module)是一種認(rèn)證機(jī)制,它將服務(wù)與認(rèn)證方式分開受葛,使得系統(tǒng)管理員可以輕易的調(diào)整服務(wù)程序的認(rèn)證方式题涨,而不必對應(yīng)用程序進(jìn)行任何修改。它涉及的內(nèi)容挺多的总滩,此處僅僅先了解概念即可纲堵。

在ftpserver服務(wù)器上新建一個(gè)PAM文件vsftpd.vu(文件名可以任意)用于虛擬用戶認(rèn)證,文件內(nèi)的db參數(shù)為上一步使用功能db_load命令生成的數(shù)據(jù)庫文件的路徑闰渔,但不用寫后綴名

[root@ftpserver vsftpd]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
2.6.3 創(chuàng)建本地用戶

既然是虛擬用戶認(rèn)證席函,為啥還需要建立本地用戶呢?可以簡單理解為虛擬指定一個(gè)ftp文件存儲的根目錄冈涧,當(dāng)虛擬用戶登錄ftp服務(wù)器后默認(rèn)訪問的就是這個(gè)目錄茂附。

由于Linux中一切文件都有所有者和所屬組,假設(shè)前文創(chuàng)建的虛擬用戶vuser1創(chuàng)建了一個(gè)文件督弓,但是系統(tǒng)中卻沒有vuser1這個(gè)用戶营曼,就會導(dǎo)致文件的權(quán)限出現(xiàn)錯(cuò)誤。因此需要?jiǎng)?chuàng)建一個(gè)本地用戶來映射虛擬用戶愚隧,讓虛擬用戶默認(rèn)登錄到與之有映射關(guān)系的這個(gè)系統(tǒng)本地用戶的家目錄中蒂阱,虛擬用戶創(chuàng)建的文件的屬性也都?xì)w屬于這個(gè)系統(tǒng)本地用戶,從而避免 Linux 系統(tǒng)無法處理虛擬用戶所創(chuàng)建文件的屬性權(quán)限。

由于ftp目錄中的文件可能經(jīng)常變化录煤,因此我們新建一個(gè)本地用戶virtual并指定其家目錄為/var/ftpdir目錄鳄厌。同時(shí)我們禁用此本地用戶登錄FTP服務(wù)器,從而避免黑客利用該本地用戶登錄系統(tǒng)妈踊。禁止與虛擬用戶關(guān)聯(lián)的本地用戶并不會影響虛擬用戶的登錄了嚎。

[root@ftpserver vsftpd]# useradd -d /var/ftpdir -s /sbin/nologin virtual
[root@ftpserver vsftpd]# ll -d /var/ftpdir/
drwx------. 3 virtual virtual 74 Jan 14 21:46 /var/ftpdir/
[root@ftpserver vsftpd]# chmod -Rf 755 /var/ftpdir/
[root@ftpserver vsftpd]# ll -d /var/ftpdir/        
drwxr-xr-x. 3 virtual virtual 74 Jan 14 21:46 /var/ftpdir/
[root@ftpserver vsftpd]# 

修改目錄權(quán)限,讓其他人可讀廊营。

2.6.4 vsftpd主配置文件配置

配置vsftpd主配置文件歪泳,指定之前創(chuàng)建的PAM認(rèn)證文件以及與虛擬用戶關(guān)聯(lián)的本地用戶。

[root@ftpserver vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
#anon_umask=022
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
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

實(shí)際就是在原有基礎(chǔ)上添加:guest_enable=YES露筒、guest_username=virtual夹囚、allow_writeable_chroot=YES,并修改pam_service_name=vsftpd.vu為之前創(chuàng)建的pam認(rèn)證文件邀窃。另外注意,必須開啟本地模式(local_enable=YES)假哎。

虛擬用戶認(rèn)證相關(guān)參數(shù)及作用如下:

參數(shù) 作用
anonymous_enable=NO 禁止匿名開放模式
local_enable=YES 允許本地用戶模式
guest_enable=YES 開啟虛擬用戶模式
guest_username=virtual 指定虛擬用戶賬戶
pam_service_name=vsftpd.vu 指定PAM文件瞬捕,存放于/etc/pam.d/目錄下,默認(rèn)是vsftpd文件
allow_writeable_chroot=YES 允許對禁錮的FTP根目錄執(zhí)行寫入操作舵抹,而且不拒絕用戶的登錄請求
2.6.5 虛擬用戶權(quán)限設(shè)置

假設(shè)我們要區(qū)別對待vuser1和vuser2肪虎,只允許vuser1查看文件,而允許vuser2上傳惧蛹、創(chuàng)建扇救、修改、查看香嗓、刪除文件迅腔。這種需求在企業(yè)真實(shí)環(huán)境中是常見的,我們可以通過vsftpd服務(wù)器程序來實(shí)現(xiàn)靠娱。

[root@ftpserver vsftpd]# mkdir /etc/vsftpd/vusers_dir
[root@ftpserver vsftpd]# cd vusers_dir/
[root@ftpserver vusers_dir]# touch vuser1
[root@ftpserver vusers_dir]# vim vuser2
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

只需要在vsftpd配置目錄下新建vusers_dir目錄(名字可以任意炔琢摇),在目錄中分別對應(yīng)這2個(gè)用戶創(chuàng)建文件并寫入權(quán)限即可。

同時(shí)修改vsftpd主配置文件像云,過添加 user_config_dir參數(shù)來定義這兩個(gè)虛擬用戶不同權(quán)限的配置文件所存放的路徑锌雀。

[root@ftpserver vsftpd]# vim /etc/vsftpd/vsftpd.conf
...省略原有內(nèi)容
user_config_dir=/etc/vsftpd/vusers_dir

配置完成之后重啟vsftpd服務(wù)。

2.6.6 驗(yàn)證不同虛擬用戶設(shè)置的權(quán)限是否生效

此時(shí)我們就可以使用虛擬用戶vuser1和vuser2登錄ftp進(jìn)行測試了

由于我們按照之前的基礎(chǔ)上進(jìn)行演示迅诬,之前已經(jīng)配置好了防火墻和SELinux相關(guān)策略腋逆,因此這里無需配置(實(shí)際操作時(shí)要根據(jù)實(shí)際情況進(jìn)行,防火墻和SELinux會對ftp客戶端的操作造成影響)侈贷。

使用vuser1登錄測試驗(yàn)證是否有創(chuàng)建目錄權(quán)限

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): vuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir test
550 Permission denied.
ftp> exit
221 Goodbye.
[root@ftp ~]#

正如之前設(shè)置一樣惩歉,vuser1只有查看權(quán)限,沒有創(chuàng)建目錄的權(quán)限。

再來看看vuser2

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): vuser2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir vuser2
257 "/vuser2" created
ftp> rmdir vuser2
250 Remove directory operation successful.
ftp> exit
221 Goodbye.
[root@ftp ~]# 

正如需求一致柬泽,vuser2具備創(chuàng)建和刪除目錄的權(quán)限慎菲。這樣就可以根據(jù)實(shí)際需要靈活配置不同用戶的權(quán)限。

2.6.7 其他注意事項(xiàng)及常見錯(cuò)誤

(1)配置了虛擬用戶登錄后锨并,本地用戶登錄就會失效

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): root
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> exit
221 Goodbye.
[root@ftp ~]# 

(2)2.6.4節(jié)中的vsftpd主配置文件中必須要開啟本地登錄模式

如果不開露该,將報(bào)錯(cuò),提示本地模式和匿名模式必須開啟一個(gè)第煮,顯然虛擬用戶模式就是為了提高安全解幼,因此我們不開匿名模式而開啟本地模式。

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
500 OOPS: vsftpd: both local and anonymous access disabled!
ftp> exit
[root@ftp ~]# 

(3)2.6.4節(jié)中的主配置文件參數(shù)allow_writeable_chroot=YES必須開啟

如果不開將報(bào)錯(cuò)

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): vuser1
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
ftp> exit
[root@ftp ~]# 

(3)防火墻影響ftp登錄不了

默認(rèn)情況防火墻策略阻止了ftp端口包警,ftp客戶端登錄將得到如下錯(cuò)誤

[root@ftp ~]# ftp 192.168.78.101
ftp: connect: No route to host
ftp> exit

此時(shí)需要在ftp服務(wù)器上執(zhí)行:iptables -F

(4)SELinux阻止文件創(chuàng)建

本來vuser2是有創(chuàng)建文件權(quán)限的撵摆,但是由于受到默認(rèn)SELinux策略影響,將不能創(chuàng)建文件

[root@ftp ~]# ftp 192.168.78.101
Connected to 192.168.78.101 (192.168.78.101).
220 (vsFTPd 3.0.2)
Name (192.168.78.101:root): vuser2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir vuser2
550 Create directory operation failed.
ftp> exit
221 Goodbye.
[root@ftp ~]# 

此時(shí)需要在ftp服務(wù)器執(zhí)行:setsebool -P ftpd_full_access=off命令即可害晦。

三特铝、簡單文件傳輸協(xié)議TFTP

3.1 TFTP概述

TFTP(Trivial File Transfer Protocol)簡單文件傳輸協(xié)議,是一種基于UDP協(xié)議在客戶端和服務(wù)器之間進(jìn)行簡單文件傳輸?shù)膮f(xié)議壹瘟■杲耍可以認(rèn)為它是FTP協(xié)議的簡化版本。

3.2.1 TFTP缺點(diǎn)

TFTP的命令功能不如FTP服務(wù)強(qiáng)大稻轨,不能遍歷目錄灵莲,在安全性方比FTP差。傳輸文件采用 UDP 協(xié)議殴俱,端口號為 69政冻,文件傳輸過程不如FTP協(xié)議可靠。

3.2.2 TFTP優(yōu)點(diǎn)

TFTP不需要客戶端的權(quán)限認(rèn)證线欲, 減少了無謂的系統(tǒng)和網(wǎng)絡(luò)帶寬消耗明场,因此在傳輸瑣碎(trivial)不大的文件時(shí),效率更高李丰。

3.2 TFTP操作案例

3.2.1 TFTP安裝并啟動

我們還是繼續(xù)使用之前的兩臺虛擬機(jī)榕堰,在主機(jī)ftpserver上安裝tftpsever服務(wù),在主機(jī)ftp上安裝tftp服務(wù)嫌套。

(1)tftp服務(wù)器安裝

[root@ftpserver ~]# rpm -q tftp-server
package tftp-server is not installed
[root@ftpserver ~]# yum install tftp-server
...省略中間內(nèi)容
Installed:
  tftp-server.x86_64 0:5.2-22.el7                                           
Complete!
[root@ftpserver ~] 

在RHEL7系統(tǒng)中逆屡,TFTP服務(wù)是使用 xinetd 服務(wù)程序來管理的,在安裝TFTP軟件包后踱讨,還需要在 xinetd服務(wù)程序中將其開啟魏蔗。

配置之前先看tftp服務(wù)器是否安裝xinetd服務(wù)

[root@ftpserver ~]# systemctl restart xinetd
Failed to issue method call: Unit xinetd.service failed to load: No such file or directory.

出現(xiàn)這個(gè)結(jié)果表示為安裝xinetd,需要手動進(jìn)行安裝痹筛。

[root@ftpserver ~]# yum install xinetd

在tftp服務(wù)器中莺治,修改/etc/xinetd.d/tftp配置文件廓鞠,將disable=yes改為no

[root@ftpserver ~]# vim /etc/xinetd.d/tftp 
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
[root@ftpserver ~]#

修改后重啟xinetd服務(wù)并添加到開機(jī)啟動。

[root@ftpserver ~]# systemctl restart xinetd
[root@ftpserver ~]# systemctl enable xinetd

考慮到有些系統(tǒng)的防火墻默認(rèn)沒有允許 UDP 協(xié)議的 69 端口谣旁,因此 需要手動將該端口號加入到防火墻的允許策略中床佳。

[root@ftpserver ~]# firewall-cmd --permanent --add-port=69/udp
success
[root@ftpserver ~]# firewall-cmd --reload
success
[root@ftpserver ~]#

TFTP 的根目錄為/var/lib/tftpboot。

在tftp服務(wù)器上榄审,創(chuàng)建文件tftptest.txt以供tftp下載

[root@ftpserver ~]# echo "test tftp">/var/lib/tftpboot/tftptest.txt
[root@ftpserver ~]# ll /var/lib/tftpboot/                          
total 4
-rw-r--r--. 1 root root 10 Jan 14 23:05 tftptest.txt
[root@ftpserver ~]# 

(2)fttp客戶端安裝

[root@ftp ~]# rpm -q tftp
package tftp is not installed
[root@ftp ~]# yum install tftp
...省略中間內(nèi)容
Installed:
  tftp.x86_64 0:5.2-22.el7                                                 
Complete!
[root@ftp ~]#
3.2.2 使用TFTP

在tftp客戶端連接到tftpserver并下載文件

[root@ftp ~]# tftp 192.168.78.101
tftp> get tftptest.txt
tftp> quit
[root@ftp ~]#  ll tftptest.txt 
-rw-r--r--. 1 root root 10 Jan 14 23:09 tftptest.txt
[root@ftp ~]#  cat tftptest.txt
test tftp
[root@ftp ~]# 

可以看到已經(jīng)成功把文件下載到本地了砌们。

3.2.3 TFTP相關(guān)的命令

列舉幾個(gè)tftp相關(guān)的命令和參數(shù)

命令 作用
? 幫助信息
put 上傳文件
get 下載文件
verbose 顯示詳細(xì)的處理信息
status 顯示當(dāng)前的狀態(tài)信息
binary 使用二進(jìn)制進(jìn)行傳輸
ascii 使用 ASCII 碼進(jìn)行傳輸
timeout 設(shè)置重傳的超時(shí)時(shí)間
quit 退出

當(dāng)然TFTP還有很多其他用戶,以后有機(jī)會在深入討論搁进。

下一篇文章將講解Linux下文件共享的方法浪感。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市饼问,隨后出現(xiàn)的幾起案子影兽,更是在濱河造成了極大的恐慌,老刑警劉巖莱革,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峻堰,死亡現(xiàn)場離奇詭異,居然都是意外死亡盅视,警方通過查閱死者的電腦和手機(jī)茧妒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來左冬,“玉大人,你說我怎么就攤上這事纸型∧磁椋” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵狰腌,是天一觀的道長除破。 經(jīng)常有香客問我,道長琼腔,這世上最難降的妖魔是什么瑰枫? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮丹莲,結(jié)果婚禮上光坝,老公的妹妹穿的比我還像新娘。我一直安慰自己甥材,他們只是感情好盯另,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洲赵,像睡著了一般鸳惯。 火紅的嫁衣襯著肌膚如雪商蕴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天芝发,我揣著相機(jī)與錄音绪商,去河邊找鬼。 笑死辅鲸,一個(gè)胖子當(dāng)著我的面吹牛格郁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓢湃,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼理张,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绵患?” 一聲冷哼從身側(cè)響起雾叭,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎落蝙,沒想到半個(gè)月后织狐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筏勒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年移迫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片管行。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厨埋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巫延,我是刑警寧澤狡恬,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站废赞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏叮姑。R本人自食惡果不足惜唉地,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望传透。 院中可真熱鬧耘沼,春花似錦、人聲如沸朱盐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽托享。三九已至骚烧,卻和暖如春浸赫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赃绊。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工既峡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碧查。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓运敢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忠售。 傳聞我的和親對象是個(gè)殘疾皇子传惠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容