FTP文件服务器
FTP文件服务器
File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文件传输协议”。用于Internet上的控制文件的双向传输。
同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。
"下载"文件就是从远程主机拷贝文件至自己的计算机上;
"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。
支持FTP协议的服务器就是FTP服务器。
FTP连接及传输模式:
控制连接:TCP 21,用于发送FTP命令信息
数据连接:TCP 20,用于上传、下载数据
数据连接的建立类型:
主动模式:服务端从20端口主动向客户端发起连接
被动模式:服务端在指定范围内某个端口被动等待客户端连接
FTP用户的类型:
匿名用户:anonymous或ftp
本地用户:
帐号名称、密码等信息保存在passwd、shadow文件中
常见的FTP服务器程序:
IIS、Serv-U
wu-ftpd、Proftpd
vsftpd(Very Secure FTPDaemon)
常见的FTP客户端程序:
CuteFTP、FlashFXP、LeapFTP、Filezilla
gftp、kuftp
FTP命令
vsftpd软件包
官方站点: http://vsftpd.beasts.org/
主程序: /usr/sbin/vsftpd
服务名: vsftpd
用户控制列表文件
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
主配置文件
/etc/vsftpd/vsftpd.conf
匿名权限控制:
anonymous_enable=YES: 启用匿名访问
anon_umask=022: 匿名用户所上传文件的权限掩码
anon_root=/var/ftp: 匿名用户的FTP根目录
anon_upload_enable=YES: 允许上传文件
anon_mkdir_write_enable=YES: 允许创建目录
anon_other_write_enable=YES: 开放其他写入权
anon_max_rate=0: 限制最大传输速率(字节/秒)
本地用户权限控制:
local_enable=YES: 是否启用本地系统用户
local_umask=022: 本地用户所上传文件的权限掩码
local_root=/var/ftp: 设置本地用户的FTP根目录
chroot_local_user=YES: 是否将用户禁锢在主目录
local_max_rate=0: 限制最大传输速率(字节/秒)
常用的全局配置项:
listen_address=192.168.4.1: 设置监听的IP地址
listen_port=21: 设置监听FTP服务的端口号
write_enable=YES: 是否启用写入权限
download_enable=YES: 是否允许下载文件
max_clients=0: 限制并发客户端连接数
max_per_ip=0: 限制同一IP地址的并发连接数
Pasv_min_port=50000 将客户端的数据连接端口改在
Pasv_max_port=60000 50000—60000之间)
访问限制:
userlist_enable=YES: 是否启用user_list列表文件
userlist_deny=YES: 是否禁用user_list中的用户
userlist_deny=NO;
其它安全选项:
connect_timeout=60
accept_timeout=60
data_connection_timeout=300
idle_session_timeout=300
ftpd_banner=xxx和banner_file=/path/file
tcp_wrappers=YES
匿名和本地验证
准备匿名FTP访问的目录/var/ftp/pub
使匿名用户FTP对该目录有写入权限
开放匿名用户配置,并启动vsftpd服务
[[email protected]]# 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
[[email protected] vsftpd]# service vsftpdstart
为 vsftpd 启动 vsftpd: [确定]
[[email protected] vsftpd]#netstat -anpt | grep "vsftpd"
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 8989/vsftpd
客户端访问
使用ftp客户端程序访问测试:
[[email protected]~]# ftp 192.168.4.11
Connected to 192.168.4.11.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
KERBEROS_V4 rejected as anauthentication type
Name (192.168.4.11:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
访问限制
1、修改vsftpd.conf配置文件
启用本地用户访问
结合user_list文件灵活控制用户访问
2、重新加载vsftpd配置
[[email protected]~]# vi /etc/vsftpd/user_list
laya
vanko
hunter
[[email protected]]#vi /etc/vsftpd/vsftpd.conf
……
userlist_enable=YES
userlist_deny=NO
[[email protected]]#service vsftpd reload
1、修改vsftpd服务的监听地址、端口
[[email protected]~]# vi /etc/vsftpd/vsftpd.conf
……
listen=YES
listen_address=192.168.4.11
listen_port=2121
2、允许使用FTP服务器的被动模式
[[email protected]]#vi /etc/vsftpd/vsftpd.conf
……
pasv_enable=YES
pasv_min_port=24500
pasv_max_port=24600
虚拟用户:
创建账号数据:
1. 建立虚拟FTP用户的帐号数据库文件
2. 创建FTP根目录及虚拟用户映射的系统用户
3. 建立支持虚拟用户的PAM认证文件
添加虚拟用户支持
4. 在vsftpd.conf文件中添加支持配置
5. 为个别虚拟用户建立独立的配置文件
启动服务并测试
6. 重新加载vsftpd配置
7. 使用虚拟FTP账户访问测试
[[email protected]]#vi /etc/vsftpd/vusers.list
zhangsan
123
lisi
456
[[email protected]]#cd /etc/vsftpd/
[[email protected]]# db_load -T -t hash -f vusers.list vusers.db
[[email protected]]# file vusers.db
vusers.db: Berkeley DB (Hash, version8, native byte-order)
[[email protected]]# chmod 600 /etc/vsftpd/vusers.*
[[email protected]]# ls -lh /etc/vsftpd/vusers.*
-rw------- 1 root root 12K 02-26 08:51/etc/vsftpd/vusers.db
-rw------- 1 root root 18 02-26 08:48 /etc/vsftpd/vusers.list
2.创建FTP根目录及虚拟用户映射的系统用户
[[email protected]]# useradd -d/var/ftproot -s /sbin/nologin virtual
[[email protected]]# chmod 755/var/ftproot/
3.建立支持虚拟用户的PAM认证文件
[[email protected]]# 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
4.在vsftpd.conf文件中添加支持配置
[[email protected] ~]# vi/etc/vsftpd/vsftpd.conf
……
local_enable=YES
write_enable=YES
anon_umask=022
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
5.为不同的虚拟用户建立独立的配置文件
在vsftpd.conf文件中添加用户配置目录支持
user_config_dir=/etc/vsftpd/vusers_dir
为用户mike、john建立独立的配置目录及文件
配置文件名与用户名相同
[[email protected] ~]# mkdir/etc/vsftpd/vusers_dir/
[[email protected] ~]# cd/etc/vsftpd/vusers_dir/
[[email protected] vusers_dir]# vizhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
[[email protected] vusers_dir]# touch lisi
6.重新加载vsftpd配置
service vsftpd reload
7.使用虚拟FTP账户访问测试
zhangsan用户可以登录,并可以浏览、下载,但无法上传
lisi用户可以登录,并可以浏览、下载,也可以上传
匿名用户或其他系统用户将不能登录
tcpdump port 21 –nA
ldd `which vsftpd`|grep ssl
openssl req -new -x509 -nodes-out vsftpd.pem -keyout vsftpd.pem
chmod 400 vsftpd.pem
cp vsftpd.pem /etc/ssl/certs/
ssl_enable=YES
allow_anon_ssl=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/certs/vsftpd.pem vsftpd服务器证书文件路径
###############################################################################
一、常见的文件服务
FTP 应用层 文件共享的服务
NFS 网络文件系统 基于RPC实现
RPC 远程过程调用
SAMBA 跨平台的文件共享服务
二、FTP特点
1、连接类型
命令连接
传输命令、控制连接
持续保持连接(未设置超时时间)
客户端发起,服务器响应
数据连接
传输数据
按需打开,按需关闭,必定与某个命令连接相关联
可以同时存在多个数据连接
2、工作模式
被动模式:由客户端发起数据传输
主动模式:由服务器发起数据传输
命令连接端口:TCP 21
主动模式:
服务器端:TCP 20
客户端:随机端口
被动模式:
服务器端:随机端口
客户端:随机端口
3、服务架构:
C/S
客户端:
windows :flashfxpfilezilla
linux:ftp lftp mftp
服务器端:
windows: serv-U filezilla
linux:wu-ftp proftppureftp vsftpd
vsftpd:
体积小
配置相对简单
安全性较好
对数据库支持较弱,扩展性较差
4、认证类型:
匿名用户:不需要用户名密码验证的方式 ftp anonymous
本地用户:即系统用户
虚拟用户:
LDAP 轻量级目录访问协议
数据通过驱动访问数据容器的接口。
中间层:
1、名称解析:
ns switch network service switch
通用框架 实现与各种类型存储交互以及名称解析服务。
2、认证服务:
PAM 插入式认证模块
提供认证功能,并且提供认证库,支持各种类型存储。
5、数据传输模式:
ASCII:文本传输模式,使用ASCII字符 如:配置文件 html
BINARY:二进制模式 二进制的文件,如gz,jpeg,avi
二、服务器配置:
1、服务名:vsftpd
2、配置文件:/etc/vsftpd/vsftpd.conf
3、配置目录:/etc/vsftpd
4、用户控制列表文件:
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
三、实验:
1、匿名用户:
用户名:ftp
文件目录:/var/ftp /var/ftp/pub
下载目录:当前目录 (get 文件名 )
默认权限:下载
添加上传:anon_upload_enable=YES (put 文件名)
创建目录:anon_mkdir_write_enable=YES (服务器上没有直接touch创建文件的命令)
文件掩码:666
目录掩码:777
2、本地用户:
用户名:系统用户
文件目录:用户家目录
下载目录:当前目录
默认权限:最大权限
必备选项:chroot_local_user=YES禁锢宿主目录
可选项:chroot_list_enable=YES禁锢部分用户宿主目录
chroot_list_file=目录 禁锢用户的列表文件
用户限制列表文件:
/etc/vsftpd/user_list
/etc/vsftpd/ftpusers
限制实验1:
userlist_enable=YES
userlist_deny=YES
/etc/vsftpd/user_list
zhangsan
lisi
拒绝user_list文件中出现的用户名登录FTP服务器
限制实验2:
userlist_enable=YES
userlist_deny=NO
/etc/vsftpd/user_list
zhangsan
lisi
只允许user_list文件中出现的用户名登录FTP服务器
限制实验3:
/etc/vsftpd/ftpusers
zhangsan
禁止ftpusers文件中出现的用户名登录FTP服务器,无论user_list如何设置
被动模式:
pasv_enable=YES
pasv_min_port=3000 被动模式数据传输最小端口
pasv_max_port=3010 被动模式数据传输最大端口
3、虚拟用户
PAM格式:
类型 控制选项 模块名称 模块参数
四、加密认证
FTP+SSL=FTPS
支持加密的客户端程序