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.系统呈现
查看历史操作记录以及正在执行中的任务
远程查看已经上报到服务器上的音视频文件,并支持预览与下载