FTP的客户端有很多种,较为常见的是网页浏览器,如:firefox等。

一般操作系统都提供了基础的命令行方式的FTP客户端。输入“ftp”或者“ftp服务器地址”就可以使用命令行方式。下面列举了一些常用的FTP命令。

远程命令:

cd                改变所在目录

ls                 查看当前目录下文件列表

get               从服务器下载当个文件

mget            从服务器下载多个文件

put               向服务器上传单个文件

mput            向服务器上传多个文件

pwd             显示服务器当前目录

quit              退出ftp程序

 

本地命令:

!ls                显示客户端当前目录下的文件列表

!cd               改变客户端当前所在目录

!pwd            显示客户端当前目录

 

 

VSFTPD服务器

VSFTPD的安装

我们为了安装安装包的简单,首先先架设一个本地的YUM仓库,配置本地YUM源。后期会介绍YUM的配置。使用yum 安装vsftpd

 

[root@xingzheson /]# yum install vsftpd -y

如果系统中开启了SELinux,那么需要执行下面的命令,使得VSFTPD可以被正常访问

[root@xingzheson /]# setsebool -P ftpd_disable_trans 1

 

VSFTPD安装完成后,默认的主配置文件是 /etc/vsftpd/vsftpd.conf 。下面按自上而下的顺序介绍此文件的参数设定。

anonymous_enable=YES

允许匿名访问,即允许anonymous账号访问FTP服务。

local_enable=YES

允许使用本机帐号登录

write_enable=YES

用户可以读写

local_umask=022

默认掩码为022,即默认创建的文件权限是755

#anon_upload_enable=YES

是否允许匿名用户上传文件夹,默认是注释掉的

#anon_mkdir_write_enable=YES

是否允许匿名用户创建新文件夹。默认注释掉的

dirmessage_enable=YES

若目录下存在.message文件,则显示该文件内容

xferlog_enable=YES

默认上传/下载的日志文件被记录在/var/log/vsftpd.log中

connect_from_port_20=YES

从20端口连接。默认状况下,20为FTP的数据传输端口

#chown_uploads=YES
#chown_username=whoever

允许新上传文件的拥有者为whoever.两行同时出现的,默认注释掉

#xferlog_file=/var/log/vsftpd.log

日至位置设定

xferlog_std_format=YES

使用标准格式登记上传/下载记录

#data_connection_timeout=120

传输延时时间,单位为秒

#nopriv_user=ftpsecure

使用特殊用户ftpsecure。这里可以把ftpsecure账户作为一般访问用户,即所有连接FTP服务器的用户都具有ftpsecure用户名。为了安全起见,可以在/etc/passwd中将ftpsecure的用户的SHELL设定为/sbin/nologin。

#ftpd_banner=Welcome to blah FTP service.

登录提示信息

#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails

若启用上述两项设定,则可以在/etc/vsftpd/banned_emails中建立黑名单

pam_service_name=vsftpd

列出与VSFTPD相关的PAM文件

userlist_enable=YES

当此项设置为yes的时候,启用配置文件/etc/vsftpd.user_list。此时有两种情况

a.此时若没有userlist_deny=NO,则/etc/vsftpd.user_list中存在的用户不可以访问VSFTPD服务器

b.此时若存在userlist_deny=NO,则仅接受/etc/vsftpd.user_list中存在的用户的登录请求

当此项设定为NO是,不会启用配置文件/etc/vsftpd.user_list

tcp_wrappers=YES

启用TCP Wrapper支持

 

以上是默认安装后,VSFTPD主配置文件出现的设定选项。除此之外,还有一些常用选项

 

guest_enable=YES

guest_username=ftp

guest用户名,即所有非匿名用户将具有guest用户身份

local_root=/var/ftp

anon_root=/var/ftp

设定本机用户和匿名用户的FTP根目录

use_localtime=YES

是否使用本机时间,若设定为NO,则使用格林尼治时间

#idle_session_timeout=600

客户端在600秒内没有任何动作,则服务器自动断开与客户端连接

max_clients=0

最大客户连接数

max_per_ip=0

每个客户端的最大连接数

local_max_rate=0

本地账户的最大传输速率,单位为秒,0为不限制

anon_max_rate=0

匿名用户的最大传输速率

 

 

前面已经介绍了VSFTPD的安装,安装后需要启动服务

[root@xingzheson /]# service vsftpd start

设置开机启动

[root@xingzheson /]# chkconfig vsftpd on

 

VSFTPD虚拟用户

 

设置虚拟用户使其仅能访问VSFTPD,而不可以登录系统

首先,我们需要确认安装盘上的db4软件包已经装上,如果没有,就要手动安装

[root@xingzheson /]# rpm -qa |grep db4
db4-utils-4.7.25-16.el6.x86_64
db4-4.7.25-16.el6.x86_64

 

[root@xingzheson Packages]# rpm -ivh db4-utils-4.7.25-16.el6.x86_64.rpm

 

[root@xingzheson Packages]# rpm -ivh db4-4.7.25-16.el6.x86_64.rpm

 

当我们用yum 安装时,就已经默认安装好了。所以不用手动安装的了

接下来,需要创建虚拟用户的用户名和密码,创建一个文档,假定这个文件为/tmp/id.txt 内容如下

xingzheson

123456

zhulaoshi

654321

这里的单数行为用户名,而双数行为用户名对应的密码。生产用户账号的数据库文件并设定数据文件权限,最后删除/tmp/id.txt

[root@xingzheson tmp]# db_load -T -t hash -f /tmp/id.txt /etc/vsftpd/vsftpd_id.db
[root@xingzheson tmp]# chmod 600 /etc/vsftpd/vsftpd_id.db
[root@xingzheson tmp]# rm -f /tmp/id.txt

 

下面设定vsftpd.conf 文件

 

wKiom1O2UoSS955xAAMZWAjv1zc401.jpg

wKioL1O2VQyihL_9AAIWF_73_Vs141.jpg

 

 

接着建立PAM文件/etc/pam.d/vsftpd.virtual,

[root@xingzheson tmp]# vi /etc/pam.d/vsftpd.virtual

内容如下:


#%PAM-1.0
auth                    required        pam_userdb.so   db=/etc/vsftpd/vsftpd_id
account                 required        pam_userdb.so   db=/etc/vsftpd/vsftpd_id
session                 reiuired        pam_loginuid.so

 

下面建立相关的目录:

[root@xingzheson tmp]# mkdir /home/vsftpd
[root@xingzheson tmp]# mkdir -p /home/vsftpd/{xingzheson,zhulaoshi}
[root@xingzheson tmp]# chown -R ftp:ftp /home/vsftpd/

重启服务,如果系统中开启了SELinux,那么需要执行以下命令,允许虚拟用户存取其家目录

[root@xingzheson tmp]# setsebool -p allow_ftpd_full_access 1

 

如果设置正确,则虚拟用户可以登录服务器。输出如下:

wKioL1O2VtOCkpSzAANvBJt6gvI211.jpg

 

虚拟用户的配置部分完全正常,但是会发现一个问题,那就是本地用户无法正常登录VSFTPD服务器了。接下来我们找找原因

a.用户的FTP根目录变为了/home/vsftpd/$USER.也就是说,如果一个本地用户zhu尝试登录VSFTPD,那么服务器会试图寻找/home/vsftpd/zhu这个目录。但是zhu的家目录应该是/home/zhu,而/home/vsftpd/zhu 并不存在,所以登录失败

b.即使我们可以用一些方法让zhu的家目录可以被重新定位到/home/zhu(可以用链接的方法),但是由于zhu登录VSFTPD时的身份实际上是ftp(因为启用了guest_enable=YES),所以还是无权访问自己的家目录

c.及时上述两个问题解决了,还是无法登录。哎。因为在PAM文件/etc/pam.d/vsftpd.virtual中,只设定了虚拟用户的验证。zhu是本地用户,该用户的身份验证并不在虚拟用户的数据库中,所以无法登录。

 

解决办法:

wKiom1O2XmTAAM7RAAIpSjScEEM815.jpg

 

接下来,修改/etc/vsftpd/vsftpd.conf文件,在其中加入 user_config_dir=/etc/vsftpd/virtua

重启服务,建立/etc/vsftpd/virtua文件夹,并在其中建立文本文件/etc/vsftpd/virtua/zhu

[root@xingzheson vsftpd]# mkdir /etc/vsftpd/virtua
[root@xingzheson vsftpd]# vim /etc/vsftpd/virtua/zhu

内容如下:

local_root=/home/zhu           (指定zhu真正的家目录)
guest_username=zhu         (修改zhu的身份。这里的zhu的身份就不是ftp了)

 

经过这样的修改之后,本地用户和虚拟用户就都可以登录VSFTPD了,并且在增加了user_config_dir之后,就可以给每个用户单独添加不同的访问规则和权限,无论该用户是本地用户还是虚拟用户。

 

 

配置具有SSL的VSFTPD

为了提升VSFTPD的传输安全性,这里可以使用SSL加密。

首先用OpenSSL为VSFTPD生成安全证书。这里生成的证书有效期为365天

[root@xingzheson virtua]# cd /etc/vsftpd/
[root@xingzheson vsftpd]# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem

生成证书的时候需要填写一些信息,任意写都可以,输出如下
Generating a 1024 bit RSA private key
.............................++++++
.........................++++++
writing new private key to 'vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:JiangSu
Locality Name (eg, city) [Default City]:NanH^H^H^H^H^H^Hj
Organization Name (eg, company) [Default Company Ltd]:ITD^H^H
Organizational Unit Name (eg, section) []:whatever
Common Name (eg, your name or your server's hostname) []:Martian
Email Address []:abc@xyz.com

接下来编辑/etc/vsftpd/vsftpd.conf,加入以下内容

ssl_enable=YES
allow_anon_ssl=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem

重启服务,这样带有SSL加密的·VSFTPD服务器就假设好了。