美文网首页IT@程序员猿媛
FTP的基本概念与实战演练

FTP的基本概念与实战演练

作者: 柳厌之 | 来源:发表于2019-03-02 18:26 被阅读4次

    前言

    本文第一部分基本概念大多来自百科,其中vsftpd.conf文件详解还有待补充,这是个坑。第二部分还没开动,闲下来后弄。

    第一部分:基本概念

    一、ftp 简介

    1、是什么?

    文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。但它有明显的缺点,一个是明文传输,另一个是支持系统用户可能导致数据泄露。

    文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。

    尽管World Wide Web(WWW)已经替代了FTP的大多数功能,FTP仍然是通过Internet把文件从客户机复制到服务器上的一种途径。FTP客户机可以给服务器发出命令来下载文件,上传文件,创建或改变服务器上的目录。原来的FTP软件多是命令行操作,有了像xftp这样的图形界面软件,使用FTP传输变得方便易学。主要使用它进行“上载”。即向服务器传输文件。由于FTP协议的传输速度比较快,我们在制作诸如“软件下载”这类网站时喜欢用FTP来实现,同时我们这种服务面向大众,不需要身份认证,即“匿名FTP服务器”。

    当远程主机提供匿名FTP服务时,会指定某些目录向公众开放,允许匿名存取。系统中的其余目录则处于隐匿状态。作为一种安全措施,大多数匿名FTP主机都允许用户从其下载文件,而不允许用户向其上传文件。即使有些匿名FTP主机确实允许用户上传文件,用户也只能将文件上传至某一指定上传目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录中,供其他用户下载,利用这种方式,远程主机的用户得到了保护,避免了有人上传有问题的文件,如带病毒的文件。

    2、三种用户

    • Real帐户:这类用户是指在FTP服务上拥有帐号。当这类用户登录FTP服务器的时候,其默认的主目录就是其帐号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。
    • Guest用户:在FTP服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障FTP服务上其他文件的安全性。这类帐户,在Vsftpd中就叫做Guest用户。拥有这类用户的帐户,只能够访问其主目录下的目录,而不得访问主目录以外的文件。
    • Anonymous(匿名)用户:这也是我们通常所说的匿名访问。这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源。

    在组建FTP服务器的时候,我们就需要根据用户的类型,对用户进行归类。默认情况下,Vsftpd服务器会把建立的所有帐户都归属为Real用户。但是,这往往不符合企业安全的需要。因为这类用户不仅可以访问自己的主目录,而且,还可以访问其他用户的目录。这就给其他用户所在的空间带来一定的安全隐患。所以,企业要根据实际情况,修改用户所在的类别。

    3、两种模式

    • Standard (PORT方式,主动方式)
      (1) 客户端对服务器发起请求,连接的是服务器的21号端口,客户端的端口号N是大于1024的随机端口
      (2) 服务器的21号端口给予客户端响应数据流
      (3) 服务器打开20号端口去连接客户端的N+1的端口
      (4) 客户端给予响应,数据开始传输

      主动模式
      在进行文件传输时,FTP的客户端和服务器之间要建立两个并行的TCP连接,控制连接数据连接。FTP客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。
    • Passive (PASV,被动方式)
      (1) 客户端对服务器发起的请求连接是服务器的21号端口,客户端的端口号N是大于1024的随机端口
      (2) 服务器的21号端口给予客户端响应
      (3) 服务器打开一个大于1024的随机端口,客户端使用N+1端口号去连接服务器打开的端口
      (4) 服务器给予响应,于是数据开始传输

      被动模式
      建立控制通道和Standard模式类似,但建立连接后发送Pasv命令。服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据。
      需要注意的是:客户端如何连接服务器端的这个随机端口的呢?在命令连接阶段,服务器会传输172.16.2.1.113.26的字符串过去,前四个标识的是服务器的IP地址,而随机端口是通过后面两个字符计算得出的,计算法则为第一个乘以256加上第二个数,即客户端连接服务器端的这个随机端口号是113*256+26。

    4、如何使用?

    • TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。
    • 使用浏览器/Windows资源管理器,用户只需要在地址栏中输入如下格式的url地址:ftp://[用户名:口令@]ftp服务器域名:[端口号]
    • 命令行/终端下可以在cmd下输入ftp回车,然后输入IP来建立一个连接,也可以用上一条的方法连接。通过put命令和get命令达到上传和下载的目的,通过ls命令列出目录等,退出使用bye命令,帮助使用help命令。
    • 使用ftp客户端软件,诸如xftp、FileZilla、ForkLift。

    二、sftp 简介

    1、是什么?

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了SFTP的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。

    2、如何使用?

    与ftp类似。

    • linux下直接在终端中输入:sftp username@remote ip(or remote host name)。出现验证时,只需填入正确的密码即可实现远程链接。登入成功后终端呈现出:sftp>....
      在sftp的环境下的操作就和一般ftp的操作类似了,ls,rm,mkdir,dir,pwd,等指令都是对远端进行操作,如果要对本地操作,只需在上述的指令上加‘l’变为:lls,lcd, lpwd等。当然既然是ftp,当然得说它的上传和下载咯!
      上传:put /path/filename(本地主机) /path/filename(远端主机)
      下载:get /path/filename(远端主机) /path/filename(本地主机)
      另外提一下sftp在非正规端口(正规的是22号端口)登录:sftp -o port=1000 username@remote ip
    • windows中可以使用客户端软件Core FTP,FileZilla, WinSCP,Xftp来连接SFTP进行上传,下载文件,建立,删除目录等操作。MacOS中可以使用终端,也可以使用ForkLift、Transmission等客户端软件。

    3、sftp 命令一览表

    sftp Available commands instruction
    bye 退出 sftp
    exit 退出 sftp
    quit 退出 sftp
    help 显示帮助文本
    ? help 的同义词
    cd path 切换远程目录到 'path'
    ls [-1afhlnrSt] [path] 显示远程路径列表
    pwd 显示远程当前路径
    rename oldpath newpath 重命名远程文件
    rm path 删除远程文件
    mkdir path 创建远程路径
    rmdir path 删除远程路径
    chmod mode path 改变文件 'path' 的权限为 'mode'
    chown own path 改变文件 'path' 的属主为 'own'
    chgrp grp path 改变文件 'path' 的所属用户组为 'grp'
    df [-hi] [path] 显示当前目录或包含 'path' 的文件系统的数据
    get [-afPpRr] remote [local] 下载文件
    reget [-fPpRr] remote [local] 重新下载文件
    put [-afPpRr] local [remote] 上传文件
    reput [-fPpRr] [local] remote 重新上传文件
    lcd path 改变本地路径到 'path'
    lls [ls-options [path]] 显示本地路径列表
    lmkdir path 创建本地路径
    lpwd 打印本地当前路径
    lumask umask Set local umask to 'umask'
    ln [-s] oldpath newpath 链接远程文件 (-s for symlink)
    progress Toggle display of progress meter
    symlink oldpath newpath Symlink remote file
    version 显示 SFTP 版本
    !command 在本地 shell 执行命令 'command'
    ! 逃逸到本地 shell

    三、vsftpd 简介

    1、是什么?

    vsftpd 是“very secure FTP daemon( 英 [ˈdi:mən],守护进程)”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征,是Linux下最受推崇的ftp服务。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。在开源操作系统中常用的FTPD套件主要还有ProFTPD、PureFTPd和wuftpd等。

    2、vsftpd.conf 文件详解

    • 原文:http://vsftpd.beasts.org/vsftpd_conf.html#lbAB
    • 描述:可以使用 vsftpd. conf 控制 vsftpd 的各个方面。默认的 vsftpd 中寻找这个文件的位置/etc/vsftpd. conf
    • 格式:每一行可以是注释或者指令。以#开始的注释行是被忽略的。指令行具有格式 :option=value
      值得注意的是 ,=optionvalue之间是不能有任何空格的。每个选项都有默认值,可以在配置文件中更改。

    _____________________________________________待补充________________________________________
    参考:vsftpd官方faq中文版 https://blog.csdn.net/liuzh501448/article/details/1878819
    参考原文:http://vsftpd.beasts.org/vsftpd_conf.html#lbAB

    Boolean Options Instruction Default
    allow_anon_ssl 只有在ssl_enable有效时才会应用。如果为YES,那么匿名用户将会被允许使用安全SSL连接。 NO
    anon_mkdir_write_enable 如果为YES,那么匿名用户将被允许在某种条件下创建新路径。要使之有效,write_enable必须为YES,并且匿名用户必须对父路径有写权限。 NO
    anon_other_write_enable 如果为YES,那么匿名用户将被允许除了上传和创建路径之外的写权限,例如删除和重命名。此项不推荐。 NO
    anon_upload_enable 如果为YES,那么匿名用户将被允许在某种条件下上传文件。要使之有效,write_enable必须为YES,并且匿名用户必须对目标上传位置有写权限。此项也用于虚拟用户的上传设置。 NO
    anon_world_readable_only 如果为YES,那么匿名用户将只被允许下载全世界可读的文件。 YES
    anonymous_enable 控制匿名用户能否登录,如果为YES,那么用户名ftp和anonymous以匿名登录。 YES
    ascii_download_enable 如果为YES,那么ASCII模式数据传输将在下载时有效。 NO
    ascii_upload_enable 如果为YES,那么ASCII模式数据传输将在上传时有效。 NO
    async_abor_enable 如果为YES,那么特殊的FTP命令"async ABOR"(异步退出)将会使能。此项难以处理,默认无效。 NO
    background 如果为YES,那么vsftpd将以监听模式开启,监听程序在后台运行,也就是说控制权立即回到了开启vsftpd的shell手中。 NO
    check_shell 此项只对无PAM的vsftpd有效。如果为NO,那么vsftpd将不会对本地登录的有效用户shell检查 /etc/shells YES
    chmod_enable 如果为YES,那么允许使用命令“SITE CHMOD”。此项只对本地用户有效,匿名用户永远无效。 YES
    chown_uploads 如果为YES,那么所有匿名上传的文件的属主都会被改变为chown_username所设置的用户。 NO
    chroot_list_enable 如果为YES,那么你可能会提供一张在他们登录时被放置于他们家目录chroot()监狱的本地用户列表,当chroot_local_user为YES时,意义有所不同,在此种情况下,这张表变成了一张不会被放置在chroot()监狱的用户列表。包含此表的文件默认为/etc/vsftpd.chroot_list,但你也可以通过 chroot_list_file 选项进行重写。 NO
    chroot_local_user 如果为YES,那么本地用户将会在登录后被放置在他们家目录的chroot()监狱中,注意:此选项有安全性暗示,特别是用户有上传权或shell访问权的时候。请在你知道自己在做什么的时候开启,慎重。注意这些安全性暗示并非vsftpd独有,所有提供放置本地用户到chroot() jail的功能的FTP守护进程都有。 NO
    connect_from_port_20 控制服务器上PORT模式的数据连接是否使用端口20。处于安全考虑,一些客户端可能坚决要求此项。相反,禁用此项可使vsftpd以稍微较小的特权运行。 NO
    debug_ssl
    delete_failed_uploads
    deny_email_enable
    dirlist_enable
    dirmessage_enable
    download_enable
    dual_log_enable
    force_dot_files
    force_anon_data_ssl
    force_anon_logins_ssl
    force_local_data_ssl
    force_local_logins_ssl
    guest_enable
    hide_ids
    implicit_ssl
    listen
    listen_ipv6
    local_enable
    lock_upload_files
    log_ftp_protocol
    ls_recurse_enable
    mdtm_write
    no_anon_password
    no_log_lock
    one_process_model
    passwd_chroot_enable
    pasv_addr_resolve
    pasv_enable
    pasv_promiscuous
    port_enable
    port_promiscuous
    require_cert
    require_ssl_reuse
    run_as_launching_user
    secure_email_list_enable
    session_support
    setproctitle_enable
    ssl_enable
    ssl_request_cert
    ssl_sslv2
    ssl_sslv3
    ssl_tlsv1
    strict_ssl_read_eof
    strict_ssl_write_shutdown
    syslog_enable
    tcp_wrappers
    text_userdb_names
    tilde_user_enable
    use_localtime
    use_sendfile
    userlist_deny
    userlist_enable
    validate_cert
    virtual_use_local_privs
    write_enable
    xferlog_enable
    xferlog_std_format
    Numeric Options Instruction Default
    accept_timeout
    anon_max_rate
    anon_umask
    chown_upload_mode
    connect_timeout
    data_connection_timeout
    delay_failed_login
    delay_successful_login
    file_open_mode
    ftp_data_port
    idle_session_timeout
    listen_port
    local_max_rate
    local_umask
    max_clients
    max_login_fails
    max_per_ip
    pasv_max_port
    pasv_min_port
    trans_chunk_size
    String Options Instruction Default
    anon_root
    banned_email_file
    banner_file
    ca_certs_file
    chown_username
    chroot_list_file
    cmds_allowed
    cmds_denied
    deny_file
    dsa_cert_file
    dsa_private_key_file
    email_password_file
    ftp_username 这是处理匿名FTP用户的名称,此用户的家目录就是匿名FTP的根目录。 ftp
    ftpd_banner 此选项允许你重写第一次连接时显示的欢迎横幅 (none - default vsftpd banner is displayed)
    guest_username 只有在guest_enable为YES时有效。此选项用于设置游客用户所映射的真实用户。 ftp
    hide_file
    listen_address 当vsftpd为独立模式时,默认的监听地址(属于所有本地接口)可以被此选项重写,请提供一个IP地址。 (none)
    listen_address6 与listen_address类似,但是特指IPv6,对应也需要listen_ipv6有效。请提供一个标准ipv6地址。 (none)
    local_root 此选项表示当本地用户(即非匿名用户)登录后vsftpd将会进入到的路径。 (none)
    message_file
    nopriv_user
    pam_service_name
    pasv_address
    rsa_cert_file 此选项指明使用SSL加密的连接的RSA证书的地址。 /usr/share/ssl/certs/vsftpd.pem
    rsa_private_key_file 此选项指明使用SSL加密的连接的RSA私钥的地址。若此项没有设置,则私钥将会存储在证书所在位置。 (none)
    secure_chroot_dir 此选项需要一个为空的路径名。并且此路径不能被ftp 用户所写。这个路径被用来作为安全chroot() 监牢。 /usr/share/empty
    ssl_ciphers
    user_config_dir 这一强大的选项允许重写任何的配置选项,在每个用户的基础上。示例:如果你设置user_config_dir为/etc/vsftpd_user_conf,然后以用户"chris"登录,那么vsftpd将会在会话过程中应用/etc/vsftpd_user_conf/chris文件里的设置。此文件的格式在这个手册页面中。请注意不是所有的设置都对每个用户有效,例如许多设置只会比用户会话开始时要高一级,包括listen_address, banner_file, max_per_ip, max_clients, xferlog_file, etc. (none)
    user_sub_token
    userlist_file 此选项是当userlist_enable选项有效时会加载的文件名。 /etc/vsftpd.user_list
    vsftpd_log_file
    xferlog_file

    以上未完,还需要进行更新,这个是2009年的版本,待继续补充,有时间再写。
    可以参看:vsftpd配置文件详解 https://www.cnblogs.com/rainiplus/p/3739100.htmlhttps://blog.csdn.net/houhj168/article/details/80436073

    所谓“jail(监牢)”就是指通过chroot("change root")机制来更改某个进程所能看到的根文件夹,即将某进程限制在指定文件夹中,保证该进程仅仅能对该文件夹及其子文件夹的文件有所动作,从而保证整个server的安全。
    如今的server软件通常设计为以root权限启动,然后server进程自行放弃root,再以某个低权限的系统账号来执行进程。这样的方式的优点在于一旦该服务被攻击者利用漏洞入侵,因为进程权限非常低,攻击者得到的訪问权限又是基于这个较低权限的,对系统造成的危害比曾经减轻了很多。
    为了进一步提高系统安全性,Linux内核引入了chroot机制。chroot是内核中的一个系统调用软件能够通过调用库函数chroot,来更改某个进程所能见到的根文件夹。创建chroot“监牢”的作用就是将进程权限限制在文件系统文件夹树中的某一子树中。
    更多 chroot 与 jail 的知识,可访问:https://www.cnblogs.com/yxwkf/p/3902433.html

    第二部分:实战演练

    一、CentOS下搭建FTP服务器

    ____________________________________________待补充________________________________________

    • 环境:CentOS 7.4 64位 & vsftpd。
    • 要求(待更新):1、新增硬盘 分区 /mnt/part1。2、public {匿名账号根} 公共文档存放处。3、home/账号1...................账号n。4、节省磁盘空间 本地账户分配空间配额为10M。5、下载速率本地账号 1M/S匿名 100K/S。6、最大用户连接数 100 每ip的连接数 2。

    前提:Linux系统磁盘管理、用户管理。安装前要了解:ftp的账户是主机Linux的一个账户,所以最好了解一些Linux终端账户管理的知识。
    看:https://blog.51cto.com/tyjhz/1434300
    看:https://blog.csdn.net/avscript/article/details/53148770?utm_source=blogxgwz7
    VSFTPD虚拟用户实战配置:https://www.cnblogs.com/fengdejiyixx/p/9442769.html
    macOS的ftp:https://blog.csdn.net/ynnmnm/article/details/50903933

    相关文章

      网友评论

        本文标题:FTP的基本概念与实战演练

        本文链接:https://www.haomeiwen.com/subject/qfrsuqtx.html