一:简介
FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。 当需要传送数据时,客户端在命令链路上用 PORT命令告诉服务器:“我打开了****端口,你过来连接我”。于是服务器从20端口向客户端的****端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。 当需要传送数据时,服务器在命令链路上用 PASV命令告诉客户端:“我打开了****端口,你过来连接我”。于是客户端向服务器的****端口发送连接请求,建立一条数据链路来传送数据。
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。
vsftp提供3种远程的登录方式:
(1)匿名登录方式
就是不需要用户名,密码。就能登录到服务器电脑里面
(2)本地用户方式
需要帐户名和密码才能登录。而且,这个帐户名和密码,都是在你linux系统里面,已经有的用户。
(3)虚拟用户方式
同样需要用户名和密码才能登录。但是和上面的区别就是,这个用户名和密码,在你linux系统中是没有的(没有该用户帐号)
二:安装
1、配置相关服务
启动服务:
[root@localhost root]#yum install vsftpd;安装vsftpd服务
#/etc/init.d/vsftpd start ;启动服务
#chkconfig --level 235 vsftpd on ;让系统服务随着系统启动而启动
配置相关文档:
#vi /etc/vsftpd/vsftpd.conf
######### 核心设置 ###########
local_enable=YES # 允许本地用户登录
write_enable=YES # 本地用户的写权限
local_root=/home #系统账户对应的ftp根目录
local_umask=027 #设置上传文件的权限(777减去此数的权限)
local_max_rate=3000000 #限制系统用户传输速率,单位bite
dirmessage_enable=YES # 切换目录时,是否显示目录下.message的内容
dirlist_enable = NO
pam_service_name=vsftpd #vsftpd验证方式
connect_from_port_20=YES #启用FTP数据端口的数据连接
listen=YES #以独立的FTP服务运行
listen_port=2121 # 修改连接端口,默认值为21。
ftp_data_port=2020 # 修改数据端口,默认值为20。此参数用于PORT FTP模式。
port_enable=YES #如果你要在数据连接时取消PORT模式时,设此选项为NO。默认值为YES
port_promiscuous=NO #取消PORT安全检查。该检查确保外出的数据只能连接到客户端上。小心打开此选项
#async_abor_enable=NO #设定支持异步传输功能。
#ascii_upload_enable=YES #设定支持ASCII模式的上传功能。
#ascii_download_enable=YES #设定支持ASCII模式的下载功能。
######### 匿名登录设置 ###########
anonymous_enable=NO #禁止匿名
anon_root=/data #匿名账户对应的ftp根目录
anon_upload_enable=YES #如果允许匿名登录,是否允许虚拟用户和匿名用户上传
anon_mkdir_write_enable=YES #如果允许匿名登录,是否允许匿名建立文件夹并在文件夹内上传文件
anon_other_write_enable=YES #如果允许匿名登录,允许虚拟用户和匿名用户修改文件名和删除文件
anon_max_rate=30000 #如果允许匿名登录,限制匿名用户传输速率,单位bite
######### 用户限制设置 ###########
#### 限制登录
userlist_enable=yes # 用userlist来限制用户访问
userlist_deny=no # YES禁止文件中的用户登录,NO,只允许在文件中的用户登录FTP服务器。
userlist_file=/etc/vsftpd.user_list # 被读取的包含用户列表的文件
#### 限制目录
chroot_list_enable=NO # 锁定某些用户在自家目录中,是否调用限制在家目录的用户名单
chroot_local_user=YES # 是否限制所有用户都在家目录
chroot_list_file=/etc/vsftpd/chroot_list #限制在家目录的用户名单所在路径,文件格式为一行一用户
注:通过搭配能实现以下几种效果:
①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。
######### 日志设置 ###########
xferlog_enable=YES #打开日志记录
xferlog_file=/var/log/vsftpd.log #日志存放位置
xferlog_std_format=YES #标准日志格式
######### 安全设置 ###########
idle_session_timeout=600 #用户空闲超时,单位秒
data_connection_timeout=120 #数据连接空闲超时,单位秒
accept_timeout=60 # 将客户端空闲1分钟后断开
connect_timeout=60 # 中断1分钟后重新连接
local_max_rate=50000 # 本地用户传输速率,单位bite
max_clients=200 # FTP的最大连接数
max_per_ip=5 # 每个IP允许的连接数,0表示没有限制,需要运行于独立模式方可
######### 被动模式设置 ###########
pasv_enable=NO #是否使用PASV被动模式
pasv_min_port=5000 # 被动模式最小端口,0 表示任意。
pasv_max_port=6000 # 被动模式最大端口,0 表示任意。
pasv_promiscuous=NO #PASV模式的安全检查,该检查确保数据连接和控制连接是来自同一个IP地址,小心打开此选项。
######### 其他设置 ###########
ftpd_banner=Welcome to Ftp Server! #欢迎信息
######### 虚拟用户配置文件###########
guest_enable=YES #允许虚拟用户
guest_username=ftpadmin #指定虚拟用户的宿主用户
virtual_use_local_privs=NO #设定虚拟用户的权限符合他们的宿主用户
user_config_dir=/etc/vsftpd/vsftpd_user_conf #设定虚拟用户个人Vsftp的配置文件存放路径。也就是说,这个被指定的目录里,将存放每个Vsftp虚拟用户个性的配置文件,一个需要注意的地方就是这些配置文件名必须和虚拟用户名相同
2、添加虚拟主机用户
添加用户abc,用户目录指定为/data/abc,且此用户不能登陆系统.
#/usr/sbin/adduser -d /home -s /sbin/nologin ftpadmin
注-s /sbin/nologin是让其不能登陆系统,-d 是指定用户目录为/data/abc
#passwd ftpadmin 设置密码
#chown �CR ftpadmin:ftpadmin /home
注:将用户目录及其子目录的所有和所属的组设置为home
三:相关的配置详解
1.匿名用户相关设置
当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。
当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,
anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。
当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。
2.FTP服务器的流量控制
如何对指定用户进行流量限制呢?
#vi /etc/vsftpd/vsftpd.conf,添加一行:
user_config_dir=/etc/vsftpd/vsftpd_user_conf 虚拟账户的配置目录,会覆盖vsftpd.conf的配置
#touch /etc/vsftpd/vsftpd_user_conf/test01 为test01这个用户建立一个test01文件
#vi /etc/vsftpd/vsftpd_user_conf/test01 添加以下内容
local_max_rate=100000
保存重启服务即可.
四、启动服务:
#/etc/init.d/vsftpd start ;启动服务
#chkconfig vsftpd on ;让系统服务随着系统启动而启动
到此,整个小巧的ftp服务器搭建成功。可以使用FileZilla FTP或FlashFXP等客户端软件登陆ftp server了。