网站开发保密合同,wordpress 自动 采集,ck播放器整合WordPress,网站建设与维护的软件简单的Linux FTP服务搭建
1.需求
公司有一个esb文件传输代理#xff0c;其中我们程序有文件传输功能#xff0c;需要将本地文件传输到esb文件代理服务器上#xff0c;传输成功之后发送http请求#xff0c;告知esb将固定文件进行传输到对应外围其他服务的文件目录中#…简单的Linux FTP服务搭建
1.需求
公司有一个esb文件传输代理其中我们程序有文件传输功能需要将本地文件传输到esb文件代理服务器上传输成功之后发送http请求告知esb将固定文件进行传输到对应外围其他服务的文件目录中整个过程我们使用到了FTP服务此处记录一下方便后续复习使用。
2.简单概念
FTPfile Transfer Protocol文件传输协议是典型的C/S架构的应用层协议由客户端软件和服务端软件两个部分共同实现文件传输功能FTP客户端和服务器之间的连接时可靠的面向连接的为数据的传输提供了可靠的保证。
FTP 是TCP传输协议主要使用20和21端口20端口用来传输数据21号端口用来传输FTP控制命令的。
FTP一共分为两种工作模式分别为主动模式以及被动模式
主动模式FTP服务端接收下载控制命令后会主动从tcp/20端口发送数据传输给客户端 动模式下客户端下载文件时FTP服务会主动发起一个连接到客户端通常是1024以上的端口建立数据传输通道。 服务器发送一个PORT命令给客户端告诉客户端自己的IP地址和使用的端口号。 客户端打开指定的端口等待接收来自服务器的数据连接。被动模式FTP服务端接收下载控制命令后会开启一个空闲端口被动等待客户端数据传输连接 在被动模式下当客户端请求从服务器下载文件时FTP服务器不会直接连接到客户端的数据端口。 相反服务器会创建一个临时的端口[可以指定范围]并处于监听状态然后通过PASV命令告诉客户端这个端口的信息。 客户端主动连接到服务器提供的端口从而建立数据传输通道。 这两种模式的选择主要取决于网络环境的限制例如NAT或防火墙设置。在某些情况下主动模式可能因为防火墙或NAT设备的限制而无法正常工作此时就需要使用被动模式来绕过这些限制。 3.安装过程
我们使用的是 vsftpd服务首先确认服务是否以前安装过
# 检查服务是否安装过
rpm -q vsftpd执行安装命令
yum -y install vsftpd进入到/etc/vsftpd目录进行原有配置文件备份
cd /etc/vsftpd
cp vsftpd.conf vsftpd.conf.bak编辑ftp的配置文件vsftpd.conf
vim /etc/vsftpd/vsftpd.conf# 文件中具体修改信息
anonymous_enableYES # 开启匿名访问默认开启
local_enableYES # 允许本地用户登录
write_enableYES # 是否开启ftp的写权限上传使用
local_umask022 # 使用本地用户上传文件文件默认权限是多少 2 写权限
anon_umask022 # 设置匿名用户所上传数据权限
anon_upload_enableYES # 允许匿名用户上传文件。需取消注释
anon_mkdir_write_enableYES # 允许匿名用户创建上传目录需取消注释
anon_other_write_enableYES # 允许删除、重命名、覆盖等操作需要新增
anon_root/var/ftp/ # 允许匿名用户上传目录需要新增编辑完成后重启vsftpd服务关闭防火墙设置执行模式为宽容模式
systemctl restart vsftpd
systemctl stop firewalld
setenforce 0注意setenforce 0 这个 Linux 命令的作用是将 SELinux (Security-Enhanced Linux) 的执行模式设置为宽容模式Permissive mode。
Enforcing Mode强制模式SELinux 完全启用并且会强制执行所有的安全策略规则。任何违反策略的行为都会被拒绝并记录在日志中。Permissive Mode宽容模式SELinux 启用但是不会强制执行策略规则。虽然会检查所有安全策略规则但是对于违反策略的行为只会记录日志而不会阻止操作。 Disabled禁用SELinux 完全不工作。
当你运行 setenforce 0 命令时SELinux 会进入 Permissive 模式在这种模式下你可以观察到哪些操作会被 SELinux 阻止但实际操作还是会继续执行。这对于调试 SELinux 的策略或者查看是否有 SELinux 引起的问题是非常有用的。
需要注意的是更改 SELinux 的模式通常需要管理员权限。此外对于系统的安全性来说运行在 Enforcing 模式下比运行在 Permissive 或 Disabled 模式下更安全。如果你不确定 SELinux 对你的系统的影响请谨慎操作。
我们上面配置匿名用户的访问目录为 /var/ftp,我们在此目录中随意新增一个jj.xx文件,然后使用windows客户端进行连接 在cmd中进行客户端匿名连接使用anonymous/ftp用户登录密码为空则可以直接登录观察到jj.xx文件存在于配置的目录中 使用get 以及 put 命令进行文件传输下载以及上传操作
get jj.xx
put jj2.xx安全隐患匿名用户权限过高可靠性低。实际生产过程中都会禁止匿名用户登录开始配置
vim /etc/vsftpd/vsftpd.conf
local_enableYes # 启用本地用户
anonymous_enableNO # 关闭匿名用户访问
write_enableYES # 开放服务器的写权限若要上传必须开启
local_umask077 # 可设置仅宿主用户拥有被上传的文件的权限
chroot_local_userYES # 将本地用户限制在其主目录内。这意味着当本地用户登录 FTP 服务器后他们只能访问其主目录及其子目录不能访问其他目录
allow_writeable_chrootYES # 允许在 chroot 环境下的目录具有写入权限。如果设置了 chroot_local_userYES那么默认情况下用户的主目录通常是只读的。此选项允许用户在他们的主目录内进行写入操作
local_root/var/ftp/root # 指定本地用户的根目录。在这个例子中所有本地用户的 FTP 访问都将被限制在 /var/ftp/root 目录内。
userlist_denyNO # 当userlist_denyNO时用户列表中的用户将被允许登录FTP服务器。YES则相反无法登录服务器配置之后我们修改 user_list文件 在最后添加可以登录ftp的用户信息此处我们添加risk风险用户 添加之后重启vsftpd服务
systemctl restart vsftpd我们再使用risk用户进行登录进行尝试
3.java客户端连接ftp测试
我们在服务器上随意添加一个目录以及文件具体信息如下 我们使用java客户端进行连接我们首先导入使用的hutool以及ftp包信息
!-- ftp上传下载--
dependencygroupIdcommons-net/groupIdartifactIdcommons-net/artifactIdversion3.7/version
/dependency
dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.5.7/version
/dependency具体代码部分为
package cn.git.ftp;import cn.hutool.extra.ftp.Ftp;import java.io.File;/*** description: ftp连接测试* program: bank-credit-sy* author: lixuchun* create: 2024-05-04*/
public class FTPTest {public static void main(String[] args) {// ftp连接信息Ftp ftp new Ftp(192.168.138.129, 21, risk, 101022li);File file new File(D:\\test\\core_2024-09-04.txt);// 配置目录需要配置相对路径相对于ftp服务器配置的根目录当前我配置的为 /var/ftp/root// 实际最后获取文件真实地址为 /var/ftp/root/cus/local/batch/core/core_2024-09-04.txtftp.download(/cus/local/batch/core/core_2024-09-04.txt, file);// 或者修改工作目录再次进行下载ftp.cd(/cus/local/batch/core);ftp.download(core_2024-09-04.txt, file);// 修改工作目录上传文件File file2 new File(D:\\test\\local_20240829154850006b2dx.txt);ftp.cd(/COMS);ftp.upload(./, file2);}
}