FTP传输模式及安装配置

FTP简介

  • FTP端口号
    FTP使用20和21端口,FTP服务器使用21端口来等待控制连接建立请求,并通过控制连接传送命令及命令的响应。控制连接与数据连接相互独立,首先建立控制连接,通过身份验证后才会建立数据连接。数据连接是传输文件时临时建立的,服务器使用20端口建立数据连接并传送数据。数据连接存在时,控制连接一定是存在的。
  • FTP传输模式
    FTP基于C/S模式,服务端与客户端传输数据有两种模式:主动模式和被动模式,主被动模式都是在建立数据链接时相对于服务器而言的。

    主动模式:
    FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,并进行账户密码验证。验证通过后开放N+1端口进行监听,并向服务器发送一个PORT N+1命令,告诉服务器服务器现在使用主动模式。服务器接收到命令后会有用其本地20端口连接客户端的N+1端口进行数据传输。主动模式数控制接与数据连接方向是相反的。
    被动模式:

    FTP客户端随机开启一个大于1024的端口N向服务器的21端口发起连接,并进行账户密码验证。验证通过后开放N+1端口进行监听,并发送一个PASV命令,告诉服务器现在使用被动模式,服务器接到命令后会随机开放一个大于1024的端口P,并发送命令PORT P命令给客户端,客户端使用自己的N+1端口连接服务器的端口P。被动模式控制连接和数据连接方向是一致的。

    应用场景:
    主动模式的FTP通常用在客户端访问处于防火墙内部的FTP服务器的情况。
    被动模式的FTP通常用在处于防火墙之后的FTP客户端访问外部的FTP服务器的情况。
    因为防火墙默认会关闭所有端口,但是在进行数据连接建立时需要开放随机端口,所以在防火墙内部的主机或服务器会因为端口被防火墙关闭而造成建立连接失败。

  • FTP三种用户
    匿名用户:anonymous或ftp
    本地用户:真实用户,帐号名称、密码等信息保存在passwd、shadow文件中
    虚拟用户:使用独立的账号/密码数据文件

FTP安装配置

  • 安装
    yum install vsftpd* -y
    systemctl start vsftp.service
    出现问题:
    image_1d5cdv1gs6ekcda1mh6t3b10vt34.png-12.5kB
    原因:使用被动模式,服务端需要开启随机端口,而服务端端口又被防火墙关闭,所以导致连接失败。
    解决:
    打开控制面板->Internet选项->高级->FTP被动传输模式取消
    image_1d5ce2ntsuod178hh971kj5nmq3h.png-50kB

  • 配置匿名用户
    默认匿名用户不可以上传和下载文件,创建文件的,修改配置文件可对匿名用户权限进行修改。
    image_1d5ceqrh5r63c2a6doqio3qh4o.png-53.7kB
    1.修改配置:

    vim /etc/vsftpd/vsftpd.conf

    设置如下选项:

    anonymous_enable=YES :允许匿名登陆
    anon_upload_enable=YES  :允许匿名用户上传下载
    anon_mkdir_write_enable=YES  :允许匿名用户创建目录
    anon_other_write_enable=YES  :允许匿名用户写入其他权限
    

    2.修改/var/ftp/pub目录权限

    chown -R ftp /var/ftp/pub/
    chmod 755 /var/ftp/pub/
    

    3.再次使用匿名用户上传下载或创建文件
    image_1d5dajp5nbqa1eohmlu98rr4h55.png-74.8kB
    4.检查是否上传成功
    image_1d5dalcqo1csv6hd1fm11h1010585i.png-15.8kB
    5.修改匿名用户和本地用户根目录:

    local_root=/var/www/html
    chroot_local_user=YES 将用户活动范围限制在主目录
    anon_root=/var/www/html
    
  • 配置本地用户
    1.本地创建用户:

    useradd ftpuser1 -s /sbin/nologin
    echo 123456 | passwd –stdin ftpuser1

    修改配置文件:

    local_enable=YES
    anonymous_enable=YES
    

    2.重启服务:

    systemctl restart vsftpd.service
    

    3.验证:
    image_1d5dbl2qootj1rtk169j1us1cld6c.png-28kB
    ftp本地用户默认登陆后进入用户的家目录。

  • ftp虚拟用户配置
    虚拟用户在FTP服务器上并不真实存在,而是映射到某一个系统真实用户及设置相应的权限来实现访问验证。
    1.安装虚拟用户认证所需模块及软件:
    yum install db4 db4_utils

    2.创建虚拟用户文件

    touch ftpuser.txt 
    

    3.在文件内添加虚拟用户

    ftpuser1
    123456
    ftpuser2
    123456
    

    奇数行写账户,偶数行写密码
    4.生成虚拟用户认证数据库文件

    db_load -T -t hash -f /etc/vsftpd/ftpuser.txt /etc/vsftpd/vsftpd_login.db
     chmod 600 /etc/vsftpd/vsftpd_login.db
    

    5.配置PAM认证文件:

    vim /etc/pam.d/vsftpd 
    把其他行注释掉添加如下配置
    auth       required     pam_userdb.so db=/etc/vsftpd/vsftpd_login
    account    required     pamuserdb.so db=/etc/vsftpd/vsftpd_login
    

    6.修改配置文件:

    pam_service_name=vsftpd
    guest_enable=YES
    guest_username=jiangpeisi
    user_config_dir=/etc/vsftpd/vsftpd_guestuser_conf
    virtual_use_local_privs=YES 匿名用户具有与本地用户相同的权限
    chroot_local_user=YES
    chroot_list_enable=YES
    allow_writeable_chroot=YES 如果使用chroot,需要设置此项
    chroot_list_file=/etc/vsftpd/chroot_list
    

    7.创建虚拟用户配置文件

    mkdir /etc/vsftpd/vsftpd_guestuser_conf/
    touch /etc/vsftpd/vsftpd_guestuser_conf/ ftpguest{1,2} 
    

    此处文件名必须与虚拟用户同名
    配置ftpguest1

    local_root=/home/jiangpeisi/ftpguest1
    write_enable=YES
    anon_world_readable_only=YES
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    

    ftpguest2与ftpguest2类似
    8.创建虚拟用户家目录

    mkdir /home/jiangpeisi/ftpguest{1,2}
    chown -R jiangpeisi:jiangpeisi /home/jiangpeisi/
    

    注:2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。