当前位置: 首页 > java >正文

ubuntu 搭建FTP服务,接收部标机历史音视频上报服务器

1.安装vsftpd

1.1.安装命令

sudo apt update
sudo apt install vsftpd

1.2.备份原始配置文件

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak

1.3.配置 vsftpd

编辑配置文件 /etc/vsftpd.conf

sudo vim /etc/vsftpd.conf

将以下参数修改为对应值:

# 基本设置
anonymous_enable=NO           # 禁用匿名登录
local_enable=YES              # 允许本地用户登录
write_enable=YES              # 启用写入权限
local_umask=022               # 设置文件创建掩码
dirmessage_enable=YES         # 启用目录消息
use_localtime=YES             # 使用本地时间
xferlog_enable=YES            # 启用传输日志
connect_from_port_20=YES      # 启用端口 20 用于数据传输# 增强安全性
chroot_local_user=YES         # 限制用户在其主目录内
allow_writeable_chroot=YES    # 允许可写的 chroot 目录
pasv_enable=YES               # 启用被动模式
pasv_min_port=40000           # 被动模式最小端口
pasv_max_port=40100           # 被动模式最大端口
ssl_enable=YES                # 启用 SSL/TLS
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

1.4.创建 FTP 用户

# 创建用户并设置密码
sudo adduser ftpuser
# 按照提示设置密码和其他信息# 创建 FTP 目录
sudo mkdir -p /home/ftpuser/ftp/files
sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp
sudo chmod -R 755 /home/ftpuser/ftp

1.5. 配置防火墙

# 开放 FTP 端口
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:40100/tcp  # 被动模式端口范围
sudo ufw allow OpenSSH          # 确保 SSH 仍可访问
sudo ufw enable                  # 启用防火墙

1.6. 重启 vsftpd 服务

sudo systemctl restart vsftpd
sudo systemctl enable vsftpd    # 设置开机自启

1.7.验证安装

可以使用命令行工具或图形化客户端验证 FTP 服务器是否正常工作:

 2.常见问题及处理

2.1.限制FTP账户只能访问当前主目录及其下级目录

2.1.1. 启用 chroot 限制

编辑 /etc/vsftpd.conf,确保以下参数设置正确:

sudo vim /etc/vsftpd.conf

修改下面的配置 

chroot_local_user=YES        # 限制所有本地用户在其主目录内
allow_writeable_chroot=YES   # 允许主目录可写(需 vsftpd 3.0.2+ 版本)

说明

  • chroot_local_user=YES:将所有本地用户限制在其主目录中(类似沙盒环境)。
  • allow_writeable_chroot=YES:若用户主目录可写(如 755 或 775 权限),需启用此选项,否则 FTP 连接会被拒绝。

2.1.2. 配置用户主目录权限

确保用户主目录不可写(父目录权限为 755),但子目录可写(如 775

# 假设用户主目录为 /home/ftpuser
sudo chmod 755 /home/ftpuser        # 主目录不可写(防止跳出)
sudo mkdir /home/ftpuser/files      # 创建可写子目录
sudo chmod 775 /home/ftpuser/files  # 赋予用户组写权限
sudo chown ftpuser:ftpuser /home/ftpuser/files  # 设置归属

2.1.3.重启 vsftpd 服务

sudo systemctl restart vsftpd

2.2.chroot_local_user=YES设置这个后xftp无法连接

当设置 chroot_local_user=YES 后无法使用 Xftp 连接,通常是由于 vsftpd 的 chroot 限制与用户主目录权限配置冲突导致的。

2.2.1. 核心问题分析

vsftpd 默认要求被 chroot 的用户主目录不可写(权限 755),否则会拒绝连接(错误码 500)。若你的用户主目录需要可写(如上传文件),需额外配置:

# 编辑 /etc/vsftpd.conf
allow_writeable_chroot=YES  # 允许被 chroot 的目录可写(需 vsftpd 3.0.2+ 版本)

2.2.2. 检查 vsftpd 版本

确认你的 vsftpd 版本是否支持 allow_writeable_chroot

vsftpd -v
# 若版本 < 3.0.2,需升级 vsftpd 或调整目录结构

2.2.3. 重启服务

sudo systemctl restart vsftpd

3.部标机上报历史音视频到服务器

3.1.上报音视频命令0x9206

 指令示例解释:

7E
9206
006A
018026966027
1835
0E --服务器长度,14个字节
3132342E3232332E36302E323334 --服务器的地址124.223.60.234
0015 --服务器端口号21
08 --用户名长度,8个字节
FFFFFFFFFFFFFFFF --这里我用FF替代了,注意要输入自己实际的FTP用户名
08 --密码长度,8个字节
FFFFFFFFFFFFFFFF --这里我用FF替代了,注意要输入自己实际的FTP密码
2D --文件上传目录长度,45个字节
2F31383032363936363032372F3231453937313632363544413439383342313131373145424235314339363339 --/18026966027/21E9716265DA4983B11171EBB51C9639,注意这是在你的FTP主目录上追加的
01 --视频通道号,01
250521141359 --视频的开始时间
250521151644 --视频的结束时间
0000000000000000 --报警标志
00 --默认音视频
00 --默认主码流或者子码流
00 --默认主存储器或者灾备存储器
07 --任务执行条件,默认全开
AB
7E

3.2.音视频控制命令0x9207

因为比较简单,这里就不进行拆包分析了。

3.3.上报完毕,设备主动发送命令0x1206

4.系统呈现

查看历史操作记录以及正在执行中的任务

远程查看已经上报到服务器上的音视频文件,并支持预览与下载

http://www.xdnf.cn/news/7807.html

相关文章:

  • 线性表数据结构-堆栈
  • 网络安全之APP渗透测试总结
  • Vue3 组件之间传值
  • React深度解析:Hooks体系与Redux Toolkit现代状态管理实践
  • linux 学习之位图(bitmap)数据结构
  • 宝塔安装的 MySQL 无法连接的情况及解决方案
  • StepX-Edit:一个通用图像编辑框架——论文阅读笔记
  • 计算机网络相关面试题
  • 安全可控的AI底座:灯塔大模型应用开发平台全面实现国产信创兼容适配认证
  • 数据被泄露了怎么办?
  • 视觉生成新突破!仅0.5B参数,SimpleAR解锁预训练、SFT、RL全能模式
  • 【MC】红石比较器
  • Spring Boot 项目中 Redis 存储 Session 对象序列化处理
  • 面向未来,遨游推出5G-A智能防爆对讲机等系列终端
  • Qt功能区:Ribbon控件
  • BEVDet
  • opencv_version_win32
  • Leetcode-2 最小偶倍数
  • pikachu靶场 暴力破解
  • 服务器安装xfce桌面环境并通过浏览器操控
  • SpringBoot外部化配置
  • NIFI的处理器:ExecuteGroovyScript 2.4.0
  • 第14天-Matplotlib实现数据可视化
  • ollama使用gpu运行大模型
  • Xilinx 7Series\UltraScale 在线升级FLASH STARTUPE2和STARTUPE3使用
  • Java 定时任务中Cron 表达式与固定频率调度的区别及使用场景
  • 唯创安全优化纸业车间安全环境:门口盲区预警报警器的应用与成效
  • STL中的Vector(顺序表)
  • RabbitMQ——消息确认
  • NLP学习路线图(三): 微积分(梯度、导数等)