ftp介绍

FTP是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务

  • ftp连接及连接模式
    • 控制连接:TCP21,用于发送FTP命令信息
    • 数据连接:TCP20,用于上传,下载数据
    • 数据连接建立的类型
      • 主动模式:服务端从20端口主动向客户端发起连接
      • 被动模式: 服务端在指定范围内某个端口等待客户端连接
  • ftp传输模式
    • 文本模式: ASCII模式,以文本序列传输数据
    • 二进制模式:Binary模式,以二进制序列传输数据
  • ftp用户类型
    匿名用户(ftp,一般用于公共资料)
    本地用户(系统用户,有一定系统隐患)
    虚拟用户(相当于给系统用户设置别名)

ftp服务器搭建

服务端安装vsftp软件包
  1. ]# yum -y install vsftpd
  2. ]# rpm -qa | grep vsftpd
  3. vsftpd-3.0.2-27.el7.x86_64
  4. ]# grep -v '^#' /etc/vsftpd/vsftpd.conf
  5. anonymous_enable=YES //启用匿名用户访问
  6. local_enable=YES //本地用户访问
  7. write_enable=YES //允许写入
  8. local_umask=022
  9. anon_upload_enable=YES //允许匿名用户上传
  10. anon_mkdir_write_enable=YES //允许匿名用户上传目录
  11. dirmessage_enable=YES
  12. xferlog_enable=YES
  13. connect_from_port_20=YES
  14. xferlog_std_format=YES
  15. listen=YES
  16. listen_ipv6=NO
  17. pam_service_name=vsftpd
  18. userlist_enable=YES
  19. tcp_wrappers=YES
  20. ]# systemctl start vsftpd
  21. ]# rpm -ql vsftpd
  22. /etc/logrotate.d/vsftpd
  23. /etc/pam.d/vsftpd
  24. /etc/vsftpd
  25. /etc/vsftpd/ftpusers //黑名单
  26. /usr/sbin/vsftpd
  27. /etc/vsftpd/user_list //控制用户设置
  28. /etc/vsftpd/vsftpd.conf
  29. /usr/share/man/man5/vsftpd.conf.5.gz
  30. /usr/share/man/man8/vsftpd.8.gz
  31. /var/ftp //默认匿名用户使用目录
  32. /var/ftp/pub //匿名用户上传文件目录

安装后默认支持匿名登陆

客户端安装ftp或lftp(客户端软件)
  1. ]# yum -y install ftp
  2. ]# rpm -qa | grep ftp
  3. ]# ftp 192.168.1.20
  4. Connected to 192.168.1.20 (192.168.1.20).
  5. 220 (vsFTPd 3.0.2)
  6. Name (192.168.1.20:root): ftp //匿名登陆,密码为空
  7. 331 Please specify the password.
  8. Password:
  9. 230 Login successful.
  10. Remote system type is UNIX.
  11. Using binary mode to transfer files.
  12. ftp> ls
  13. 227 Entering Passive Mode (192,168,1,20,124,141).
  14. 150 Here comes the directory listing.
  15. drwxr-xr-x 2 0 0 6 Apr 01 04:55 pub
  16. 226 Directory send OK.
  17. ftp>

本地用户登录设置:
  1. 主配置文件
  2. ]# grep -v "^#" vsftpd.conf
  3. anonymous_enable=YES
  4. local_enable=YES //本地用户开启
  5. write_enable=YES
  6. local_umask=022
  7. anon_upload_enable=YES
  8. anon_mkdir_write_enable=YES
  9. dirmessage_enable=YES
  10. xferlog_enable=YES
  11. connect_from_port_20=YES
  12. xferlog_std_format=YES
  13. chroot_local_user=YES
  14. listen=YES
  15. listen_ipv6=NO
  16. allow_writeable_chroot=YES //紧固在根下
  17. pam_service_name=vsftpd
  18. userlist_enable=NO //和/etc/vsftpd/ftpusers; /etc/vsftpd/userlist配合使用
  19. tcp_wrappers=YES
  20. 用户控制文件
  21. ]# cat /etc/vsftpd/user_list
  22. # vsftpd userlist
  23. # If userlist_deny=NO, only allow users in this file
  24. # If userlist_deny=YES (default), never allow users in this file, and
  25. # do not even prompt for a password.
  26. # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
  27. # for users that are denied.
  28. lisi
  29. #如果userlist_deny=NO,则只允许在此文件中用户访问
  30. #如果userlist_deny=YES(默认),永远不允许用户在此文件中,并且
  31. 甚至不提示输入密码。
  32. 请注意,默认的vsftpd pam配置还检查/etc/ vsftpdf /ftpusers(黑名单)

虚拟用户登录:

  1. 创建用户列表
  2. ]# cat /etc/vsftpd/vuser.list
  3. mike
  4. 123
  5. tom
  6. 456
  7. 将用户列表文件转换成用户数据库文件
  8. ]# cd /etc/vsftpd/
  9. ]# db_load -T -t hash -f vuser.list vuser.db
  10. ]# chmod 600 vuser.*
  11. ]# ll
  12. 总用量 36
  13. -rw------- 1 root root 120 7 19 09:28 ftpusers
  14. -rw------- 1 root root 287 7 18 16:58 user_list
  15. -rw------- 1 root root 5139 7 19 09:27 vsftpd.conf
  16. -rwxr--r-- 1 root root 338 4 1 12:55 vsftpd_conf_migrate.sh
  17. -rw------- 1 root root 12288 7 19 09:38 vuser.db
  18. -rw------- 1 root root 17 7 19 09:36 vuser.list
  19. 给虚拟用户创建映射的系统用户
  20. ]# useradd -d /data/cos -s /sbin/nologin virtual
  21. ]# chmod 755 /data/cos
  22. ]# vim /etc/pam.d/vsftpd.vu
  23. #%PAM-1.0
  24. auth required pam_userdb.so db=/etc/vsftpd/vuser
  25. account required pam_userdb.so db=/etc/vsftpd/vuser
  26. ]# grep -v "^#" /etc/vsftpd/vsftpd.conf
  27. anonymous_enable=YES
  28. local_enable=YES
  29. write_enable=YES
  30. local_umask=022
  31. anon_umask=022
  32. anon_upload_enable=YES
  33. anon_mkdir_write_enable=YES
  34. dirmessage_enable=YES
  35. xferlog_enable=YES
  36. connect_from_port_20=YES
  37. xferlog_std_format=YES
  38. chroot_local_user=YES
  39. listen=YES
  40. listen_ipv6=NO
  41. allow_writeable_chroot=YES
  42. pam_service_name=vsftpd
  43. userlist_enable=YES
  44. tcp_wrappers=YES
  45. #新加的
  46. guest_enable=YES //来访用户开启
  47. guest_username=virtual //指定来访用户
  48. pam_service_name=vsftpd.vu //数据库文件
  49. #user_config_dir=/etc/vsftpd/vusers_dir //虚拟用户的配置文件目录(需要时加上,不加所有用户权限一
  50. 样)
  51. ]# systemctl start vsftpd

给虚拟用户创建独立的权限配置

  1. ]# cat /etc/vsftpd/vusers_dir/tom //给虚拟用户设置单独的权限(如需要)
  2. anon_upload_enable=YES
  3. anon_mkdir_write_enable=YES