CentOS 6.3下vsftpd的简单使用教程

 

1、关于vsftpd的基本知识

(1)什么是vsftpd?参考百度百科,http://baike.baidu.com/view/1806035.htm

(2)FTP用户的3种身份:实体用户(real user)、访客(guest)和匿名登录者(anonymous)

a. 实体用户(real user):一般是Linux系统上的用户,也是FTP用户,登录FTP需要密码

b. 访客(guest):不是Linux系统的用户,而是FTP用户,登录FTP需要密码

c. 匿名登录者(anonymous):不是Linux系统的用户,而是FTP用户,登录FTP不需要密码

 

2. 安装vsftpd

[root@localhost ~]# yum install vsftpd

 

3、启动vsftpd服务


 

[root@localhost ~]# service vsftpd start

Starting vsftpd for vsftpd: [ OK ]

[root@localhost ~]# service vsftpd status

vsftpd (pid 30196) is running...


在Chrome中打开ftp://主机IP,该网络地址默认指向的是/var/ftp目录,如下

centos如何查看ftp的密码 centos查看ftp用户_centos如何查看ftp的密码

4、vsftpd的软件组织

 

/etc/vsftpd/vsftpd.conf

主配置文件

/usr/sbin/vsftpd

vsftpd的可执行文件

/etc/rc.d/init.d/vsftpd

启动脚本

/etc/pam.d/vsftpd

PAM认证文件

/etc/vsftpd/ftpusers

禁止使用vsftpd的用户列表文件

/etc/vsftpd/user_list

禁止或允许使用vsftpd的用户列表

/var/ftp

匿名用户主目录

/var/ftp/pub

匿名用户的下载目录

 

5、分析和修改/etc/vsftpd/vsftpd.conf文件

(1)先备份vsftpd.conf文件

[root@localhost ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup

 

(2)查看vsftpd的版本和vsftpd.conf文件的配置说明


 

[root@localhost ~]# vsftpd -v

vsftpd: version 2.2.2

[root@localhost ~]# man vsftpd.conf

(3)默认vsftpd.conf文件的配置(删除了多余的注释)


 


[root@localhost ~]# cat -n /etc/vsftpd/vsftpd.conf

1 anonymous_enable=YES

2 local_enable=YES

3 write_enable=YES

4 local_umask=022

5 dirmessage_enable=YES

6 xferlog_enable=YES

7 connect_from_port_20=YES

8 xferlog_std_format=YES

9 listen=YES

10 pam_service_name=vsftpd

11 userlist_enable=YES

12 tcp_wrappers=YES

[root@localhost ~]#


以上默认配置实现如下的功能:

a. 可以使用anonymous这个匿名账号或其他实体账号(/etc/passwd)登录

b. anonymous的默认目录在/var/ftp,且无上传权限,也已经被chroot了

c. 实体用户的默认目录参考/etc/passwd,并没有被chroot,可前往任何有权限即可进入的目录中

d. 任何于/etc/vsftpd/ftpusers内存在的账号均无法使用vsftpd

e. 可利用/etc/host.{allow|deny}来作为基础防火墙

f. 当客户端有任何上传/下载信息时,该信息会被记录到/var/log/vsftpd.log中

g. 主动式连接的端口为20

h. 使用格林威治时间(GMT)

(参考鸟哥的私房菜^_^)

 

(4)我的个人修改(在默认的基础上),如下


[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf

 
# The default settings created by vsftpd

anonymous_enable=YES

local_enable=YES

write_enable=YES

local_umask=002

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

 
# ---Added by wesley---

 
# Use local time

use_localtime=YES

 
# Welcome information

banner_file=/etc/vsftpd/welcome.txt

 
# Enable chroot and locate chroot_list file

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

 
# Make all real users chroot and let users in chroot_list not be chroot

# If comment the line, the users in chroot_list will be chroot (It's tricky!)

chroot_local_user=YES

 
# Defeine maximum clients to use ftp

max_clients=10

 
# Define maximum connections per ip address

max_per_ip=5

 
# Relocate real users' ftp homes to specific folders

# By default, real users' ftp homes is /home/<username>

user_config_dir=/etc/vsftpd/userhomes

 
# ---End---

 

(a)use_localtime=YES:使用本地时间。

(b)chroot_list_enable=YES:启用chroot,用户登录将锁定其ftp主目录,不能切换到其他目录。

(c)chroot_list_file=/etc/vsftpd/chroot_list:当只有chroot_local_user=NO(或者没有这一行时),在chroot_list文件(需要手动创建)中的用户,是被chroot的,用户登录将锁定其ftp主目录;而chroot_local_user=YES,在chroot_list文件中的用户,是不被chroot的,用户登录后可以任意切换目录。

(d)chroot_local_user=YES:YES或NO时,触发chroot_list中的用户允许或不允许chroot。

(e)max_clients=10:限制FTP连接数最大为10

(f)max_per_ip=5:限制每个IP最多使用5个FTP连接

(g)user_config_dir=/etc/vsftpd/userhomes,自定义一个用户配置目录,该目录存放每个实体用户(real user)的用户名命名的文件,例如/etc/vsftpd/userhomes目录下创建一个test文件,当然test用户是存在的,在test文件中写入一行local_root=/var/ftp/pub,那么test用户登录FTP时,ftp主目录自动定位到/var/ftp/pub,而不是原来的/home/test。

(h)local_umask=002:当FTP用户创建文件或文件夹时,要用到该umask值。这里比默认的配置,增加了组用户写权限。

问题处理:

 vsftpd:是linux自动的ftp服务器。

         查看状态 service vsftpd status, 启动:service vsftpd start 停止:service vsftpd stop

         配置文件:/etc/vsftpd/vsftpd.conf   关键项:ascii_upload_enable=YES   ascii_download_enable=YES//使用assci传输还是bin传输

                     ascii传输会将换行符进行转换,bin传输所有字节不变动。

                                           日志配置:xferlog_file=/var/log/xferlog   xferlog_enable=YES  xferlog_std_format=YES,打开将在/var/log中有xferlog 日志否则只在message中记录简单

                                         登陆情况。

         =================服务端介绍完毕=======================

        编写客户端连接时分为主动模式(PORT)和被动模式(passive),就是ftp服务器主动连接客户端建立数据链路,还是等待客户端连接。

      服务端默认开启21端口,客户端连接后作为命令链路,可以通过发送PASV命令告诉服务端被动模式,则服务端会创建一个随机端口返回给客户端

      等待客户端连接,主动模式则需要客户端发送PORT命令,告诉服务端本地的建立的端口号,由ftp服务端连接。

   ===================客户端原理介绍完毕==============

     发生的问题是:在发送PORT 命令时的格式,对于小段机器要发送 PORT IP,端口低8位,端口高8位,而大端机器要发送PORT IP,端口高8位,端口低8位

                          注意ip中的每一个位要使用,分割。组成XX,XX,XX,XX,lport,hport\r\n

                             在linux机器上我们传输了后面的,这样导致我们客户端能够bind成功,发送PORT端口也是成功的,但是服务总是返回连接无法建立的情况(425)。

                              当然这种情况还要考虑防火墙iptables,看是否服务端能够连接到这个端口。

                       所以在以后的问题中一定要注意大端小段的问题。

                      发送的每个命令都要加上\r\n ,如"list \r\n",返回文件列表

     主动模式: ftp服务端主动连接客户端端口,会引起无法控制的风险。

     被动模式:客户端连接服务端端口,服务只需要开放有限端口,数据责任有客户端负责。