介绍
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
传输模式
FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard (也就是 Active,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP server。Passive模式FTP的客户端发送 PASV命令到 FTP Server。
Standard模式
FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
Passive模式
在建立控制通道的时候和Standard模式类似,当客户端通过这个通道发送PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。
Vsftp介绍
Vsftp是目前linux中最主流的ftp服务器,非常安全的ftp服务进程
登陆类型
VSFTP提供了系统用户、匿名用户、虚拟用户三种不同的登陆反射方式,所有的虚拟用户会被映射成一个系统用户,访问时的文件目录是此系统用户的家目录,匿名用户也是虚拟用户,映射的虚拟用户是ftp,详细信息可以通过man vsftp.conf查看。
Vsftp安装
环境:服务端 centos7.6 软件vsftpd
客户端:windows和linux都行
服务端安装:
yum install -y epel-release
# pam 认证模块 db4 支持文件数据库
yum install -y vsftpd* pam* db4*
配置文件说明
配置文件 | 作用 |
---|---|
/etc/vsftp/vsftpd.conf | vsftpd核心配置文件 |
/etc/vsftpd/ftpusers | 指定哪些用户不能访问ftp服务器 |
/etc/vsftpd/user_list | 指定允许使用vsftpd的用户列表文件 |
/etc/vsftpd/vsftpd_conf_migrate.sh | 是vsftpd操作的一些变量和设置脚本 |
/var/ftp/ | 默认情况下匿名用户的根目录 |
配置匿名用户访问上传下载删除文件
vi /etc/vsftpd/vsftpd.conf
只需要改两处(去除#),添加一行anon_other_write_enable=YES
chown ftp:ftp -R /var/ftp/
setenforce 0
systemctl restart vsftpd
ps aux | grep vsftpd
访问
(1)浏览器直接访问(匿名):ftp://192.168.1.43/
(2)windown窗口访问:ftp://192.168.1.43
(2)工具访问(Mobaxterm)
配置系统用户并登陆
useradd wj
passwd wj
vi /etc/vsftpd/vsftpd.conf
local_enable=YES
write_enable=YES
local_umask=077
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
touch /home/wj/a.txt
systemctl restart vsftpd
配置虚拟用户并登录
建立虚拟ftp用户账号
useradd -s /sbin/nologin vu
创建虚拟用户文件(奇数行用户名,偶数行密码)
vi /etc/vsftpd/user
wj2
1234
创建数据文件
cd /etc/vsftpd/
db_load -T -t hash -f user user.db
建立支持虚拟用户的PAM认证文件
vi /etc/pam.d/vsftpd.vu
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
修改配置文件
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
vi /etc/vsftpd/vsftpd.conf
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
guest_enable=YES
guest_username=vu
pam_service_name=vsftpd.vu
local_enable=YES
local_umask=077
chroot_local_user=YES
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/user_dir
为用户建立独立的配置目录及文件
mkdir /etc/vsftpd/user_dir
cd /etc/vsftpd/user_dir
vi wj2
local_root=/etc/vsftpd/data
创建虚拟用户数据存放目录
cd ..
mkdir data
chmod 777 data
cd data
touch www.txt
重启服务
systemctl restart vsftpd
然后用wj2用户访问,密码是1234
Ftp客户端:lftp
lftp是一款优秀的文件客户端程序,它支持ftp,SETP,HTTP,FTPS等多种文件传输协议。
准备两台linux服务器,一台服务端(192.168.1.43),一台客户端(192.168.1.51)
yum install -y lftp
登陆:lftp 用户名:密码@ftp地址:端口(默认21)
lftp wj2:1234@192.168.1.43
下载文件(文件夹)
get 文件(文件夹)
例如我想下载图中www.txt
注意:默认情况下(不加任何选项),在哪里目录进入的lftp,就下载文件到那个目录
下载文件到指定目录
get file -o 目录
退出lftp:
ctrl +
enter
或者输入 exit
上传 put
touch /opt/1.txt
cd /opt
lftp wj2:1234@192.168.1.43
put 1.txt
ls
此外,lftp额外支持很多的功能,我这里只是简单介绍了几种,更多功能见 http://lftp.tech/lftp-man.pdf