概述
FTP(File Transfer Protocol,文件传输协议)是典型的C/S结构的应用层协议,需要由服务端软件、客户端软件两个部分共同实现文件传输功能。
FTP连接及传输模式
FTP服务器默认使用TCP协议的20、21端口与客户端进行通信。20端口用于建立数据连接并传输文件数据;21端口用于建立控制连接,并传输FTP控制命令。
-
主动模式:服务器主动发起数据连接。首先客户端向服务端的21端口建立FTP控制连接,当需要传输数据时,客户端以PORT命令告知服务器“我打开了某端口,你过来连接我”,于是服务器从20端口向客户端的该端口发送请求并建立数据连接。
-
被动模式:服务器被动等待数据连接。如果客户机所在网络的防火墙禁止主动模式连接,通常会使用被动模式。首先由客户端向服务端的21端口建立FTP控制连接,当需要传输数据时,服务器以PASV命令告知客户端“我打开了某端口,你过来连接我”,于是客户端向服务器的该端口发送请求并建立数据连接。
客户端与服务器建立好数据连接以后,就可以根据从控制连接中发送的FTP命令上传或下载文件了。在传输文件时,根据是否进行字符转换,分为文本模式和二进制模式。
- 文本模式:又称为ASCII(American Standard Code for Information Interchange,美国信息交换标准码)模式,这种模式在传输文件时使用ASCII标准字符序列,一般只用于纯文本文件的传输。
二进制模式:又称为Binary模式,这种模式不会转换文件中的字符序列,更适合传输程序,图片等非纯文本字符的文件。
FTP用户类型
使用FTP客户端软件访问服务器时,通常要用到一类特殊的用户账号,其用户名为ftp或anonymous,提供任意密码(包括空密码)都可以通过服务器的验证,这样的用户成为“匿名用户”。一般用于提供公共文件的下载等。
除了不需要密码验证的匿名用户以外,FTP服务器还可以直接使用本机的系统用户账号来进行验证,这些用户通常被称为“本地用户”。匿名用户也有对应的本地系统用户账号“ftp”,但对于vsftpd服务来说,本地用户指的是除了匿名用户以外的其他系统用户。
有些FTP服务器软件还可以维护一份独立的用户数据库文件,而不是直接使用系统用户账号。这些位于独立数据库文件中的FTP用户账号,被称为“虚拟用户”。通过使用虚拟用户,将FTP账户与Linux系统账户的关联性降至最低,可以为系统提供更好的安全性。
FTP服务器软件的种类
在windows系统中,常见的FTP服务器软件包括FileZilla Sener、Serv-U等,而在Linux系统中,vsftpd是目前在Linux/UNIX领域应用十分广泛的一款FTP服务软件。该软件针对安全特性方面做了大量的设计。除了安全性以外,vsftpd在速度和稳定性方面的表现也相当突出。可以支持15000个用户并发连接。
FTP客户端工具的种类
windows和Linux系统默认都自带有ftp命令程序,可以连接到FTP服务器进行交互式的上传,下载通信。除此以外,还有大量的图形化FTP客户端工具。windows中常用的包括CuteFTP、FlashFXP、LeapFTP、Filezilla等;
环境准备工作
挂载光盘,搭建YUM仓库。
[root@localhost ~]# cd /
[root@localhost /]# ls
bin cgroup etc lib lost+found misc net proc sbin srv tmp var
boot dev home lib64 media mnt opt root selinux sys usr
[root@localhost /]# mkdir /181201
[root@localhost /]# mount /dev/cdrom /181201/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@localhost /]# alias vi='/usr/bin/vim'
[root@localhost /]# which -a vi vim
alias vi='/usr/bin/vim'
/usr/bin/vim
/bin/vi
/usr/bin/vim
[root@localhost /]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
[root@localhost yum.repos.d]# mkdir a
[root@localhost yum.repos.d]# mv C* a
[root@localhost yum.repos.d]# ls
a
[root@localhost yum.repos.d]# mv a/CentOS-Debuginfo.repo .
[root@localhost yum.repos.d]# ls
a CentOS-Debuginfo.repo
[root@localhost yum.repos.d]# cp CentOS-Debuginfo.repo yum.back
[root@localhost yum.repos.d]# ls
a CentOS-Debuginfo.repo yum.back
[root@localhost yum.repos.d]# vi CentOS-Debuginfo.repo
[debug]
name=CentOS-6 - Debuginfo
baseurl=file:///181201
gpgcheck=0
enabled=1
安装vsftpd服务
[root@localhost yum.repos.d]# yum -y install vsftpd*
Loaded plugins: fastestmirror, refresh-packagekit, security
debug | 4.0 kB 00:00 ...
debug/primary_db | 4.4 MB 00:00 ...
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package vsftpd.x86_64 0:2.2.2-11.el6_4.1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
==========================================================================================
Package Arch Version Repository Size
==========================================================================================
Installing:
vsftpd x86_64 2.2.2-11.el6_4.1 debug 151 k
Transaction Summary
==========================================================================================
Install 1 Package(s)
Total download size: 151 k
Installed size: 331 k
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : vsftpd-2.2.2-11.el6_4.1.x86_64 1/1
Verifying : vsftpd-2.2.2-11.el6_4.1.x86_64 1/1
Installed:
vsftpd.x86_64 0:2.2.2-11.el6_4.1
Complete!
[root@localhost yum.repos.d]#
复制代码
安装db_load工具并创建用户(字母行为账户,偶数行为密码);
[root@localhost yum.repos.d]# rpm -ivh /181201/Packages/db4-utils-4.7.25-18.el6_4.x86_64.rpm
warning: /181201/Packages/db4-utils-4.7.25-18.el6_4.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing... ########################################### [100%]
package db4-utils-4.7.25-18.el6_4.x86_64 is already installed
[root@localhost yum.repos.d]# cd /etc/vsftpd/
[root@localhost vsftpd]# vi user
xiao
666
ming
666
hua
666
为user文件加密并建立支持虚拟用户的PAM认证文件;
[root@localhost vsftpd]# db_load -T -t hash -f user user.db
[root@localhost vsftpd]# useradd -s /sbin/nologin 181201
[root@localhost vsftpd]# vi /etc/pam.d/vsftpd.181201
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
在vsftpd的配置文件中添加支持虚拟用户并启动vsftpd服务;
[root@localhost vsftpd]# vi vsftpd.conf
write_enable=YES //启用任何形式的写入权限(如上传、删除文件等)都需要开启此项
anon_umask=022 //设置匿名用户所上传文件的默认权限掩码值
anonymous_enable=YES //是否允许匿名访问
anon_upload_enable=YES //是否允许匿名用户上传文件
anon_mkdir_write_enable=YES //是否允许匿名用户有创建目录的写入权限
anon_other_write_enable=NO //是否允许匿名用户有其他写入权限,如对文件改名、覆盖及删除文件等
dirmessage_enable=YES //用户切换进入目录时显示.message文件(如果存在)的内容
xferlog_enable=YES //启用xferlog日志,默认记录到/var/log/xferlog
connect_from_port_20=YES //允许服务器主动模式(从20端口建立数据连接)
xferlog_std_format=YES //启用标准的xferlog日志格式,若禁用此项,将使用vsftpd自己的日志格式
listen=YES //是否以独立运行的方式监听服务
userlist_enable=NO //是否启用user_list用户列表文件
tcp_wrappers=YES //是否启用TCP_Wrappers主机访问控制
guest_enable=YES //启用用户映射功能
guest_username=181201 //指定映射的系统用户名称
pam_service_name=vsftpd.181201 //指定新的PAM认证文件
chroot_local_user=YES //是否将FTP本地用户禁锢在宿主目录中
local_umask=077 //设置本地用户所上传文件的默认权限掩码
local_enable=YES //是否允许本地系统用户访问
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/user_dir //查找每个用户的独立
[root@localhost vsftpd]# service vsftpd restart
关闭 vsftpd: [确定]
为 vsftpd 启动 vsftpd: [确定]
[root@localhost vsftpd]#
给虚拟用户建立独立的配置文件并给权限(配置文件里要有用户配置目录支持,上图启动服务上方一行就是)并指定wang用户的根目录
[root@localhost vsftpd]# mkdir /20181201
[root@localhost vsftpd]# chown 181201:181201 /20181201/
[root@localhost vsftpd]# chmod 777 /20181201/
[root@localhost vsftpd]# ls -ldh /20181201/
drwxrwxrwx. 2 181201 181201 4.0K 6月 4 08:04 /20181201/
[root@localhost vsftpd]# mkdir /etc/vsftpd//user_dir
[root@localhost vsftpd]# cd user_dir/
[root@localhost user_dir]# vi wang
local_root=/20181201
测试匿名FTP服务器:配置好vsftpd并启动服务以后,就可以使用FTP客户端工具进行验证了。windows主机中可以在“电脑”地址栏内输入URL地址访问,在Linux的字符界面中,可以使用ftp命令进行测试。
[root@localhost ~]# ftp 172.20.10.6
Connected to 172.20.10.6 (172.20.10.6).
220 (vsFTPd 2.2.2)
Name (172.20.10.6:root): xiao //用户名
331 Please specify the password.
Password: //密码可任意输入,或直接回车
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir 201812011255 //分别创建了两个目录
257 "/201812011312" created
ftp> mkdir 201812011256
257 "/201812011313" created
ftp> //成功登录后的操作提示符
然后在FTP服务器的默认目录进行查看是否有刚创建的两个目录。
[root@localhost ~]# cd /home/181201/
[root@localhost 181201]# ls
201812011312 201812011313
[root@localhost 181201]#
本文完。
原创不易,如果你觉得这篇文章对你有点用的话,麻烦你为本文点个赞、评论或转发一下,因为这将是我输出更多优质文章的动力,感谢!
转载于:https://juejin.cn/post/6971556926844846111
我们下期再见!
评论(0)