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 中加入虚拟用户并不能禁用相应的系统帐号