一、FTP服务介绍
vsftp(very security ftp file transfer protocol 非常文件传输协议)
FTP分为主动模式和被动模式。
主动模式:(不安全,传数据的端口是固定的20号,容易被截取)
客户端的21号端口发送连接请求信号
服务端使用20号端口主动和客户端连接,服务端使用20号端口发送的数据,客户端通过>1024的随机端口接收。
被动模式:(安全,传数据的端口是>1024的随机端口,不易被截取)
客户端向服务端的21号端口发送连接请求信号
服使用>1024随机端口主动和客户端连接,服务端使用>1024的随机端口发送的数据,客户端通过>1024+1的随机端口接收。
ftp 登录服务器的这一瞬间的流程:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1、-------------tcp connection -------------> 首先,客户端向服务端发送建立连接的请求 2、<-------------220 ready ---------------- 服务端反馈220的代码,表明21号端口处于正常侦听状态 3、-------------USER ---------------------> 客户端向服务端发送一个用户名 4、<-------------331 authentication----------- 服务端反馈331代码,要求客户端输入验证密码 5、-------------PASSWD-------------------> 客户端向服务端发送密码 6、<-------------230 login------------------- 服务端反馈230代码,如果验证通过允许客登录 7、-------------pwd -----------------------> 客户端向服务端发送一条指令,例如pwd显示当前路径 8、<-------------257 work path -------------- 服务端反馈代码,显示当前工作路径,每个指令的反馈代码都不同
二、安装并启动服务
[root@ftp ~]# yum install vsftpd -y [root@ftp ~]# systemctl start vsftpd [root@ftp ~]# systemctl enable vsftpd Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service. 验证端口(默认21) [root@ftp ~]# netstat -lntup |grep 21 tcp6 0 0 :::21 :::* LISTEN 2605/vsftpd
此时,访问 ftp://你的服务器IP地址, 可浏览机器上的 /var/ftp 目录了。
三.配置 FTP 权限
目前 FTP 服务登陆允许匿名登陆,也无法区分用户访问,我们需要配置 FTP 访问权限。
了解 VSFTP 配置
vsftpd 的配置目录为 /etc/vsftpd,包含下列的配置文件:
vsftpd.conf 为主要配置文件
ftpusers 配置禁止访问 FTP 服务器的用户列表
user_list 配置用户访问控制
阅读上述配置可以让你了解更多信息。我们了解这些信息之后,就可以开始下一步修改配置来设置权限。
阻止匿名访问和切换根目录,匿名访问和切换根目录都会给服务器带来安全风险,匿名访问让所有人都可以上传文件到服务器上而无需鉴权,而允许切换根目录则可能产生越权访问问题,我们把这两个功能关闭。
关闭方法如下,编辑 /etc/vsftpd/vsftpd.conf, 找到下面两处配置并修改:
# 禁用匿名用户 anonymous_enable=NO # 禁止切换根目录 chroot_local_user=YES
修改后重启服务
[root@ftp ftp]# systemctl restart vsftpd
创建FTP用户,创建一个用户 ftpuser,命令如下:
[root@ftp ftp]# useradd ftpuser
为用户 ftpuser 设置密码,命令如下:
[root@ftp ftp]# echo "Password" | passwd ftpuser --stdin Changing password for user ftpuser. passwd: all authentication tokens updated successfully
限制该用户仅能通过 FTP 访问:
限制用户 ftpuser 只能通过 FTP 访问服务器,而不能直接登录服务器,因为那样会有安全隐患,限制命令如下:
[root@ftp ftp]# usermod -s /sbin/nologin ftpuser
为用户分配主目录:
为用户 ftpuser 创建主目录并约定:/data/ftp 为主目录, 该目录不可上传文件,/data/ftp/pub 文件只能上传到该目录下。
创建主目录执行如下命:
[root@ftp ftp]# mkdir -p /data/ftp/pub
方便用户登录后可以看到欢迎信息,并且确定用户确实登录到了主目录上,我们需要给用户创建一个欢迎文件。创建登录欢迎文件,执行如下命令:
[root@ftp ftp]# echo "Welcome to use FTP service." > /data/ftp/welcome.txt
设置访问权限,让用户对他的主目录有可读写权限,执行如下命令:
[root@ftp ftp]# chmod a-w /data/ftp && chmod 777 -R /data/ftp/pub
把该目录设置为用户的主目录,执行如下命令:
[root@ftp ftp]# usermod -d /data/ftp ftpuser
准备域名和证书
如果您不需要通过域名访问 FTP 服务器则可以直接用IP地址访问,域名购买完成后, 需要将域名解析到你的服务器IP地址上。
访问 FTP 服务
FTP 服务已安装并配置完成,下面我们来使用该 FTP 服务,根据您个人的工作环境,选择一种方式来访问已经搭建的 FTP 服务。
a、Windows 用户可以复制下面的链接到资源管理器的地址栏访问:
ftp://ftpuser:Password@<您的服务器IP地址>
b、通过 FTP 客户端工具访问
FTP 客户端工具众多,下面推荐两个常用的:
WinSCP - Windows 下的 FTP 和 SFTP 连接客户端
FileZilla - 跨平台的 FTP 客户端,支持 Windows 和 Mac
下载和安装 FTP 客户端后,使用下面的凭据进行连接即可:
你的服务器IP地址、FTP用户名、FTP用户密码
如果能够正常连接,那么大功告成,您可以开始使用属于您自己的 FTP 服务器了!
接下来,请上传任意一张图片到您的 FTP 服务器上的pub目录下,然后,就可以在 /data/ftp/pub 中看到了。
注意: 请不要直接上传文件到根目录下,您应该选择上传到 pub 目录下.
四.配置文件说明
vim /etc/vsftpd/vsftpd.conf 主配置文件 anonymous_enable=YES 允许匿名访问 local_enable=YES 允许本地 write_enable=YES 允许写入 anon_upload_enable=YES 允许匿名上传 anon_mkdir_write_ enable=YES 允许匿名用户创建新的目录 dirmessage_enalbe=YES 开启目录提示功能 xferlog_enable=YES 激活上传下载的日志 connect_from_port_20=YES 开启20号端口的主动模式 chown_username=whoever 指定匿名上传的用户 xferlog_file=/var/log/xferlog 日志文件,这个要反注释打开 xferlog_std_format=YES 启用日志的标准格式 idle_session_timeout=600 连接上服务器10分钟内,如果什么操作都不做,就会被服务器踢掉,默认300秒 date-connection-timeout=120 会话超时时间,如果因为断线导致连接断开,2分钟后,服务端会把客户端踢下去,默认300秒 ftpd_banner=Welcome to joinlabs 欢迎信息,在lftp没用 listen=NO NO只侦听ipv4, YES侦听ipv4和ipv6 listen_ipv6=YES 支持ipv6,但是不侦听ipv6也没用 userlist_enable=YES 启用黑名单