1. https://blog.csdn.net/qq_36938617/article/details/89077845
  2. https://blog.51cto.com/meiling/2071122
  3. https://blog.csdn.net/ice_bird/article/details/91872804
  4. yum安装vsftpd
  5. yum install -y vsftpd
  6. 启动服务
  7. systemctl start vsftpd.service&&systemctl enable vsftpd.service
  8. 修改配置文件
  9. vi /etc/vsftpd/vsftpd.conf
  10. anonymous_enable=NO #12行 不允许匿名访问
  11. local_enable=YES #16行 设定本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问。write_enable=YES #19行 设定可以进行写操作。
  12. local_umask=022 #23行 设定上传后文件的权限掩码,文件644,文件夹755
  13. anon_upload_enable=NO #29行 禁止匿名用户上传文件。
  14. anon_mkdir_write_enable=NO #33行 禁止匿名用户建立目录。
  15. dirmessage_enable=NO #37行 设定开启目录标语功能 看自己需求。
  16. xferlog_enable=YES #40行 设定开启日志记录功能。
  17. chown_uploads=NO #48行 设定禁止上传文件更改宿主。
  18. xferlog_file=/var/log/vsftpd.log #53行 设定Vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来,并且由于这里更改了Vsftpd的服务宿主用户为手动建立的Vsftpd。必须注意给与该用户对日志的写入权限,否则服务将启动失败。xferlog_std_format=YES #57行 设定日志使用标准的记录格式。
  19. idle_session_timeout=600 #60行 设定空闲连接超时时间,这里使用默认。将具体数值留给每个具体用户具体指定,当然如果不指定的话,还是使用这里的默认值600,单位秒。
  20. nopriv_user=vsftpd #67行 设定支撑Vsftpd服务的宿主用户为手动建立的Vsftpd用户。注意,一旦做出更改宿主用户后,必须注意一起与该服务相关的读写文件的读写赋权问题。比如日志文件就必须给与该用户写入权限等。
  21. async_abor_enable=YES #72行 设定支持异步传输功能。
  22. ascii_upload_enable=YES #83行 设定支持ASCII模式的上传功能。
  23. ascii_download_enable=YES #84行 设定支持ASCII模式的下载功能。
  24. #cmds_allowed=ABOR,RETR,ACCT,ALLO,APPE,CDUP,CWD,EPRT,EPSV,FEAT,HELP,LIST,MDTM,MKD,MODE,NLST,NOOP,OPTS,PASS,PASV,PORT,PWD,QUIT,REIN,REST,SITE,SIZE,SMNT,STAT,STOU,STRU,SYST,TYPE,USER,XCUP,XCWD,XMKD,XPWD,XRMD,BYE,STOR
  25. #cmds_allowed需自己添加可以对vsftpd权限控制更加细化中间并不能有空格和回车
  26. chroot_local_user=YES #101行 将所有用户限制在主目录
  27. chroot_list_enable=NO #102行 所有用户都被限制在其主目录下。如果配置为YES,chroot_list_file指定的用户列表,将不受限制。pam_service_name=vsftpd #126行 设定,启用pam认证,并指定认证文件名/etc/pam.d/vsftpd。
  28. userlist_enable=YES #127行 设定userlist_file中的用户将不得使用FTP。
  29. tcp_wrappers=YES #128行 设定支持TCP Wrappers。
  30. #connect_from_port_21=YES #43行 默认21端口 注释掉。
  31. pasv_enable=YES  #需添加 开启被动模式
  32. listen_port=20021 #需添加 添加监听端口
  33. pasv_min_port=20022   #需添加 设置被动模式的端口范围,最小端口号~最大端口号
  34. pasv_max_port=20025   #需添加 端口范围自己调整
  35. #local_root=/var/ftp/ #需添加 用户登录路径,local_root 针对系统用户
  36. #anon_root=/var/ftp/ #需添加 anon_root 针对匿名用户
  37. allow_writeable_chroot=YES #需添加(重要) 新版析vsfptd加入了安全需求,切根不允许写,要加这个选项
  38. user_config_dir=/etc/vsftpd/userconfig #需添加 用户配置目录
  39. 防火墙开放端口
  40. firewall-cmd --zone=public --add-port=20021-20025/tcp --permanent
  41. firewall-cmd --reload
  42. 关闭selinux
  43. vi /etc/sysconfig/selinux
  44. SELINUX=enforcing 改为 SELINUX=disabled
  45. 重启服务reboot
  46. groupadd vsftpd
  47. useradd -g vsftpd -d /var/ftp -s /sbin/nologin vsftpd
  48. 之后配置pam认证
  49. 创建用户列表(一行用户名,一行密码)
  50. vi /etc/vsftpd/userconfig/user_list
  51. 例:
  52. testuser
  53. testpasswd
  54. 用户文件建立后生成数据库文件
  55. db_load -T -t hash -f /etc/vsftpd/userconfig/user_list /etc/vsftpd/userconfig/user_list.db
  56. vi /etc/pam.d/vsftpd
  57. auth required pam_userdb.so db=/etc/vsftpd/userconfig/user_list
  58. account required pam_userdb.so db=/etc/vsftpd/userconfig/user_list
  59. 最后在/etc/vsftpd/userconfig目录下建立与用户名相同的文件并配置相应的权
  60. 例:
  61. vi /etc/vsftpd/userconfig/testuser
  62. local_root=/var/ftp/testuser
  63. write_enable=YES #允许虚拟用户有写得权限
  64. anon_world_readable_only=YES #允许匿名用户可以下载和读取的权限
  65. anon_upload_enable=YES #允许匿名用户有上传文件权限,在write_enable=YES时有效
  66. anon_mkdir_write_enable=YES #允许匿名用户有创建目录权限write_enable=YES时有效
  67. anon_other_write_enable=YES #允许匿名用户有其他权限(删除,重命名),在write_enable=YES时有效
  68. 原文链接:https://blog.csdn.net/ice_bird/article/details/91872804
  1. 17)pam_service_name=vsftpd(虚拟用户使用PAM认证方式,这里是设置PAM使用的名称,默认即可,与/etc/pam.d/vsftpd对应) userlist_enable=YES(是否启用vsftpd.user_list文件,黑名单,白名单都可以
  2. 17pam_service_name=vsftpd(虚拟用户使用PAM认证方式,这里是设置PAM使用的名称,默认即可,与/etc/pam.d/vsftpd对应) userlist_enable=YES(是否启用vsftpd.user_list文件,黑名单,白名单都可以
  3. 18)pasv_min_port=61001(被动模式使用端口范围最小值)
  4. 19)pasv_max_port=62000(被动模式使用端口范围最大值)
  5. 20)pasv_enable=YES(pasv_enable=YES/NOYES
  6. 若设置为YES,则使用PASV工作模式;若设置为NO,则使用PORT模式。默认值为YES,即使用PASV工作模式。
  7. FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
  8. 一、PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
  9. 当需要传送数据时,客户端在命令链路上用 PORT命令告诉服务器:“我打开了****端口,你过来连接我”。于是服务器从20端口向客户端的****端口发送连接请求,建立一条数据链路来传送数据。
  10. 二、PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
  11. 当需要传送数据时,服务器在命令链路上用 PASV命令告诉客户端:“我打开了****端口,你过来连接我”。于是客户端向服务器的****端口发送连接请求,建立一条数据链路来传送数据。
  12. 从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。
  13. 原文链接:https://blog.csdn.net/qq_36938617/article/details/89077845
  1. cat /etc/pam.d/vsftpd
  2. #%PAM-1.0
  3. #session optional pam_keyinit.so force revoke
  4. #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
  5. #auth required pam_shells.so
  6. #auth include password-auth
  7. #account include password-auth
  8. #session required pam_loginuid.so
  9. #session include password-auth
  10. auth required pam_userdb.so db=/etc/vsftpd/accounts
  11. account required pam_userdb.so db=/etc/vsftpd/accounts

虚拟用户登录

  1. https://blog.51cto.com/meiling/2071122
  2. pam_service_name=vsftpd
  3. #虚拟用户使用PAM认证方式。
  4. guest_enable= YES/NONO
  5. #设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。
  6. guest_username=ftp
  7. #启用虚拟用户。默认值为NO。
  8. virtual_use_local_privs=YES/NONO
  9. #这里用来映射虚拟用户。默认值为ftp。
  10. #当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数
  11. 是关闭的(NO)。