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

虚拟机ftp安装

# 查看系统版本的命令:
cat /etc/redhat-release
# 输出:Red Hat Enterprise Linux Server release 7.9 (Maipo)

# 查看系统位数
uname -m
输出 x86_64 → 64 位系统,(本地RH是这个)
输出 i686 / i386 → 32 位系统

journalctl -xe
------------------------------------------------------配置源
# 修复 RHEL 7.9 的 yum 源(解决 “找不到 vsftpd”)
# 1. 备份原有源文件
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/

# 2. 下载阿里云RHEL 7兼容源(无需注册,直接用)
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 3. 修改源文件适配RHEL 7(替换$releasever为7)
sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo

# 4. 清理并重建yum缓存
yum clean all
yum makecache

# 验证源是否生效(能搜到 vsftpd 则成功)
yum search vsftpd

# 正常输出:
========================= N/S matched: vsftpd =========================
vsftpd.x86_64 : Very Secure Ftp Daemon

------------------------------------------------------离线包下载

# 网站下载地址:https://pkgs.org/download/vsftpd
# 下载:vsftpd-3.0.2-28.el7.x86_64.rpm

#在线下载包到指定服务器位置
mkdir -p /opt/vsftpd_offline
cd /opt/vsftpd_offline

# 核心命令:下载vsftpd及所有依赖到当前目录,不安装
#--downloadonly:仅下载包,不执行安装;
#--downloaddir=.:把包下载到当前目录(/opt/vsftpd_offline);
yum install -y vsftpd --downloadonly --downloaddir=.

# 查看下载的所有rpm包
ls -l /opt/vsftpd_offline/

# 打包下载的包(方便传输)
cd /opt
tar -zcvf vsftpd_offline.tar.gz vsftpd_offline/

# 2. 传输到离线服务器(U盘/临时scp)
# scp /opt/vsftpd_offline.tar.gz root@离线服务器IP:/opt/

------------------------------------------------------离线包安装
# 离线服务器上操作
cd /opt
tar -zxvf vsftpd_offline.tar.gz
cd vsftpd_offline

# 批量安装所有包(解决依赖)
# 方式1:用rpm批量安装(推荐,按依赖顺序)
rpm -ivh --replacefiles *.rpm

# 方式2:用yum本地安装(更智能,自动处理依赖顺序)
yum localinstall -y *.rpm

# 检查vsftpd版本
vsftpd -v

# 启动服务
systemctl start vsftpd
# 设置开机自启动
systemctl enable vsftpd

# 检查服务状态
systemctl status vsftpd

# 查看vsftpd的所有依赖
yum deplist vsftpd

# 2. 查看是否开机启动:
systemctl is-enabled vsftpd.service

# 查看开机启动服务列表:
systemctl list-unit-files|grep enabled
# 查看启动失败的服务列表:
systemctl --failed

# 3. 防火墙设置
# 查看防火墙状态
systemctl status firewalld.service
# 关闭防火墙
systemctl stop firewalld.service

# 防火墙开放端口:暂时开放
firewall-cmd --add-service=ftp
# 永久开放
firewall-cmd --add-service=ftp --permanent
# 使配置生效
firewall-cmd --reload
# 查看服务
firewall-cmd --list-service

------------------------------------------------------ftp配置,vsftp.conf配置
# 4. vsftp.conf配置,查看原始配置
cat /etc/vsftpd/vsftpd.conf |grep -v ^#

# 1.配置前先备份:
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup
# 2.编辑内容
vi /etc/vsftpd/vsftpd.conf


# 5. vsftpd.conf内容修改为如下:

#设定不允许匿名访问
anonymous_enable=NO
#设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
#记录上传下载文件的日志
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=ftp
#日志记录文件位置
xferlog_file=/var/log/vsftpd.log
#格式化日志
xferlog_std_format=YES
#设定支持ASCII模式的上传和下载功能
ascii_upload_enable=YES
ascii_download_enable=YES

#使用户不能离开主目录
chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list

ls_recurse_enable=YES
#监听IPv4,sockets
listen=YES
#注释IPv6,sockets监听
#listen_ipv6=YES

#PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证
pam_service_name=vsftpd

userlist_enable=YES
userlist_deny=YES
#/etc/vsftpd/user_list中的用户禁止登录ftp
#如果只配置userlist_enable=YES,有可能出现错误“530 Permission denied”,因此加上如下配置
userlist_file=/etc/vsftpd/user_list
tcp_wrappers=YES

#设定启用虚拟用户功能
guest_enable=YES
#指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了
guest_username=ftp
#设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS,FTP服务文件(配置文件名=虚拟用户名)
user_config_dir=/etc/vsftpd/vuser_conf

pasv_min_port=61001
pasv_max_port=62000

#文件上传下载权限设置
allow_writeable_chroot=YES
anon_umask=022
file_open_mode=777

#虚拟用户和本地用户有相同的权限
virtual_use_local_privs=YES


## 介绍:
anonymous_enable:禁止匿名访问(NO)是安全最佳实践,如需临时开启,需确保/var/ftp目录权限为root:root
chroot_local_user:限制用户只能访问家目录(如/home/xxx),防止用户遍历系统目录
pasv_address:必须填写服务器的实际 IP(内网 / 公网),否则客户端被动模式下无法连接
pasv_min/max_port:需在防火墙开放 40000-40010 端口(下面会讲)

------------------------------------------------------ftp配置,配置vsftpd文件
# 6. 配置vsftpd文件
# 备份vsftpd文件
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup
# 编辑vsftpd文件
vi /etc/pam.d/vsftpd

# 修改内容为如下:

##1. 查看系统版本号
getconf LONG_BIT

#系统为32位的
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required pam_userdb.so db=/etc/vsftpd/vuser_passwd
#系统为64位的
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd

------------------------------------------------------重启服务
systemctl restart vsftpd.service
------------------------------------------------------创建虚拟用户

# 1.创建chroot list
touch /etc/vsftpd/chroot_list
# 2.将vftpd.conf配置文件中的guest_username
echo ftp >> /etc/vsftpd/chroot_list
# 3.创建用户密码文件,并写入内容
touch /etc/vsftpd/vuser_passwd.txt
vi /etc/vsftpd/vuser_passwd.txt
##注意奇行是用户名,偶行是密码
ftp1
ftp1
# 多个用户:ftp2
# 多个用户密码:ftp2PWD

# 4.生成虚拟用户认证的db文件
# 如果没有db4需要先进行安装。安装Berkeley DB工具:
yum install db4 db4-utils
# 5.生成虚拟用户认证的db文件,每次新加用户重新执行
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
chmod 600 /etc/vsftpd/vuser_passwd.db

# 5. 创建虚拟用户主目录及配置文件
# 创建虚拟用户根目录(建议与本地用户 ftp 分离,如 /data/ftp)
mkdir -p /data/ftp/ftp1
#多个用户目录: mkdir -p /data/ftp/ftp2

# 设置目录权限:所有者应为映射的本地用户(ftp),权限 755 或 750
chown -R ftp:ftp /data/ftp
chmod -R 755 /data/ftp

# 创建虚拟用户个性化配置文件
mkdir /etc/vsftpd/vuser_conf
vi /etc/vsftpd/vuser_conf/ftp1

# ftp1内容如下:

#虚拟用户根目录,根据实际情况修改(如果没有需要创建)。该目录必须要有读写权限 chmod -R 777 目录。
local_root=/data/ftp/ftp1
# 允许写操作
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
-----------------------------关键点:
配置文件名必须与虚拟用户名一致(如 ftp1)。
local_root 目录必须存在且对映射用户(ftp)可读可执行。
local_root 目录(如 /data/ftp/ftp1)的所有者应为 ftp 用户(映射用户),否则虚拟用户无法写入。
父目录(如 /data/ftp)也应为 ftp 所有,且权限至少为 755(即 drwxr-xr-x)。
如果希望虚拟用户能上传文件,local_root 目录本身不需要给写权限,而是通过 anon_upload_enable=YES 等选项控制,但目录本身必须允许 ftp 用户写入。更安全的做法是:
chown ftp:ftp /data/ftp/ftp1
chmod 755 /data/ftp/ftp1 # 目录本身 755 不允许写,但内部文件可写
# 然后在 ftp1 配置中指定上传目录或利用子目录

# 重启 vsftpd 并测试
systemctl restart vsftpd
journalctl -u vsftpd -f # 查看实时日志

# 用 FTP 客户端测试即可
用户名跟密码都是ftp1

http://www.jsqmd.com/news/635081/

相关文章:

  • 建筑热成像检测数据集 建筑物表面缺陷图像识别 建筑外墙保温缺陷检测、管道热损失识别 建筑物表面温度识别第10357期(代码+数据集+模型+界面)
  • 生成式 AI 知识创造 ROI 指标有哪些 如何量化效果?
  • HarmonyOS在语文教学中的应用-8. 古诗配乐朗读《静夜思》
  • LangChain4j+SpringBoot 实战:构建企业级智能知识库问答系统
  • Python中的函数及变量
  • 2026 金融科技公司数据 API 解决方案:MCP Agent
  • gte-base-zh快速上手:Xinference框架下的文本嵌入模型部署实战
  • 自我规范手册
  • 还在手动降重到凌晨?你的同学早就用这些神器轻松搞定了
  • OpenFace 2.2.0实战:4大核心功能深度解析与高效应用指南
  • 绿联NAS小白也能搞定:5分钟用Docker部署VoceChat私人聊天室(附常见问题排查)
  • SQUIRE: Leveraging Sequence-to-sequence Transformers for Robust Multi-hop Knowledge Graph Completion
  • AI时代的算法思维:大经典排序学习竞
  • 深度解析:如何构建企业级智能客服监控系统的5大核心技术
  • 如何用c# 做 mcp/ChatGPT app坛
  • 2026年贵州智能停车系统一站式解决方案深度横评|鼎鸿盛官方联系方式与避坑指南 - 精选优质企业推荐榜
  • RexUniNLU场景应用:从客服对话中自动提取用户意图与槽位
  • HDLbits实战解析系列2:Verilog模块化设计进阶与层次化实例精讲
  • 硬盘里那个仙剑的文件夹,你多久没打开过了?DOCKER部署DOS怀旧模拟器,带你秒回童年!
  • 聚焦实用需求,2026几个靠谱的健康一体机厂家推荐 - 品牌2026
  • AI 赋能 JS 逆向MCP+Skill+autoDecoder 全自动化落地加密自动Ai逆向
  • Modbus TCP vs RTU怎么选?从项目实战角度聊聊我的踩坑经验
  • 从降重到排版,这2款神器承包了我的整篇毕业论文
  • 手把手教你用C++11原子操作实现无锁队列(附compare_exchange_weak实战代码)
  • Verilog 进阶学习指南:从入门到精通的必备书单(附资源)
  • 数学周刊第15期(2026年04月07日-04月12日)
  • 2026年贵州智慧停车+安防一体化解决方案深度横评|鼎鸿盛官方联系电话与避坑指南 - 精选优质企业推荐榜
  • 别再复制粘贴了!手把手教你为STM32F103标准库工程添加printf串口打印(Keil MDK环境)
  • uni-app中H5页面通过web-view跳转小程序的完整解决方案
  • Niushop开源商城漏洞实战:从文件上传到CSRF攻击全解析