VSFTPD服务--配置整合版即:所有配置都可以同时进行

服务介绍

FTP协议简述

文件传输协议(File Transfer ProtocolFTP一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式。今天的互联网是由几千万台个人计算机、工作站、服务器、小型机、大型机、巨型机等具有不同型号、不同架构的物理设备共同组成的,而且即便是个人计算机,也可能会装有WindowsLinuxUNIXMac等不同的操作系统。为了能够在如此复杂多样的设备之间解决问题解决文件传输问题,文件传输协议(FTP)应运而生。

FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用2021号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP命令与参数。FTP服务器普遍部署于内网中,具有容易搭建、方便管理的特点。而且有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术,因此FTP服务得到了广大用户的青睐。FTP协议的传输拓扑如图

          

                      FTP协议的传输拓扑

FTP工作模式

FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。FTP协议有下面两种工作模式。

主动模式:FTP服务器主动向客户端发起连接请求。

被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)

Vsftpd简述

vsftpdvery secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。

扫描二维码关注公众号,回复: 1762932 查看本文章

Vsftpd服务程序常用的参数及作用

参数

作用

listen=[YES|NO]

是否以独立运行的方式监听服务

listen_address=IP地址

设置要监听的IP地址

listen_port=21

设置FTP服务的监听端口

download_enable=[YES|NO]

是否允许下载文件

userlist_enable=[YES|NO]
userlist_deny=[YES|NO]

设置用户列表为“允许”还是“禁止”操作

max_clients=0

最大客户端连接数,0为不限制

max_per_ip=0

同一IP地址的最大连接数,0为不限制

anonymous_enable=[YES|NO]

是否允许匿名用户访问

anon_upload_enable=[YES|NO]

是否允许匿名用户上传文件

anon_umask=022

匿名用户上传文件的umask值

anon_root=/var/ftp

匿名用户的FTP根目录

anon_mkdir_write_enable=[YES|NO]

是否允许匿名用户创建目录

anon_other_write_enable=[YES|NO]

是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)

anon_max_rate=0

匿名用户的最大传输速率(字节/秒),0为不限制

local_enable=[YES|NO]

是否允许本地用户登录FTP

local_umask=022

本地用户上传文件的umask值

local_root=/var/ftp

本地用户的FTP根目录

chroot_local_user=[YES|NO]

是否将用户权限禁锢在FTP目录,以确保安全

local_max_rate=0

本地用户最大传输速率(字节/秒),0为不限制

Vsftpd服务程序

vsftpd作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP服务器上。

匿名开放模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。

本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果被黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。

虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

匿名访问模式

前文提到,在vsftpd服务程序中,匿名开放模式是最不安全的一种认证模式。任何人都可以无需密码验证而直接登录到FTP服务器。这种模式一般用来访问不重要的公开文件(在生产环境中尽量不要存放重要文件)。当然,如果采用第8章中介绍的防火墙管理工具(如Tcp_wrappers服务程序)将vsftpd服务程序允许访问的主机范围设置为企业内网,也可以提供基本的安全性。

vsftpd服务程序默认开启了匿名开放模式,我们需要做的就是开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限。需要注意的是,针对匿名用户放开这些权限会带来潜在危险,我们只是为了在Linux系统中练习配置vsftpd服务程序而放开了这些权限,不建议在生产环境中如此行事。

           可以向匿名用户开放的权限参数以及作用

参数

作用

anonymous_enable=YES

允许匿名访问模式

anon_umask=022

匿名用户上传文件的umask

anon_upload_enable=YES

允许匿名用户上传文件

anon_mkdir_write_enable=YES

允许匿名用户创建目录

anon_other_write_enable=YES

允许匿名用户修改目录名称或删除目录

vsftpd服务程序的匿名开放认证模式下,其账户统一为anonymous,密码为空。而且在连接到FTP服务器后,默认访问的是/var/ftp目录。

本地用户模式

相较于匿名开放模式,本地用户模式要更安全,而且配置起来也很简单。如果大家之前用的是匿名开放模式,现在就可以将它关了,然后开启本地用户模式。

                            本地用户模式使用的权限参数以及作用

参数

作用

anonymous_enable=NO

禁止匿名访问模式

local_enable=YES

允许本地用户模式

write_enable=YES

设置可写权限

local_umask=022

本地用户模式创建文件的umask

userlist_deny=YES

启用“禁止用户名单”,名单文件为ftpusersuser_list

userlist_enable=YES

开启用户作用名单文件功能

vsftpd服务程序为了保证服务器的安全性而默认禁止了root管理员和大多数系统用户的登录行为,这样可以有效地避免黑客通过FTP服务对root管理员密码进行暴力破解。如果您确认在生产环境中使用root管理员不会对系统安全产生影响,只需/etc/vsftpd目录下的user_list ftpusersroot去掉

虚拟用户模式

我们最后讲解的虚拟用户模式是这三种模式中最安全的一种认证模式,当然,因为安全性较之于前面两种模式有了提升,所以配置流程也会稍微复杂一些。

1步:创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码

2步:创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。FTP服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。

由于Linux系统中的每一个文件都有所有者、所属组属性,例如使用虚拟账户“张三”新建了一个文件,但是系统中找不到账户“张三”,就会导致这个文件的权限出现错误。为此,需要再创建一个可以映射到虚拟用户的系统本地用户。简单来说,就是让虚拟用户默认登录到与之有映射关系的这个系统本地用户的家目录中,虚拟用户创建的文件的属性也都归属于这个系统本地用户,从而避免Linux系统无法处理虚拟用户所创建文件的属性权限。

为了方便管理FTP服务器上的数据,可以把这个系统本地用户的家目录设置为/var目录(该目录用来存放经常发生改变的数据)。并且为了安全起见,我们将这个系统本地用户设置为不允许登录FTP服务器,这不会影响虚拟用户登录,而且还可以避免黑客通过这个系统本地用户进行登录。

3步:建立用于支持虚拟用户的PAM文件。

PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的API把系统提供的服务与认证方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式。要想把PAM功能和作用完全讲透,至少要一个章节的篇幅才可以。

通俗来讲,PAM是一组安全机制的模块,系统管理员可以用来轻易地调整服务程序的认证方式,而不必对应用程序进行任何修改。PAM采取了分层设计(应用程序层、应用接口层、鉴别模块层)的思想,其结构如图

     4                                 PAM的分层设计结构


4PAM作为应用程序层与鉴别模块层的连接纽带,可以让应用程序根据需求灵活地在自身插入所需的鉴别功能模块。当应用程序需要PAM认证时,则需要在应用程序中定义负责认证的PAM配置文件,实现所需的认证功能。

例如,在vsftpd服务程序的主配置文件中默认就带有参数pam_service_name=vsftpd,表示登录FTP服务器时是根据/etc/pam.d/vsftpd文件进行安全认证的。现在我们要做的就是把vsftpd主配置文件中原有的PAM认证文件vsftpd修改为新建的vsftpd.vu文件即可。

                           利用PAM文件进行认证时使用的参数以及作用

参数

作用

anonymous_enable=NO

禁止匿名开放模式

local_enable=YES

允许本地用户模式

guest_enable=YES

开启虚拟用户模式

guest_username=virtual

指定虚拟用户账户

pam_service_name=vsftpd.vu

指定PAM文件

allow_writeable_chroot=YES

允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求

5:为虚拟用户设置不同的权限。

环境准备

查看虚拟机系统信息

[root@FTPfuwuduan ~]# cat /etc/redhat-release 
CentOS release 6.7 (Final)
[root@FTPfuwuduan ~]# uname -r
2.6.32-573.el6.x86_64
[root@FTPfuwuduan ~]# uname -m
x86_64
[root@FTPfuwuduan ~]# hostname 
FTPfuwuduan
[root@FTPfuwuduan ~]# ip a |grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 10.0.0.110/24 brd 10.0.0.255 scope global eth0

环境准备

[root@FTPfuwuduan ~]# yum install -y vsftpd ftp
[root@FTPfuwuduan ~]# /etc/init.d/iptables stop 
[root@FTPfuwuduan ~]# setenforce 0
[root@FTPfuwuduan ~]# service vsftpd start 
[root@FTPfuwuduan ~]# ps -ef |grep vsftpd |grep -v grep
[root@FTPfuwuduan ~]# cp /etc/vsftpd/vsftpd.conf{,.}bak
[root@FTPfuwuduan ~]# grep -v "^#" /etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf
[root@FTPfuwuduan ~]# cat /etc/vsftpd/vsftpd.conf
[root@FTPfuwuduan ~]# tail -8 /etc/passwd
linkun:x:500:500:linkun:/home/linkun:/bin/bash
ftpmaster:x:501:501::/home/ftpmaster:/bin/bash
user1:x:502:502::/home/user1:/bin/bash
user2:x:503:503::/home/user2:/bin/bash
user3:x:504:504::/home/user3:/bin/bash
user4:x:505:505::/home/user4:/bin/bash
myftp:x:506:506::/var/myftp/:/bin/bash
myvirtual:x:507:507::/var/myvirtual:/bin/bash

Ps:一台虚拟机既进行服务配置又进行测试

服务部署

前言

这里的服务部署,我将同时进行匿名服务部署,配置Chroot,主机访问控制,用户访问控制,基于不同IP地址的虚拟主机部署,监听非标准端口部署,配置虚拟用户,虚拟用户权限部署等,即在这里我将所有有关VSFTPD的部署整合在了一起。下面的代码将是整合后的代码,虽然看着比较复杂,但我会一一做出说明。

代码

[root@FTPfuwuduan ~]# vim /etc/vsftpd/vsftpd.con
anonymous_enable=YES   《==允许匿名用户登陆
local_enable=YES  《==允许本地用户登陆
write_enable=YES  《==允许本地用户具有写的权限
local_umask=022   《==设置创建文件权限的反掩码,如此处为022,则新建文件的权限为666-022=644
dirmessage_enable=YES 《==激活目录显示信息,即每当进入目录时,会显示该目录下的文件.message的内容
xferlog_enable=YES  《==激活记录上传,下载的日志
connect_from_port_20=YES 《==设置服务器端数据连接采用端口20
xferlog_std_format=YES 《==设置日志文件采用标准格式
listen=YES 《==当listen指令被激活,VSFTPD就被设置为独立运行模式,“YES”表示只监听IPV4套接字,注意不要与listen_ipv6的设置冲突,当此值为“YES”时,ipv6为NO
listen_port=5000 《==监听端口,这里我修改为5000,即在这里做监听非标准端口部署
listen_address=10.0.0.110 《==设置所监听的ipv4的地址
#配置虚拟用户
guest_enable=YES 《==激活虚拟用户登陆功能
guest_username=myvirtual 《==指定虚拟用户所对应的真实用户
user_config_dir=/etc/vsftpd 《==用户配置文件所存放的路径
user_config_dir=/etc/vsftpd_per_user_config 《==虚拟用户配置文件所对应的路径
pam_service_name=vsftpd  《==设置PAM认证时所采用的文件名称
tcp_wrappers=YES 《==默认没有这一选项   支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
#匿名用户配置
anon_upload_enable=YES 《==允许匿名用户上传文件
anon_mkdir_write_enable=YES 《==允许匿名用户创建目录
anon_world_readable_only=NO 《==此指令默认为YES,表示仅当所有用户对该文件都拥有读权限时,才允许匿名,此处设置为NO,则允许匿名用户下载不具有全部读权限的文件
anon_other_write_enable=YES 《==允许匿名用户改名,删除文件
chown_uploads=YES  《==允许匿名用户上传文件
chown_username=ftpmaster 《==将匿名用户上传文件的所有者改为ftpmaster
#配置Chroot
chroot_local_user=NO 《==禁止所有本地用户执行chroot
chroot_list_enable=YES 《==激活执行chroot的用户列表文件
chroot_list_file=/etc/vsftpd.chroot_list 《==设置执行chroot的用户列表文件名为/etc/vsftpd.chroot_list
#用户访问控制
userlist_enable=YES 《==激活用户列表文件
userlist_deny=NO 《==表示该列表文件中的文件是否能登陆VSFTP,其默认值为YES,此时会禁止位于该文件中的用户登陆,而允许其他用户登陆,本例设置为NO,则刚好相反,表示只允许/etc/vsftpd/user_list文件中的用户登陆,而拒绝其他的用户登陆
userlist_file=/etc/vsftpd/user_list   《==白名单 对应与/etc/vsftpd/ftpusers--黑名单
##主机访问控制
##对本地用户和匿名用户限速,在这里限制的时下载速率
anon_max_rate=1000  《==匿名用户的下载速率限制在1000KB/S
local_max_rate=2000   《==本地用户的下载速率限制在2000KB/

匿名用户配置

[root@FTPfuwuduan vsftpd]# mkdir /var/ftp/mypublic/ -p 
[root@FTPfuwuduan vsftpd]# chown -R ftp. /var/ftp/mypublic
[root@FTPfuwuduan vsftpd]# ls -l /var/ftp/
总用量 4
drwxr-xr-x 2 ftp ftp 4096 4月  17 04:28 mypublic

Chroot说明

默认情况下,本地用户登陆到 VSFTPD服务器后,初始目录便是自己的主目录,但是用户仍然可以切换到自己主目录以外的目录中去,这种情况虽然方便了用户对文件系统的访问,但在某种程度上也产生了一定的安全隐患。为了防范这种隐患,VSFTPD提供了chroot指令,可以将用户访问的范围限制在各自的主目录中。

具体的实现中,针对本地用户进行chroot可以分为两种情况:一种情况是针对所有的本地用户都进行chroot;另一种是针对指定的用户列表进行chroot,在这里我演示的是第二种。有兴趣的可以尝试一下第一种,不过第二种都会了第一种不就也会了嘛

[root@FTPfuwuduan vsftpd]# vim /etc/vsftpd.chroot_list 
user2
user3
linkun
user4

主机访问控制

利用tcp_wrappers实现主机访问控制。tcp_wrappers的配置文件主要有两个/etc/hosts.allow/etc/hosts.deny。前者是用来设置允许哪些主机可以访问本服务,而后者是拒绝哪些主机访问本服务。但是由于在/etc/hosts.allow中也可以设置“拒绝”功能,所以,一般情况下只使用/etc/hosts.allow对主机进行访问控制。

在这里我用两个例子来进一步介绍主机访问控制功能

1.除了192.168.1.2以外允许192.168.1.0/24网段内的其他主机访问此FTP服务;另外允许来自test.com域的主机登陆此FTP服务器。
 解决方案:编辑/etc/hosts.allow文件,增加一下内容
vsftpd:192.168.1.2:DENY
vsftpd:192.168.1. :.test.com
2.针对来自192.168.1.0/24网段中的匿名连接,限制其下载的速率为5KB/S,而对其他网段中的匿名连接,不做速率限制。
(1)编辑vsftpd的主配置文件/etc/vsftpd/vsftpd.conf,增加如下指令:
anon_max_rate=0 《==设置匿名用户的最高传输速率,其中值“0”表示不限制,即在主配置文件中没有对匿名用户的传输速率做限制。
(2)创建一个新的配置文件/etc/vsftpd/vsftpd_other.conf,内容如下:
anon_max_rate=5
(3)编辑hosts.allow文件,增加相关指令
   vsftpd:192.168.1. :setenv VSFTPD_LOAD_CONF /etc/vsftpd/vsftpd_other.conf

用户访问控制

VSFTPD的用户访问控制分为两类:第一类是传统用户列表文件,在VSFTPD中其文件名是/etc/vsftpd/ftpusers,凡是列在此文件中的用户都没有登陆此FTP服务器的权限。第二类是改进的用户列表文件/etc/vsftpd/user_list,该文件中用户能否登陆FTP由另外一条指令userlist_deny来决定,这样更加灵活。

在这里我用两个例子来进一步介绍主机访问控制功能

1.配置允许root用户登陆FTP服务器示例
 在此,首先要说明的是:为了安全起见,在一般情况下,各种FTP服务器都默认拒绝采用root身份登陆,VSFTPD服务器也是一样
 解决方案:将/etc/vsftpd/user_list  /etc/vsftpd/ftpusers中的root注释掉
注:在做这个示例之前请先将代码中的用户访问控制段注释
  2.只允许user1,user2,user3三个用户登陆
 解决方案:编辑/etc/vsftpd/user_list文件,将user1,user2,user3分三行添加进去
注:先将上面的注释给取消掉
[root@FTPfuwuduan ~]# vim /etc/vsftpd/user_list 
root
user1
user2
user3
user4
myvirtual
myuser1
myuser2
myuser3

基于不同IP地址的虚拟主机

配置基于IP地址的虚拟主机的方法很简单,即为不同的虚拟主机编写独立的配置文件,应该注意该配置文件必须以“.conf”结尾,并存放在/etc/vsftpd目录下

[root@FTPfuwuduan ~]# ifconfig eth0:1 10.0.0.115 netmask 255.255.255.0 up
[root@FTPfuwuduan ~]# mkdir -p /var/myftp/pub
[root@FTPfuwuduan ~]# echo "Hi my friend" > /var/myftp/pub/welcome.txt 
[root@FTPfuwuduan ~]# vim /etc/vsftpd/vsftpd.myftp.conf 
ftpd_banner=Welcome to my virtual ftp server
ftp_username=myftp
listen=YES
listen_address=10.0.0.115
[root@FTPfuwuduan ~]# service vsftpd restart
[root@FTPfuwuduan ~]# ps -ef |grep vsftpd |grep -v grep
root      30098      1  0 06:50 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root      30104      1  0 06:50 ?        00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.myftp.conf

监听非标准端口

在本次实验中我监听的非标准端口是5000,关于配置请看代码

[root@FTPfuwuduan ~]# lsof -i :5000
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
vsftpd  30098 root    3u  IPv4  44030      0t0  TCP 10.0.0.110:commplex-main (LISTEN)

配置虚拟用户FTP服务器

VSFTPD服务的一大特色就是对虚拟用户的支持非常完善。利用PAM认证机制,VSFTPD很好地实现了虚拟用户的功能

所谓的虚拟用户,是指用户本身不是系统系统本地用户,即该用户的账户信息不存在于/etc/passwd文件中;也不是匿名用户,因为匿名用户登陆时都采用统一的用户名称anonymous(ftp);而每个虚拟用户都可以有自己特定的用户名称,且虚拟用户名称都存放于独立的账号数据库中。简单地说,虚拟用户的身份认证机制及账号数据库都是相对独立的。

下面通过示例来介绍VSFTPD虚拟用户的配置方法。

配置支持虚拟用户功能的VSFTPD服务器,并创建三个虚拟用户myuser1,myuser2,myuser3,为了简单起见,密码都设置为111111,并且为三个虚拟用户建立各自的配置文件。其中myuser1可以下载,上传,创建目录,删除文件;myuser2可以下载,上传文件;myuser3只可以下载文件。
解决方案:
创建虚拟用户数据库文件
(1)先创建存放虚拟用户,密码的文本文件
[root@FTPfuwuduan ~]# vim /etc/myuserdb.txt 
myuser1
111111
myuser2
111111
myuser3
111111
(2)生成虚拟用户数据库文件并设置权限
[root@FTPfuwuduan ~]#db_load -T -t hash -f /etc/myuserdb.txt  /etc/vsftpd/myvsftpd.db
[root@FTPfuwuduan ~]#ll /etc/vsftpd/myvsftpd.db
-rw------- 1 root root 12288 4月  17 03:51 myvsftpd.db
(3)向PAM认证文件中加入虚拟用户,使虚拟用户可以使用PAM认证文件,选择添加而不是另外创建的目的是:虚拟用户和用户可以同时在VSFTPD中存在
[root@FTPfuwuduan ~]# vim /etc/pam.d/vsftpd 
#%PAM-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/myvsftpd
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/myvsftpd

session    optional     pam_keyinit.so    force revok
(4)设置虚拟用户所对应的真实账号所登陆的目录的权限
[root@FTPfuwuduan ~]# ll -d /var/myvirtual/
drwxr--r-- 5 myvirtual myvirtual 4096 4月  17 04:10 /var/myvirtual/
(5)创建虚拟用户配置文件所对应的路径
[root@FTPfuwuduan ~]# mkdir -p /etc/vsftpd_per_user_config/
(6)为虚拟用户创建各自的配置文件
[root@FTPfuwuduan ~]# vim /etc/vsftpd_per_user_config/myuser1
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@FTPfuwuduan ~]# vim /etc/vsftpd_per_user_config/myuser2
anon_world_readable_only=NO
anon_upload_enable=YES
[root@FTPfuwuduan ~]# vim /etc/vsftpd_per_user_config/myuser3
anon_world_readable_only=NO

测试

因为页数问题,在这里我将简单的进行测试

[root@FTPfuwuduan ~]# !service
service vsftpd restart
关闭 vsftpd:                                              [确定]
为 vsftpd 启动 vsftpd:                                    [确定]
为 vsftpd.myftp 启动 vsftpd:                              [确定]
[root@FTPfuwuduan ~]# ftp 10.0.0.110 5000
Connected to 10.0.0.110 (10.0.0.110).
220 (vsFTPd 2.2.2)
Name (10.0.0.110:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.
[root@FTPfuwuduan ~]# ftp 10.0.0.110 5000
Connected to 10.0.0.110 (10.0.0.110).
220 (vsFTPd 2.2.2)
Name (10.0.0.110:root): myuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.
[root@FTPfuwuduan ~]# ftp 10.0.0.115
Connected to 10.0.0.115 (10.0.0.115).
220 Welcome to my virtual ftp server
Name (10.0.0.115:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.







猜你喜欢

转载自blog.csdn.net/zisefeizhu/article/details/80028389