首页 > 其他分享 >Debian 12 安装vsftpd

Debian 12 安装vsftpd

时间:2024-12-06 09:54:07浏览次数:3  
标签:ftp 12 ssl sudo 端口 连接 vsftpd Debian

FTP基本概念

连接方式

FTP使用两个TCP连接,一个用于控制连接,用于传输命令和响应;另一个是数据连接,用于实际的文件上传下载的数据传输。在传输过程中,控制连接始终保持连接,而数据连接在文件传输过程中打开,传输完毕后关闭。
数据连接分为以下两种模式:

主动模式

主动模式下,客户端从任意空高位端口发起控制连接到服务器(默认21端口)请求数据传输;然后服务器从自己端口(默认20)主动建立数据连接到客户端指定的数据端口。
特点:

  • 客户端使用任意空闲的高位端口(>1024)作为数据传输端口。
  • 数据连接由服务器发起,因此,客户端防火墙需要允许服务器访问对应端口。

被动模式

被动模式下,服务器监听一个端口,当客户端通过控制连接与服务器建立连接后,服务器为数据连接分配一个数据端口(配置的端口范围内),客户端通过数据端口进行数据传输。
特点:

  • 服务器除了控制连接的端口还需要开放用于数据连接的端口。
  • 客户端主动连接到服务器提供的数据连接的端口进行数据上传。
  • 不需要服务器主动建立连接,对于防火墙和NAT环境更加友好。

加密方式

Implicit TLS/SSL

Implicit TLS/SSL模式下客户端和服务器在建立连接时立即进行TLS/SSL握手,从一开始就进行加密,没有明文通信,整个会话从一开始就进行加密保护(默认的连接端口990)。

Explicit TLS/SSL

Explicit TLS/SSL模式下, 客户端和服务器首先先建立一个普通未加密的FTP连接(默认21端口),然后由客户端通过发送Auto TLS命令请求加密,然后服务器与客户端进行TLS握手,后续的会话通过加密通道进行。

安装配置vsftpd(被动模式)

1. 安装vsftpd

sudo apt update
sudo apt install vsftpd

备份配置文件

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup

2.创建ftp用户

chroot 配置是vsftpd用来限制ftp连接只能访问特定目录的,开启chroot时,ftpuser默认被限制只能访问自己的家目录,但需要去掉用户的写权限。如果这个用户只用于FTP上传,可以这样弄;但如果用户还需要在自己的家目录做其他写操作的话,可以在家目录中重新建一个FTP用的目录,然后调整这个目录的权限作为chroot限制目录。

  • 创建用户
sudo adduser ftpuser
  • 创建ftp目录
sudo mkdir /home/ftpuser/ftp
  • 更改文件归属和权限
sudo chown nobody:nogroup /home/ftpuser/ftp
--删除写权限
sudo chmod a-w /home/ftpuser/ftp
  • 创建上传文件目录
sudo mkdir /home/ftpuser/ftp/files
sudo chown ftpuser:ftpuser /home/ftpuser/ftp/files

3.修改配置文件

配置文件位于/etc/vsftpd.conf,需要修改对应项为如下配置(默认配置文件有的需要解除注释,没有的,需要添加到文件中)

  • 禁止匿名登录
anonymous_enable=NO
  • 允许本地用户登录
local_enable=YES
  • 允许上传文件
write_enable=YES
  • 阻止访问ftp上传以外的目录
chroot_local_user=YES
  • 添加user_sub_token,以插入用户名到ftp的访问目录local_root中,后续添加其他ftp用户时只需要创建对应目录即可
user_sub_token=$USER
local_root=/home/$USER/ftp
  • 被动模式下,添加数据端口范围,需要保证足够的可用连接
pasv_min_port=40000
pasv_max_port=50000
  • 为了便于管理,设置用户只有被添加到vsftpd.userlist中才能进行访问
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

然后保存配置文件。

  • 添加vsftpd.userlist文件,并添加ftpuser
echo "ftpuser" | sudo tee -a /etc/vsftpd.userlist
  • 重启vsftpd服务
sudo systemctl restart vsftpd

4.放行ftp端口

最后需要在防火墙中放行ftp的连接端口和数据端口;如果使用的是UFW工具,执行以下命令开启端口:

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp

如果开启TLS,也需要放行对应的端口;最后,可通过sudo ufw status 命令检查防火墙状态。

5.测试ftp

  • 登录ftp
ftp -p ip

--output
Connected to ip
220 (vsFTPd 3.0.3)
Name (ip:default): ftpuser
331 Please specify the password.
Password: password
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
  • 测试下载权限
-- 创建测试文件
echo "vsftpd test file" | sudo tee /home/ftpuser/ftp/files/test.txt
cd files
get test.txt
  • 测试写权限
put test.txt upload.txt

配置SSL安全传输

  • 创建ssl 证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

/etc/vsftpd.conf 配置文件中添加如下配置:

  • 开启ssl,并配置证书
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
  • 设置使用TLS
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
  • 关闭连接重用(可选,开启这个部分客户端无法正常连接),并设置使用高级加密套件(key长度大于等于128bit)
require_ssl_reuse=NO
ssl_ciphers=HIGH
  • 最终ssl部分配置为以下内容
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
  • 重启vsftp服务
sudo systemctl restart vsftpd

参考内容

How To Set Up vsftpd for a User’s Directory on Debian 10
Configuring a Secure FTP Server with VSFTPD on Debian 12
How to Configure a VSFTP Server to Run in Passive Mode on Ubuntu 20.04 and Debian 11
看懂FTP的主动和被动模式

标签:ftp,12,ssl,sudo,端口,连接,vsftpd,Debian
From: https://www.cnblogs.com/dao-/p/18589987

相关文章

  • DeBian系统部署思源笔记
    引言该过程参考于以下文章:思源笔记docker部署解决docker镜像仓库下载慢安装docker检查docker是否安装检查服务器系统内是否安装了docker:docker--version若未安装docker,则显示如下命令:-bash:docker:commandnotfound安装docker操作切换清华镜像源:sudo......
  • 深度学习-1205(全连接层,多层感知机)
    在之前的学习中我已经学习了什么是梯度下降,又如何利用pytorch进行线性回归,找到最合适的表达函数,在本内容中,尝试利用神经网络工具箱nn来进行神经网络的连接。torch.nn是专门为深度学习设计的模块,其核心数据结构是Module,是一个抽象的概念,既可以表示神经网络中的某个层(alyer),也......
  • 天天 AI-241205:今日热点- OpenAI放王炸!Sora、满血o1,连续12天发布最新技术!
    2AGI.NET|探索AI无限潜力,2AGI为您带来最前沿资讯。OpenAI放王炸!Sora、满血o1,连续12天发布最新技术!OpenAI将进行为期12天的技术分享活动,每天发布最新技术或产品演示,包括文生视频模型Sora、增强的ChatGPT功能、GPT-4o图像等,引发科技界和AI社区的广泛关注和期待。来源 ......
  • 2024.12.5——攻防世界xff_referer
    知识点:XFFreferer一、知识点详情1.XFF(1)介绍X-Forwarded-For(简称XFF)是一个HTTP请求头部字段,它用于表示HTTP请求的客户端IP地址,尤其是当请求通过一个中介代理或负载均衡器时。该字段的值通常是一个逗号分隔的IP地址列表,其中第一个IP地址是最初连接到中介代理或......
  • OpenAI圣诞大礼包连更12天!满血版o1、Sora确认亮相
    【AGI舰长导读】重磅!满血版o1震撼上线了!12月5日起,OpenAI将开始连续12天的圣诞马拉松。根据外媒TheVerge的内部消息,满血版o1和Sora会正式发布,网友们沸腾了。满血版o1首次将多模态和新的推理范式结合起来,更智能、更快速。同时推出的还有200美元/月的专业版ChatGPTPro。奥特曼......
  • 20241205:3001. 捕获黑皇后需要的最少移动次数
    现有一个下标从 1 开始的 8x8 棋盘,上面有 3 枚棋子。给你 6 个整数 a 、b 、c 、d 、e 和 f ,其中:(a,b) 表示白色车的位置。(c,d) 表示白色象的位置。(e,f) 表示黑皇后的位置。假定你只能移动白色棋子,返回捕获黑皇后所需的最少移动次数。......
  • 24.12.5-----day01-回文数
    day01--12.25回文数题解classSolution{publicbooleanisPalindrome(intx){intnum=0;inttemp=x;if(x>=0){while(x!=0){//从右往左获取每一个数字intge=x%10;......
  • CCF-CSP真题 《201412_2_Z字形扫描》Python思路题解
    题目描述:在图像编码的算法中,需要将一个给定的方形矩阵进行 Z 字形扫描(ZigzagScan)。给定一个 n×n的矩阵,Z字形扫描的过程如下图所示:对于下面的 4×4 的矩阵,1539375694647313对其进行 Z 字形扫描后得到长度为 16 的序列:1539739547......
  • 2023年12月GESPC++二级真题解析
    一、单选题(每题2分,共30分)题目123456789101112131415答案CADDDADCDBCDCBB1.以下不可以做为C++变量的是()。A.FiveStarB.fiveStarC.5StarD.Star5【答案】C【考纲知识点】变量的定义与使用(二级考纲知识点范畴),具体涉及到变量名的命名规则。在C++语言中,变量名有严格......
  • window.crypto.subtle 实现AES-128对称加密算法
    window.crypto.subtle支持AES-128对称加密算法。AES(高级加密标准)是一种广泛使用的对称加密算法,它有三种密钥长度:128位、192位和256位。在WebCryptoAPI中,你可以选择不同的密钥长度来生成AES密钥。以下是一个使用AES-128-CBC模式的加密和解密示例:asyncfunctiongenerateKey()......