原文发表于cu:2016-03-11

参考文档:

  1. FTP原理:http://vbird.dic.ksu.edu.tw/linux_server/0410vsftpd_1.php
  2. FTP配置:http://vbird.dic.ksu.edu.tw/linux_server/0410vsftpd_2.php
  3. 虚拟用户配置:http://yuanbin.blog.51cto.com/363003/129071

一.环境

OS

CentOS6.7 x86_64

网络

Sever:192.168.1.254

Client:192.168.1.100

二.安装与配置

1. 安装

使用yum安装即可:yum install vsftpd -y

2. 软件模块

  1. /etc/vsftpd/vsftpd.conf
  2. vsftpd的配置文件,相关参数设定主要在这个文件进行。
  3.  
  4. /etc/pam.d/vsftpd
  5. vsftpd使用 PAM 模块时的相关配置文件,主要用来作为身份认证之用,还有一些用户身份的抵挡功能, 也是透过这个档案来达成的。
  6.  
  7. /etc/vsftpd/ftpusers
  8. 与/etc/pam.d/vsftpd文件有关,也就是 PAM 模块中所指定的那个无法登入的用户配置文件。这个档案的设定简单,只要将“不想让他登入 FTP 的账号”写入这个文件即可。
  9.  
  10. /etc/vsftpd/user_list
  11. 这个文件是否生效与vsftpd.conf内的两个参数有关,分别是“userlist_enable”与“userlist_deny”,会根据vsftpd.conf配置文件内的userlist_deny={YES/NO}不同而不同(设置为YES时,是阻止user_list中的账号登入;设置为NO时,是允许user_list中的账号登入)。
  12. /etc/vsftpd/ftpusersPAM模块的安全设定文件,而/etc/vsftpd/user_listvsftpd自定义的安全设定文件。
  13. 这个文件与/etc/vsftpd/ftpusers几乎一样,在默认情况下,可以将不希望可登入vsftpd账号写入这里。
  14.  
  15. /etc/vsftpd/chroot_list
  16. 此文件默认是没有的,需要手工建立,主要作用是将某些账号chroot在其家目录。
  17. 文件是否生效与vsftpd.conf的“chroot_list_enable”与“chroot_list_file”两个参数有关。
  18.  
  19. /usr/sbin/vsftpd
  20. vsftpd的执行文件。
  21.  
  22. /var/ftp/
  23. vsftpd默认匿名账户登入根目录,与ftp账号的家目录有关。

3. 配置文件简介

以下列出主要的一些配置项供参考。

服务器环境较相关的设置

  1. connect_from_port_20=YES (NO)
  2. 主动式FTP服务器portftp-data的端口。
  3. #主动式ftp指server接到client的ftp请求后,由server的20端口主动连接client告知的数据接收port,建立数据传输通道;
  4. #被动式ftp指server接到client的ftp请求后,随机选取大于1024的port告知client,由client主动发起ftp数据通道连接;
  5. #在有ftp的server与client之间有防火墙或nat时,基本只能使用被动式ftp。
  6.  
  7. listen_port=21
  8. vsftpd的命令通道port,如果要使用非正规的端口,在此修改;修改端口号指适合以stand alone方式来启动的vsftpd(对于super daemon 无效)。
  9.  
  10. dirmessage_enable=YES (NO)
  11. ftp用户进入某个目录时,会显示该目录需要注意的内容,显示的档案默认是 .message ,可以使用下面的设定项目来修改显示内容。
  12.  
  13. message_file=.message
  14. dirmessage_enable=YES时,可以设定这个项目来让vsftpd 寻找该文件来显示信息。
  15.  
  16. listen=YES (NO)
  17. 如果设置为YES,表示vsftpd是以stand alone的方式来启动;设置为NO时,vsftpdsuper daemon方式启动。
  18.  
  19. pasv_enable=YES (NO)
  20. 支持数据流的被动式联机模式(passive mode),请设定为YES
  21.  
  22. use_localtime=YES (NO)
  23. 是否使用本地时间?vsftpd默认使用GMT时间(格林威治),建议设置YES
  24.  
  25. write_enable=YES (NO)
  26. 是否允许用户上传数据。
  27.  
  28. connect_timeout=60
  29. 单位是秒,在数据连接的主动式联机模式下,发出的连接信号在 60 秒内得不到client响应,则不等待并强制断线。
  30.  
  31. accept_timeout=60
  32. client以被动式PASV进行数据传输时,如果server端启用passive port并等待client超过60秒而无响应,那么就强制断线。这个设置与connect_timeout类似,不过一个是管理主动联机,一个管理被动联机。
  33.  
  34. data_connection_timeout=300
  35. 如果serverclient的数据联机已经成功建立(不论主动还是被动联机),但是可能由于线路问题导致300秒内没有顺利的完成数据传送,那client的联机就会被vsftpd 强制断线。
  36.  
  37. idle_session_timeout=300
  38. 如果client300 秒内都无命令动作,强制断线。
  39.  
  40. max_clients=0
  41. 如果vsftpd stand alone方式启动,那么这个设定值可以设置在同一时间,最多有多少 client可以同时连上vsftpd
  42.  
  43. max_per_ip=0
  44. max_clients类似,同一个IP同一时间可允许多少联机。
  45.  
  46. pasv_min_port=0, pasv_max_port=0
  47. passive mode 使用的port有关,如果你想要使用654006541011port来进行被动式联机模式的连接,可以这样设定pasv_max_port=65410以及 pasv_min_port=65400 如果是 0 的话,表示随机取用而不限制。
  48.  
  49. ftpd_banner=一些文字说明
  50. ftp用户登入时,在 ftp client软件上会显示的说明文字。建议使用下面的banner_file设定值取代这个项目。
  51.  
  52. banner_file=/path/file
  53. 指定某个纯文本文件作为用户登入vsftpd服务器时所显示的欢迎字眼。同时,也可以放置一些让用户知道本服务器的目录结构。

与实体用户相关的设置

  1. guest_enable=YES(NO)
  2. 设为YES时,任何实体账户,都会被假设成为guest (所以默认是NO)。guestvsftpd 当中,默认取得ftp账户的相关权限,但可以通过 guest_username来修改。
  3. #使用虚拟账户登录FTP时需要设置为YES。
  4.  
  5. guest_username=ftp
  6. guest_enable=YES 时生效,指定guest的身份(虚拟账户统一获得此设置账号的权限)。
  7.  
  8. local_enable=YES(NO)
  9. 此设置值必须要为YES时,在/etc/passwd内的账号才能以实体用户的方式登入vsftpd
  10.  
  11. local_max_rate=0
  12. 实体用户的传输速度限制,单位为bytes/secon0为不限制。
  13.  
  14. chroot_local_user=YES(NO)
  15. 默认情况下,是否要将使用者限制在自己的家目录之内(chroot)。如果是YES代表用户默认就会被chroot;如果是NO,则默认不chroot。实际使用需要与下面两个参数互相参考。为了安全性,建议设置为YES
  16.  
  17. chroot_list_enable=YES(NO)
  18. 是否启用chroot写入列表的功能。与下面的chroot_list_flie有关。此值开启时下面的列表档案才会生效。
  19.  
  20. chroot_list_file=/etc/vsftpd.chroot_list
  21. 如果chroot_list_enable=YES,那么此设置生效。
  22.  
  23. userlist_enable=YES(NO)
  24. 是否借助vsftpd的阻止机制来处理某些不受欢迎的账号,与下面的参数设定有关。
  25.  
  26. userlist_deny=YES(NO)
  27. userlist_enable=YES时才会生效。若设定为 YES 时,则当用户账号被列入到user_list文档时,在该文档内的账号将不能登入vsftpd 服务器;设置为NO时,则允许user_list中的账号登入。该档案文件名与下列设定项目有关。
  28.  
  29. userlist_file=/etc/vsftpd/user_list
  30. 若上面userlist_deny=YES时,则设置文档生效,在这文件内的账号都无法登录vsftpd

匿名用户登入的相关设置

  1. anonymous_enable=YES(NO)
  2. 是否允许anonymous登入vsftpd。默认是YES,下面所有相关设置都需要设置为 anonymous_enable=YES 之后才生效。
  3.  
  4. anon_world_readable_only=YES(NO)
  5. 仅允许anonymous 具有下载可读档案的权限,默认是YES
  6.  
  7. anon_other_write_enable=YES(NO)
  8. 是否允许anonymous具有除了写入之外的权限,包括删除与改写服务器上的文件及文件名等权限,默认是NO。如果需要设置为YES,那么开放给anonymous写入的目录需要调整权限,让vsftpdPID 拥有者可以写入才行。
  9.  
  10. anon_mkdir_write_enable=YES(NO)
  11. 是否让anonymous具有建立目录的权限,默认是NO。如果要设置为YES,那么anony_other_write_enable必须设置为YES
  12.  
  13. anon_upload_enable=YES(NO)
  14. 是否让anonymous具有上传数据的功能,默认是NO。如果要设定为 YES ,则 anon_other_write_enable必须设置为YES
  15.  
  16. deny_email_enable=YES(NO)
  17. 禁止某些特殊的email addressanonymous登入。如果以anonymous登入服务器时,要求输入的密码是email address,如果不让某些email address登入,可以使用此设置取消其登入权限,需与下面的设置值配合。
  18.  
  19. banned_email_file=/etc/vsftpd/banned_emails
  20. 如果deny_email_enable=YES时,可以使用此设置文件来规定哪些email address不可登入。
  21.  
  22. no_anon_password=YES(NO)
  23. 当设定为YES时,表示anonymous将会略过密码检验步骤,而直接登入。
  24.  
  25. non_max_rate=0
  26. 单位为bytes/s,限制anonymous的传输速度,如果是0则不限制.
  27.  
  28. anon_umask=077
  29. 限制anonymous上传档案的权限。

关于系统安全方面的一些设置

  1. ascii_download_enable=YES(NO)
  2. 如果设定为YES,那么client优先(默认)使用ASCII 格式下载文件。
  3.  
  4. ascii_upload_enable=YES(NO)
  5. 使用ASCII 格式上传文件,默认是NO
  6.  
  7. one_process_model=YES(NO)
  8. 此设定值比较危险,当设置为YES时,表示每个建立的session都会有一个守护进程负责,可以增加vsftpd的性能。不过除非你的系统比较安全,而且硬件配备比较高,否则容易耗尽系统资源,一般建议设置为NO
  9.  
  10. tcp_wrappers=YES(NO)
  11. 建议设置为YES
  12.  
  13. xferlog_enable=YES(NO)
  14. 当设定为YES时,用户上传与下载文件都会被纪录起来,记录文件与下面的设置值相关。
  15.  
  16. xferlog_file=/var/log/xferlog
  17. 如果xferlog_enable=YES,这里的设置就有效。
  18.  
  19. xferlog_std_format=YES(NO)
  20. 是否设置为wu ftp相同的登录文件格式,默认是NO,因为登录档会比较容易读。如果有使用wu ftp登录文件的分析软件,这里需要设定为YES
  21.  
  22. dual_log_enable=YES, vsftpd_log_file=/var/log/vsftpd.log
  23. 通常/var/log/xferlog只记录上传与下载,此设置可以开启用户登录日志。
  24.  
  25. nopriv_user=nobody
  26. vsftpd默认以nobody作为此服务执行者的权限,因为nobody的权限很低,因此即使被入侵,入侵者也仅能取得nobody的权限。
  27.  
  28. pam_service_name=vsftpd
  29. pam模块,一般放置为/etc/pam.d/vsftpd文件。

4. 必要的安全放行配置

SELinux

默认情况下,vsftpd不允许账户登入取得家目录数据(登入使用dir,但不能取得任何数据),主要是由SELinux引起的。如下:

  1. [root@localhost ~]# getsebool -a | grep ftp
  2. allow_ftpd_anon_write --> off
  3. allow_ftpd_full_access --> off
  4. allow_ftpd_use_cifs --> off
  5. allow_ftpd_use_nfs --> off
  6. ftp_home_dir --> off
  7. #将“allow_ftpd_full_access”与“ftp_home_dir”设置为“on”即可;
  8. #此两项设置需要一点时间,勿着急。
  9. [root@localhost ~]# setsebool -P allow_ftpd_full_access 1
  10. [root@localhost ~]# setsebool -P ftp_home_dir 1
  11.  
  12. [root@localhost ~]# getsebool -a | grep ftp
  13. allow_ftpd_anon_write --> off
  14. allow_ftpd_full_access --> on
  15. allow_ftpd_use_cifs --> off
  16. allow_ftpd_use_nfs --> off
  17. ftp_home_dir --> on

iptables

FTP使用两个端口,另有随机启用的数据流端口,及被动联机的服务器端口等,大概需要如下规则:

  1. #加入iptables的“ip_nat_ftp”与“ip_conntrack_ftp”两个模块;
  2. #大概在底6行,以下两者顺序不可调换。
  3. [root@localhost ~]# vim /etc/sysconfig/iptables-config
  4. IPTABLES_MODULES="ip_conntrack_ftp"
  5. IPTABLES_MODULES="ip_nat_ftp"
  6.  
  7. #开放port 21给访问者使用;
  8. #开放随机启动的数据流端口给访问者连接使用;
  9. #允许client大于1024的随机端口主动发起数据通道连接,server端使用端口65401~65410响应。
  10. [root@localhost ~]# vim /etc/sysconfig/iptables
  11. -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
  12. -A INPUT -m state --state NEW -m tcp -p tcp --dport 65401:65410 --sport 1024:65534 -j ACCEPT
  13.  
  14. #重启iptables
  15. service iptables restart

5. 虚拟账户配置

添加虚拟用户及口令文件

  1. #新建虚拟用户文件
  2. [root@localhost ~]# vim /etc/vsftpd/vftpuser.txt
  3.  
  4. test1 #用户名
  5. 123456 #密码
  6. test2
  7. 123456

生成虚拟用户口令认证文件

将vftpuser.txt虚拟用户口令文件转换成系统可识别的口令认证文件。

  1. #查看系统有没有安装生成口令认证文件所需的软件db4-utils,如果没有安装采用rpm或者yum方式安装。
  2. [root@localhost ~]# rpm -qa | grep db4-utils
  3.  
  4. #使用db_load命令生成虚拟用户口令认证文件。
  5. [root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vftpuser.db

编辑vsftpd的PAM认证文件

  1. #将文件中其他行都注释掉,添加下面这两行:
  2. [root@CentOS5 /]#vi /etc/pam.d/vsftpd
  3.  
  4. #%PAM-1.0
  5. auth required pam_userdb.so db=/etc/vsftpd/vftpuser
  6. account required pam_userdb.so db=/etc/vsftpd/vftpuser
  7. #路径为生成的db路径,去掉后缀
  8.  
  9. #session optional pam_keyinit.so force revoke
  10. #auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
  11. #auth required pam_shells.so
  12. #auth include password-auth
  13. #account include password-auth
  14. #session required pam_loginuid.so
  15. #session include password-auth

建立本地映射用户并设置宿主目录权限

  1. #所有的虚拟用户需要映射一个系统用户,此系统用户不需要密码,不可登入系统
  2. [root@localhost ~]# useradd -d /home/vftpsite -s /sbin/nologin vftpuser
  3.  
  4. #注意虚拟用户家目录的权限问题,否则可能导致后面登入但无法读写
  5. [root@localhost ~]# chown -R vftpuser:vftpuser /home/vftpsite

配置vsftpd.conf(虚拟用户配置项相关)

  1. [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
  2.  
  3. guest_enable=YES #开启虚拟用户
  4. guest_username=vftpuser #FTP虚拟用户对应的系统用户
  5. pam_service_name=vsftpd #PAM认证文件

重启vsftpd服务

  1. [root@localhost ~]# service vsftpd restart

测试虚拟用户登录

  1. C:\>ftp 192.168.1.254
  2. 连接到 192.168.1.254
  3. 220 (vsFTPd 2.2.2)
  4. 用户(192.168.1.254:(none)): test1
  5. 331 Please specify the password.
  6. 密码:
  7. 230 Login successful.
  8. ftp> dir
  9. 200 PORT command successful. Consider using PASV.
  10. 150 Here comes the directory listing.
  11. -rw-r--r-- 1 0 0 0 Mar 02 21:04 test
  12. 226 Directory send OK.
  13. ftp: 收到 62 字节,用时 0.00 62.00千字节/秒。
  14. ftp>

6. 虚拟用户高级设置

virtual_use_local_privs参数

  1. #虚拟用户与本地用户有相同的权限
  2. virtual_use_local_privs=YES
  3.  
  4. #虚拟用户与匿名用户有相同的权限,默认是NO。
  5. virtual_use_local_privs=NO

各虚拟用户独立的配置文件(未验证)

  1. [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
  2.  
  3. #在配置文件中指定一个存放各虚拟用户独立配置文件的目录路径,添加:
  4. user_config_dir=/etc/vsftpd/vftpuser_conf
  5.  
  6. #编辑test1的配置文件:
  7. [root@localhost ~]# vim /etc/vsftpd/vftpuser_conf/test1
  8.  
  9. #可针对读/写/下载/上传等独立配置权限,如:
  10. write_enable=YES #开放写权限
  11. anon_world_readable_only=NO #开放下载权限
  12. anon_upload_enable=YES #开放上传权限
  13. anon_mkdir_write_enable=YES #开放创建目录权限
  14. anon_other_write_enable=YES #开放删除与重命名权限

vsftpd安装配置虚拟用户的更多相关文章

  1. vsftpd安装及虚拟用户配置

    服务器环境:CentOS6.9 Linux 2.6.32-696.10.1.el6.x86_64 安装vsftpd.db4.db4-utils # yum -y install vsftpd db4 ...

  2. ubuntu 12.04 配置vsftpd 服务,添加虚拟用户,ssl加密

    1.对于12.04的vsftpd 有一些bug,推荐安装版本vsftpd_2.3.5-1ubuntu2ppa1_amd64.debapt-get install python-software-pro ...

  3. vsftpd服务安装与虚拟用户配置

    vsftpd的全名是“Very secure FTP Daemon” 一.安装vsftpd安装db4-util用于生成认证文件 yum -y install db4-utils 安装vsftpd yu ...

  4. vsftpd配置虚拟用户

    #安装vsftpd yum -y install vsftpd #创建本地ftp账户 groupadd ftpuser useradd -g ftpuser -s /sbin/nologin ftpu ...

  5. vsftpd配置虚拟用户为登录用户02

    1.安装vsftpd 安装依赖包: yum -y install pam pam-devel db4 de4-devel db4-uitls db4-tcl 新建vsftpd系统用户: #建立Vsft ...

  6. vsftpd 安装配置

    # vsftp 安装yum install vsftpd -y # 配置用户名密码时需要yum install db* db4* -y# 启动vsftpdservice vsftpd start # ...

  7. CentOS6.3下搭建vsftpd(采用虚拟用户设置)

    CentOS6.3如果在安装的时候所有安装选项都打勾的话就含有单间vsftpd必备的软件:vsftpd.pam*.db4* 检查是否安装: [root@centos6 ~]# rpm -qa | gr ...

  8. vsftpd 安装配置详细教程

    linux下ftp软件不少,大致特点:<br /> wu-ftp:比较老牌,但针对它的攻击比较多,设置比较麻烦,但功能比较强大.<br /> vsftpd:功能强大,配置也比较 ...

  9. Linux系统学习 十八、VSFTP服务—虚拟用户访问—配置虚拟用户访问

    配置虚拟用户访问 首先至少要关闭userlist 改完配置文件是要重启服务来使它生效 其实在刚装好vsftp的时候的配置文件不用修改的情况下配置虚拟用户访问控制是最好的 local_root选项不影响 ...

随机推荐

  1. 2018 HNUCM ACM集训队选拔第一场

    1.小c的倍数问题 http://acm.hdu.edu.cn/showproblem.php?pid=6108 分析: 比赛的时候真的是各种想,结果发现自己是想多了...数论基础差得一批 求有多少个 ...

  2. datatable的excel导入,其中有关于datatables的很多参数设置

    datatable的excel导入,其中有关于datatables的很多参数设置 http://www.cnblogs.com/liyuhuan/p/5633095.html

  3. Datatable报错Uncaught TypeError: Cannot read property 'cell' of undefined

    使用Datatables时,报出错误 仔细想想,是因为我在columns里加入了id,并设置visible:false 但是却没在下面的HTML部分多加一个 th 虽然我觉得因为id是隐藏的,不用加上 ...

  4. 项目中cxf和weblogic整合时报错的问题

    GJYW项目使用的weblogic版本是10.3.6,cxf使用的版本是3.1.4 在将项目部署到weblogic服务器上时就会报错,通过下面的方式可以解决weblogic和cxf框架在一起报错的问题 ...

  5. java核心技术-多线程之引导概念

    前两篇文章分别讲了,Java线程相关基础概念以及线程的内存模型,本节作为后续章节的引导,个人认为对于学习后面的只是还是比较重要.好了,既然说了多线程,那么首先要弄清以下几个问题: 1. 什么是多线程? ...

  6. Eclipse部署Web项目,常用操作和常见错误的解决方案

    部署Web项目到tomcat 在eclipse中找到Servers项,打开服务器(F3)(建议直接删除服务器,重新建立再设置比较好)1.Servers Locations 中选择Use Tomcat ...

  7. js基础(闭包实例)

    1,常用发送短信的闭包实现: function sms() { var count = 60; return { start: function() { if(count == 0) { count ...

  8. 【Linux】Linux文件跟目录管理

    熟悉Linux的大家都知道,在Linux中,一切皆文件,可能在有些人的理解中,Linux跟我们的Windows差不多,是都具有图形操作界面的一种操作系统,但是更深入的来说,Linux更偏向于用命令操作 ...

  9. TensorFlow的前世和今生

    TensorFlow的前世和今生 TensorFlow是一个开放源码的软件库,用于跨一系列任务的数据流处理编程.TensorFlow是一个符号化的数学应用库,广泛用于机器学习,例如神经网络.在谷歌公司 ...

  10. 前端解析zip文件

    使用jszip.js,read.js. 传入fileinput选中的文件对象 function handleFile(f) { JSZip.loadAsync(f) .then(function(zi ...