FTP简介
文件传输协议FTP(FileTransferFTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。
FTP协议
FTP是TCP/IP的协议簇协议之一,其主要功能是借助网络实现远距离主机间的文件传输。
1.使用Vsftpd服务器
Vsftpd(VerySecureFTP)是linux系统的常用软件。
1.1Vsftpd的服务器的安装与启动
Vsftpd在yum源中的名称就是叫做vsftpd
yuminstall-yvsftpd*//*代表下载所有关于vsftpd的软件包
1.2Vsftpd服务器的用户类型
Vsftpd的用户类型主要分为匿名用户、本地用户和虚拟用户。
(1)匿名用户:如果Vsftpd服务器提供匿名访问功能,默认的匿名访问用户为anonymous或ftp,密码为空,匿名用户登录后进入到工作目录是/var/ftp
(2)本地用户:本地用户信息存储在/etc/passwd文件中,本地用户输入用户名和密码后可登录vsftpd,并且直接进入该用户的宿主目录。
(3)虚拟用户:旨在vsftpd服务器中拥有账号,并且该账号只能用于文件传输服务的专有用户,也称guest用户。该类用户可以通过输入用户名和密码进行授权登录。
2.Vsftpd服务器的测试
FTP服务器的运行模式基于服务器、客户端,服务器安装完Vsftpd软件包后,可以通过客户端进行测试。
1.首先下载vsftpd与其相关的服务
yuminstall-yvsftpd*ftp*
2.然后打开ftp服务的端口,使防火墙放行ftp服务
firewall-cmd--zone=public--add-port=21/tcp--persystemctlrestartvsftpdfirewalld
3.在虚拟机上以匿名用户身份进行测试,使用ftp命令,后面输入本机的ip地址,用户名是ftp,密码是空,登录过程如下。
[root@linux2~]#ftp192.168.123.102Connectedto192.168.123.102(192.168.123.102).220(vsFTPd3.0.2)Name(192.168.123.102:root):ftp331Pleasespecifythepassword.Password:230Loginsuccessful.RemotesystemtypeisUNIX.Usingbinarymodetotransferfiles.ftp>ftp>ls
以上命令中的192.168.123.102是vsftpd服务器的ip地址
终端打印信息“230Loginsuccessful.”说明登录成功
3.FTP常用的命令
4.Vsftp服务器的配置文件
配置基本的Vsftpd服务器比较简单,只需要正确安装了Vsftpd软件,直接启动Vsftpd并放行端口就行了,但是如果想要更进一步的搭建Vsftpd服务,那就要掌握Vsftpd服务器的配置文件。
下面对这几个文件进行详细说明
1.vsftpd.conf文件
vsftpd.conf位于/etc/vsftpd目录下,与大多数配置文件一样,vsftpd.conf文件中以符号”#“开始注释信息,我们可以用Vim等工具对它进行修改。在Vsftpd中去掉注释,显示该文件的配置内容如下:
[root@linux2~]#grep-v"#"/etc/vsftpd/vsftpd.confanonymous_enable=YESlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESlisten=NOlisten_ipv6=YESpam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YES
下面对该文件中的常用选项进行介绍,合理使用这些选项是保障FTP安全稳定的前提
2.ftpusers文件
/etc/vsftpd/ftpusers文件用于指定不能访问vsftp服务器的用户列表,此文件在格式中采用每个用户一行的形式,其中包含的用户通常是系统的超级用户和系统用户
3.user_list文件
/etc/vsftpd/userlist文件也用于保留用户列表,指定的用户能否访问vsftp服务取决于userlistdeny选项的参数,当userlist_deny选项的参数=YES时,此文件中写入的所有用户都将无法登录vsftp服务,想都别想,但是当userlist_deny=No时,这些用户就起来了,那就表示只有这些用户能够访问vsftp服务,所以一定要注意这个选项的参数。非常重要。
如果要限制一些指定的本地用户不能访问FTP服务,则可以添加以下内容来做到:
进入/etc/vaftpd/vsftpd.conf末行添加
userlist_enable=YES
userlist_deny=YES
userlistfile=/etc/vsftpd/user_list
进入/etc/vsftpd/user_list添加你需要拒绝访问的本地用户
toto(意为指定用户每个指定用户单独占一行)
如果需要指定几个本地用户才能访问FTP服务,则可以添加以下内容来做到:
进入/etc/vaftpd/vsftpd.conf末行添加
userlist_enable=YES
userlist_deny=NO
userlistfile=/etc/vsftpd/user_list
进入/etc/vsftpd/user_list添加你需要拒绝访问的本地用户
toto(意为指定用户每个指定用户单独占一行)
4.chroot_list文件
默认情况下,匿名用户会被锁定在默认FTP目录中,而本地用户却可以访问自己主目录以外的内容,出于安全考虑,通过chroot_list文件可以限制用户只能访问其主目录,也可以实现使用不同哟ing胡不仅能访问自己的目录也可以访问主目录以外的内容。
chrootlist文件设计chrootlocaluser和chroot*_list_enable两个选项*
chroot*_list_file默认指向/etc/sftpd/chroot_list*
chroot_list文件的功能有两个
- 是限制用户名单中的用户只能在其主目录中
- 名单中的用户不仅能访问自己的主目录,还能跳出主目录,访问其它的目录。
当chroot*_list_enable=YES时,chroot_list中的用户只能在本目录中*
当chroot*_list_enable=NO时,chroot_list中的目录可以访问除主目录以外的内容*
5.Vsftp服务器的使用
前面介绍了Vsftpd服务器的安装,启动及主要的配置文件,下面通过具体的实例来介绍该服务器的具体应用。
1.匿名用户访问Vsfto服务器
本次实验环境为Centos7服务器的IP地址为192.168.123.101主机名为linux1
第一步:安装Vsftp服务及开启该服务
yuminstall-yvsftpd
systemctlrestartvsftpd
使用ftp匿名用户登录,如下所示:
[root@linux2~]#ftp192.168.123.101Connectedto192.168.123.101(192.168.123.101).220(vsFTPd3.0.2)Name(192.168.123.101:root):ftp331Pleasespecifythepassword.Password:230Loginsuccessful.RemotesystemtypeisUNIX.Usingbinarymodetotransferfiles.ftp>ftp>ls227EnteringPassiveMode(192,168,123,101,101,29).150Herecomesthedirectorylisting.drwxr-xr-x2006Oct132020pub226DirectorysendOK.
登录成功,使用ls命令浏览默认的FTP目录(/var/ftp)
1、首先在FTP默认目录/var/pub中创建两个文本文件1.txt和2.txt
[root@ayaka~]#cd/var/ftp/pub/
[root@ayakapub]#touch1.txt
[root@ayakapub]#touch2.txt
[root@ayakapub]#ls
1.txt2.txt
2、在客户端上进入/pub目录
ftp>ls
227EnteringPassiveMode(192,168,123,101,75,103).
150Herecomesthedirectorylisting.
-rw-r–r--1000May0910:371.txt
-rw-r–r--1000May0910:372.txt
将Vsftpd服务器上文件下载到客户端
进入pub目录使用get命令将文件1.txt与2.txt下载到当前目录下,下载成功的过程如下
220(vsFTPd3.0.2)Name(192.168.123.101:root):ftp331Pleasespecifythepassword.Password:230Loginsuccessful.RemotesystemtypeisUNIX.Usingbinarymodetotransferfiles.ftp>cdpub250Directorysuccessfullychanged.ftp>ls227EnteringPassiveMode(192,168,123,101,25,132).150Herecomesthedirectorylisting.-rw-r--r--10050May0910:541.txt-rw-r--r--1000May0910:372.txt226DirectorysendOK.ftp>!pwd/rootftp>get1.txtlocal:1.txtremote:1.txt227EnteringPassiveMode(192,168,123,101,145,74).150OpeningBINARYmodedataconnectionfor1.txt(50bytes).226Transfercomplete.50bytesreceivedin0.000134secs(373.13Kbytes/sec)ftp>!ls11.txtanaconda-ks.cfgftp>
测试在Vsftp服务器创建目录
ftp>mkdirtoto
550Permissiondenied.
ftp
通过以上操作可以得出:在默认情况下,匿名用户一般只有从服务器服务器下载文件的权限,不能上传文件或进行其它操作
那如何让他变得有权限呢,接下来我们来配置vsftpd使得有上传文件或进行其它操作
更改vsftpd.conf文件,开启匿名用户上传,创建目录权限
将如下两个参数取消注释
29#anon_upload_enable=YES//允许匿名文件上传文件
34#anon_mkdir_write_enable=YES//允许匿名用户建立目录
取消注释后保存并退出重启vsftpd服务让它生效
systemctlrestartvsftpd
创建匿名用户上传目录
需要在/var/ftp目录下创建一个目录,修改目录的权限,让匿名用户具有写权限
[root@ayakapub]#mkdir/var/ftp/hub
[root@ayakapub]#chmodow/var/ftp/hub
上传目录
使用put命令把本地文件上传到FTP服务器上,具体过程如下。
[root@linux2~]#ftp192.168.123.101Connectedto192.168.123.101(192.168.123.101).220(vsFTPd3.0.2)Name(192.168.123.101:root):ftp331Pleasespecifythepassword.Password:230Loginsuccessful.RemotesystemtypeisUNIX.Usingbinarymodetotransferfiles.ftp>cdhub//进入目录hub250Directorysuccessfullychanged.ftp>!ls//执行本机Shell命令,显示当前内容11.txtanaconda-ks.cfgfile1.txtftp>put1//上传文件1local:1remote:1227EnteringPassiveMode(192,168,123,101,176,227).150Oktosenddata.226Transfercomplete.1664bytessentin0.000814secs(2044.23Kbytes/sec)ftp>ls-l//查看hub目录中的文件列表227EnteringPassiveMode(192,168,123,101,85,50).150Herecomesthedirectorylisting.-rw-------114501664May0911:261226DirectorysendOK.ftp>mkdirtomato//创建目录257"/hub/tomato"created//创建目录成功ftp>ls227EnteringPassiveMode(192,168,123,101,99,18).150Herecomesthedirectorylisting.-rw-------114501664May0911:261drwx------214506May0911:35tomato226DirectorysendOK.ftp>
2.本地用户访问Vsftp服务器
本地用户是在FTP服务器上拥有用户账户的用户,相当于FTP服务器中的真实实际用户,其通过输入自己的账号和口令来进行授权登录,当用户成功登录服务器后,其登录目录为用户的主目录,用户的权限对该主目录的操作权限,可以下载也可以上传文件。
下面我们将用实例来介绍本地用户登录服务器下载,上传文件的过程。
本地用户访问Vsftp服务器,本例Vsftp服务器的ip地址为192.168.123.101客户端主机名为Client
Vsftp服务器建立用户ftpuser,并在用户的家目录建立文件toto和yoyo命令如下
[root@ayakapub]#useraddftpuser
[root@ayakapub]#echo“123”|passwd--stdinftpuser//设置ftpuser的密码为123
[root@ayakapub]#su-ftpuser//登录用户ftpuser
[ftpuser@ayaka~]$touchtoto.txt
[ftpuser@ayaka~]$touchyoyo.txt
使用本地用户登录Vsftpd服务器后,其登录目录为用户的主目录/home/ftpuser,具体过程如下
[root@linux2~]#ftp192.168.123.102Connectedto192.168.123.102(192.168.123.102).220(vsFTPd3.0.2)Name(192.168.123.102:root):ftpuser331Pleasespecifythepassword.Password:530Loginincorrect.Loginfailed.ftp>^Z[2]已停止ftp192.168.123.102[root@linux2~]#[root@linux2~]#ftp192.168.123.101Connectedto192.168.123.101(192.168.123.101).220(vsFTPd3.0.2)Name(192.168.123.101:root):ftpuser331Pleasespecifythepassword.Password:230Loginsuccessful.RemotesystemtypeisUNIX.Usingbinarymodetotransferfiles.ftp>ls227EnteringPassiveMode(192,168,123,101,56,176).150Herecomesthedirectorylisting.-rw-rw-r--1100010000May0911:44toto.txt-rw-rw-r--1100010000May0911:44yoyo.txt226DirectorysendOK.ftp>pwd257"/home/ftpuser"ftp>
创建目录
用户ftpuser创建目录tomato,具体操作如下
ftp>mkdirtomato257"/home/ftpuser/tomato"createdftp>ls227EnteringPassiveMode(192,168,123,101,244,9).150Herecomesthedirectorylisting.drwxr-xr-x2100010006May0911:52tomato-rw-rw-r--1100010000May0911:44toto.txt-rw-rw-r--1100010000May0911:44yoyo.txt226DirectorysendOK.ftp>
上传本地文件
用户ftpuser上传本地文件到服务器指定目录,具体操作如下:
ftp>!ls-l总用量16-rw-r--r--.1rootroot166410月2320201-rw-r--r--.1rootroot505月918:561.txt-rw-------.1rootroot12955月719:16anaconda-ks.cfg-rw-r--r--.1rootroot75月919:20file1.txtftp>!pwd/rootftp>putanaconda-ks.cfg//上传本地文件local:anaconda-ks.cfgremote:anaconda-ks.cfg227EnteringPassiveMode(192,168,123,101,101,125).150Oktosenddata.226Transfercomplete.1295bytessentin0.00108secs(1194.65Kbytes/sec)ftp>ls-l//浏览远程目录,验证上传文件是否为本地文件227EnteringPassiveMode(192,168,123,101,149,213).150Herecomesthedirectorylisting.-rw-r--r--1100010001295May0911:55anaconda-ks.cfgdrwxr-xr-x2100010006May0911:52tomato-rw-rw-r--1100010000May0911:44toto.txt-rw-rw-r--1100010000May0911:44yoyo.txt226DirectorysendOK.ftp>
下载服务器文件到本地
用ftpuser下载文件toto到本地当前目录下,下载文件yoyo到本地目录/tmp下,并且重命名为toto.bak具体操作如下
ftp>gettotolocal:totoremote:toto227EnteringPassiveMode(192,168,123,101,206,168).550Failedtoopenfile.ftp>ls227EnteringPassiveMode(192,168,123,101,98,221).150Herecomesthedirectorylisting.-rw-r--r--1100010001295May0911:55anaconda-ks.cfgdrwxr-xr-x2100010006May0911:52tomato-rw-rw-r--1100010000May0911:44toto.txt-rw-rw-r--1100010000May0911:44yoyo.txt226DirectorysendOK.ftp>gettoto.txt//下载文件到本地目录local:toto.txtremote:toto.txt227EnteringPassiveMode(192,168,123,101,46,209).150OpeningBINARYmodedataconnectionfortoto.txt(0bytes).226Transfercomplete.ftp>!ls-l//浏览本地目录,验证下载文件操作是否成功总用量16-rw-r--r--.1rootroot166410月2320201-rw-r--r--.1rootroot505月918:561.txt-rw-------.1rootroot12955月719:16anaconda-ks.cfg-rw-r--r--.1rootroot75月919:20file1.txt-rw-r--r--.1rootroot05月919:59toto.txt//下载文件yoyo.txt到本地目录/tmp下并重命名为yoyo.baktp>getyoyo.txt/tmp/yoyo.baklocal:/tmp/yoyo.bakremote:yoyo.txt227EnteringPassiveMode(192,168,123,101,46,136).150OpeningBINARYmodedataconnectionforyoyo.txt(0bytes).226Transfercomplete.ftp>lcd/tmp进入本地目录/tmpLocaldirectorynow/tmpftp>!ls//浏览验证本地目录是否有yoyo.bakks-script-e7_otAyoyo.baksystemd-private-7da9c4fa89d64f18a66b1cf3053c3ff6-chronyd.service-JoFutUyum.logvmware-root_797-4257069498ftp>