简介:这是关于Windows 2000环境下FTP服务器与WWW服务器配置的实验资料,适合网络技术课程学生、初学者及IT运维人员参考学习。压缩包内仅含1个PDF文件,大小约1.34MB,内容完整,携带方便。已有91人学习使用。资料以实验四为主线,系统讲解IIS 5.0的安装过程,并逐步演示FTP站点MYFTPSITE与Web站点MYWEBSITE的创建、端口设置、主目录选择、访问权限配置,同时涵盖虚拟目录、默认文档、安全账号等知识点。此外,还介绍了利用FrontPage建设个人Web站点及通过HTTP访问的方法,以及FTP上传下载的常用操作。对于想要掌握Windows平台基础网络服务配置的读者,这份资源能提供从环境搭建到实际验证的完整指导,具有不错的实践参考价值。
1. 实验四不是点鼠标:FTP 服务器与 WWW 服务器的配置重点在哪
拿到文件名叫“实验四FTP服务器及WWW服务器配置分享.pdf”,十有八九是要交一份实验报告,或者是在内网搭一个“同事上传文件,客户用浏览器直接打开”的轻量发布服务。这个实验的实质不是把两个软件装上就行,而是让 FTP 服务器和 WWW 服务器在同一台机器上协同工作:FTP 负责接收文件上传,WWW 负责把文件按 HTTP 协议发布出去,两者共用一条文件目录。适合来做这个实验的人,是刚学网络服务配置的学生、要补基础的企业IT,以及看过一堆安装教程但仍说不清端口、权限、防火墙之间关系的运维新手。读完这份笔记,你会得到一条能照着复现的完整路径,而不是一堆互相矛盾的截图。
2. 准备实验环境:为什么选 vsftpd + Apache,以及装完要先确认的三件事
2.1 选型:vsftpd + Apache 是实验课的默认答案
FTP 服务器可选 vsftpd、ProFTPD、Pure-FTPd,Windows 上还有 Serv-U 和 FileZilla Server。WWW 服务器可选 Apache httpd、Nginx 以及 IIS。实验课最稳妥的组合是 vsftpd + Apache:软件包小、发行版仓库里自带、文档最全,而且两者的配置文件都集中在少数几个文件里,遇到问题容易说清楚。Nginx 做静态发布也不差,但不少实验评分点仍然以 Apache 的站点目录结构为准,所以先按 Apache 来搭没有错。
很多人问“MobaXterm 可以当成 FTP 服务器吗”,这里直接给结论:能连,不能当。MobaXterm 自带的是 SFTP 能力,走的是 SSH 的 22 端口,和实验要求的 FTP 协议是两回事。课堂实验要求 FTP 服务器监听 21 端口,并且能用 FileZilla 以主动或被动模式连上;用 MobaXterm 拖文件虽然也能传到机器里,但 vsftpd 的配置文件不会被加载,日志里也不会有记录,实验报告根本没法写。所以本实验的主角只有 vsftpd 和 Apache,其他工具只作验证手段。
2.2 安装 vsftpd 与 Apache:三条命令加一个验证请求
以下以 Ubuntu/Debian 系为例,因为实验里最常见的是这类系统。CentOS 系的包名和命令我会在参数说明里单独标注。
# 更新软件源,确保安装到仓库内的最新版本 apt update # 同时安装 FTP 服务与 Apache apt install -y vsftpd apache2 # 启动两个服务并查询状态 systemctl restart vsftpd systemctl restart apache2 systemctl status vsftpd apache2在这组命令里,apt update是刷新索引,-y是跳过安装确认。systemctl restart让服务以当前配置重新拉起;status输出里看到active (running)才算正常,如果显示failed或inactive,下一步要立刻看日志journalctl -u vsftpd -n 30。CentOS 环境把包名换成httpd,安装命令是yum install -y vsftpd httpd,启动 Apache 时是systemctl start httpd,后面所有站配置文件路径也要从/etc/apache2/换成/etc/httpd/。
装完先别急着改配置,用一条命令确认 WWW 服务已经能返回页面:
# 向本机 80 端口发 HEAD 请求,返回 200 OK 说明 Apache 正常运行 curl -I http://127.0.0.1/看到HTTP/1.1 200 OK,说明 Apache 已经起来了。这一步的意义在于把“软件安装成功”和“服务配置正确”分开,后续改 FTP 配置时如果网页打不开,才能判断问题出在谁身上。
2.3 固定 IP 与网络模式:实验开局最容易被忽略的参数
FTP 客户端和浏览器访问的都是 IP,如果虚拟机每次启动 IP 都变,FileZilla 里存的地址、浏览器收藏夹里的地址会全部失效。所以实验开始前,先明确网络模式并固定 IP。VMware 的 NAT 模式下虚拟机和宿主机在同一虚拟网段,互通没问题;桥接模式则由路由器分配 IP,其他电脑也能访问虚拟机的 FTP 和 WWW 服务。没有特殊要求就用 NAT,省去很多物理网络干扰。
# 查看当前 IP,ens33、eth0 是常见网卡名 ip addr show | grep inet # Ubuntu 的 netplan 配置示例,地址段按实际网段填写 cat /etc/netplan/01-network-manager-all.yaml配置时要注意网卡名必须和ip addr里显示的一致,MAC 地址也不能写错,否则固定 IP 不会生效。CentOS 的配置文件在/etc/sysconfig/network-scripts/ifcfg-ens33,把BOOTPROTO=static并追加IPADDR、NETMASK、GATEWAY即可。固定 IP 后再做一次快照,后面配 FTP、配 WWW、改防火墙时随时能回滚,这是整场实验的后悔药。
| 确认项 | 判断方法 | 失败时的方向 |
|---|---|---|
| FTP 服务在监听 | `netstat -tlnp | grep vsftpd` |
| WWW 服务在监听 | `netstat -tlnp | grep :80` |
| 端口放行 | firewall-cmd --list-all或ufw status | 见第 5 章避坑 |
| 目录权限 | ls -ld /var/www/html | 属主和读权限不对 |
这一节做完,环境是干净的:两台服务都已安装,IP 固定,目录权限初值清楚。接下来就可以进 FTP 配置。
3. 配置 FTP 服务器:用 vsftpd 跑通“本地上传”的小目标
3.1 备份并修改/etc/vsftpd.conf:两个开关决定能不能上传
vsftpd 的全部核心配置集中在一个文件里,这是它适合做实验的原因。改文件前先备份,避免改到一半想回退时只能重新安装。
# 备份配置,改错了可以从这份副本恢复 cp /etc/vsftpd.conf /etc/vsftpd.conf.bak # 用编辑器打开配置 vim /etc/vsftpd.conf下面是一份能支撑本实验的最小配置,注意里面几行默认就是打开的,但如果实验镜像被改过,最好逐行核对:
# 是否允许匿名登录;实验要求匿名时可置 YES,见 3.3 节 anonymous_enable=NO # 允许本地用户登录 local_enable=YES # 允许写操作,不打开这个字段,一切上传动作都会报 550 write_enable=YES # 上传文件默认权限遮罩:目录 755,文件 644,WWW 服务能读 local_umask=022 # 开启传输日志,方便排查 xferlog_enable=YES xferlog_std_format=YES # 被动模式数据端口范围,防火墙必须放行这一段 pasv_min_port=50000 pasv_max_port=50100这里逐项说清楚:anonymous_enable=NO是关闭匿名登录,避免实验环境被随意访问;local_enable=YES允许/etc/passwd里的用户登录;write_enable=YES是上传、删除、重命名的总开关,漏掉它的典型现象是能连上、能列目录,一传文件就550 Permission denied。local_umask=022决定上传文件和目录的默认权限,022 遮罩下文件是 644,目录是 755,这样 Apache 的运行用户即便不是文件属主也能读取。pasv_min_port和pasv_max_port是给被动模式数据连接预留的端口段,后面的防火墙避坑就是靠这两个参数对齐的。
改完文件后重启服务:
systemctl restart vsftpd systemctl status vsftpd3.2 创建本地用户并切换 FTP 家目录到 Web 根目录
FTP 和 WWW 能联动的前提,是两个服务指向同一个目录。最省事的设计是:创建一个实验用户,把它的家目录直接设置为/var/www/html,也就是 Apache 的站点根目录。这样通过 FTP 传上去的文件,立刻就能被 WWW 服务读出来。
# 创建实验用户并设置密码 useradd -m labuser -s /bin/bash passwd labuser # 把用户家目录改为 Apache 站点根目录 usermod -d /var/www/html labuser # 确保目录存在且属主正确 mkdir -p /var/www/html chown -R labuser:www-data /var/www/html chmod -R o+r /var/www/htmluseradd -m会先创建一个普通家目录,随后usermod -d把它切换到/var/www/html,以后labuser登录 FTP 后就直接落在 Web 根目录。chown -R labuser:www-data里www-data是 Ubuntu/Debian 上 Apache 的运行用户,文件属主为labuser、属组为www-data,这样 FTP 写入后 Apache 能凭借组权限读取。CentOS 上的 Apache 用户叫apache,对应命令是chown -R labuser:apache /var/www/html。chmod -R o+r给其他用户开放读权限,相当于给 WWW 读取加了一道保险,配合 umask=022 后权限不会有冲突。
配置做完后立刻验证上传,这一步能把 80% 的权限问题暴露出来:
# 生成一个测试页 echo "<h1>FTP upload test</h1>" > /var/www/html/upload_test.html # 用命令行 FTP 登录本机 ftp 127.0.0.1 # 输入 labuser 和密码 # 登录后执行 put upload_test.html,看到 transfer complete 说明写入成功 # 然后执行 bye 退出如果put报错,优先检查write_enable=YES是否生效,再检查/var/www/html属主是否真的是labuser。这一步是整场实验里翻车率最高的一步,多做一次不亏。
3.3 匿名 FTP 目录:实验要求匿名访问时的补充配置
有些实验题目要求匿名用户也能下载文件,但匿名用户和 WWW 目录联动比本地用户麻烦,因为匿名用户的身份通常是ftp或nobody,要额外处理目录属主。建议先按下表判断实验到底需要哪种模式。
| 模式 | 典型场景 | 与 WWW 联动难度 | 配置关键点 |
|---|---|---|---|
| 本地用户 | 上传并发布页面 | 低,家目录可直接设为站点根目录 | local_enable=YES |
| 匿名用户 | 分发只读文件 | 中,需单独设 anon_root 并处理属主 | anonymous_enable=YES |
| 混合模式 | 下载公开,上传需账号 | 较高,注意匿名不可写 | 两组开关同时开 |
如果必须开匿名,配置里改动这几行:
anonymous_enable=YES anon_root=/var/ftp anon_umask=022然后创建匿名目录并授权:
mkdir -p /var/ftp chown ftp:ftp /var/ftp chmod -R o+r /var/ftp匿名目录独立于 Web 根目录,实验报告中要写明“匿名用户只能下载,labuser 上传到站点根目录”。这样既满足题面,又不干扰 WWW 联动的主链路。不要试图让匿名用户直接上传到/var/www/html,匿名写的权限管理很容易打开安全缺口,实验报告也难解释。
4. 配置 WWW 服务器:Apache 站点目录、默认页与虚拟主机
4.1 让 Apache 的根目录和 FTP 家目录指向同一路径
Apache 安装后默认的站点根目录就是/var/www/html,前面已经把labuser的家目录指到这里。现在要做的是确认 Apache 的配置确实指向这个目录,并放一个默认首页进去:
# 查看当前启用的站点配置 grep -r "DocumentRoot" /etc/apache2/sites-enabled/ # 写入一个简单首页 echo "Lab WWW Server OK" > /var/www/html/index.html # 统一目录权限 chown -R labuser:www-data /var/www/html chmod -R 755 /var/www/html find /var/www/html -type f -exec chmod 644 {} \;grep -r DocumentRoot用来确认站点根目录,Ubuntu 上默认结果应该是/var/www/html,如果不是,先回到这一步改好再往下走。chown和刚才 FTP 部分一致,find -type f把已有文件统一成 644,防止之前用 root 手工创建的文件权限过严。chmod 755保证目录可进入,chmod 644保证文件可读取。这些权限操作做完,WWW 侧读取 FTP 上传的文件就不会出现 403。
4.2 配置虚拟主机:ServerName、DocumentRoot 与 Directory 三者对齐
虚拟主机配置让 Apache 在同一个 IP 上按不同的主机头提供不同站点。实验虽然只需一个站点,但通过配置虚拟主机可以清晰看到站点目录、域名和权限三者的关系,这也是实验报告里常考的得分点。
# 新建实验站点配置 vim /etc/apache2/sites-available/mylab.conf写入以下内容:
<VirtualHost *:80> ServerName lab.local DocumentRoot /var/www/html <Directory /var/www/html> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>ServerName lab.local是虚拟主机的主机名,如果不想配域名,可以用虚拟机 IP 直接访问,此时这个字段也可以省略。DocumentRoot指定站点根目录,必须和 FTP 用户家目录一致。Directory块是权限控制核心:Options Indexes允许在访问目录时显示文件列表清单,这对实验很有用,传上去的文件能在浏览器里看到列表;FollowSymLinks允许跟随符号链接;Require all granted是 Apache 2.4 的写法,表示允许所有来源访问,换成 2.2 时代的语法会直接语法报错。配置文件第一行<VirtualHost *:80>表示监听本机所有网卡的 80 端口。
启用站点并重载:
# 停用默认站点,启用实验站点 a2dissite 000-default.conf a2ensite mylab.conf # 重载配置,不必重启 Apache systemctl reload apache2 # 检查语法 apache2ctl configtesta2dissite和a2ensite是 Ubuntu/Debian 系列的软链接命令,CentOS 不适用,CentOS 上直接在/etc/httpd/conf.d/下建mylab.conf,然后systemctl reload httpd。apache2ctl configtest输出Syntax OK才说明配置没有拼写错误,这一步不能省,尤其注意 2.4 的Require all granted和 2.2 的Allow from all不能混用。
4.3 用浏览器和 curl 验证:FTP 上传的文件能通过 HTTP 读到
配置完成后,先做本地验证,再做跨机验证:
# 查看 HTTP 响应头,200 说明页面可访问 curl -I http://127.0.0.1/ # 读取 FTP 上传的测试页 curl http://127.0.0.1/upload_test.htmlcurl -I只取响应头,200 OK是预期结果;第二条curl会输出测试页内容,如果返回的是<h1>FTP upload test</h1>,那么 FTP 上传到 WWW 可访问的闭环已经成立。跨机验证时,把127.0.0.1换成虚拟机的 IP,比如curl http://192.168.x.x/upload_test.html。如果宿主机访问不到,先确认虚拟机的 IP 没有变,再检查防火墙是否放行了 80 端口。这一步完成了 WWW 服务器的核心配置,剩下的重点是排错经验。
5. FTP 与 WWW 联动的 4 个避坑点:从防火墙到 SELinux
5.1 防火墙只放行 21 端口,被动端口段被挡
现象:FileZilla 能连上 FTP 服务器,但列出目录或传文件时卡住,最后报“数据连接超时”或“连接被重置”。
原因:vsftpd 默认使用被动模式,数据传输时客户端连接的是配置里的pasv_min_port到pasv_max_port这段端口。只放行 21 端口时,控制连接能建立,数据连接被防火墙丢弃,所以看起来是“连上了但动不了”。
解决:把 21 端口和 50000-50100 端口段一起放行。
# firewalld(CentOS/RHEL) firewall-cmd --permanent --add-port=21/tcp firewall-cmd --permanent --add-port=50000-50100/tcp firewall-cmd --reload # ufw(Ubuntu/Debian) ufw allow 21/tcp ufw allow 50000:50100/tcp ufw reload--permanent是持久规则,不加的话重启防火墙规则就没了;ufw allow 50000:50100/tcp用冒号表示端口范围。检查是否生效用firewall-cmd --list-ports或ufw status verbose。另外,如果客户端用的是主动模式,需要放行的是 20 端口而不是被动端口段,两边不能同时配错。做完这步,再回 FileZilla 重试一次,通常问题就消失了。
5.2 SELinux 开启后,FTP 目录写不进去
现象:在 CentOS 实验机上,配置、属主、防火墙全对,登录也没有报错,但一创建目录或传文件就报553 Could not create file。这种问题最折磨人,因为在 Ubuntu 上同样的配置是正常的。
原因:SELinux 的布尔值ftpd_full_access没有打开,SELinux 拒绝了 vsftpd 对目录的写入,而传统的文件权限检查看不到这一层。
解决:先用getsebool查看,再放开布尔值,并恢复目录的文件上下文。
# 查看所有与 ftp 相关的 SELinux 布尔值 getsebool -a | grep ftp # 打开 full access,-P 表示持久化,重启后仍生效 setsebool -P ftpd_full_access 1 # 如果之前目录上下文被改乱,用 restorecon 恢复 restorecon -Rv /var/www/htmlgetsebool -a | grep ftp能看到ftpd_full_access默认通常是off。setsebool -P中的-P是关键,不加的话重启后 SELinux 又会回到off。restorecon -Rv的作用是把/var/www/html下文件的 SELinux 上下文恢复为 Apache 和 FTP 都可以访问的类型。生产环境不建议直接开ftpd_full_access,但实验机这样处理能最快排除 SELinux 干扰。如果做完这些还报 553,再回头看目录属主和write_enable,不要只盯一个方向。
5.3 FTP 上传成功,WWW 访问却 403 Forbidden
现象:FileZilla 显示上传完成,浏览器访问http://IP/upload_test.html却返回 403,或者目录列表能看到文件但点进去 403。
原因:FTP 客户端上传时,文件权限由local_umask决定。如果 umask 是 027,上传的文件权限是 640,其他用户没有任何权限。Apache 的运行用户是www-data或apache,它既不是文件属主,也不在属组里,自然读不了文件。这是 FTP 与 WWW 联动最典型的坑,根源在于 umask 和属组的组合。
解决:统一 umask,并把已有文件的权限和属主一次性修正。
# 修改 vsftpd 配置中的 umask vim /etc/vsftpd.conf # 把 local_umask=027 改为 local_umask=022 # 批量修复目录与文件权限 chown -R labuser:www-data /var/www/html find /var/www/html -type d -exec chmod 755 {} \; find /var/www/html -type f -exec chmod 644 {} \; # 重启 vsftpd 使 umask 生效 systemctl restart vsftpdfind -type d -exec chmod 755把目录统一为 755,find -type f -exec chmod 644把文件统一为 644,这样目录可进入、文件可读,且不会给其他用户开放写权限。如果实验要求组内成员还能改文件,可以用775和664替代。修改 umask 只影响之后新上传的文件,所以必须配合find命令处理已经传上去的旧文件。这一步做完,403 的问题基本清零。
5.4 用 SFTP 顶替 FTP,日志和端口都对不上
现象:用 MobaXterm 直接拖文件到虚拟机,浏览器也能打开页面,但实验检查时发现netstat看不到 21 端口在监听,/var/log/vsftpd.log里也没有任何传输记录。
原因:MobaXterm 的拖拽功能走的是 SFTP,底层是 SSH 服务的 22 端口,数据确实传到了机器里,但全程和 vsftpd 没有关系。实验要求的是 FTP 协议,检查时会看 21 端口、vsftpd 进程和 FTP 日志,这套链路完全不同。
解决:实验环节只把 MobaXterm 当 SSH 终端用,FTP 传输必须走真正的 FTP 客户端,内核验证也建议用命令行ftp完成。
# 确认 vsftpd 确实在 21 端口监听 netstat -tlnp | grep vsftpd # 实时查看 FTP 传输日志 tail -f /var/log/vsftpd.lognetstat -tlnp里21端口对应的进程名应该是vsftpd;如果用 SFTP 传文件,这个命令不会增加任何记录。tail -f /var/log/vsftpd.log能实时看到STOR upload_test.html这样的上传记录,这是实验报告里最有力的证据。MobaXterm 不是不能用,而是只能在正确的场景里用:SSH 连终端、查日志、改配置,文件传输交给 FileZilla。记住这一条,能省掉答辩时最尴尬的一次解释。
提示:看到端口在监听不等于功能完整。每次改动配置后,都要完整执行一次“登录、列目录、上传、下载、HTTP 访问”五步验证,才算真正配完。
6. 端到端验证:从 FileZilla 上传到浏览器打开,全程不超过五分钟
前面每一章都是单点配置,这一节把整个链路串起来。我的习惯是准备一张检查表,每做完一项就勾选一项,避免在收实验报告时才发现某个环节没验证。
| 验证步骤 | 命令或操作 | 预期结果 |
|---|---|---|
| FTP 登录 | ftp 127.0.0.1,输入 labuser | 出现230 Login successful |
| FTP 上传 | 上传upload_test.html | 出现226 Transfer complete |
| 日志留痕 | tail /var/log/vsftpd.log | 看到STOR upload_test.html |
| HTTP 访问 | curl http://IP/upload_test.html | 返回文件内容,非 403/404 |
| 防火墙复核 | ufw status或firewall-cmd --list-ports | 21 和 50000-50100 已放行 |
最后把整个实验串成一条命令能验证的闭环:
# 生成新测试页 echo "End to end check" > /var/www/html/e2e.html # 用 labuser 走一遍 FTP 上传,再走一遍 HTTP 读取 ftp -n 127.0.0.1 <<EOF user labuser yourpassword put /var/www/html/e2e.html e2e.html bye EOF # 上传后立即通过 HTTP 访问 curl -I http://127.0.0.1/e2e.html这段脚本里ftp -n表示不读取自动登录配置,user labuser yourpassword手动指定账号密码,put把本地文件传到服务器当前目录,bye退出。随后curl -I返回200 OK就代表 FTP 到 WWW 的全链路是通的。yourpassword是实验账号密码,实际使用时替换成自己的。如果脚本方式不好记,用 FileZilla 手动拖一遍也是一样的效果,关键是“上传后立刻用 HTTP 读一次”。
我自己第一次做这类实验时翻车最狠的一次,就是只放行了 21 端口,然后在 FieZilla 里反复重试,差点把配置文件删了重装。后来养成的习惯是先看防火墙再怀疑配置,先看日志再怀疑权限,这个顺序帮我避开了很多玄学问题。照这条路径做完,你会发现 FTP 服务器与 WWW 服务器配置这个实验没有想象中复杂,希望帮到你。
本文还有配套的精品资源,点击获取