搭建的FTP基于Centos6.8,使用的FTP软件为小巧的vsFTP
1,FTP的工作流程与基本概念
FTP工作使用的数据包协议是可靠的TCP协议,它在工作逻辑上使用了两个TCP通道,一个用于传输操作命令,一个用于传输实际数据
其中按数据通道链接发起方的不同,FTP服务器的工作模式又可以分为被动模式(Passive)和主动模式(Active)
主动模式
首先,这个模式要求服务器和客户端都各自拥有一个公共的IP地址.其次,客户端会先主动连接服务器的21端口,来建立命令通道,这个通道建立后客户端就可以通过这个
连接来对服务器执行命令,查询文件名,列出目录,下载上传等都是通过这个通道来执行
当上述命令通道建立完成后,如果客户端的操作需要涉及到数据流,此时服务器会通知客户端,客户端会打开一个端口等待服务器的连接,然后服务器将使用20端口来
连接到客户端建立数据流通道,至此,一个完整的逻辑关系就建立了
被动模式
同样,被动模式也需要客户端和服务器建立命令通道,这个过程和主动模式一样.不一样的是数据流通道的建立,由于一些原因,服务器并不能主动的连接到客户端,所以需要
客户端去主动连接到服务器,此时客户端会先发出PASV的连接要求主动连接服务器建立数据流通道,等待服务器响应.
可以发现,主动模式和被动模式的区别就在于数据流通道的建立方式,如果是服务器连接到客户端,就是主动模式.反过来就是被动模式
2,FTP可登录的用户分类
匿名用户
anonymous,通常在FTP中这种用户类型受到很多的限制,最多只能下载服务器提供的数据,并不能上传和修改文件建立目录,而且下载带宽也会受到限制,在服务器只是简单的提供共享
时会使用到,而且也有它的好处就是简便,只要知道服务器地址即可
实体用户
这是系统中已经存在的账号,权限通常比较大,可以上传,修改建立新文件等.而且如果不使用chroot进行限制那么这类用户就可以在整个文件系统中自由的遨游,这也是一种危险的行为,如果
账户被第三方意外取得,那么整个文件系统将会陷入危险的境地,所以对这种实体用户要加以小心的使用.通常我们会使用adduser命令来为使用FTP功能特地建立一个账号,并且限制这类账号
登录系统,同时使用chroot功能
3,我们使用vsftpd
vsftpd是一个小巧且足够安全的ftp软件实现,先来介绍一下它的软件结构.
/etc/vsftpd/vsftpd.conf :这是vsftpd的主要配置文件,大多数的功能的开启关闭设置都是在这里边进行
/etc/pam.d/vsftpd :vsftpd启用PAM模块是的配置文件,主要用来作为用户身份认证和阻挡一些用户
/etc/vsftpd/ftpuser :当PAM模块启用时,写入这个文件的用户账户无法登陆FTP服务,文件内的格式为每行一个账户名
/etc/vsftpd/user_list :这是vsftpd的独立的账号访问是否放行功能的实现.和PAM的那个很像,它和PAM组成双保险,它的文件格式也是每行一个账户
/usr/sbin/vsftp :vsftpd的唯一一个执行文件
/var/ftp :当我们的FTP服务器启用匿名登录功能时,这是默认的匿名用户的根目录
4,/etc/vsftpd/vsftpd.conf配置文件说明
vsftpd.conf的配置文件使用"赋值"格式的方式,每行一项,例如,name=value,等号两边不能有空格
connect_from_port_20=YES(NO) 当服务器使用主动模式时,这个服务器端数据流通道的端口号
listen_port=21 这是vsftpd默认使用的命令通道,当然也可以使用其它非常规的端口号
listen=YES(NO) 值为YES时,表示vsftpd使用的是stand alone启动方式
pasv_enable=YES(NO) 是否支持被动模式
use_localtime=YES(NO) vsftpd默认使用GMT时间,这个设置项设置是否使用本地时间
write_enable=YES(NO) 是否允许实体用户进行文件上传的功能
local_enable=YES(NO) 启用实体用户登录功能,这样在/etc/passwd内的账号就有机会登录ftp服务,当然还需要其它的设置项基于配合
chroot_local_user=YES(NO) 是否将实体用户的作业范围限制在其主目录内
userlist_enable=YES(NO) 是否启用vsftpd的访问阻挡来处理某些账户,当然也需要和下一个设置项进行配合
userlist_deny=YES(NO) 这个设置项要在userlist_enable启用时才有意义,当本项设置为YES时,在user_list文件中的账户会被阻挡不能使用FTP服务,相反,当设置为NO时,只有此文件中的账户才可以使用FTP服务
userlist_file=/etc/vsftpd/user_list 这就是上面中提到的user_list,当然也可以不使用默认的文件,改成自己想要的文件,文件格式依旧是每行一个账户名
anonymous_enable=YES(NO) 是否启用匿名用户登录功能
anon_world_readable_only=YES(NO) 是否启用匿名用户上传文件功能,不推荐使用NO选项
5,启动vsftpd服务
Centos6.8中默认没有安装vsftpd,我们使用yum install vsftpd即可
启动vsftpd服务: service vsftpd start
开机启动vsftp: chkconfig vsftpd on
6,自定义vsftpd设置项
我需要一个专门的账号来上传一些数据到服务器,这个账号仅仅可以使用FTP服务,而又不能登录系统,它的默认主目录为/home/jack,现在来一步步配置FTP服务器
首先添加一个普通账号,并且不允许它登录系统: useradd jack -d /home/jack -s /sbin/nologin
然后设定一个适当的密码: passwd jack 根据提示输入密码即可
接着自定义vsftpd.conf文件项目值
anonymous_enable=NO 关闭匿名用户登录
local_enable=YES 启用本地用户功能
write_enable=YES 允许本地用户上传文件
chroot_local_user=YES 限制本地用户的作业范围在它的主目录
userlist_enable=YES 启用vsftp自己的阻挡访问机制
userlist_deny=NO 允许列表文件内的用户登录
userlist_file=/etc/vsftpd/user_list 指定列表文件的位置
use_localtime=YES 使用本地时间
这些都设定好后,编辑文件/etc/vsftpd/user_list,添加一个新帐户jack
最后重启vsftpd: service vsftpd restart
至此,一个简单的FTP就搭建好了