服务器环境:CentOS Linux release 7.4   3.10.0-693.5.2.el7.x86_64

服务器软件:vsftpd-3.0.2

FTP工作模式:主动模式和被动模式

主动模式

被动模式

vsftpd的配置文件

/etc/vsftpd/vsftpd.conf  主配置文件

/etc/vsftpd/ftpusers  黑名单

/etc/vsftpd/vsftpd_conf_migrate.sh  迁移脚本

/etc/vsftpd/user_list  用户列表,与userlist_enbale和userlist_deny选项密切相关,详见http://blog.csdn.net/bluishglc/article/details/42273197

安装vsftpd

# yum -y install vsftpd

安装libdb-utils

安装Berkeley DB工具,用于生成虚拟用户认证文件

# yum -y install libdb-utils    #CentOS7是libdb-utils
# yum -y install db4 db4-utils #CentOS6是db4-utils

宿主用户

创建宿主用户,即guest_username,所有虚拟用户都是映射宿主用户的目录权限。

# useradd -d /var/vsftp -s /sbin/nologin vsftp

主配置文件

# vi /etc/vsftpd/vsftpd.conf

#关闭匿名访问
anonymous_enable=NO
#启用本地系统用户,包括虚拟用户
local_enable=YES
#允许执行FTP命令,如果禁用,将不能进行上传、下载、删除、重命名等操作
write_enable=YES
#本地用户umask值
local_umask=
dirmessage_enable=YES
#启用日志
xferlog_enable=YES
xferlog_std_format=YES
#关闭ftp-data端口,相当于不使用主动模式
connect_from_port_20=NO
#限制用户不能离开FTP主目录,启用并设置例外用户清单
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#使用ipv4进行监听
listen=YES
listen_ipv6=NO #pam认证文件名称,位于/etc/pam.d/
pam_service_name=vsftpd
#启用全局用户例外清单
userlist_enable=YES
#启用tcp封装
tcp_wrappers=YES #虚拟用户权限是否与本地用户相同。为NO时,将与匿名用户的权限相同,在每个虚拟用户配置文件里设置匿名用户的选项等于虚拟用户的权限
virtual_use_local_privs=NO #启用guest后,所有非匿名用户将映射到guest_username进行访问,包括本地系统用户也不能使用,并且转换成一个虚拟用户,与其他虚拟用户的配置方法一样
guest_enable=YES
guest_username=vsftp
#虚拟用户配置文件目录
user_config_dir=/etc/vsftpd/vuser_conf
#启用pasv模式
pasv_enable=YES
pasv_min_port=33000
pasv_max_port=

主配置文件可参考:man vsftpd.conf或https://security.appspot.com/vsftpd/vsftpd_conf.html

chroot_list文件

chroot()会检查chroot_list文件

# touch /etc/vsftpd/chroot_list

虚拟用户列表

奇行为用户名,偶行为密码

# vi /etc/vsftpd/vuser
ftpserver

虚拟用户认证文件

# db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
# chmod 600 /etc/vsftpd/vuser.db

虚拟用户认证配置

注释掉其他本地用户认证的内容,因为启用了guest_enable后,本地用户将失效,所有非匿名用户变成虚拟用户

# cp /etc/pam.d/vsftpd{,.bak}
# vi /etc/pam.d/vsftpd
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser

虚拟用户配置文件

# mkdir /etc/vsftpd/vuser_conf/
# vi /etc/vsftpd/vuser_conf/ftpserver  #文件名与对应FTP虚拟用户一致
local_root=/var/vsftp/ftpserver  #虚拟用户主目录,用户和组必须指定为宿主用户vsftp
#vsftpd主配置文件中已规定虚拟用户权限与匿名用户一致,因此以下针对匿名用户的权限配置即为虚拟用户的权限
anon_umask=
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

虚拟用户主目录和权限

最新版vsftpd不允许用户主目录有w权限,因此在主目录下新建一个子目录,赋予700权限。所有上传、下载、删除、重命名等操作只能在子目录中进行

# mkdir -p /var/vsftp/ftpserver/newdir
# chown -R vsftp.vsftp /var/vsftp
# chmod -R /var/vsftp
# chmod -R 700 /var/vsftp/newdir

SELINUX

# setsebool -P ftpd_full_access on

防火墙

# iptables -I INPUT -p tcp --dport  -j ACCEPT  #FTP连接端口
# iptables -I INPUT -p tcp --dport : -j ACCEPT  #pasv模式下的随机端口
# iptables-save >/etc/sysconfig/iptables  #保存防火墙配置

重启

# systemctl restart iptables.service
# systemctl restart vsftpd.service

最新文章

  1. ActiveMQ笔记(3):基于Networks of Brokers的HA方案
  2. php-fpm优化方法详解
  3. Objective-C中的单例模式
  4. Android中Http加载如何得到Cookie和 WebView 加载网页如何得到的Cookie
  5. DP - 2016网易杭研笔试题A
  6. javascript设计模式-抽象工厂模式
  7. 【Android 界面效果25】android中include标签的使用
  8. [jobdu]二进制中1的个数
  9. win7 64bit+vs2010 操作注册表
  10. grunt轻松入门
  11. 在Intellij idea 2017中运行tomcat 8.5
  12. mssql sql server 系统更新,如何正确的增加表字段
  13. jQuery 查找元素1
  14. node和npm的安装和镜像源的修改
  15. [PAClient Error] Error: E4356 File does not exist armv7
  16. ajax跨域原理和cors跨域资源共享
  17. hibernate框架模板(可复制修改)
  18. linux常用工具及命令
  19. Java数组、集合的三种遍历方式(包懂)
  20. 去掉python的警告

热门文章

  1. Python CSV 超简明用法
  2. 修改host可以上的一些网站
  3. bzoj3713 [PA2014]Iloczyn|暴力(模拟)
  4. 编写通用shell脚本启动java项目,适用于多数服务,只需修改服务名即可
  5. 跨平台移动端APP开发---简单高效的MUI框架
  6. Python s12 Day1 笔记及作业
  7. Struts201---环境搭配
  8. 我的第一个python web开发框架(5)——开发前准备工作(了解编码前需要知道的一些常识)
  9. SQL Server 锁机制 悲观锁 乐观锁 实测解析
  10. 实现mysql在windows server 2008下自动备份