FTP
FTP叫做FILE Transfer Protocol,文件传输协议,是比较古老的传输协议之一,它是以明文的方式来进行工作的,因此,它不够安全,后续我们主要介绍安全的ftp叫做vsftp。一般的ftp服务器能够支持三种用户的访问:
本地用户
匿名用户
虚拟用户
当然,不同的用户的权限也不一样。对于本地用户和匿名用户的设置只需要修改ftp的配置文件即可。这个将在后文介绍;而对于虚拟用户需要借助mysql数据库来完成账号和密码的认证,这个过程在下一遍文章来介绍。
ftp的工作原理:
ftp是工作在tcp层的,因此客户端和服务器端需要建立三次握手,才可以连接连接。对于ftp比较特殊的就是,ftp有2个连接。
其中一个连接叫做命令连接(或者叫做控制连接),他工作在tcp的21端口上。该连接主要用作命令的下达,文件名查询,文件上传和下载等操作。
另一个连接叫做数据连接,它是用来传输数据的,在这种连接下,他有2种工作模式:
主动模式:这种模式下ftp工作在tcp的20端口,该模式是由服务器向客户端发起连接请求。不过通常客户端后面都有防火墙等软件,因此服务器端发起的连接请求会被拒绝掉。
被动模式:这是模式是有客户端向服务器端发起请求,这种模式下,客户端和服务器端使用的端口都是随机生成的。当服务器端生成端口后,通过命令连接发送过来,这样客户端就通过服务器端的该端口发起连接请求。
对于数据连接它是按需创建的,也就是说只有当有数据传输时,他才会建立连接。当数据传输完毕后,就端口连接。但是命令连接可以一直存在(当然也有时间设定的)。
安装ftp服务器
对于ftp服务器端软件有多个:
wu-ftpd:
vsftpd: Very Secure ftp Daemon proftpd: pureftpd Filezilla Serv-U客户端软件有:
CLI界面的有:
ftp
lftp
GUN界面有:
gftpd
FlashFXP Cuteftp Filezilla在这里我们使用的服务器端软件为vsftp
安装完成vsftp后,会生成如下文件:
/etc/pam.d/vsftpd #这是vsftpd使用pam模块的相关配置文件,主要用来作为身份认证之用的,还可
以用来抵挡一些用户登入功能。
/etc/rc.d/init.d/vsftpd #vsftp的服务脚本/etc/vsftpd #主配置文件目录/etc/vsftpd/ftpusers #该文件下的用户都不允许登入到ftp上,它是基于pam来管理的/etc/vsftpd/user_list #该文件下的用户都不允许登入到ftp上,他是基于vsftpd自身来管理的/etc/vsftpd/vsftpd.conf #vsftpd的主配置文件/usr/sbin/vsftpd #vsftpd的二进制程序
/var/ftp #ftp用户的家目录和匿名用户访问的目录
/var/ftp/pub #上传和下载的文件目录
vsftpd的主配置文件/etc/vsftpd/vsftpd.conf详解:
#####与服务器环境相关的设定值####
connect_from_port_20=YES
#ftp服务器主动建立连接使用的端口号
listen_port=21
#命令连接时使用的端口号
dirmessage_enable=YES
#当用户进入某个目录时,会显示某个文件里的信息,这个需要和下面的选项配合使用
message_file=.message
#就是显示这个文件里的信息,文件名要是.message
listen=YES
#如果为YES,表示vsftpd以独立守护进程来工作的;为NO表示以瞬时守护进程来工作的。
#一般说来,对外使用独立守护进程,对内使用瞬时守护进程来工作
pasv_enable=YES
#表示支持被动连接模式
use_localtime=YES
#表示是否使用本地时间,默认使用格林威治时间(GMT)
write_enable=YES
#表示是否允许用户上传数据
connect_timeout=60
#表示在数据连接的主动模式下,如果服务器端发送的连接请求在60秒内没有得到响应,则强制断线
accept_timeout=60
#表示在数据连接的被动模式下,服务器端在60秒内没有得到客户端的连接请求,则强制断线
data_connection_timeout=300
#当服务器端和客户端的数据连接已经建立完成后,如果在300秒内由于某种原因在300秒无法顺利的完成数据传送,那么服务器端和客户端会断开连接
idle_session_timeout=300
#表示如果使用者在300秒内没有任何命令动作,则强制断开连接
max_client=0
#表示同一时刻最多允许多少个客户端同时连上vsftpd,0表示不限制
max_per_ip=0
#表示同一个ip最多允许发送多少个连接请求,0表示不限制
pasv_min_port=0, pasv_max_port=0
#在被动模式下,服务器端能使用的最大端口号和最小端口号,0表示随机取用而不限制
ftpd_banner=一些文字说明
#在登录ftp时,显示的信息
banner_file=/path/file
#和上面的功能是一样的,登录ftp时,会将这个文件里的信息显示出来
####与本地用户相关的设定值####
guest_enable=YES
guest_username=ftp
#这两行表示任何来访的用户都以ftp用户的身份来工作
local_enable=YSE
#这一行必须要是YES,这样/etc/passwd内的用户才可以登入进ftp服务器
local_max_rate=0
#对本地用户进行限速,单位是bytes/second,0表示不限制
chroot_local_user=YES
#将本地所有用户限制在该用户的家目录下,为了安全起见,设定为YES比较好
chroot_list_enable=YES
#是否启用chroot写入列表的功能
chroot_list_file=/etc/vsftpd.chroot_list
#以上面的选项结合使用,只要是这个文件里的用户都会限制在用户的家目录下
userlist_enable=YES
#是否启用用户列表写入功能
userlist_deny=YES
#只有当userlist_enable=YES时才会生效,如果此选项设定为YES,表示使用者账号写入到某个文件时,该文件内的用户无法登入vsftpd服务器
userlist_file=/etc/vsftpd/user_list
#这个选项的设定就是userlist_deny=YES要用到的文件
####匿名用户的相关设定值######
anonymous_enable=YES
#是否允许匿名用户登入
anon_world_readable_only=YSE
#仅允许anonymous具有可读的权限。设置为NO时,具有下载权限。
anon_other_write_enable=YES
#是否允许anonymous拥有写入之外的权限
anon_mkdir_write_enable=YES
#是否允许anonymous具有建立目录的权限,前提是anon_other_write_enable=YES
anon_upload_enable=YES (NO)
#是否允许anonymous具有上传的权限,前提是anon_other_write_enable=YES
no_anon_password=YES
#表示anonymous登入ftp服务器是否略过密码检查
anon_max_rate=0
#限制anonymous的传输速度,单位是bytes/second
anon_umask=077
#设定anonymous的umask值
local_root:表示匿名用户和虚拟用户的根目录。如果不指定的话,则匿名用户的根目录为/var/ftp。如果是虚拟用户,则可以通过该参数进行指定。
####系统安全相关的设定####
ascii_download_enable=YES (NO)
#如果设定为 YES ,那么 client 就优先 (预设) 使用 ASCII格式下载文件
ascii_upload_enable=YES (NO)
#如果设定为 YES ,那么 client 就优先 (预设) 使用 ASCII格式上传文件
xferlog_enable=YES
#是否启用将上传和下载的信息记录起来
xferlog_file=/var/log/xferlog
#记录的文件是这个文件
xferlog_std_format=YES
是否设定为 wu ftp 相同文件格式
nopriv_user=nobody
#表示在数据传输时,服务器端以nobody的身份来执行,因为nobody的权限相当的低,及时被***,也只能获取到nobody的权限。
pam_service_name=vsftpd
#这个是vsftpd借助pam来认证时所需要的pam模块的名称
这个文件大概比较常用的选项就是这么多了。