Linux作为一个开源操作系统,在企业应用领域具有广泛的应用。很多企业需要在Linux环境下部署FTP服务器,并进行定时文件备份。本文将介绍如何在Linux环境下部署FTP服务器并配置定时对FTP中的文件进行备份
FTP安装
检查安装状况
首先需要在Linux环境下搭建一个FTP服务器,这里以CenOS环境下为例
首先检查是否安装了ftp服务
rpm -qa | grep ftp
确认安装了需要卸载可以执行一下命令进行卸载
rpm -e --nodeps vsftpd-3.0.2-29.el7_9.x86_64
在线安装
确认服务器中没有安装ftp后,执行以下命令安装vsftpd
服务
yum install -y vsftpd
离线安装
如果操作的服务器无法访问外网,可以找一台可以连接外网相同操作系统的服务器,或者本地装一个虚拟机,下载vsftpd
安装包
yum install --downloadonly --downloaddir=<your_path> vsftpd
- your_path:这里是指下载的安装包所存放的路径,这里我把路径使用
/home/temp/vsftpd
切换到我的home/temp/vsftpd
目录下可以看到已经下好相关安装文件
cd /home/temp/vsftpd
将下载下来的rpm
文件拷贝到需要安装FTP服务的服务器中,执行
rpm -Uvh *.rpm --nodeps --force
至此vsftpd
服务安装完成,可以通过一下命令查看一下安装的vsftpd
的版本
vsftpd -version
FTP配置
确认安装好FTP服务后,我们首先确定配置文件的位置:
cd /etc/vsftpd
修改配置文件
执行vi
命令修改配置文件
vi vsftpd.conf
- 修改
anonymous_enable=NO
#不允许匿名访问(不登录默认访问某目录)
listen
和listen_ipv6
修改为listen=YES
,listen_ipv6=NO
禁用IPV6
- 手动添加其他配置:
chroot_local_user=YES #所有用户都限制在其FTP主目录下
chroot_list_enable=NO #不使用列外的用户列表
allow_writeable_chroot=YES #允许用户对主目录有写权限
user_config_dir=/etc/vsftpd/userconfig #配置FTP用户登录指向主目录配置文件位置
pasv_enable=YES #被动模式
pasv_min_port=21100 #pasv连接模式时可以使用port 范围的上界,0表示任意
pasv_max_port=21110 #pasv连接模式时可以使用port 范围的下界。
userlist_deny=NO #NO代表userlist是白名单
userlist_file=/etc/vsftpd/user_list #配置登录FTP白名单用户文件位置
这里当userlist_enable
为YES, userlist_deny
为NO时,FTP服务器仅允许user_list中的用户访问。
配置用户
新建一个文件夹用户FTP的工作目录
mkdir /home/vsftpd
创建用户并指定主目录(不能ssh远程登录)
useradd -d /home/vsftpd/data -s /sbin/nologin vsftp
设置用户密码
passwd vsftp
向FTP登录白名单添加用户
vim /etc/vsftpd/user_list
在文件末尾加入之前创建的linux账号vsftp
创建存放用户FTP主目录配置文件的文件夹
mkdir /etc/vsftpd/userconfig
创建与用户同名的文件在其中配置用户目录路径
vim /etc/vsftpd/userconfig/vsftp
文件中添加
local_root=/home/vsftpd/data
这里如果要指定其他的文件夹,需要保证文件夹存在,如果不存在,登陆会报错
修改local_root
配置的文件夹的访问权限
# 将刚创建的目录拥有者更换为vsftp用户组下的vsftp用户
chown vsftp:vsftp /home/vsftpd/data
# 为目录设置访问权限,700的意识是除目录拥有者外同组或其他用户均无权限
chmod 700 /home/vsftpd/data
重启FTP服务
systemctl restart vsftpd
配置防火墙
此时使用相关FTP工具测试连接,发现无法连接,这个时候需要配置防火墙,打开相关端口
firewall-cmd --add-port=21/tcp --permanent
读取目录列表失败,需要在防火墙上开启ftp服务
firewall-cmd --add-service=ftp --permanent
上传文件失败,需要开放上传端口
firewall-cmd --add-port=21100-21110/tcp --permanent
重启防火墙
firewall-cmd --reload
配置好防火墙之后正常来说就可以连接了,我们用FTP客户端测试连接
如果报错530错误,我们需要查看登陆账号的主目录和登陆Shell是什么
cat /etc/passwd
这时再次查看/etc/shells
是否有自己登录的shell如果没有则需要添加:
vim /etc/shells
这里我们查找/etc/shells
没有/sbin/nologin
,我面把它加在文件的最后
再次测试登陆就可以登陆了
FTP自动备份
lftp安装
登陆另一台备份用的目标服务器安装lftp
工具
yum -y install lftp
确认lftp
安装好之后,创建备份文件夹
mkdir /home/vsftpd/data
测试同步命令
此时我们2台服务器准备好了:
- 192.168.99.102: FTP服务器
- 192.168.99.101: 备份目标服务器
创建好文件夹之后,我们连接之前配置的FTP服务器,上传一个测试文件验证FTP文件是否正常
此时查看目标备份的目录下文件/home/vsftpd/data
下没有文件
我们执行测试数据同步命令:
lftp -u <ftp_name>,<ftp_pwd> <ftp_ip> -e "mirror --verbose --delete --only-newer <source_path> <target_path>; quit"
- ftp_name: 之前配置FTP服务的访问用户名,这里是
vsftp
- ftp_pwd:FTP用户对应的密码
- ftp_ip:FTP服务器的访问IP或者域名
- source_path:需要备份的FTP远程文件夹
- target_path:本地目标服务的备份目录
- –verbose: 设置监视级别,范围 0-3,0 表示不输出,3 表示输出全部
- –delete: 删除远程目录上不存在的文件
- –only-newer: 只下载新文件(-c参数无法工作)
lftp -u vsftp,vsftp@123 192.168.99.102 -e "mirror --verbose --delete --only-newer / /home/vsftpd/data; quit"
这里报错500 OOPS: chroo
这个可能是SELinux
造成的
SELinux
是linux的一个内核模块,是linux的安全子系统。
SELinux
主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
我们可以手动关闭它
getenforce
查看SELinux
状态
Enforcing
是代表强制的意思
setenforce 0
关闭SELinux
(临时)
Permissive
是放纵的,任由.
此时我们回到FTP服务器执行
getenforce
再执行:
setenforce 0
此时回到目标服务器再次执行同步命令,就会得到如下结果
设置定时任务
我们可以使用cron来定时运行lftp命令。cron是一个Linux系统中的定时任务管理器,可以让您在指定的时间间隔内运行命令。
要使用cron定时运行lftp命令,请按照以下步骤操作:
crontab -e
为了验证定时任务是否有效我们临时将定时任务设置成每分钟执行一次,在文件末尾添加以下行:
*/1 * * * * lftp -u vsftp,vsftp@123 192.168.99.102 -e "mirror --verbose --delete --only-newer / /home/vsftpd/data; quit"
我们通过以下命令查看定时任务
crontab -l
回到FTP服务器,新建一个文件夹test
等待一分钟后,我们回到目标文件夹,可以看到文件夹test
被同步过来了,说明定时任务有效
同步FTP我们不需要太高的实时性,所以我们可以将lftp命令设置每小时的0分钟运行一次。可以根据需要更改时间间隔。
0 * * * * lftp -u vsftp,vsftp@123 192.168.99.102 -e "mirror --verbose --delete --only-newer / /home/vsftpd/data; quit"
至此,我们就可以定时的备份FTP服务器的文件了.
本文介绍了在Linux环境下部署FTP服务器并配置定时对FTP中的文件进行备份的方法,希望能够帮助读者解决相关的技术难题。同时,我们也提醒读者,在使用FTP服务器时要注意安全性问题,禁用匿名登录和开启SSL/TLS加密等措施,以确保数据的安全。若您在实践过程中遇到任何问题,欢迎留言讨论。