1.简介

文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一种协议,工作于OSI,TCP的应用层,客户端和服务端之前连接要经过一次TCP的三次握手,其作用就是可以使用户以文件操作的方式与另一台主机相互(增、删、改、查、传送)文件,然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。

端口号:tcp20(数据端口),tcp21(控制端口)

特定:两台通信的主机之间使用了两条 TCP 连接,一条是数据连接,用于数据传送;另一条是控制连接,用于传送控制信息(命令和响应),这种将命令和数据分开传送的思想大大提高了 FTP 的效率

匿名用户:anonymous

2.支持模式

FTP支持两种模式:Standard (PORT方式,主动方式),Passive (PASV,被动方式)

主动:

客户端连接的时候使用一个的端口(这里为A)去向服务端的21号端口进行连接,在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口(B)发送数据,FTP server必须和客户端建立一个新的连接用来传送数据

被动:

建立连接和主动一样,服务器收到连接命令后,会打开一个临时端口(>1024<65535)并通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据

3.vsftp

(1)介绍

vsftpd(very secure ftp daemon,非常安全的 FTP 守护进程)是一款运行在 Linux 操作系统上的 FTP 服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他 FTP 服务程序不具备的特点。

(2)安装和防火墙配置

安装yum -y install vsftpdiptabels -I INPUT -p tcp --dport 20:21 -j ACCEPT

(3)常用配置目录和selinux设置



/etc/vsftpd

配置根目录

/etc/vsftpd/vsftpd.conf

主配置文件

/etc/vsftpd/ftpusers

所有位于此文件内的用户都不能访问vsftp服务

/etc/vsftpd/user_list

ftp 用户名单,可以设置白名单或黑名单

/etc/vsftpd/chroot_list

chroot黑白名单

usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.conf

配置命令模板文件

setsebool ftp_home_dir on

SELinux开启本地用户登录

setsebool -P ftpd_full_access on

setsebool -P ftpd_anon_write=on

SELinux允许匿名用户写入



(4)vsftpd.conf文件详解

匿名用户相关参数

anonymous_enable=YES # 允许匿名用户登陆

no_anon_password=NO # 对匿名用户密码检测

ftp_username=ftp # 匿名用户登陆的username

anon_mkdir_write_enable=NO # 不允许匿名用户创建目录

anon_other_write_enable=NO # 不允许匿名用户对文件增、删、改

anon_upload_enable=NO # 不允许匿名用户上传文件

anon_world_readable_only=YES # 如果为YES,匿名用户只能下载可读的文件

anon_max_rate=0 # 允许匿名用户最大数据传输速率,单位为B/s

anon_umask=077 #umask的权限

chown_uploads=NO # 如果设置为YES,所有的匿名用户上传的文件属主都设置为chown_username指定用户

chown_username=root # 指定chown_uploads中所需的文件属主用户

deny_email_enable=NO # 如果设置为YES,则提供一个内容为mail address的文件,若是使用匿名登入,则会要求输入email address,如果它不在文件内,则禁止进入

banned_email_file=/etc/vsftpd/banned_emails # 指定deny_email_enable中的文件路径

本地用户相关参数

local_enable=YES # 是否允许本地用户登陆

write_enable=YES # 本地用户写权限

local_umask=022 # 本地用户的文件umask码

local_root=none # 本地用户登陆后改变的目录,默认是各自家目录

local_max_rate=0(unlimited) # 本地用户使用的最大传输速度,单位为B/s

虚拟用户相关参数

pam_service_name=vsftpd # 设置PAM使用的名称

guest_enable=NO # 是否启用虚拟用户

guest_username=vsftpuser # 指定本地用户名,用来映射虚拟用户

virtual_use_local_privs=NO # 如果启用,虚拟用户将使用与本地用户相同的权限,否则与匿名用户权限相同

banner参数

dirmessage_enable=YES # 如果设置为YES,当用户首次进入一个目录后,会查找.message文件并显示

message_file=message # 设置message文件

ftpd_banner=Welcome to blah FTP service # 设置进入banner信息

banner_file=none # 设置一个包含banner信息的文件路径,开启它将会覆盖ftpd_banner

日志文件

xferlog_enable=YES # 是否开启上传下载日志,默认放在/var/log/vsftpd.log

xferlog_std_format=NO # 日志将以xferlog格式写入

xferlog_file=/var/log/xferlog # 设置日志存放路径

log_ftp_protocol # 记录所有请求和响应,前提是xferlog_std_format=NO

数据传输模式

ascii_upload_enable=YES # 是否启用ASCII模式上传数据

ascii_download_enable=YES # 是否启用ASCII模式下载数据

工作模式与端口设置

listen_port=21 # 设置ftp服务工作的端口

connect_from_port_20=YES # 主动模式数据传输的端口

pasv_enable=YES # YES为被动模式工作,NO则是主动模式,默认YES

pasv_max_port=0 # PASV模式下,最大传输数据端口号,0为任意无限制

pasv_min_port=0 # PASV模式下,最小传输数据端口号

超时时间设置

idle_session_timeout=600 # 客户端连接FTP后无命令超时时间

data_connection_timeout=120 # 无数据传输超时时间

accept_timeout=60 # 建立FTP连接的超时时间

connect_timeout=60 # PORT模式下建立数据连接的超时时间

目录权限,锁定家目录

chroot_local_user=NO # 是否禁止本地用户切换到家目录上级目录,绑定家目录为用户的根目录

chroot_list_enable=NO # 是否启用chroot列表文件,写入文件中的用户是否锁定家目录,与chroot_local_user的结果相对立

chroot_list_file=/etc/vsftpd/chroot_list # 指定用户列表文件的文件路径

以下为4中组合方式:

chroot_local_user=YES,chroot_list_enable=YES # 只允许chroot_list_file文件中的用户切换到其他目录

chroot_local_user=YES,chroot_list_enable=NO # 所有本地用户都锁定在家目录下

chroot_local_user=NO,chroot_list_enable=YES # chroot_list_file文件中的用户将锁定在家目录下

chroot_local_user=NO,chroot_list_enable=NO # 所有本地用户都可以切换到其他目录

主服务运行模式与连接设置

listen=YES # 设置vsftpd服务器是否以standalone模式运行,有很多与服务器运行相关的配置命令,需要在此模式下才有效。 若设置为NO,则vsftpd以super daemon运行,要受到xinetd 服务的管控,功能上会受到限制

max_clients=0(unlimited) # 设置客户端最大连接数,standalone模式下有效

max_per_ip=0(unlimited) # 同一IP客户端最大连接数,standalone模式下有效

用户访问控制

userlist_file=/etc/vsftpd/user_list # 控制用户访问FTP的文件

userlist_enable=NO # 如果启用,vsftpd将从userlist_file提供的文件名加载用户名列表

userlist_deny=YES # 如果设为YES,userlist_file文件中的用户不可以访问FTP服务;如果设为NO,只用文件中用户才能访问服务

/etc/vsftpd/ftpusers # 文件用来定义不允许访问FTP服务的用户列表,优先级比userlist_deny高

自定义用户配置

user_config_dir=/etc/vsftpd/virtual_user_conf/ # 指定虚拟用户配置文件目录,目录下可以创建与虚拟用户名相同的文件,给予不同的权限设置

其他设置

download_enable=YES # 如果设置为NO,所有下载请求被拒绝

ls_recurse_enable=NO # 启用后,允许使用ls -R命令,此命令可能会消耗大量资源



anonymous_enable=YES

启用匿名用户登录

local_enable=yes

是否允许本地用户登录

(记得SElinux权限)

setsebool -P ftp_home_dir on

write_enable=YES

是否允许本地用户可写

local_umask=022

umask值

anon_upload_enable=YES

ascill //文档

bin //照片


anon_upload_enable=YES

selinux:

开启匿名用户的上传写入权限

anon_mkdir_write_enable=NO

不允许匿名用户创建目录

dirmessage_enable=YES

当用户首次进入一个目录后,会查找.message文件并显示出来,类型登录控制台

xferlog_enable=YES

是否开启上传下载日志

xferlog_file=/var/log/xferlog

设置上传下载日志存放路径

xferlog_std_format=YES

日志将以xferlog格式写入

connect_form_port_20=YES

主动模式数据传输的端口是否为20

chown_uploads=YES

所有的匿名用户上传的文件属主都设置为chown_username指定用户

chown_username=root

指定chown_uploads中所需的文件属主用户

idle_session_timeout=600

超时时间,超过600s没有任何操作自动断开连接

listen=YES

是否监听

pam_service_name=vsftpd

设置PAM使用的名称

userlist_enable=YES


userlist_deny = YES

如果设为YES,userlist_file文件中的用户不可以访问FTP服务;如果设为NO,只用文件中用户才能访问服务

userlist_file = /etc/vsftpd/user_list

设置ftp 用户访问

tcp_wrappers=YES




4.ftp实验(虚拟用户)




centos7和windows互传文件 centos7怎么传文件_Powered by 金山文档


//安装vsftpd服务器
[root@router vsftpd]# yum -y install vsftpd
 //创建用户密码文件
[root@router ~]# cd /etc/vsftpd/
[root@router vsftpd]# vim vuser.list
[root@router vsftpd]# cat vuser.list 
webuser
123.com
aaa
123.com
 
[root@router vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@router vsftpd]# chmod 600 vuser.db
 //创建用户
[root@router vsftpd]#useradd -d /var/www/html -s /sbin/nologin ftpuser
[root@router vsftpd]#chmod 777 /var/www/html
[root@router vsftpd]# useradd webuser
 
 
 //新建一个虚拟用户认证的 PAM 文件
[root@router vsftpd]# vim /etc/pam.d/vsftpd.vu
[root@router vsftpd]# cat /etc/pam.d/vsftpd.vu 
auth required pam_userdb.so db=/etc/vsftpd/vuser 
account required pam_userdb.so db=/etc/vsftpd/vuser
 
 //修改配置文件
[root@router vsftpd]# cat /etc/vsftpd/vsftpd.conf | grep -Ev "#|$&"
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_umask=133
file_open_mode=755
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=webuser
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
allow_writeable_chroot=yes
pam_service_name=vsftpd
guest_enable=yes
guest_username=ftpuser
pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/dir
userlist_enable=YES
tcp_wrappers=YESS
 //创建用户配置文件
[root@router vsftpd]# mkdir dir
[root@router vsftpd]# vim dir/webuser 
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=133
file_open_mode=755

客户端测试


centos7和windows互传文件 centos7怎么传文件_网络_02


centos7和windows互传文件 centos7怎么传文件_centos7和windows互传文件_03


FTP响应码

110: 重新启动标记应答。

120: 在n分钟内准备好

125: 连接打开准备传送

150: 打开数据连接

200: 命令成功

202: 命令失败

211: 系统状态

212: 目录状态

213: 文件状态

214: 帮助信息

215: 名字系统类型

220: 新用户服务准备好了

221: 服务关闭控制连接,可以退出登录

225: 数据连接打开,无传输正在进行

226: 关闭数据连接,请求的文件操作成功

227: 进入被动模式

230: 用户登录

250: 请求的文件操作完成

257: 创建”PATHNAME”

331: 用户名正确,需要口令

332: 登录时需要帐户信息

350: 下一步命令

421: 不能提供服务,关闭控制连接

425: 不能打开数据连接

426: 关闭连接,中止传输

450: 请求的文件操作未执行

451: 中止请求的操作:有本地错误

452: 未执行请求的操作:系统存储空间不足

500: 格式错误,命令不可识别

501: 参数语法错误

502: 命令未实现

503: 命令顺序错误

504: 此参数下的命令功能未实现

530: 未登录

532: 存储文件需要帐户信息

550: 未执行请求的操作

551: 请求操作中止:页类型未知

552: 请求的文件操作中止,存储分配溢出

553: 未执行请求的操作:文件名不合法

FTP术语

150    文件状态良好,打开数据连接

200    命令成功

202    命令未实现

211    系统状态或系统帮助响应

212    目录状态

213    文件状态

214    帮助信息,信息仅对人类用户有用

215    名字系统类型

220    对新用户服务准备好

221    服务关闭控制连接,可以退出登录

225    数据连接打开,无传输正在进行

226    关闭数据连接,请求的文件操作成功

227    进入被动模式

230    用户登录

250    请求的文件操作完成

257    创建”PATHNAME”

331    用户名正确,需要口令

332    登录时需要帐户信息

350    请求的文件操作需要进一步命令

421    连接用户过多

425    不能打开数据连接

426    关闭连接,中止传输

450    请求的文件操作未执行

451    中止请求的操作:有本地错误

452    未执行请求的操作:系统存储空间不足

500    格式错误,命令不可识别

501    参数语法错误

502    命令未实现

503    命令顺序错误

504    此参数下的命令功能未实现

530    账号或密码错误

532    存储文件需要帐户信息

550    未执行请求的操作

551    请求操作中止:页类型未知

552    请求的文件操作中止,存储分配溢出

553    未执行请求的操作:文件名不合法

FTP交互命令

命令 描述

ABOR : 中断数据连接程序

ACCT : 系统特权帐号

ALLO : 为服务器上的文件存储器分配字节

APPE : 添加文件到服务器同名文件

CDUP : 改变服务器上的父目录

CWD : 改变服务器上的工作目录

DELE : 删除服务器上的指定文件

HELP : 返回指定命令信息

LIST : 如果是文件名列出文件信息,如果是目录则列出文件列表

MODE : 传输模式(S=流模式,B=块模式,C=压缩模式)

MKD : 在服务器上建立指定目录

NLST : 列出指定目录内容

NOOP : 无动作,除了来自服务器上的承认

PASS : 系统登录密码

PASV : 请求服务器等待数据连接

PORT : IP 地址和两字节的端口 ID

PWD : 显示当前工作目录

QUIT : 从 FTP 服务器上退出登录

REIN : 重新初始化登录状态连接

REST : 由特定偏移量重启文件传递

RETR : 从服务器上找回(复制)文件

RMD : 在服务器上删除指定目录

RNFR : 对旧路径重命名

RNTO : 对新路径重命名

SITE : 由服务器提供的站点特殊参数

SMNT : 挂载指定文件结构

STAT : 在当前程序或目录上返回信息

STOR : 储存(复制)文件到服务器上

STOU : 储存文件到服务器名称上

STRU : 数据结构(F=文件,R=记录,P=页面)

SYST : 返回服务器使用的操作系统

TYPE : 数据类型(A=ASCII,E=EBCDIC,I=binary)

USER : 系统登录的用户名