FTP服务

Posted gmiaomiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FTP服务相关的知识,希望对你有一定的参考价值。

技术分享图片

文件传输协议(FTP)

文件传输协议(英文:File Transfer Protocol,缩写:FTP)早期的三个应用级协议之一,是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式,即基于C/S结构。它属于网络传输协议的应用层。

 

双通道协议:数据和命令连接

数据传输格式:二进制(默认)和文本

两种模式:服务器角度

  主动(PORT style):服务器主动连接

  • 命令(控制):客户端:随机port → 服务器:tcp21
  • 数据:客户端:随机port ← 服务器:tcp20

  被动(PASV style):客户端主动连接

  • 命令(控制):客户端:随机port → 服务器:tcp21
  • 数据:客户端:随机port ← 服务器:随机port

服务器被动模式数据端口示例:

  227 Entering Passive Mode (192,168,175,138,224,59)

  服务器数据端口为:224*256+59

FTP软件介绍

FTP服务器:

vsftpd:Very Secure FTP Daemon,

CentOS默认FTP服务器,高速,稳定,下载速度是WU-FTP的两倍

ftp.redhat.com数据:单机最多可支持15000个并发

其他ftp服务器

Wu-ftpd,Proftpd,Pureftpd,ServU,IIS

FTP服务

状态码:

1XX:信息      125:数据连接打开

2XX:成功类状态   200:命令OK 230:登录成功

3XX:补充类     331:用户名OK

4XX:客户端错误   425:不能打开数据连接

5XX:服务器错误   530:不能登录

用户认证:

匿名用户:ftp,anonymous,对应Linux用户ftp

系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow

虚拟用户:特定服务的专用用户,独立的用户/密码文件

nsswitch:network service switch名称解析框架

pam:pluggable authentication module 用户认证

/lib64/security /etc/pam.d/ /etc/pam.conf

vsftpd服务

由vsftpd包提供,不再由xinetd管理

用户认证配置文件:

/etc/pam.d/vsftpd

服务脚本: 

/usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd

配置文件:

/etc/vsftpd/vsftpd.conf
man 5 vsftpd.conf
格式:option=value
注意:= 前后不要有空格

匿名用户(映射为系统用户ftp )共享文件位置:

/var/ftp

系统用户共享文件位置:用户家目录

虚拟用户共享文件位置:为其映射的系统用户的家目录

vsftpd服务配置

命令端口

listen_port=21

主动模式端口

connect_from_port_20=YES  主动模式端口为20
ftp_data_port=20       指定主动模式的端口

被动模式端口范围

pasv_min_port=6000   0为随机分配
pasv_max_port=6010

linux     客户端默认使用被动模式
windows    客户端默认使用主动模式

使用当地时间

use_localtime=YES 使用当地时间(默认为NO,使用GMT)

匿名用户

anonymous_enable=YES        支持匿名用户
no_anon_password=YES       (默认NO) 匿名用户略过口令检查
anon_world_readable_only     (默认YES)只能下载全部读的文件
anon_upload_enable=YES       匿名上传,注意:文件系统权限
anon_mkdir_write_enable=YES
anon_umask=077           指定匿名上传文件的umask
anon_other_write_enable=YES   可删除和修改上传的文件

指定上传文件的默认的所有者和权限

chown_uploads=YES(默认NO)
chown_username=wang
chown_upload_mode=0644

Linux系统用户

guest_enable=YES      所有系统用户都映射成guest用户
guest_username=ftp    配合上面选项才生效,指定guest用户
local_enable=YES     是否允许linux用户登录
write_enable-YES     允许linux用户上传文件
local_umask=022      指定系统用户上传文件的默认权限
local_root=/ftproot   非匿名用户登录所在目录

 

 

禁锢所有系统用户在家目录中
  chroot_local_user=YES(默认NO,不禁锢)禁锢系统用户
禁锢或不禁锢特定的系统用户在家目录中,与上面设置功能相反
  chroot_list_enable=YES
  chroot_list_file=/etc/vsftpd/chroot_list
  当chroot_local_user=YES时,则chroot_list中用户不禁锢
  当chroot_local_user=NO时,则chroot_list中用户禁锢

wu-ftp日志:默认启用

xferlog_enable=YES            (默认)启用记录上传下载日志
xferlog_std_format=YES         (默认)使用wu-ftp日志格式
xferlog_file=/var/log/xferlog     (默认)可自动生成
vsftpd日志:默认不启用
dual_log_enable=YES           使用vsftpd日志格式,默认不启用
vsftpd_log_file=/var/log/vsftpd.log (默认)可自动生成

登录提示信息

ftpd_banner=“welcome to mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt 优先上面项生效

目录访问提示信息

dirmessage_enable=YES  (默认)
message_file=.message  (默认)信息存放在指定目录下.message

使用pam(Pluggable Authentication Modules)完成用户认证

pam_service_name=vsftpd
    pam配置文件:/etc/pam.d/vsftpd
    /etc/vsftpd/ftpusers 默认文件中用户拒绝登录

是否启用控制用户登录的列表文件

userlist_enable=YES 默认有此设置
userlist_deny=YES(默认值)黑名单,不提示口令,NO为白名单
userlist_file=/etc/vsftpd/users_list 此为默认值

连接限制

max_clients=0 最大并发连接数
max_per_ip=0 每个IP同时发起的最大连接数

vsftpd服务指定用户身份运行

nopriv_user=nobody

传输速率:字节/秒

anon_max_rate=0 匿名用户的最大传输速率
local_max_rate=0 本地用户的最大传输速率

连接时间:秒为单位

connect_timeout=60 主动模式数据连接超时时长
accept_timeout=60 被动模式数据连接超时时长
data_connection_timeout=300 数据连接无数据输超时时长
idle_session_timeout=60 无命令操作超时时长

优先以文本方式传输

ascii_upload_enable=YES
ascii_download_enable=YES

配置FTP服务以非独立服务方运行:listen=NO,默认为独立方式

cat /etc/xinetd.d/vsftpd
service ftp
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_failure += USERID
disable = no
}

以上是关于FTP服务的主要内容,如果未能解决你的问题,请参考以下文章

一句python代码搭建FTP服务

如何在Linux中部署ftp服务只需要代码

FTP服务器文件上传的代码实现

Java上传文件FTP服务器代码

通过带有PHP代码的Web服务器将应用程序上的本地文件上传到FTP服务器

Java网络编程(读书笔记)