FTP、SFTP安装,整合Springboot教程


前言

在一般项目开发工程中,我们大多数会使用文件服务,比如上传图片、各种文档之类的。
供我们选择的方式很多,比如第一种直接通过Java的File对象存储在本地,然后部署时候修改linux环境下的路径,这种方式简单粗暴;

第二种就是在连网的情况下,直接使用OSS对象存储,比如阿里云OSS对象存储,当然这种是要花钱的,如果不花钱的话,
也可以自己本地搭建一个OSS本地对象存储;

第三种就是我们今天要说的,在Linux服务器上面通过ftp服务、sftp服务搭建一个文件服务,其实本质上第一种类似,直接读取磁盘上面的文件;然后我们通过springboot程序来读取操作;


一、FTP、SFTP是什么?

1.FTP

  • FTP 是不安全的,因为它在传输过程中使用明文传输密码和数据,容易受到窃听和攻击。
  • FTP 默认使用端口21进行控制连接,和端口20进行数据连接。
  • FTP 提供了基本的文件上传和下载功能,以及简单的目录操作。
  • 适合于内部网络环境或者传输不敏感的数据,对安全性要求不高的场景。
  • FTP有主动和被动模式两种,简单讲,主动就是客户端随机开了端口,然后服务器端主动连接,然后传输数据;被动就是服务器先开了一个 大于 1024 小于65535的端口,然后客户主动去连接,然后传输数据;至于更详细的参考其它说明文章。

2.SFTP

  • SFTP 基于SSH协议,所有的数据传输都被加密,包括身份验证信息和传输的文件内容,因此提供了更高的安全性。
  • SFTP 默认使用SSH的端口(通常是22),只需要一个端口来完成所有的传输。
  • SFTP 不仅支持文件传输,还可以进行更多高级的文件管理操作,比如权限管理和符号链接的操作。
  • 适合于需要保证数据传输安全性的场景,特别是在Internet环境中传输敏感数据或者需要进行复杂文件管理的情况下。
    总结来说,选择使用FTP还是SFTP取决于你的具体需求,特别是对于数据安全性的要求。如果需要更高的安全性和更丰富的功能,建议选择SFTP。

二、安装FTP

1.安装vsftp服务

yum -y install vsftpd

服务器需要联网。
安装FTP

2.启动服务并设置开机自启动

systemctl start vsftpd            # 启动vsftpd
systemctl enable vsftpd.service   # 设置开机自启动

3.开放防火墙和SELinux

主要是为了减少麻烦的产生,关闭防火墙和selinux,等搭建成功可以开启防火墙和相应的端口。

systemctl stop firewalld.service      #关闭防火墙
systemctl disable firewalld.service   #并设置开机自启
 
# 修改 /etc/selinux/config 将SELINUX=enforcing改为disabled
vim /etc/selinux/config
setenforce 0    #使修改后的配置文件生效

4.创建用户和FTP目录

ftpuser1和ftpuser1为该FTP服务创建的用户,而/web/www/html作为两个用户的访问目录(限制)。

创建文件目录并配置权限:

mkdir -p /web/www/html    
chmod -R 775 /web/www/html

创建ftp组以及用户:

我们创建的team1和team2用户,为了系统安全考虑,当然不希望能让这两个账号的登录系统,要使得FTP组的用户不能的登录系统,则需要为FTP用户统一建立在不能登录系统的shell中,就拿 /sbin/nologin 来实现;
-g:指定所属组
-d:指定家目录
-M:不创建家目录
-s:不登录系统

#创建组ftp
groupadd ftpgroup 
 
# 创建用户
useradd -g ftpgroup -d /web/www/html -M -s /sbin/nologin ftpuser1
useradd -g ftpgroup -d /web/www/html -M -s /sbin/nologin ftpuser2
#为用户创建密码
passwd ftpuser1@123456
passwd ftpuser2@123456
 
# 修改/web/www/html目录为ftpgroup组
chown root:ftpgroup /web/www/html

4.修改vsftpd.conf文件

先将/etc/vsftpd/vsftpd.conf配置文件备份(防止后面出错后没法还原),然后进行修改:

cd /etc/vsftpd/
cp vsftpd.conf vsftpd.conf.backup
vim vsftpd.conf 

进入该配置文件后,将101、102、104行的内容去掉注释:
在这里插入图片描述
将剩下注释的内容全部删除后剩下的内容:
在这里插入图片描述

解释常用的:
anonymous_enable=YES #是否开启匿名用户,因为这里指定用户所以修改为NO
local_enable=YES #是否允许本地用户登录,默认允许
write_enable=YES #是否允许账号有写的权限
local_umask=022 :掩码
#本地用户创建文件目录都会默认777-022=755,最终文件目录的权限为755
#然而创建文件会默认666-022=644,最终创建的文件权限为644
dirmessage_enable=YES # 进入某个目录会提示
根据实验要求创建的两个用户只能在受限于/web/www/html文件目录下,跟以下两条命令的搭配效果有关:
chroot_local_user=YES
chroot_list_enable=NO # 激活chroot功能
#在文件 /etc/vsftpd/chroot_list 中列出的用户不能切换到其他目录
chroot_list_file=/etc/vsftpd/chroot_list #设置锁定用户在根目录列表的文件

添加配置文件:
除了以上的还需添加以下的配置

local_root=/web/www/html #设置本地用户的根目录
allow_writeable_chroot=YES #允许 chroot限制,否则出现连接错误。

最终文件配置信息 :
在这里插入图片描述
创建 /etc/vsftpd/chroot_list 文件:

vim /etc/vsftpd/chroot_list

添加 ftpsuer1和 ftpsuer2注意换行

5.启动FTP服务

systemctl restart vsftpd
# 在客户端上需要先安装 ftp 服务
yum -y install ftp

在这里插入图片描述

6.问题

  • 问题1、安装vsftpd时候,可能包yum源的问题,更换阿里云、或者其它的yum源即可;
  • 问题2、Security: Bad IP connecting 错误
    ftp客户端软件连接vsftpd服务报此错误,大概原因是在连接中变换了IP地址。
    解决办法:
vim /etc/vsftpd/vsftpd.conf
# 添加:
pasv_promiscuous=YES
# 保存后退出,重启 vsftpd
systemctl restart vsftpd 

pasv_promiscuous选项参数说明:
此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。
小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。
合理的用法是:在一些安全隧道配置环境下,或者更好地支持FXP时(才启用它)。

FTP模式与数据端口:

FTP 分为两类,PORT FTP和PASV FTP,PORT FTP是一般形式的FTP。这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)建立控制链接,并通过此链接进行传输操作指令。它们的区别在于使用数据传输端口(ftp- data)的方式。PORT FTP由FTP服务器指定数据传输所使用的端口,默认值为20。PASV FTP由FTP客户端决定数据传输的端口。 PASV FTP这种做法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定两者之间的数据传输端口更为方便一些。

  • 问题3: ftp登录时,解决报错530,500,421等错误
    第一步:cat /etc/passwd 查看是否是之前添加的用户,并确定是否存在。
    在这里插入图片描述
    若没有创建成功,则使用useradd -s /sbin/nologin team1等用户
    然后通过设置密码来passwd team1

第二步骤:如果报错:530 Login incorrect. Login failed.
cat /etc/passwd,查看你登陆的账户主目录和登陆shell对应的是什么,我的是/sbin/nologin
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell;
查看cat /etc/shells是否有你用户的主目录和登陆shell ,没有进行添加,保存,退出。
在这里插入图片描述
我的也是开始没有,然后添加了一行;

  • 最后一点: 一定要注意文件夹和文件得所属,一定是刚才新建得用户的,不然没有权限的错误,
    如500 OOPS: vsftpd: refusing to run with writable root inside chroot() Login failed. 或者 421 Service not available, remote server has closed connection。

二、安装SFTP

基本语法:

-c comment 指定一段注释性描述。备注文字保存在passwd的备注栏中。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户ID号,如果同时有-o选项,则可以重复使用其他用户的标识号。
-D:变更预设值。
-e:指定账号的有效期限,缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。

说明:sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值