一、简介

FTP(文件传输协议)全称是:Very Secure FTP Server。   Vsftpd是linux类操作系统上运行的ftp服务器软件。

vsftp提供三种登陆方式:1.匿名登录  2.本地用户登录  3.虚拟用户登录

vsftpd的特点:1.较高的安全性需求    2.带宽的限制    3.创建支持虚拟用户    4.支持IPV6    5.中等偏上的性能    6.可分配虚拟IP    7.高速

Ftp会话时采用了两种通道:

控制通道:与Ftp服务器进行沟通的通道,链接Ftp发送ftp指令都是通过控制通道来完成的。

数据通道:数据通道和Ftp服务器进行文件传输或则列表的通道

二、工作原理

Ftp协议中控制连接均是由客户端发起,而数据连接有两种工作方式:Port和Pasv方式

Port模式(主动模式)--> 默认

Ftp客户端首先和Ftp server的tcp 21端口建立连接,通过这个通道发送命令,客户端要接受数据的时候在这个通道上发送Port命令,Port命令包含了客户端用什么端口(一个大于1024的端口)接受数据,在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。这个时候数据连接由server向client建立一个连接。

Port交互流程:

client端:client链接server的21端口,并发送用户名密码和一个随机在1024上的端口及port命令给server,表明采用主动模式,并开放那个随机的端口。

server端:server收到client发来的Port主动模式命令与端口后,会通过自己的20端口与client那个随机的端口连接后,进行数据传输。

Pasv模式(被动方式)

建立控制通道和Port模式类似,当客户端通过这个通道发送Pasv命令的时候,Ftp server打开了一个位于1024和5000之间的随机端口并且通知客户端在这个端口上进行传输数据请求,然后Ftp server将通过这个端口进行数据传输。这个时候数据连接由client向server建立连接。

Pasv交互流程

Clietn:client连接server的21号端口,发送用户名密码及pasv命令给server,表明采用被动模式。

server:server收到client发来的pasv被动模式命令之后,把随机开放在1024上的端口告诉client,client再用自己的20 端口与server的那个随机端口进行连接后进行数据传输。

如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接。

三、安装vsftpd及相关软件

yum -y install vsftpd*  pam*   db4*

vsftpd:ftp软件      pam:认证模块       DB4:支持文件数据库

四、vsftpd的用户管理:

FTP服务器对用户的管理,在默认的情况下是根据“ /etc/passwd系统用户配置文件” 及 “/etc/group系统用户组配置文件” 来进行配置。

在FTP服务器中,匿名用户的用户名和密码都是ftp ;这个用户可以在您的操作系统中的 /etc/passwd 中能找得到;如:

  1. ftp:x:::FTP User:/var/ftp:/sbin/nologin

在ftp用户这行中,我们看到七个字段,每个字段写字段之间用:号分割;

1.ftp 是用户名

2.x 是密码字段,隐藏的

3.14 是用户的UID字段,可以自己来设定,不要和其它用户的UID相同,否则会造成系统安全问题;

4.50 用用户组的GID,可以自己设定,不要和其它用户组共用FTP的GID,否则会造成系统全全问题;

5.FTP User 是用户说明字段

6./var/ftp 是ftp用户的家目录,可以自己来定义

7./sbin/nologin 这是用户登录SHELL ,这个也是可以定义的,/sbin/nologin 表示不能登录系统;系统虚拟帐号(也被称为伪用户)一般都是这么设置。比如我们把ftp用户的/sbin/nologin 改为 /bin/bash ,这样ftp用户通过本地或者远程工具ssh或telnet以真实用户身份登录到系统。这样做对系统来说是不安全的;如果您认为一个用户没有太大的必要登录到系统,就可以只给他FTP帐号的权限,也就是说只给他FTP的权限,而不要把他的SHELL设置成 /bin/bash 等

匿名用户的属组:/etc/group

  1. ftp:x::

第一个字段为:ftp:用户组、第二个字段为:x:密码段、第三个字段为:50:GID

可以根据对比用户配置文件以及用户组配置文件中的UID得知 是否为隶属关系。

五、vsftpd的配置

)因为vsftpd默认的宿主用户是root,不符合安全性要求,所以将新建立的vsftpd服务的宿主用户的shell改为“ /sbin/nologin意思是禁止登录系统 ”:useradd vsftpd -s /sbin/nologin

2.)建立vsftpd虚拟宿主用户:useradd virtusers  -s /sbin/nologin

此次主要介绍虚拟用户,顾名思义虚拟用户在系统中是不纯在的,它们集体寄托于方才创建的“virtusers”用户,那么这个用户就相当于一个虚拟用户组了,因为这个用户的权限将影响到后续讲到的虚拟用户。

3.)调整vsftpd的配置文件(编辑所有的配置文件前最好养成备份的习惯)

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.backup.conf

vim /etc/vsftpd/vsftpd.conf

  1. #设置为NO代表不允许匿名
  2. anonymous_enable=YES
  3.  
  4. #设定本地用户可以访问,主要是虚拟宿主用户,如果设为NO那么所欲虚拟用户将无法访问。
  5. local_enable=YES
  6.  
  7. #可以进行写的操作
  8. write_enable=YES
  9.  
  10. #设定上传文件的权限掩码
  11. local_umask=
  12.  
  13. #禁止匿名用户上传
  14. anon_upload_enable=NO
  15.  
  16. #禁止匿名用户建立目录
  17. anon_mkdir_write_enable=NO
  18.  
  19. # 设定开启目录标语功能
  20. dirmessage_enable=YES
  21.  
  22. # 设定开启日志记录功能
  23. xferlog_enable=YES
  24.  
  25. #设定端口20进行数据连接
  26. connect_from_port_20=YES
  27.  
  28. #设定禁止上传文件更改宿主
  29. chown_uploads=NO
  30.  
  31. #设定vsftpd服务日志保存路劲。注意:改文件默认不纯在,需手动touch,且由于这里更改了vsftpd服务的宿主用户为手动建立的vsftpd,则必
  32. 须注意给予该用户对日志的读取权限否则服务启动失败。
  33. xferlog_file=/var/log/vsftpd.log
  34.  
  35. #设定日志使用标准的记录格式
  36. xferlog_std_format=YES
  37.  
  38. #设定空闲链接超时时间,这里使用默认/秒。
  39. #idle_session_timeout=
  40.  
  41. #设定最大连接传输时间,这里使用默认,将具体数值留给每个用户具体制定,默认120/秒
  42. data_connection_timeout=
  43.  
  44. #设定支撑vsftpd服务的宿主用户为手动建立的vsftpd用户。注意:一旦更改宿主用户,需一起与该服务相关的读写文件的读写赋权问题.
  45. nopriv_user=vsftpd
  46.  
  47. #设定支持异步传输的功能
  48. #async_abor_enable=YES
  49.  
  50. #设置vsftpd的登陆标语
  51. ftpd_banner=hello 欢迎登陆
  52.  
  53. #禁止用户登出自己的ftp主目录
  54. chroot_list_enable=NO
  55.  
  56. #禁止用户登陆ftp后使用ls -R 命令。该命令会对服务器性能造成巨大开销,如果该项运行当多个用户使用该命令会对服务器造成威胁。
  57. ls_recurse_enable=NO
  58.  
  59. #设定vsftpd服务工作在standalone模式下。所谓standalone模式就是该服务拥有自己的守护进程,在ps -A可以看出vsftpd的守护进程名。如果
  60. 不想工作在standalone模式下,可以选择SuperDaemon模式,注释掉即可,在该模式下vsftpd将没有自己的守护进程,而是由超级守护进程Xinetd全权代理,>与此同时,vsftpd服务的许多功能,将得不到实现。
  61. listen=YES
  62.  
  63. #设定userlist_file中的用户将不能使用ftp
  64. userlist_enable=YES
  65.  
  66. #设定pam服务下的vsftpd验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。
  67. pam_service_name=vsftpd
  68.  
  69. #设定支持TCPwrappers
  70. tcp_wrappers=YES
  71.  
  72. #################################################以下是关于虚拟用户支持的重要配置项目,默认.conf配置文件中是不包含这些项目的,需手动添加。
  73. #启用虚拟用户功能
  74. guest_enable=YES
  75.  
  76. #指定虚拟的宿主用户
  77. guest_username=virtusers
  78.  
  79. #设定虚拟用户的权限符合他们的宿主用户
  80. virtual_use_local_privs=YES
  81.  
  82. #设定虚拟用户个人vsftp的配置文件存放路劲。这个被指定的目录里,将被存放每个虚拟用户个性的配置文件,注意的地方是:配置文件名必须
  83. 和虚拟用户名相同。
  84. user_config_dir=/etc/vsftpd/vconf
  85.  
  86. #禁止反向域名解析,若是没有添加这个参数可能会出现用户登陆较慢,或则客户链接不上ftp的现象
  87. reverse_lookup_enable=NO

4.)建立vsftpd的日志文件,并更改属主为vsftpd的服务宿主用户

touch /var/log/vsftpd.log

chown vsftpd.vsftpd /var/log/vsftpd.log

六、配置虚拟用户

1.)建立虚拟用户配置文件的存放路径

mkdir /etc/vsftpd/vconf/

2.)建立一个虚拟用户名单文件,用来记录虚拟用户的账号和密码,格式为:一行用户名,一行密码。

vim /opt/vsftp/passwd

  1. test
  2.  
  3. test1

3.)生成虚拟用户数据文件

db_load -T -t hash -f   /opt/vsftp/passwd  /opt/vsftp/passwd.db

需要注意的是,以后对虚拟用户的增删操作完之后需要再次执行上述命令,使其生成新的数据文件。

七、设置PAM验证文件,并制定虚拟用户数据库文件进行读取

对原验证文件备份后进行更改:cp /etc/pam.d/vsftpd   /etc/pam.d/vsftpd.backup

cat /etc/pam.d/vsftpd

  1. #%PAM-1.0
  2. #####32位系统配置
  3. #auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/xnpasswd
  4. #account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/xnpasswd
  5. #####64位系统配置
  6. auth sufficient /lib64/security/pam_userdb.so db=/opt/vsftp/passwd
  7. account sufficient /lib64/security/pam_userdb.so db=/opt/vsftp/passwd
  8.  
  9. #以上两条是手动添加的,内容是对虚拟用户的安全和帐户权限进行验证。
  10. #这里的auth是指对用户的用户名口令进行验证。
  11. #这里的accout是指对用户的帐户有哪些权限哪些限制进行验证。
  12. auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
  13. auth required pam_shells.so
  14. auth include system-auth
  15. account include system-auth
  16. session include system-auth
  17. session required pam_loginuid.so

八、虚拟用户的配置

1.)定制虚拟用户模板配置文件(虚拟用户的配置文件名需要和虚拟用户一致,因为在登录ftp时输入相应的用户名之后会根据名称去加载相应的配置文件)

vim /etc/vsftpd/vconf/test

  1. local_root=/opt/vsftp/file
  2. #指定虚拟用户仓库的具路径
  3. anonymous_enable=NO
  4. #设定不允许匿名访问
  5. write_enable=YES
  6. #允许写的操作
  7. local_umask=
  8. #上传文件的权限掩码
  9. anon_upload_enable=NO
  10. #不允许匿名上传
  11. anon_mkdir_write_enable=NO
  12. #不允许匿名用户建立目录
  13. idle_session_timeout=
  14. #设定空闲链接超时时间
  15. data_connection_timeout=
  16. #设定单次传输最大时间
  17. max_clients=
  18. #设定并发客户端的访问数量
  19. max_per_ip=
  20. #设定客户端的最大线程数
  21. local_max_rate=
  22. #设定用户的最大传输速率,单位b/s

2.)建立虚拟用户的仓库目录并更改相应属主/组且赋予相应权限

mkdir -p /opt/vsftpd/file

chown virtusers:virtusers /opt/vsftpd/file

chmod 755 /opt/vsftpd/file

3.)随便建立个文件方便后续检测是否安装成功:touch  /opt/vsftpd/file/abc

九、启动方式

ftp守护进程的启动方式有两种,standalone和(xinetd/inetd)

1.)xinetd模式:大多数较新的系统采用的是xinetd超级服务守护进程,它是inetd(因特网守护进程)的替代品。在linux中一些不主要的服务,并没有作为单独的守护进程在开机时启动,而是将他们的监听端口交给一个独立的进程xinetd集中监听,当收到客户端的请求之后,xinted进程就临时启动相应服务器并把端口移交给相应的服务,客户端断开之后,相应的服务进程结束,xinetd继续监听。

有的系统可能会需要安装xinetd:yum install xinetd

若是在/etc/xinetd.d/中没有vsftpd则需要新建,并添加如下内容:

  1. service ftp
  2.  
  3. {
  4.  
  5. socket_type = stream
  6.  
  7. wait = no
  8.  
  9. user = root
  10.  
  11. server = /usr/sbin/vsftpd
  12.  
  13. nice =
  14.  
  15. disable = no
  16.  
  17. }

释掉”/etc/vsftpd.conf“中的listen=YES之后重启,以xinetd启动  /etc/rc.d/init.d/xinetd restart

2.)standalone模式:运行期间一直驻留在内存中,对接入信号反应较快但是占用了些系统资源,因此常常用于需求较高的服务。

standalone模式运行ftp:

此模式便于实现PAM验证功能,进入这种模式首先关闭xinetd下的vsftpd,设置”disable=yes“,或则注释掉/etc/initd.conf中的相应的行,然后取消/etc/vsftpd/vsftpd.conf中listen=YES的注释。

启动:service vsftpd restart

十、从其他机器登陆ftp进行测试

建议关闭iptables 与 selinux 进行测试。

#需要先下载客户端 yum -y install ftp

Name (192.168.1.67:root):test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,1,67,23,40).
150 Here comes the directory listing.
-rwxr-xr-x 2 500 500 4096 May 05 03:53 abc
226 Directory send OK.

可能会出现的错误:

1.)500 OOPS:错误

有可能是你的vsftpd.con配置文件中有不能被实别的命令,还有一种可能是命令的YES 或 NO 后面有空格

2.)若是提示权限问题,检测配置文件无误后执行:setsebool -P ftp_home_dir=1

vsftpd 对于权限的要求并不严格,对于指定ftp的宿主用户vsftpd也只是需要有日志文件的权限,其他地方默认即可,而虚拟用户的宿主则需要有相关的虚拟用户仓库路径的权限,且新版本下针对仓库的上级目录貌似不能是777权限可以是755

简介vsftpd及搭建配置的更多相关文章

  1. 简介vsftpd及搭建配置 关闭selinux 不能创建文件

    简介vsftpd及搭建配置一.简介 FTP(文件传输协议)全称是:Very Secure FTP Server. Vsftpd是linux类操作系统上运行的ftp服务器软件. vsftp提供三种登陆方 ...

  2. Struts2简介以及初步搭建配置

    一.基本介绍 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. ...

  3. Centos6.5搭建vsftpd,并配置用户和密码登录

    Centos6.5搭建vsftpd,并配置用户和密码登录 2017年05月11日 18:40:47 阅读数:6142 1)安装vsftpd yum install vsftpd 2)配置vsftpd配 ...

  4. 基于SSL加密的vsftpd 服务器搭建和配置

    基于SSL加密的VSFTPD 服务器搭建和配置 1.安装 ubuntu系统:apt-get install vsftp lftp centos系统:yum install -y vsftpd ftp ...

  5. Centos vsftpd服务器搭建

    Centos vsftpd服务器搭建 时间:2016-07-18 1.最为简单的vsftpd服务器搭建 1.安装vsftpd 1.yum 安装 yum install vsftpd 2.rpm文件安装 ...

  6. 烂泥:ubuntu下vsftpd虚拟用户配置

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我微信ilanniweb. 以前搭建vsftpd都是在centos下,本以为在ubuntu按照以前的步骤搭建即可.可 ...

  7. 转载-Linux下svn搭建配置流程

    Linux下svn搭建配置流程     一.    源文件编译安装.源文件共两个,为: 1.   下载subversion源文件 subversion-1.6.1.tar.gz http://d136 ...

  8. 【转】ibatis的简介与初步搭建应用

    [转]ibatis的简介与初步搭建应用 一.ibatis的简介 ibatis是什么东西就不介绍了,自己去找谷老师. 这里讲下自己的使用体会.之前自己学过Hibernate,是看尚学堂的视频教学的,看完 ...

  9. Spring Cloud 入门教程 - 搭建配置中心服务

    简介 Spring Cloud 提供了一个部署微服务的平台,包括了微服务中常见的组件:配置中心服务, API网关,断路器,服务注册与发现,分布式追溯,OAuth2,消费者驱动合约等.我们不必先知道每个 ...

随机推荐

  1. 集合框架(HashSet存储自定义对象保证元素唯一性)

    HashSet如何保证元素唯一性的原理 1.HashSet原理 a. 我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降 ...

  2. sql 两种分页offset和row_number简单分析

    新建临时表字段id,向临时表里插入1,2,3,4,5,6 if object_id('tempdb..#test') is not null drop table #test create table ...

  3. WebService从服务端到客户端的用例

    1.首先编写Wsdl(基于契约优先的方式),要注意的是命名空间(若是使用include或import)最好使用一致的,代码如下: <?xml version="1.0" en ...

  4. Spring的IoC容器

    Spring是一个轻量级的Java开发框架,其提供的两大基础功能为IoC和AOP,其中IoC为依赖反转(Inversion of Control).IOC容器的基本理念就是"为别人服务&qu ...

  5. C++实现四叉树

    什么是四叉树? 四叉树可以有效解决这个问题. 四叉树每一层都把地图划分四块,根据地图尺寸来决定树的层数,层数越大划分越细. 但需要对某一范围的单位筛选时,只需要定位到与范围相交的树区域,再对其区域内的 ...

  6. iOS性能之其他

    本篇文章是个引用,因为这些技术我都只是研究过,但是并没有在项目中使用,也没有深入研究,所以只能当做一个笔记了 网络请求 现在大多数的网络请求都是使用的json格式(相信没有APP再使用XML格式了吧) ...

  7. iOS 应用关于弥补安全优化问题

    1.log输出会被中奖者截获,暴露信息,影响app得性能 在工程里面的pch文件加入以下代码 // 调试状态 #define LMLog(...) NSLog(__VA_ARGS__) #else / ...

  8. new表达式如何创建对象

    new表达式如何创建对象 前言 刚学java时曾一度认为,构造器中this指向是当前类型的对象,当我们调用new表达式时,由父类的构造器生成对象的一部分并初始化,然后再由子类的构造器补充成完整的对象并 ...

  9. Android Google AdMob 广告接入示例

    Android Google AdMob 广告接入示例 [TOC] 首先请大家放心,虽然 Google搜索等服务被qiang了,但是 广告服务国内还是可以用的,真是普天同庆啊~~~噗! 其实这篇文章也 ...

  10. Entity Framework快速入门--IQueryable与IEnumberable的区别

    IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...