FTP服务详解
FTP服务
- 本章机构

- 简介
- File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文件传输协议"。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的不同操作系统有不同的FTP的应用程序,而所有这些应用程序都遵守同一个协议以传输文件,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。
- "下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是从本地将文件从自己的计算机中拷贝至远程主机上。
- 支持FTP协议的服务器就是FTP服务器。
- 工作模式
- FTP连接及传输模式
- 控制连接:TCP 21,用于发送FTP命令信息
- 数据连接:TCP 20,用于上传、下载数据
- 数据连接的建立类型:
- 主动模式:服务器从20端口主动向客户端发起连接
- 被动模式:服务器在指定范围内某个端口被动等待客户端连接


- 服务器端和客户端程序
- FTP用户的类型:
匿名用户:annonymous或ftp
本地用户:
账号名称、密码等信息保存在passwd、shadow文件中
- 常见的FTP服务器程序:
IIS、Serv-U
wu-ftpd、Proftpd
vsftpd(Very Secure FTP Daemon)
- 常见的FTP客户端程序:
CuteFTP、FlashFXP、LeapFTP、Filezilla
gftp、Kuftp
FTP命令
- 相关配置
- vsftpd软件包
官方站点:http://vsftp.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.131.129:设置监听的IP地址
listen_port=21:设置监听FTP服务的端口号
write_enable=YES:是否启用写入权限
download_enable=YES:是否允许下载文件
max_clients=0:限制并发客户端连接数
max_per_ip=0:限制同一个IP地址的并发连接数
pasv_enable=YES #启用被动模式
pasv_min_port=5000:将客户端的数据连接端口改在50000-60000之间
pasv_max_port:60000
- 限制访问
userlist_enable=YES:是否启用user_list列表文件
userlist_deny=YES:禁止列表文件里面的用户访问
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
#启用tcp_wrappers,即/etc/hosts.allow和/etc/hosts.deny
- 案例1:匿名验证
流程:准备匿名FTP访问的目录/var/ftp/pub,使匿名用户FTP对目录有写入权限,开放匿名用户配置,并启动vsftpd服务。
使用匿名验证时,可以将光盘挂载到ftp下的某个目录下,并且此目录是777的权限,那么客户端可以将其挂载到本地作为yum源
- FTP服务器端配置安装
#yum –y install vsftpd
#vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES #支持匿名用户
write_enable=YES #支持写权限
anon_umask=022 #匿名用户上传或创建的文件或目录的默认权限
anon_upload_enable=YES #允许匿名用户上传文件,默认为允许
anon_mkdir_write_enable=YES #允许匿名用户有创建目录的权限
anon_other_write_enable=YES #允许匿名用户对文件具有删除等权限
#service vsftpd start
#chown ftp /var/vsftpd/pub #生产环境不要直接用chmod改
#设置所有用户对pub目录具有读写权限,否则即使ftp服务设置了相关权限,匿名用户还是无法具有相关权限,这点要特别注意,还有就是要关闭防火墙和SELINUX
- FTP客户端配置安装
#yum –y install ftp
#ftp 192.168.131.129

ftp> cd pub #进入此目录,进行相关实验操作
ftp>?
#可以获取命令列表,也就是ftp可以使用的命令,常用的命令有:

使用!也可以退出ftp
ftp> put 1.txt
#上传文件时,要注意自己对那个文件有权限,否则无法上传成功,可以用root创建一个文件,然后#chmod 777 filename,最好在tmp下做实验
- 案例2:本地用户验证
- 服务器端安装配置
#useradd user1 #添加本地用户
#passwd user1
#useradd user2
#passwd user2
#useradd user3
#passwd user3
#yum –y install vsftpd
#vim /etc/vsftpd/vsftpd.conf
local_enable=YES #启用本地系统用户
write_enable=YES #允许有写权限
local_umask=022 #设置本地用户的默认权限,文件为644,目录755
local_root=/var/rootftp #设置ftp的根目录
chroot_local_user=YES
#是否将用户禁锢在根目录,务必要加上这条,否则用户可以随意切换到其他目录,威胁系统安全
local_max_rate=0 #允许的最大传输速率
userlist_enable=YES #启用user_list用户列表
userlist_deny=YES #禁止user_list的用户登录FTP
或者[userlist_deny=NO ] #只允许user_list的用户登录ftp服务器
#vim /etc/vsftpd/user_list

注意:禁止用户登录如果在/etc/vsftpd/ftpuses和/etc/vsftpd/user_list都有写上某个用户,那么即使/etc/vsftpd/user_list允许用户登录,但这个用户同时也被写入/etc/vsftpd/ftpuses,那么这用户无法登录,也就是说/etc/vsftpd/ftpuses优先级更高
- 客户端安装客户端软件并测试
- 案例3:虚拟用户
创建账号数据:
#yum –y install vsftpd
- 建立虚拟FTP用户的账号数据库文件
[root@myrhel1 vsftpd]# vim vuser.list

[root@myrhel1 vsftpd]# db_load -T -t hash -f vuser.list vuser.db
#-T:生成数据文件 -t:指定算法为hash -f:指定账号文件
[root@myrhel1 vsftpd]# chmod 600 vuser.*
#修改文件权限,不让任何人查看
- 创建FTP根目录及虚拟用户映射的系统用户
[root@myrhel1 pam.d]# useradd -d /var/ftp/ -s /sbin/nologin vuser
[root@myrhel1 pam.d]# chmod 755 /var/ftp/
- 建立支持虚拟用户的PAM认证文件,添加虚拟用户支持
[root@myrhel1 pam.d]# cd /etc/pam.d/
[root@myrhel1 pam.d]# cp vsftpd vsftpd.vuser
[root@myrhel1 pam.d]# vim vsftpd.vuser
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
- 在vsftpd.conf文件中添加支持配置
local_enable=YES
write_enable=YES
anon_umask=022
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.vuser
user_config_dir=/etc/vsftpd/vusers_dir
- 为个别虚拟用户建立独立的配置文件,启动服务并测试
[root@myrhel1 pam.d]# mkdir /etc/vsftpd/vusers_dir
[root@myrhel1 pam.d]# vim /etc/vsftpd/vusers_dir/user1
anon_upload_enable=YES
[root@myrhel1 pam.d]# vim /etc/vsftpd/vusers_dir/user2
anon_mkdir_write_enable=YES
- 重新加载vsftpd配置
#service vsftpd reload
- 使用虚拟FTP账户访问测试
user1用户可以登录,并可以浏览、下载、上传
user2用户可以登录,并可以浏览、下载、创建目录
- 案例4:ftps加密传输
ftp是明文传输,极不安全,可以使用tcpdump等抓包工具进行抓取
[root@myrhel1 vsftpd]# yum -y install tcpdump
[root@myrhel1 vsftpd]# tcpdump port 21 –nA

ftps是用openssl进行加密传输,相比较明文传输更加安全。
[root@myrhel1 vsftpd]# ldd `which vsftpd`
| grep ssl#查询ftp是否支持ssl
- FTPS安装配置
- #yum –y install vsftpd
- #openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem
#req 表示生成证书
-new表示生成一个新的证书
-x509证书格式
-nodes表示生成证书时,不生成密码保护,而默认会生成密码保护
-out指定输出证书的文件名
-keyout生成私钥的文件名
根据提示填写好相关信息即可生成一个证书
- [root@myrhel1 ~]# chmod 400 vsftpd.pem #证书只允许管理员只读
④[root@myrhel1 ~]# cp vsftpd.pem /etc/ssl/certs/
#拷贝证书到ssl的默认证书目录
- [root@myrhel1 ~]# vim /etc/vsftpd/vsftpd.conf
加上下列几行
ssl_enable=YES #表示启用ssl功能
allow_anon_ssl=YES #表示允许匿名用户使用ssl加密
force_local_data_ssl=YES #强制本地用户数据传输使用ssl加密
force_local_logins_ssl=YES #强制本地用户登录时使用ssl加密
force_anon_data_ssl=YES #强制匿名用户数据传输使用ssl加密
force_anon_logins_ssl=YES #强制匿名用户登录时使用ssl加密
ssl_tlsv1=YES #加密使用第一版协议
ssl_sslv2=NO #必须声明不使用ssl版本2,这个不能不加
ssl_sslv3=NO #必须声明不使用ssl版本3,这个不能不加
rsa_cert_file=/etc/ssl/certs/vsftpd.pem #指定生成证书的位置
- service vsftpd start
- 最后使用专门的客户端工具(支持加密访问的客户端,命令行没有),如flashFXP

FTP服务详解的更多相关文章
- 【转】SSH服务详解
[转]SSH服务详解 第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Gro ...
- (转)SSH服务详解
SSH服务详解 原文:http://www.cnblogs.com/clsn/p/7711494.html 第1章 SSH服务1.1 SSH服务协议说明SSH 是 Secure Shell Proto ...
- 引用 Windows Server 2003 FTP服务器配置详解
引用 昆神之星 的 Windows Server 2003 FTP服务器配置详解 1.FTP文件传输协议,主要用于计算机之间文件传输,是互联网上仅次于www的第二大服务.本文主要演示如何在Window ...
- winxp计算机管理中服务详解
winxp计算机管理中服务详解01 http://blog.sina.com.cn/s/blog_60f923b50100efy9.html http://blog.sina.com.cn/s/blo ...
- Android中Service(服务)详解
http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...
- WCF中队列服务详解
WCF中队列服务详解 一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务 ...
- HTTPD之二————HTTPD服务详解————httpd的配置文件常见设置
HTTPD之二----HTTPD服务详解----httpd的配置文件常见设置 HTTP服务器应用 http服务器程序 httpd apache nginx lighttpd 应用程序服务器 IIS,a ...
- ftp文件共享服务详解
ftp 文件共享服务,文件的上传下载 跨平台,tcp协议 21号(命令端口) 20号(数据端口,主动模式) 默认情况 ftp服务运行被动模式 vsftpd:软件 非常安全的rpm -qi vsftp ...
- Linux中搭建一个ftp服务器详解
来源:Linux社区 作者:luzhi1024 详解Linux中搭建一个ftp服务器. ftp工作是会启动两个通道:控制通道 , 数据通道在ftp协议中,控制连接均是由客户端发起的,而数据连接有两种 ...
随机推荐
- javaScript 类型判断
直接上例子: 1 判断是否为数组类型 2 判断是否为字符串类型 3 判断是否为数值类型 4 判断是否为日期类型 5 判断是否为函数 6 判断是否为对象 1 判断是否为数组类型 linenum < ...
- labview 中activex的初步使用方法
1.在前面板放置一个activex容器 2.插入activex控件 3.百度找到这个activex控件的属性和方法介绍 4.程序框图中右键activex控件,创建xxx类的方法或者xxx的属性:act ...
- php把时间格式化
如题,把如 2013-6-12 12:00 格式化为 2013-6--12 可以先将时间转换下,然后重新将时间格式化显示: echo date("Y-m-d", strtotime ...
- OOP 6大基本原则
1.开闭原则: 对扩展开发.对修改关闭. 2.里氏替换原则:子类替换父类(可以用父类对象的任何地方都可以用子类对象代替) 3.依赖倒置原则:程序要依赖于抽象接口,不要依赖于具体实现.简单的说就是要求对 ...
- JS与Jquery的事件委托——解决了绑定相同事件的问题
概念: 什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完 ...
- SQL性能优化工具TKPROF
全名为Trace Kernel Profile,用来格式化跟踪文件,是一个命令行工具. 主要的格式例如以下: tkprof tracefile outputfile - tracefile:要分 ...
- android 手电筒的实现
android手机用闪光灯做成手电筒的应用非常多,可是有的不能用. 后来发现是除了把 camera device的 flashmode设置成torch外还要打开预览: 以下是代码: MainActiv ...
- 开始学习web前端技术
不能再蹉跎了,不能再徘徊了,不能再犹豫了,犹豫徘徊等于白来…… 感觉之前浪费了太多的岁月,必须得学习一门实用的技术来充实自己空虚的心情了. 想来想去网页应该是万金油的,大大小小多多少少都得用到.既然如 ...
- Codeforces Round #333 (Div. 1) B. Lipshitz Sequence 倍增 二分
B. Lipshitz Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/601/ ...
- Cocos2d-x多语言支持解决方式
很多其它相关内容请查看本人博客:http://www.bokeyi.com/ll/category/cocos2d-x/ 利用.plist文件让Cocos2d-x轻松支持多语言. .plist文件类似 ...