FTP服务

工作模式

  • 主动模式:FTP服务器主动向客户端发起连接请求
    • 通过三次握手,建立控制连接;客户端的源端口是高位随机端口,目标端口是21端口
    • 控制连接建立后,客户端进行份验证,协商数据连接采用主动模式;随后客户端会向FTP服务器发送Port报文,表明自己监听的IP+端口,并等待FTP服务器(20端口)向自己监听的IP+端口发起数据连接请求。
    • 服务端发起数据连接请求,建立数据连接
  • 被动模式:FTP服务器等待客户端发起请求,默认工作模式

    • 通过三次握手,建立控制连接;客户端的源端口是高位随机端口,目标端口是21端口;
    • 控制连接建立后,客户端进行身份验证,协商数据连接采用被动模式;随后客户端会向服务器发送PASV报文,表示我们用被动模式
    • 服务端收到PASV报文,于是向客户端发送Port报文,表明自己监听的IP+端口
    • 客户端发起数据连接请求,建立数据连接

      FTP服务的登录用户

  • 本地用户

    • 本地用户既可以登录shell,又可以FTP登录
    • 本地用户可以通过输入自己的账号和口令来进行授权登录
    • 当授权访问的本地用户登录系统后,其登录为用户自己的家目录
    • 本地用户既可以下载又可以上传
  • 虚拟用户
    • 如果用户在远程FTP服务器上拥有账号,且此账号只能用于文件传输服务,则称之为虚拟用户或Guest用户
    • 虚拟用户可以通过输入自己的账号和口令进行授权登录
    • 当授权访问的虚拟用户登录系统后,其登录目录为服务器为其指定的目录。
    • 通常情况下,虚拟用户既可以下载又可以上传
  • 匿名用户

    • 如果用户在远程FTP服务器上没有账号,则称此用户为匿名用户。
    • 若FTP服务器提供匿名访问功能,则匿名用户可以通过输入账号(anonymous)和口令(用户自己的E-Mail地址)来进行登录
    • 当匿名用户登录系统后,其登录目录为匿名FTP服务器的根目录/var/ftp/pub目录
    • 一般情况下匿名FTP服务器只提供下载功能,不提供上传服务器或者使上传收到一定的限制

      VSFTP部署

  • vsftp服务简介

    • 是一个安全、高速、稳定的FTP服务器
    • 可设定多个基于IP的虚拟FTP服务器
    • 匿名FTP服务更是十分容易
    • 不执行任何外部程序,从而减少了安全隐患
    • 支持虚拟用户,且支持每个虚拟用户具有独立的配置
    • 可以设置为从xinetd启动,或者是独立ftp服务器两种运行方式
    • 支持PAM或xinetd/tcp_wrappers的认证方式
    • 支持带宽限制等
  • vsftp服务概述
    • 安装vsftpd服务:

yum install vsftpd ‐y

  • 服务包:vsftp
  • 服务类型:由Systemd启动的守护进程
  • 配置单元:/usr/lib/systemd/system/vsftpd.service
  • 守护进程:/usr/sbin/vsftpd
  • 端口:21(ftp) 20(ftp‐data)
  • 主配置文件:/etc/vsftpd.conf
  • 用户访问控制配置文件:
  • /etc/vsftpd/ftpusers
  • /etc/vsftpd/user_list
  • 日志文件:/etc/logrotate.d/vsftpd
    • 主配置文件
  1. 默认配置:
  2. [root@node1 ~]# cat /etc/vsftpd/vsftpd.conf | grep Ev "^#|^$"
  3. anonymous_enable=YES #是否允许匿名用户可以登录
  4. local_enable=YES #是否允许本地用户可以登录
  5. write_enable=YES #是否对登录用户可写
  6. local_umask=022 #本地用户上传文件默认权限修改
  7. dirmessage_enable=YES #是否激活目录欢迎信息功能
  8. xferlog_enable=YES #是否让系统自动维护上传和下载的日志
  9. connect_from_port_20=YES #是否设定FTP服务器将启用FTP数据端口的连接请求
  10. xferlog_std_format=YES #是否以标准的xferlog的格式书写传输日志文件
  11. listen=NO #是否允许监听,以独立模式运行
  12. listen_ipv6=YES #设定是否支持IPv6
  13. pam_service_name=vsftpd #设置PAM模式提供的认证服务所使用的配置文件名:/etc/pam.d/vsftpd文件
  14. userlist_enable=YES #是否允许ftpusers文件中的用户登录FTP服务器
  15. tcp_wrappers=YES #是否使用tcp_wrappers作为主机访问控制方式
  • 案例1,匿名用户访问
  1. 1. 修改配置文件
  2. 添加如下参数:
  3. anonymous_enable=YES
  4. anon_umask=022
  5. anon_upload_enable=YES
  6. anon_mkdir_write_enable=YES
  7. anon_other_write_enable=YES
  8. 2.修改/var/ftp/pub权限
  9. chown Rf ftp /var/ftp/pub
  10. 3. 使用anonymous登录测试
  • 案例2,使用本地用户访问FTP
  1. 如果遇到本地用户登录保存:
  2. 1. firewalld and selinux
  3. 2. 检查配置文件:/etc/vsftpd/vsftpd.conf
  4. local_enable=YES
  5. pam_service_name=vsftpd
  6. userlist_enable=YES
  7. 3. 检查/etc/pam.d/vsftpd文件:
  8. auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers
  9. onerr=succeed
  10. 4. 检查user_list文件和ftpusers文件:
  11. 需要登录的用户是否被注释:#root
  • 案例3,使用虚拟用户登录
  1. 1. 创建用于FTP认证的用户数据库文件
  2. mkdir /etc/vsftpd/vconf
  3. cat > /etc/vsftpd/vconf/vftpuser.txt <<EOF
  4. xiaohong
  5. xiaohong
  6. xiaoming
  7. xiaoming
  8. EOF
  9. 1.1 将明文信息转换成数据库文件
  10. db_load T t hash f /etc/vsftpd/vconf/vftpuser.txt /etc/vsftpd/vconf/vftpuser.db
  11. 2. 创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户
  12. useradd d /var/ftproot s /sbin/nologin virtual
  13. chmod Rf 755 /var/ftproot/
  14. 3. 建立用户支持虚拟用户的PAM文件
  15. echo "auth required pam_userdb.so db=/etc/vsftpd/vconf/vftpuser" >>
  16. /etc/pam.d/vsftpd
  17. echo "account required pam_userdb.so db=/etc/vsftpd/vconf/vftpuser
  18. " >> /etc/pam.d/vsftpd
  19. 4.修改配置文件
  20. 添加如下参数配置:
  21. guest_enable=YES
  22. guest_username=virtual
  23. allow_writeable_chroot=YES
  24. user_config_dir=/etc/vsftpd/vconf/
  25. 5.为不同虚拟用户设置不同的权限
  26. touch /etc/vsftpd/vconf/xiaohong
  27. cat > /etc/vsftpd/vconf/xiaoming << EOF
  28. local_root=/var/ftproot/
  29. write_enable=YES
  30. anon_upload_enable=YES
  31. anon_mkdir_write_enable=YES
  32. anon_other_write_enable=YES
  33. EOF
  34. 6.重启vsftpd服务
  35. 测试:分别用xiaohongxiaoming登录并创建目录