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

news2025/5/23 7:16:41

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.coloradmin.cn/o/2383712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一、内存调优

一、内存调优 什么是内存泄漏 监控Java内存的常用工具 内存泄露的常见场景 内存泄露的解决方案 内存泄露与内存溢出的区别 内存泄露&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&…

Java的Filter与Spring的Interceptor的比较

一、技术规范与框架依赖 维度FilterInterceptor所属规范Servlet 规范&#xff08;Java EE 标准组件&#xff09;Spring MVC 框架组件&#xff08;非 Java EE 标准&#xff09;框架依赖不依赖 Spring&#xff0c;仅需 Servlet 容器&#xff08;如 Tomcat&#xff09;依赖 Sprin…

WPF···

设置启动页 默认最后一个窗口关闭,程序退出,可以设置 修改窗体的icon图标 修改项目exe图标 双击项目名会看到代码 其他 在A窗体点击按钮打开B窗体,在B窗体设置WindowStartupLocation=“CenterOwner” 在A窗体的代码设置 B.Owner = this; B.Show(); B窗体生成在A窗体中间…

微服务架构中的多进程通信--内存池、共享内存、socket

目录 1 引言 2 整体架构简介 3 疑问 3.1 我们的共享内存消息机制是用的posix还是system V 3.2 rmmt中&#xff0c;不同线程之间的比如访问同一个内存&#xff0c;用的什么锁控制的 3.3 疑问&#xff1a;假如一个进程发送给了另外两个进程&#xff0c;然后另外两个进程都同…

电脑中所有word文件图标变白怎么恢复

电脑中的word文件图标变白&#xff0c;如下图所示&#xff1a; 解决方法&#xff1a; 1.winR-->在弹出的运行窗口中输入“regedit”(如下图所示)&#xff0c;点击确定&#xff1a; 2.按照路径“计算机\HKEY_CLASSES_ROOT\Word.Document.12\DefaultIcon”去找到“&#xff0…

RK3568 OH5.1 源码编译及问题

安装编译器和二进制工具 在源码根目录下执行prebuilts脚本&#xff0c;安装编译器及二进制工具。 bash build/prebuilts_download.sh在源码根目录执行如下指令安装hb编译工具&#xff1a; python3 -m pip install --user build/hb使用build.sh脚本编译源码 进入源码根目录&…

Qt5、C++11 获取wifi列表与wifi连接

一、获取wifi列表 .h 文件内容 #include <QWidget> #include <QVBoxLayout> #include <QPushButton> #include <QCheckBox> #include <QListWidget>class Setting : public QWidget {Q_OBJECT public:explicit Setting(QWidget *parent nul…

【KWDB 2025 创作者计划】_从部署开始了解KWDB

一、概述 KaiwuDB 是一款面向 AIoT 场景的分布式、多模融合、支持原生 AI 的数据库产品&#xff0c;支持同一实例同时建立时序库和关系库并融合处理多模数据&#xff0c;具备时序数据高效处理能力&#xff0c;具有稳定安全、高可用、易运维等特点。面向工业物联网、数字能源、…

高等数学-微分

一、一元函数&#xff1a; 在实际应用中&#xff0c;经常需要近似计算函数yf(x)的增量Δyf(x)-f(x0)f(x0Δx)-f(x0),其中一种近似称为函数的微分。 定义&#xff1a;若函数yf(x)在点x0处的增量Δy可表达为自变量增量Δx的线性函数AΔx和Δx的高阶无穷小量之和&#xff0c;即Δ…

有没有开源的企业网盘,是否适合企业使用?

开源选项丰富、灵活定制能力强、需要额外运维投入、适合特定场景但不一定适合所有企业&#xff0c;是开源企业网盘的主要特征。从表面看&#xff0c;开源网盘往往具有免费或低成本优势&#xff0c;但企业要投入一定的人力与技术资源来完成安装、维护与升级&#xff0c;从而保障…

基于系统整合的WordPress个性化配置方法深度解析:从需求分析到实现过程

文章目录 引言一、理解WordPress页面与文章的区别二、主题与模板层级&#xff1a;自定义的基础三、自定义页面模板&#xff1a;打造专属页面风格四、自定义文章模板&#xff1a;打造个性化文章呈现五、使用自定义字段和元数据&#xff1a;增强内容灵活性六、利用WordPress钩子&…

使用pm2 部署react+nextjs项目到服务器

记录一下 next.config.js中&#xff1a; output: standalone,package.json配置&#xff1a; "scripts": {"dev": "cross-env NODE_OPTIONS--inspect next dev","build": "next build","start": "cp -r .nex…

JVM常量池(class文件常量池,运行时常量池,字符串常量池)

文章目录 问题JVM运行时数据区JVM中的常量池Class文件常量池运行时常量池字符串常量池创建了几个对象String的定义intern()问题 超过1W字深度剖析JVM常量池&#xff08;全网最详细最有深度&#xff09; - 跟着Mic学架构 - 博客园 问题 jdk1.8之后 元空间是独立存在的&#xf…

我爱学算法之—— 二分查找(中)

一、搜索插入位置 题目解析 这道题&#xff0c;给定一个数组nums和一个目标值target&#xff0c;让我们在数组nums中找到目标值&#xff1b;如果目标值存在就返回它的下标&#xff0c;如果不存在就返回数target被顺序插入的位置下标。 算法思路 这道题&#xff0c;我们可以使…

军事目标系列之迷彩作战人员检测数据集VOC+YOLO格式2755张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2755 标注数量(xml文件个数)&#xff1a;2755 标注数量(txt文件个数)&#xff1a;2755 …

node12.22.12在nvm中安装

1、安装nvm 官网&#xff1a;https://nvm.uihtm.com/ 下载&#xff0c;安装 nvm -v 1.2.22、通过 nvm install 12.22.12 安装报错&#xff0c;找不到此版本 通过下载 https://nodejs.org/zh-cn/downloadzip文件 解压 3、查看nvm 安装路径 nvm root4、在目录下新建文件夹 v…

【生态信息】开源软件全方位解析

开源软件(0pen Source Software&#xff0c;0ss)是指其源代码可以公开发布、查看、使用和修改的软件。这一概念的核心在于开放性和共享性&#xff0c;允许开发者自由地使用、修改、分发以及改进软件。开源软件通常遵循特定的开源许可证&#xff0c;这些许可证确保了软件的自由使…

FastAPI在 Nginx 和 Docker 环境中的部署

目录 实现示例1. 项目结构2. FastAPI 应用 (app/main.py)3. 依赖文件 (app/requirements.txt)4. Dockerfile5. Nginx 配置 (nginx/nginx.conf)6. Docker Compose 配置 (docker-compose.yml) 使用方法修改代码后更新 实现示例 接下来创建一个简单的示例项目&#xff0c;展示如何…

计算机网络相关面试题

一、HTTP1.1和HTTP2的区别 HTTP/1&#xff08;主要指 HTTP/1.1&#xff09;和 HTTP/2 是 Web 协议发展中的两个重要版本&#xff0c;二者在性能、协议机制和功能特性上有显著差异。以下从多个维度对比分析&#xff0c;并结合具体案例说明&#xff1a; 一、连接与请求处理方式 1…

根据当前日期计算并选取上一个月和上一个季度的日期范围,用于日期控件的快捷选取功能

1.选择月份范围 代码如下&#xff1a; <el-date-picker v-model"value" type"monthrange" align"right" unlink-panels range-separator"至"start-placeholder"开始月份" end-placeholder"结束月份" :picker-…