赞
踩
文件传输协议(File Transfer Protocol,FTP)是一种提供网络之间共享文件的协议,它可以在计算机之间可靠、高效地传送文件。在传输时,传输双方的操作系统、磁盘文件系统类型可以不同。
FTP 协议允许 TCP/IP 网络上的两台计算机之间进行文件传输。而 FTP 服务是基于 FTP 协议的文件传输服务。
工作时,一台计算机上运行 FTP 客户端应用程序,另一台计算机上需要运行 FTP 服务器端程序。只有拥有了 FTP 服务,客户端才能进行文件传输。下面介绍FTP服务的构成和文件传输模式。
上述的文件传输,指的是客户端和FTP服务器端之间的文件传输,如文件上传和下载。要实现文件传输还需要满足两个条件,如下:
客户端与FTP服务器端之间传输一个文件是一次完整的 FTP 会话。该会话包含有两个连接,分别为控制连接和数据连接。其作用如下:
在使用 FTP 进行文件传输时,针对不同的文件类型,FTP 提供了两种文件传输模式,分别为 ASCII 和二进制。这两种模式支持的文件如下:
#安装
yum install -y vsftpd
#设置开机启动
systemctl enable vsftpd.service
#启动
systemctl start vsftpd.service
#停止
systemctl stop vsftpd.service
#查看状态
systemctl status vsftpd.service
#打开配置文件
vim /etc/vsftpd/vsftpd.conf
#显示行号
:set number
#修改配置 12 行
anonymous_enable=NO
#修改配置 33 行
anon_mkdir_write_enable=YES
#修改配置48行
chown_uploads=YES
#修改配置72行
async_abor_enable=YES
#修改配置83行
ascii_upload_enable=YES
#修改配置84行
ascii_download_enable=YES
#修改配置87行
ftpd_banner=Welcome to blah FTP service.
#修改配置101行
chroot_local_user=YES
#添加下列内容到vsftpd.conf末尾
use_localtime=YES
listen_port=21
idle_session_timeout=2400
guest_enable=YES
guest_username=vsftpd
user_config_dir=/etc/vsftpd/vconf
data_connection_timeout=1200
virtual_use_local_privs=YES
pasv_min_port=40000
pasv_max_port=40010
accept_timeout=6000
connect_timeout=6000
pasv_enable=YES
allow_writeable_chroot=YES
#创建编辑用户文件
vim /etc/vsftpd/virtusers
#第一行为用户名,第二行为密码。不能使用root作为用户名
szptftp
szptftp2019
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取
chmod 600 /etc/vsftpd/virtusers.db
# 修改前先备份
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
vi /etc/pam.d/vsftpd
#先将配置文件中原有的 auth 及 account 的所有配置行均注释掉
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
# 如果系统为32位,上面改为lib
#用户登录终端设为/bin/false(即:使之不能登录系统)
groupadd ftp #ftp传输属组
useradd szptftp -d /home/szptftp -g ftp -G ftp -s /bin/nologin
passwd szptftp # 默认为 szptftp2019
mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf
#这里建立虚拟用户zxftp配置文件
touch szptftp
#编辑szptftp用户配置文件,内容如下,其他用户类似
vi szptftp
local_root=/home/dump/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#建立szptftp用户根目录
mkdir -p /home/dump
chown szptftp:ftp /home/dump -- 不用考虑递归
chmod 777 /home/dump
IPtables 的设置方式:
### vi /etc/sysconfig/iptables
### #编辑iptables文件,添加如下内容,开启21端口
### -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
### -A INPUT -m state --state NEW -m tcp -p tcp --dport 40000:40010 -j ACCEPT
# 防火墙放开端口
iptables -I INPUT -p tcp --dport 21 -j ACCEPT; -- 启动ftp客户端/服务端使用端口号 21
iptables -I INPUT -p tcp --dport 40000:40010 -j ACCEPT; -- 启动ftp服务端使用端口号 40000:40010
或者直接关闭防火墙
systemctl stop firewalld
systemctl restart vsftpd.service
这个时候,使用ftp的工具连接时,我们发现是可以连接的。传输文件的时候,会发现文件上传和下载都会出现
500、503 、200等问题。这个时候,可以进行以下操作:
方式一、关闭SELINUX
#打开SELINUX配置文件
vim /etc/selinux/config
#修改配置参数
#注释
SELINUX=enforcing
#增加
SELINUX=disabled
#修改完成后,需要重启!
方式二、修改SELINUX
setenforce 0 #暂时让SELinux进入Permissive模式
#列出与ftp相关的设置
getsebool -a|grep ftp
#以下是显示出来的权限,off是关闭权限,on是打开权限。不同的机器显示的可能不一样。我看了我的显示的,和网上其他教程就不太一样
ftp_home_dir --> off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
#将包含有 ftp_home_dir 和 ftpd_full_access 相关的都设置为 1
setsebool -P ftp_home_dir 1
setsebool -P tftp_home_dir 1
setsebool -P allow_ftpd_anon_write 1
setsebool -P tftp_anon_write 1
setsebool -P ftpd_full_access 1
setenforce 1 #进入Enforcing模式
方式三、 SELINUX不对vsftp不做任何限制
setsebool -P ftpd_connect_all_unreserved 1
如果还是有问题尝试给我们用户的ftp目录,设置一下操作权限
chmod -R 775 /home/dump/
如果为Windows 2008等服务器,默认配置系统,在下边“菜单栏”中,“开始”菜单右边第一 个,可以直接打开,如下图:
如果配置操作系统中,没有该选项,可以在“开始”菜单->“控制面板”->“管理工具”中打 开
”器理管器务服“开打 .1 程流务任理处批据数发下时定置配
路径:【服务器管理器】->【配置】->【任务计划程序】->【任务计划程序库】
务任时定置配 .2
A、右键【任务计划程序库】->“创建基本任务” 在弹出窗口中,填写基本基本信息,点击“下一步”按钮
:作操
B、定义定时任务的执行频率/周期,此处我们选择“每天”,点击“下一步”按钮
此处设置的执行时间,需要确保为平台已经完成当天数据抽取后的任意时间,考虑到白天可能 存在业务繁忙时段,会影响其他业务,建议设置时间为晚上21点以后
C、选择定时执行任务执行的操作内容,此处我们是下发数据,执行的为bat(批处理)程序, 所以选择“启动程序(T)”,点击“下一步”按钮
选择要执行的程序或脚本,点击“浏览”,进入我们存放脚本的路径,选中要执行的脚本
D、配置完成后,此步骤仅需要点击“完成(F)”按钮即可完成配置。此时,在“任务计划程序 库”中,可以看到刚已经配置的定时任务。可以在下边信息框中,查看该配置计划的详细信息
创建一个文本文件内容如下:
open FTP服务器IP
user //用户名
password //密码
binary(ascii)* 注 文本文件用axcii二进制文件用binary cd 后面跟目录名 进入要备份文件所在的目录
get 文件名 要下载的文件
bye
保存后改名为ftp.ftp 新建BAT文件内容如下:
ftp -s:ftp.ftp 将ftp.ftp和该BAT文件存放在同一目录下 创建计划任务定时执行该BAT文件
- @echo off&setlocal enabledelayedexpansion
- ::------------------------------------------------------------------
- :: 功能描述: FTP从阿里云生产服务器上,将数据库备份文件同步到本地windows服务器
- ::-------------------------------------------------------------------
-
- title xx系统备份本地存档
- MODE con: COLS=80 lines=30
- color 0a
-
- rem ===配置FTP服务器地址,用户名,密码====
- set FTP_SERVER=120.24.xx.xx
- set FTP_USER=xxftp
- set FTP_PASSWORD=xxftp2019
-
- rem 备份本地存档延迟天数,比如:0表示取当天备份文件
- set ds=0
- set dy=%date:~,4%
- set dm=%date:~5,2%
- set dd=%date:~8,2%
- echo 当前日期为:%dy%年%dm%月%dd%日
-
- rem 补全月份,日期为两位数
- if %dm:~,1%==0 set "dm=!dm:~1!"
- if %dd:~,1%==0 set "dd=!dd:~1!"
-
- rem 判断是否为闰月,闰月则2月取29天
- set /a "feb=^!(%dy%%%4)+28"
- if "%dy:~2,2%" equ "00" set/a "feb=!feb!-1+^!(%dy:~,2%%%4)"
-
- rem 取当前日期往前延迟天数的日期
- set/a "dd-=%ds%"
-
- rem 如果延迟天数后的日期为正数,则直接取日期值,否则,往前月份取实际日期
- if %dd% gtr 0 goto ok
-
- rem 日期值为负数,则循环往前扣减一天
- :tyt
- set n=0
- set/a dm-=1
- if !dm! equ 0 set/a "dy=%dy%-1,dm=0+12"
- for %%a in (31 %feb% 31 30 31 30 31 31 30 31 30 31) do (
- set/a n+=1
- if !n! equ %dm% set/a "dd=!dd!+%%a")
- if %dd% leq 0 goto tyt
-
- rem 延迟天数后的日期,比如:20190101
- :ok
- rem 获取8位长度的日期值
- set/a "ymd=%dy%*10000+%dm%*100+%dd%"
-
- echo 前%ds%天的日期是%ymd:~,4%年%ymd:~4,2%月%ymd:~6,2%日
- set t_yyyy=%ymd:~,4%
- set t_mm=%ymd:~4,2%
- set t_dd=%ymd:~6,2%
-
- rem 执行ftp操作的起始时间点
- set StartTime=%Time:~0,2%:%Time:~3,2%:%Time:~6,2%
-
- rem ftp同步数据的根路径
- set BACKUP_ROOT=E:\xx\backup
- rem 同步备份文件到本地的ftp执行脚本
- set FTP_CMD_FILE=%BACKUP_ROOT%\ftpcmd.txt
- rem 同步备份文件到本地的数据文件根路径
- set BACKUP_DATA_DIR=%BACKUP_ROOT%
- rem 同步备份文件到本地的记录日志文件根路径
- set BACKUP_LOG_DIR=%BACKUP_ROOT%\log
- rem 阿里生产服务器上,知效平台备份数据文件存放的根路径
- set BACKUP_DATA=/oracle
-
-
- echo 将下载日期为%t_yyyy%%t_mm%%t_dd%的数据。。。。。。 > %BACKUP_LOG_DIR%\%ymd%.log
- rem 跳转到ftp中知效备份文件所在路径
- echo cd /oracle
-
- rem ===生成FTP命令====
- echo open %FTP_SERVER%>%FTP_CMD_FILE%
- echo %FTP_USER%>>%FTP_CMD_FILE%
- echo %FTP_PASSWORD%>>%FTP_CMD_FILE%
- echo binary>>%FTP_CMD_FILE%
- echo literal pasv>>%FTP_CMD_FILE%
- rem 选择本地服务器同步备份路径
- echo lcd %BACKUP_DATA_DIR%>>%FTP_CMD_FILE%
- rem 选择阿里云服务器备份路径
- echo cd %BACKUP_DATA%>>%FTP_CMD_FILE%
- echo get tczx_%t_yyyy%%t_mm%%t_dd%.log>>%FTP_CMD_FILE%
- rem ftp执行完成后退出命令
- echo quit>>%FTP_CMD_FILE%
- rem 调用ftp脚本执行完整命令,即:将所有要执行的ftp命令都存放在 ftpcmd.txt 后,统一用以下命令调用执行ftp
- ftp -i -s:%FTP_CMD_FILE%
-
- rem 执行ftp操作的结束时间点
- set EndTime=%Time:~0,2%:%Time:~3,2%:%Time:~6,2%
- echo FTP下载数据开始时间:%StartTime%,结束时间:%EndTime% >> %BACKUP_LOG_DIR%\%ymd%.log
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。