Linux配置ftp文件服务器和nginx图片服务器
环境:Ubuntu 18.04.6
一. 搭建ftp服务器
1. 原理讲解
ftp协议是一种基于tcp的网络传输协议,位于OSI模型的第七层。
模式:
由于端口、防火墙、IP地址等综合影响,ftp目前拥有两种模式:
-
PORT(主动模式):
- 客户端连接到ftp服务端的信息端口(默认是21),并向其发送用户名和密码。
- 若客户端想要下载或上传文件,客户端随即开放一个端口(1024以上),发送PORT命令倒ftp服务端,告知ftp服务端采用主动模式并开放数据端口(默认是ftp服务端的信息端口-1,也就是20)。
- 随后ftp服务端会通过数据端口和客户端开发的端口进连接,从而传输文件信息。
-
PASV(被动模式):
- 客户端连接到ftp服务端的信息端口(默认是21),并向其发送用户名和密码。
- 若客户端想要下载或上传文件,客户端发送PASV命令倒ftp服务端,告知ftp服务端采用被动模式,服务器在本地随即开放一个端口(自己配置范围),然后将开放的端口告诉客户端。
- 客户端连接服务器这个开放的端口,从而上传或下载文件。
模式的不同:
- PORT:需要客户端开放端口给服务器进行文件的上传和下载,但不同客户端自身防火墙规则不同,可能出现不能传输文件的情况。
- PASV:服务器开放端口给客户端进行文件的上传和下载,防火墙可控,因此较为推荐。
实践思路:
PORT模式还是PASV模式是由客户端决定的,而非服务器,因此服务器要能同时适配两种情况。因此,一般是开放20、21、[n,m]的端口给tcp协议。
2. 实现思路
ftp服务需要在linux上进行文件操作,因此我们进行如下步骤:
- 创建一个专用的用户ftpuser。
- 创建一个文件夹/home/ftp。然后对其进行修改:
- 将该文件夹修改ftpuser的主目录。
- 将该文件夹的所有者、所有组改为该用户和该用户的初始组。
- 修改文件夹的权限为555,不允许除了root用户以外的用户对其进行增加、删除文件操作。
- 最后再在/home/ftp内根据需要建立文件夹,并注意所有者和权限的问题。
3. 实际操作
-
安装ftp软件:
sudo apt install vsftpd
-
启动vsftpd服务并设置开机自启:
sudo systemctl start vsftpd sudo systemctl enable vsftpd
-
修改ftp配置文件: /etc/vsftpd.conf
listen=NO //是否开启监听ipv4和ipv6数据 listen_ipv6=YES //是否开启监听ipv6数据 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 xferlog_file=/var/log/vsftpd.log //日志文件存放位置 xferlog_std_format=YES //日志文件采用标准格式 ftpd_banner=Welcome to FTP service. //在使用shell时登陆那么会发送欢迎语 chroot_local_user=YES //对本地用户是否实施限制 chroot_list_enable=YES //开启限制白名单 chroot_list_file=/etc/vsftpd.chroot_list //白名单路径,若无这个文件需要自己创建 secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=ftp //此处ubuntu的系统需要改为ftp rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO utf8_filesystem=YES //编码统一为utf8编码,可以识别中文,防止乱码 // 被动模式下向用户开放的范围 pasv_min_port=30000 pasv_max_port=30999
关键配置:
- anonymous_enable=NO:不允许匿名登录
- chroot_list_file=/etc/vsftpd.chroot_list:白名单文件,一个用户站一行,只写用户名
- pasv_min_port=30000 pasv_max_port=30999 :被动模式下向用户开放的范围
-
开放端口:
sudo ufw allow 20/tcp # 主动模式下的数据端口 sudo ufw allow 21/tcp # 信息端口 sudo ufw allow 30000:30999/tcp # 被动模式下的数据端口范围
-
创建用户与用户组,将该用户的主目录作为ftp服务的入口:
# 创建用户主目录,也是未来ftp存放文件的主目录 sudo mkdir /home/ftp # 创建用户,指定主目录 sudo useradd -d /home/ftp ftpuser # 修改该主目录的所有者和所有组 sudo chown ftpuser /home/ftp sudo chgrp ftpuser /home/ftp # 修改文件权限。可以根据需求自己决定 sudo chmod 755 /home/ftp
-
在vsftp服务内为ftpuser用户添加白名单:
-
打开:/etc/vsftpd.chroot_list
-
每一行添加一个白名单用户的名字。目前只开放一个用户,因此只用另起一行,添加
ftpuser
-
-
重启vsftpd服务。
sudo systemctl restart vsftpd
-
使用windows资源管理器测试:
ftp://服务器IP地址/
二. 搭建图片资源服务器
1. 原理
就是通过配置nginx代理,让用户可以通过浏览器直接获取到资源。
2. 步骤、
-
下载nginx:
sudo apt install nginx
-
启动nginx,并配置开机自启:
sudo systemctl start nginx sudo systemctl endble nginx
-
开放nginx端口:默认是80
sudo ufw allow 80/tcp
-
对nginx文件进行简单配置(/etc/nginx/nginx.conf),主要是添加一个location:
location /images/ { root /home/ftp/; autoindex on; }
注意:nginx配置文件中共不能有tab制表符,只能用空格进行划分。
-
在/home/ftp/images文件夹下放置'1.jpg',通过浏览器访问:'http://服务器ip地址:80/images/1.jpg'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!