ftp是文件传输协议,基于C/S模式,即服务器与客户器的模式。
ftp采用双tcp连接方式:
控制连接:用于在ftp客户端和ftp服务器之间传输ftp控制命令及命令执行信息,控制连接在整个ftp会话期间一直保持打开,端口号21
数据连接:用于传输数据
,包括数据的上传,下载,文件列表发送等。数据传输结束后数据连接终止,端口号20

ftp采用两种数据传输方式:
主动方式:相对服务器而言,
被动方式:选择是由客户端决定

ftp有两种文件传输模式:
ASCII模式:将本地文件传化成ASCII在传输,适合文本传输。HTML和文本文件
二进制模式:文件按照比特流的方式进行传输,适用于传送程序文件,它不转换,速度比较快,可传送可执行文件,压缩文件和图片文件。

ftp用户的类型:
匿名用户:anonymous,ftp 家目录在/var/ftp    
本地用户:用户和密码保存在passwd和shadow中
            相当于直接登陆到系统
虚拟用户:有自己独立的账户和密码

yum install vsftp安装ftp
service vsftpd start启动服务
在客户端登陆:ftp ip地址
                pwd查看登陆的位置
在linux上:ftp  ip地址
            lftp -u ftptest ip地址
            !ls本机的
            put  上传
上传是要注意用户的权限和目录的权限
   
vim /etc/vsftpd/vsftpd.conf 配置文件
anonymous_enable=YES是否允许匿名登陆
local_enable=YES是否允许本地用户登陆
write_enable=YES本地是否有写权限
local_umask=022对文件的权限自动掩码
anon_mkdir_write_enable=YES是否允许匿名创建目录
dirmessage_enable=YES切换目录的信息
xferlog_enable=YES日志
xferlog_file=/var/log/vsftp日志文件的位置
connect_from_port_20=YES确定传输是20端口
idel_session_timeout=600将在用户会话空闲10分钟后被中断
data_connection_timeout=120将在数据连接空闲2分钟后被中断
#ascii_upload_enable=yes是否启用ascii传输,默认是关闭的

如果希望用户登陆后不能切换到自家目录之外的目录,可以设置chroot选项
chroot_local_user=YES本地用户执行chroot
若设置指定的用户执行chroot,需要如下设置:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
这样只有/etc/vsftpd.chroot_list文件中指定的用户才能执行chroot命令

限制指定的本地用户不能访问,而其他本地用户可以访问,如下设置
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd.user_list
是文件/etc/vsftpd.user_list中指定的本地用户不能访问ftp服务器,而其他本地用户可访问ftp服务器
若userlist_deny=NO则是限定指定的本地用户可以访问,而其他本地用户不可以访问ftp服务器

安全方面:
setenforce 1 开启selinux
若开启selinux会有限制
getsebool -a | grep ftp 查看权限
setsebool -P allow_ftpd_anon_write on允许写权限,可以根据需要进行不同的设置

tcpdump是个捕获工具
tcpdump -D显示本地网络接口
tcpdump -i eth0 -A dst host 192.168.0.11只要有访问192.168.0.11的数据包通过eth0就进行捕获
ftp传输是明文的,我们要使用ssl会话加密,证书加密
cd /etc/pki/CA
mkdir certs newcerts crl
touch index.txt serial
echo 01> seria
openssl genrsa 1024>private/cakey.pem
chmod 600 private/cakey.pem
openssl req -new -x509 -key private/cakey.pem
然后填一些信息,自签证书完成
在客户端 cd /etc/vsftpd/
         mkdir ssl
         openssl genrsa 1024 >ftp.key生成私钥
          openssl req -new -key vsftpd.key -out
ftp.csr
在/etc/vsftpd/vsftpd.conf
ssl_enale=YES是否开启ssl
ssl_tlsv1=YES版本
ssl_tlsv2=YSE
ssl_tlsv3=YES
allow_anon_ssl=NO是否允许匿名用户使用ssl
force_local_data_ssl=YES本地数据是否强行加密
force_local_logins_ssl=YES本地登录是否强行加密
rsa_cert_file=/etc/vsftp/ssl/vsftpd_cert.pem
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd_key.pem

构建基于虚拟用户的vsftpd服务器
1创建虚拟用户的账号和密码,并保存在数据库中
vim  /etc/vsftpd/vusers_listvusers
   zhou
   123
yum install db4-utils
cd /etc/vsftpd/
db_load -T -t hash -f vusers.list vusersdb通过hash算法传化成数据库文件
file vusers.db
chown 600 /etc/vsftpd/vusers.*
2创建ftp根目录及虚拟用户映射的系统用户
mkdir /var/ftproot
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod 755 /var/ftproot
3建立支持虚拟用户的PAM认证
vim /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
auth 检查账号密码
account 检查账号是否过期,是否有权
登录
required要求必须通过,否侧结束退出
requisite只要通过一项即可
后面上数据库文件的位置
4在vsftpd.conf文件中添加支持配置
vim  /etc/vsftpd/csftpd.conf
anonymous_enable=NO
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建立独立的配置目录及文件
 配置文件名与用户名同名
 mkdir /etc/vsftpd/vusers_dir/
 cd /etc/vsftpd/vusers_dir/
 touch mike
 vim john
anon_upload_enable=YES
anon_mkdir_write_enable=YES
6.重新加载vsftpd配置
service vsftpd reload
7.使用虚拟FTP账户访问测试
分别用mike、john用户登录FTP服务器进行下载、上传测试
 mike用户可以登录,并可以浏览、下载文件,但无法上传
 john用户可以登录,并可以浏览、下载文件,也可以上传
 匿名用户或其他系统用户将不能登录


ftp的典型消息
在用于ftp客户程序与ftp服务器进行通信时,经常会看到一些由ftp服务器发送消息,这些消息是ftp协议所定义的。下面列出典型的ftp消息:
消息号
125:数据连接打开,传输开始
200:命令OK
226:数据传输完毕
331:用户名OK
425:不能打开数据连接
426:数据连接被关闭,传输被中断
452:错误写文件
500:语法错误,不可识别的命令