FTP服务

  1. 本章机构

  2. 简介
    1. File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文件传输协议"。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的不同操作系统有不同的FTP的应用程序,而所有这些应用程序都遵守同一个协议以传输文件,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。
    2. "下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是从本地将文件从自己的计算机中拷贝至远程主机上。
    3. 支持FTP协议的服务器就是FTP服务器。
  3. 工作模式
    1. FTP连接及传输模式
      1. 控制连接:TCP 21,用于发送FTP命令信息
      2. 数据连接:TCP 20,用于上传、下载数据
    2. 数据连接的建立类型:
      1. 主动模式:服务器从20端口主动向客户端发起连接
      2. 被动模式:服务器在指定范围内某个端口被动等待客户端连接

  4. 服务器端和客户端程序
    1. FTP用户的类型:

      匿名用户:annonymous或ftp

      本地用户:

      账号名称、密码等信息保存在passwd、shadow文件中

    2. 常见的FTP服务器程序:

      IIS、Serv-U

      wu-ftpd、Proftpd

      vsftpd(Very Secure FTP Daemon)

    3. 常见的FTP客户端程序:

      CuteFTP、FlashFXP、LeapFTP、Filezilla

      gftp、Kuftp

      FTP命令

  5. 相关配置
    1. vsftpd软件包

      官方站点:http://vsftp.beasts.org/

      主程序:/usr/sbin/vsftpd

      服务名:vsftpd

      用户控制列表文件:

      /etc/vsftpd/ftpusers

      /etc/vsftpd/user_list

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

  1. 配置选项
    1. 匿名权限控制:

      anonymous_enable=YES:启用匿名访问

      anon_umask=022:匿名用户所上传文件的权限掩码

      anon_root=/var/ftp:匿名用户的FTP根目录

      anon_upload_enable=YES:允许上传文件

      anon_mkdir_write_enable=YES:允许创建目录

      anon_other_write_enable=YES:开放其他写入权

      anon_max_rate=0:限制最大传输速率(字节/秒)

    2. 本地用户权限控制:

      local_enable=YES:是否启用本地系统用户

      local_umask=022:本地用户所上传文件的权限掩码

      local_root=/var/ftp:设置本地用户的FTP根目录

      chroot_local_user=YES:是否将用户禁锢在主目录

      local_max_rate=0:限制最大传输速率(字节/秒)

    3. 常用的全局配置项:

    listen_address=192.168.131.129:设置监听的IP地址

    listen_port=21:设置监听FTP服务的端口号

    write_enable=YES:是否启用写入权限

    download_enable=YES:是否允许下载文件

    max_clients=0:限制并发客户端连接数

    max_per_ip=0:限制同一个IP地址的并发连接数

    pasv_enable=YES #启用被动模式

    pasv_min_port=5000:将客户端的数据连接端口改在50000-60000之间

    pasv_max_port:60000

    1. 限制访问

      userlist_enable=YES:是否启用user_list列表文件

      userlist_deny=YES:禁止列表文件里面的用户访问

      userlist_deny=NO:允许列表里面的用户访问

    2. 其它安全选项

      connect_timeout=60 :连接超时时间

      accept_timeout=60:请求超时时间

      data_connection_timeout=300 :数据连接超时时间

      idle_session_timeout=300 :会话超时时间

      ftpd_banner=xxx和banner_file=/path/file :显示登陆信息

      tcp_wrappers=YES

      #启用tcp_wrappers,即/etc/hosts.allow和/etc/hosts.deny

  2. 案例1:匿名验证

    流程:准备匿名FTP访问的目录/var/ftp/pub,使匿名用户FTP对目录有写入权限,开放匿名用户配置,并启动vsftpd服务。

    使用匿名验证时,可以将光盘挂载到ftp下的某个目录下,并且此目录是777的权限,那么客户端可以将其挂载到本地作为yum源

    1. FTP服务器端配置安装

      #yum –y install vsftpd

      #vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES #支持匿名用户

write_enable=YES #支持写权限

anon_umask=022 #匿名用户上传或创建的文件或目录的默认权限

anon_upload_enable=YES #允许匿名用户上传文件,默认为允许

anon_mkdir_write_enable=YES #允许匿名用户有创建目录的权限

anon_other_write_enable=YES #允许匿名用户对文件具有删除等权限

#service vsftpd start

#chown ftp /var/vsftpd/pub #生产环境不要直接用chmod改

#设置所有用户对pub目录具有读写权限,否则即使ftp服务设置了相关权限,匿名用户还是无法具有相关权限,这点要特别注意,还有就是要关闭防火墙和SELINUX

  1. FTP客户端配置安装

    #yum –y install ftp

    #ftp 192.168.131.129

    ftp> cd pub #进入此目录,进行相关实验操作

    ftp>?

    #可以获取命令列表,也就是ftp可以使用的命令,常用的命令有:

使用!也可以退出ftp

ftp> put 1.txt

#上传文件时,要注意自己对那个文件有权限,否则无法上传成功,可以用root创建一个文件,然后#chmod 777 filename,最好在tmp下做实验

  1. 案例2:本地用户验证
    1. 服务器端安装配置

      #useradd user1 #添加本地用户

      #passwd user1

      #useradd user2

      #passwd user2

      #useradd user3

      #passwd user3

      #yum –y install vsftpd

      #vim /etc/vsftpd/vsftpd.conf

      local_enable=YES #启用本地系统用户

write_enable=YES #允许有写权限

local_umask=022 #设置本地用户的默认权限,文件为644,目录755

local_root=/var/rootftp #设置ftp的根目录

chroot_local_user=YES

#是否将用户禁锢在根目录,务必要加上这条,否则用户可以随意切换到其他目录,威胁系统安全

local_max_rate=0 #允许的最大传输速率

userlist_enable=YES #启用user_list用户列表

userlist_deny=YES #禁止user_list的用户登录FTP

或者[userlist_deny=NO ] #只允许user_list的用户登录ftp服务器

#vim /etc/vsftpd/user_list

注意:禁止用户登录如果在/etc/vsftpd/ftpuses和/etc/vsftpd/user_list都有写上某个用户,那么即使/etc/vsftpd/user_list允许用户登录,但这个用户同时也被写入/etc/vsftpd/ftpuses,那么这用户无法登录,也就是说/etc/vsftpd/ftpuses优先级更高

  1. 客户端安装客户端软件并测试
  1. 案例3:虚拟用户

    创建账号数据:

    #yum –y install vsftpd

    1. 建立虚拟FTP用户的账号数据库文件

      [root@myrhel1 vsftpd]# vim vuser.list

      [root@myrhel1 vsftpd]# db_load -T -t hash -f vuser.list vuser.db

      #-T:生成数据文件 -t:指定算法为hash -f:指定账号文件

      [root@myrhel1 vsftpd]# chmod 600 vuser.*

      #修改文件权限,不让任何人查看

    2. 创建FTP根目录及虚拟用户映射的系统用户

      [root@myrhel1 pam.d]# useradd -d /var/ftp/ -s /sbin/nologin vuser

      [root@myrhel1 pam.d]# chmod 755 /var/ftp/

    3. 建立支持虚拟用户的PAM认证文件,添加虚拟用户支持

      [root@myrhel1 pam.d]# cd /etc/pam.d/

      [root@myrhel1 pam.d]# cp vsftpd vsftpd.vuser

      [root@myrhel1 pam.d]# vim vsftpd.vuser

      auth required pam_userdb.so db=/etc/vsftpd/vuser

      account required pam_userdb.so db=/etc/vsftpd/vuser

    4. 在vsftpd.conf文件中添加支持配置

local_enable=YES

write_enable=YES

anon_umask=022

guest_enable=YES

guest_username=vuser

pam_service_name=vsftpd.vuser

user_config_dir=/etc/vsftpd/vusers_dir

  1. 为个别虚拟用户建立独立的配置文件,启动服务并测试

    [root@myrhel1 pam.d]# mkdir /etc/vsftpd/vusers_dir

    [root@myrhel1 pam.d]# vim /etc/vsftpd/vusers_dir/user1

    anon_upload_enable=YES

    [root@myrhel1 pam.d]# vim /etc/vsftpd/vusers_dir/user2

    anon_mkdir_write_enable=YES

  2. 重新加载vsftpd配置

    #service vsftpd reload

  3. 使用虚拟FTP账户访问测试

    user1用户可以登录,并可以浏览、下载、上传

    user2用户可以登录,并可以浏览、下载、创建目录

  1. 案例4:ftps加密传输

    ftp是明文传输,极不安全,可以使用tcpdump等抓包工具进行抓取

    [root@myrhel1 vsftpd]# yum -y install tcpdump

    [root@myrhel1 vsftpd]# tcpdump port 21 –nA

    ftps是用openssl进行加密传输,相比较明文传输更加安全。

    [root@myrhel1 vsftpd]# ldd `which vsftpd`
    | grep ssl

    #查询ftp是否支持ssl

    1. FTPS安装配置
    1. #yum –y install vsftpd
    2. #openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem

#req 表示生成证书

-new表示生成一个新的证书

-x509证书格式

-nodes表示生成证书时,不生成密码保护,而默认会生成密码保护

-out指定输出证书的文件名

-keyout生成私钥的文件名

根据提示填写好相关信息即可生成一个证书

  1. [root@myrhel1 ~]# chmod 400 vsftpd.pem #证书只允许管理员只读

④[root@myrhel1 ~]# cp vsftpd.pem /etc/ssl/certs/

#拷贝证书到ssl的默认证书目录

  1. [root@myrhel1 ~]# vim /etc/vsftpd/vsftpd.conf

加上下列几行

ssl_enable=YES #表示启用ssl功能

allow_anon_ssl=YES #表示允许匿名用户使用ssl加密

force_local_data_ssl=YES #强制本地用户数据传输使用ssl加密

force_local_logins_ssl=YES #强制本地用户登录时使用ssl加密

force_anon_data_ssl=YES #强制匿名用户数据传输使用ssl加密

force_anon_logins_ssl=YES #强制匿名用户登录时使用ssl加密

ssl_tlsv1=YES #加密使用第一版协议

ssl_sslv2=NO #必须声明不使用ssl版本2,这个不能不加

ssl_sslv3=NO #必须声明不使用ssl版本3,这个不能不加

rsa_cert_file=/etc/ssl/certs/vsftpd.pem #指定生成证书的位置

  1. service vsftpd start
  2. 最后使用专门的客户端工具(支持加密访问的客户端,命令行没有),如flashFXP

FTP服务详解的更多相关文章

  1. 【转】SSH服务详解

    [转]SSH服务详解 第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Gro ...

  2. (转)SSH服务详解

    SSH服务详解 原文:http://www.cnblogs.com/clsn/p/7711494.html 第1章 SSH服务1.1 SSH服务协议说明SSH 是 Secure Shell Proto ...

  3. 引用 Windows Server 2003 FTP服务器配置详解

    引用 昆神之星 的 Windows Server 2003 FTP服务器配置详解 1.FTP文件传输协议,主要用于计算机之间文件传输,是互联网上仅次于www的第二大服务.本文主要演示如何在Window ...

  4. winxp计算机管理中服务详解

    winxp计算机管理中服务详解01 http://blog.sina.com.cn/s/blog_60f923b50100efy9.html http://blog.sina.com.cn/s/blo ...

  5. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  6. WCF中队列服务详解

    WCF中队列服务详解 一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务 ...

  7. HTTPD之二————HTTPD服务详解————httpd的配置文件常见设置

    HTTPD之二----HTTPD服务详解----httpd的配置文件常见设置 HTTP服务器应用 http服务器程序 httpd apache nginx lighttpd 应用程序服务器 IIS,a ...

  8. ftp文件共享服务详解

     ftp 文件共享服务,文件的上传下载 跨平台,tcp协议 21号(命令端口) 20号(数据端口,主动模式) 默认情况 ftp服务运行被动模式 vsftpd:软件 非常安全的rpm -qi vsftp ...

  9. Linux中搭建一个ftp服务器详解

    来源:Linux社区  作者:luzhi1024 详解Linux中搭建一个ftp服务器. ftp工作是会启动两个通道:控制通道 , 数据通道在ftp协议中,控制连接均是由客户端发起的,而数据连接有两种 ...

随机推荐

  1. Struts2通配符映射

    1.一个Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系 2.通配符映射规则 –若找到多个匹配, 没有通配符的 ...

  2. 高版本myeclipse破解以及优化

    1.破解图 破解myeclipse但是在默认安装目录没有发现common文件夹,该怎么办? 打开myeclipse:  Myclipse-->Installation Summary...,   ...

  3. POJ 1679 The Unique MST (最小生成树)

    The Unique MST 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/J Description Given a conn ...

  4. 转载JQuery 获取设置值,添加元素详解

    转载原地址 http://www.cnblogs.com/0201zcr/p/4782476.html jQuery 获取内容和属性 jQuery DOM 操作 jQuery 中非常重要的部分,就是操 ...

  5. UOJ Test Round #2

    昨天晚上打的这个比赛,简直一颗赛艇啊-- 感觉发挥的并不好.比赛的时候比较紧张,最后一题还脑残写了个离散化结果爆零了,哎我怎么这么逗逼-- 讲讲比赛经过吧. 比赛之前逗逼地以为是8:00开始,然后淡定 ...

  6. android Studio gradle so的加载

    最近在使用Android Studio开发android项目,我的项目是由gradle构建的,gradle的优势文档上有说明,当你不断使用中,我越来越发现,太TMD方便啦,优势大大的明显. 打包,功能 ...

  7. VS2015中DataGridView的DataGridViewComBoboxCell列值无效及数据绑定错误的解决方法

    在VS2015中练习DataGridView的使用, 发现其中的DataGridViewComBoboxCell列存在着绑定数据库列后出现值无效的提示 根据网上的解决办法,添加了DataError后可 ...

  8. Linq to SQL 绑定 ComboBox

    最近学习Linq to SQL,发现Linq是一个开发轻量数据库的好东西,大大简化了数据连接.查询过程.但是在绑定ComBoBox的时间发现了一个问题:Linq查询后得到的数据tolist后,只能实现 ...

  9. php 处理高并发的思路

    1.nginx 服务器,提高网站服务器并发性能 2.控制大文件的下载,减少CPU的消耗. 3.对于sql查询做缓存. 4.静态页面文件缓存. 5.CND缓存静态文件, 6.反向代理到多个服务器,用来分 ...

  10. C++ 动态创建对象

    转自:http://www.cnblogs.com/jisi5789/p/3190353.html 回顾前面的文章,实现了一个简单工厂模式来创建不同类对象,但由于c++没有类似new "Ci ...