ftp是典型的C/S结构的网络层协议;它使用TCP 20 和 21 端口 ;传输模式有两种,

主动模式:服务端主动发起 数据 连接;首先客户端向服务端的21端口建立控住链接,当需要数据传输的时候 客户端通过PORT的命令告诉服务端自己打开的端口,于是服务端从20口向客户端法请求并建立连接。

被动模式:服务端被动等待 数据 链接;首先客户端向服务端的21端口建立控制链接 当需要传输数据的时候 服务端以PASV 命令通知客户端 自己打开的端口(随机打开)于是客户端向服务端的那个端口(非20)端口建立连接;

如果是客户机的防火墙禁止主动模式 一般是转为被动模式

传输数据的方式分为两种:

文本模式:ASCII模式  传输时使用ASCII字符 一般适合纯文本的传输;

二进制模式:Binary模式   适合传输程序,图片等;

我用的是vsftpd这个软件

系统盘上就有包  要不直接yum安装       默认安装位置/etc/vsftpd    里面包括:用户控制文件(ftpusers、user_list)和 主配置文件;

ftpusers 文件:这个文件中的用户将禁止登录到ftp服务器;不管是不是在user_list中出现,如:root就在这里

user_list文件:看配置文件中 userlist_enable=YES 则允许  userlist_deny=YES就是拒绝 看英文意思就知道了。

本地用户的vsftpd服务:

匿名ftp:

匿名用户对应为ftp 或 anonymous     宿主目录是/var/ftp     该目录是匿名用户访问vsftpd的根目录 (anon_root更改)首先设置相应的权限  把pub目录的属组设置成 ftp

2:修改主配置文件

vi /etc/vsftpd/vsftpd.conf

anonymous_enable=YES     //允许匿名用户访问

local_enable=NO     //不启用本地用户

write_enable=YES    //   允许写的权限

anon_umask=022      //上传文件时的掩码  这里是用的反码

anon_upload_enable=YES     //允许匿名用户上传

anon_mkdir_write_enable=YES     //允许匿名用户建目录

userlist_enable=NO     //没启用本地用户  将用户列表禁用

anon_other_write_enable=YES //允许匿名用户在上传目录中做删除,重命名等操作;慎用;

重启就好了!!!

【注:不要去改/var/ftp的属主  用可能会报错;】

本地用户FTP:

使用系统用户做验证 默认登录位于自己的宿主目录 且有读写的权限 且允许切换到其他的目录   可以使用chroot_local_user 固定在宿主目录    local_root设置根目录;

1:先建立测试用户 设置密码

2:vi /etc/vsftpd/vsftpd.cong

anonymous_enable=NO   //禁用匿名访问

local_enable=YES       //允许本地用户访问

write_enable=YES     //开放写的权限

local_umask=022       //上传建立文件的默认权限

chroot_local_user=YES    //把用户禁锢在宿主目录

max_client=20      //并发客户连接数

max_per_ip=2     //同一ip同时连接数

local_max_rate=102400     //本地用户上传下载的速度 100kb/s

pasv_enable=YES       //允许被动模式并设置端口范围

pasv_min_port=24500

pasv_max_port=24600

好了 重启服务 OK!!!

【如用wget测试 格式:wget  ftp://用户:密码@服务器ip/文件名】

建立基于虚拟用户的vsftpd服务:

 1:建立虚拟用户的用户名/密码数据库

vsftpd使用Berkeley DB 格式的数据文件  该数据文件需要用db_load命令工具 光盘中有db4-utils-xxxxxxx.rpm包

先建立文本格式的文件  :vi  /etc/vsftpd/vusers.list

chunchun

123456

xiaochun

123456     //格式是 用户名密码各一行

用db_load工具将列表文件转化成DB文件

db_load  -T  -t hash  -f   vusers.list  vuser.db       //-T 表示允许转化  -f   文件  -t   hash  读取数据的方法     最后把权限设成600

2:设置虚拟用户对应的系统用户   可以不设置密码

useradd  -d  /var/ftproot  -s  /sbin/nologin   test

把/var/ftproot    权限设置成755

3:建立PAM认证文件

(pam用于程序提供用户认证  vsftpd使用的是 /etc/pam.d/vsftpd)

vi   /etc/pam.d/vsftpd.vu

#%PAM-1.0

auth             required     pam_userdb.so    db=/etc/vsftpd/vusers

account       required      pam_userdb.so    db=/etc/vsftpd/vusers       

{vusers   是省略.db的数据库文件}

4:改配置文件:vi    /etc/vsftpd/vsftpd.conf

anonymous_enable=no

local_enable=YES

anon_umask=022

write_enable=YES

guest_enable_YES

guest_username=test

dirmessage_enable=YES

pam_service_name=vsftpd.vu            //修改PAM文件位置

虚拟用户被当作是匿名用户  所以是用anon配置项

这是就OK!!!!了

【补充】

可以为不同用户单独设置配置文件   修改主配置文件  加

user_config_dir=/etc/vsftpd/vusers_dir

建立文件 

mkdir    /etc/vsftpd/vusers_dir/      进入目录

vi    用户名(虚拟用户)

anon_upload_enable=YES

anon_mkdir_write_enable=YES

注意:/etc/vsftpd/ftpusers    中加入虚拟用户并不能禁用相应的系统帐号