一、说明
在做大数据采集和数据共享时,我们常用要到FTP数据采集或将数据推送到FTP服务器对外共享。
二、环境
环境说明:阿里云服务器(centos7系统)
三、安装 vsftpd 服务
# yum install vsftpd -y
配置文件说明
/etc/vsftpd/vsftpd.conf 是 vsftpd 的核心配置文件。
/etc/vsftpd/ftpusers 是黑名单文件,此文件里的用户不允许访问 FTP 服务器。
/etc/vsftpd/user_list 是白名单文件,此文件里的用户允许访问 FTP 服务器。
四、配置 vsftpd
vsftpd 安装后默认开启了匿名访问 FTP 服务器的功能,使用匿名用户访问,无需输入用户名和密码即可登录 FTP 服务,但是没有权限修改或上传文件。
此处我配置本地用户登录
本地用户登录是指用户使用 Linux 操作系统的账号和密码登录 FTP 服务器。
创建一个测试账号 ftptest 并设置一个密码
# useradd ftptest
# echo "ftptest@123" |passwd --stdin ftptest
创建一个供 FTP 服务使用的文件目录
# mkdir /var/ftp/test
更改 /var/ftp/test 目录的拥有者为 ftptest
# chown ftptest:ftptest /var/ftp/test -R
修改配置文件前先进行备份一下
# cp /etc/vsftpd/vsftpd.conf{,.bak}
修改 vsftpd.conf 配置文件。(此处先使用被动模式)
#禁止匿名登录FTP服务器
anonymous_enable=NO
#允许本地用户登录FTP服务器
local_enable=YES
#设置本地用户登录后所在目录
local_root=/var/ftp/test
#全部用户被限制在主目录
chroot_local_user=YES#开启被动模式
pasv_enable=YES
#FTP服务器公网IP(也就是当前阿里云服务器的公网 IP)
pasv_address=120.xx.xx.xx
#设置被动模式下,建立数据传输可使用port范围的最小值
pasv_min_port=10000
#设置被动模式下,建立数据传输可使用port范围的最大值
pasv_max_port=10088
#本地用户上传文件的umask
local_umask=022
#是否在进入新目录时显示 message_file 文件中的内容
dirmessage_enable=YES
#启用日志
xferlog_enable=YES
#日志是否进行格式化
xferlog_std_format=YES
#独立服务
listen=YES
#centos7增加此设置,开启后默认监控ipv4和ipv6
listen_ipv6=NO
#认证模式
pam_service_name=vsftpd
#启用用户列表
userlist_enable=YES
#可以上传(全局控制)
write_enable=YES
#允许下载
download_enable=YES
五、启动 vsftpd
# service vsftpd start
设置安全组规则(这里很关键)由于上面是被动模式,所以添加端口时包含了 默认端口21,还有配置文件中参数pasv_min_port和pasv_max_port之间的所有端口。如图:
六、测试
我们先在linux上面测试,再在浏览器上面测试,再在windows的文件夹测试
1、Linux 上测试 ftp IP
[root@srt_aliyun_39 ~]# ftp 120.xx.xx.xx
Connected to 120.xx.xx.xx (120.xx.xx.xx).
220 (vsFTPd 2.2.2)
Name (120.79.93.66:root): ftptest
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (120,xx,xx,xx,xx,81).
150 Here comes the directory listing.
226 Directory send OK.
ftp> pwd
257 "/var/ftp/test"
ftp> mkdir testdir
257 "/var/ftp/test/testdir" created
ftp> ls
227 Entering Passive Mode (120,xx,xx,xx,39,43).
150 Here comes the directory listing.
drwxr-xr-x 2 505 505 4096 Apr 12 10:00 testdir
226 Directory send OK.
可以看到在linux 上面测试没有问题,可以正常访问,并创建文件夹等。
2、浏览器上测试 ftp://ip
可以看到在浏览器上面测试也是ok,不过浏览器上面只能查看,和下载 不能上传。可以看到在Linux上测试时创建的那个目录
3、在windows上通过文件夹访问测试(说明:这里就得配置配置了,不然会报各种各样的错,因为我们服务器使用的是被动模式,那么同样的道理,客户端也得使用被动模式去连接服务端。) ftp://ip
选择 控制面板 > 网络和Internet > Internet 选项 > 高级 。勾选 启用 FTP 文件夹视图,勾选 使用被动 FTP。
可以看到 进去后默认同样看到了在linux上面创建的 testdir目录, 并且还新建了一个windir目录。
4、再次回到服务器查看,也可以看到上面测试创建的文件,被动模式就OK了。
# ls /var/ftp/test/
testdir windir
#
七、下载文件
下载文件通常用get和mget这两条命令。
a) get
格式:get [remote-file] [local-file]
将文件从远端主机中传送至本地主机中。
如要获取远程服务器上/usr/your/1.htm,则
ftp> get /usr/your/1.htm 1.htm (回车)
b) mget
格式:mget [remote-files]
从远端主机接收一批文件至本地主机。
如要获取服务器上/usr/your/下的所有文件,则
ftp> cd /usr/your/
ftp> mget *.* (回车)
此时每下载一个文件,都会有提示。如果要除掉提示,则在mget . 命令前先执行:prompt off
注意:文件都下载到了linux主机的当前目录下。比如,在 /usr/my下运行的ftp命令,则文件都下载到了/usr/my下。
八、上传文件
a) put
格式:put local-file [remote-file]
将本地一个文件传送至远端主机中。
如要把本地的1.htm传送到远端主机/usr/your,并改名为2.htm
ftp> put 1.htm /usr/your/2.htm (回车)
b) mput
格式:mput local-files
将本地主机中一批文件传送至远端主机。
如要把本地当前目录下所有html文件上传到服务器/usr/your/ 下
ftp> cd /usr/your (回车)
ftp> mput *.htm (回车)
注意:上传文件都来自于主机的当前目录下。比如,在 /usr/my下运行的ftp命令,则只有在/usr/my下的文件linux才会上传到服务器/usr/your 下。
九、 断开连接
bye:中断与服务器的连接。
ftp> bye (回车)