Linux配置ftp文件服务器和nginx图片服务器

发布时间 2023-11-10 16:59:46作者: Beasts777

环境:Ubuntu 18.04.6

一. 搭建ftp服务器

1. 原理讲解

ftp协议是一种基于tcp的网络传输协议,位于OSI模型的第七层。

模式:

由于端口、防火墙、IP地址等综合影响,ftp目前拥有两种模式:

  • PORT(主动模式):

    1. 客户端连接到ftp服务端的信息端口(默认是21),并向其发送用户名和密码。
    2. 若客户端想要下载或上传文件,客户端随即开放一个端口(1024以上),发送PORT命令倒ftp服务端,告知ftp服务端采用主动模式并开放数据端口(默认是ftp服务端的信息端口-1,也就是20)。
    3. 随后ftp服务端会通过数据端口和客户端开发的端口进连接,从而传输文件信息。
  • PASV(被动模式):

    • 客户端连接到ftp服务端的信息端口(默认是21),并向其发送用户名和密码。
    • 若客户端想要下载或上传文件,客户端发送PASV命令倒ftp服务端,告知ftp服务端采用被动模式,服务器在本地随即开放一个端口(自己配置范围),然后将开放的端口告诉客户端。
    • 客户端连接服务器这个开放的端口,从而上传或下载文件。

模式的不同:

  • PORT:需要客户端开放端口给服务器进行文件的上传和下载,但不同客户端自身防火墙规则不同,可能出现不能传输文件的情况。
  • PASV:服务器开放端口给客户端进行文件的上传和下载,防火墙可控,因此较为推荐。

实践思路:

PORT模式还是PASV模式是由客户端决定的,而非服务器,因此服务器要能同时适配两种情况。因此,一般是开放20、21、[n,m]的端口给tcp协议。

2. 实现思路

ftp服务需要在linux上进行文件操作,因此我们进行如下步骤:

  1. 创建一个专用的用户ftpuser。
  2. 创建一个文件夹/home/ftp。然后对其进行修改:
  3. 将该文件夹修改ftpuser的主目录。
  4. 将该文件夹的所有者、所有组改为该用户和该用户的初始组。
  5. 修改文件夹的权限为555,不允许除了root用户以外的用户对其进行增加、删除文件操作。
  6. 最后再在/home/ftp内根据需要建立文件夹,并注意所有者和权限的问题。

3. 实际操作

  1. 安装ftp软件:

    sudo apt install vsftpd
    
  2. 启动vsftpd服务并设置开机自启:

    sudo service vsftpd start
    sudo chkconfig vsftpd on
    
  3. 修改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 :被动模式下向用户开放的范围
  4. 开放端口:

    sudo ufw allow 20/tcp				# 主动模式下的数据端口
    sudo ufw allow 21/tcp				# 信息端口
    sudo ufw allow 30000:30999/tcp		# 被动模式下的数据端口范围
    
  5. 创建用户与用户组,将该用户的主目录作为ftp服务的入口:

    # 创建用户主目录,也是未来ftp存放文件的主目录
    sudo mkdir /home/ftp
    # 创建用户,指定主目录
    sudo useradd -d /home/ftp ftpuser
    # 修改该主目录的所有者和所有组
    sudo chown ftpuser /home/ftp
    sudo chgrp ftpuser /home/ftp
    # 修改文件权限。
    sudo chmod 555 /home/ftp
    
  6. 在vsftp服务内为ftpuser用户添加白名单:

    1. 打开:/etc/vsftpd.chroot_list

    2. 每一行添加一个白名单用户的名字。目前只开放一个用户,因此只用另起一行,添加

      ftpuser
      
  7. 重启vsftpd服务。

    sudo service vsftpd restart
    
  8. 使用windows资源管理器测试:

    ftp://服务器IP地址/
    

二. 搭建图片资源服务器

1. 原理

就是通过配置nginx代理,让用户可以通过浏览器直接获取到资源。

二. 步骤、

  1. 下载nginx:

    sudo apt install nginx
    
  2. 启动nginx,并配置开机自启:

    sudo systemctl start nginx
    sudo systemctl endble nginx
    
  3. 开放nginx端口:默认是80

    sudo ufw allow 80/tcp
    
  4. 对nginx文件进行简单配置(/etc/nginx/nginx.conf),主要是添加一个location:

    location /images/ {
    	root /home/ftp/;        
    	autoindex on;
    }
    

    注意:nginx配置文件中共不能有tab制表符,只能用空格进行划分。

  5. 在/home/ftp/images文件夹下放置'1.jpg',通过浏览器访问:'http://192.168.98.128:80/images/1.jpg'