分类: LINUX
2010-10-25 14:36:14
FTP 的传输使用的是TCP数据包协议,又分为主动式连接和被动式连接两种方式。
1. 命令通道的建立
客户端随机选取一个大于1024以上的端口来与服务器的端口21连接,这个过程需要三次握手。
2. 数据通道的建立
当有数据要传送时,这时需要建立数据通道,服务器端口为20。分为主动式连接与被动式连接。
FTP默认主动式连接:
(1) 客户端会先随机启用一个端口,且通过命令通道告知FTP服务器这个信息,并等待服务器的连接。
(2) FTP服务器主动向客户端连接:FTP服务器主动由20端口向客户端的端口连接,分别用在命令的下达与数据的传递上。
这种连接方式当在FTP服务器与客户端之间具有防火墙时的连接问题:(FTP服务器在Internet上,客户端在LAN中:
很多的局域网都会使用防火墙的NAT功能,NAT主机会主动的记录由内部送往外部的连接信息,命令通道的建立是客户端向服务器端连接的。因此这一条连接可以顺利的建立起来。
数据通道的建立,客户端会先随机启动一个端口,并通过命令通道告知FTP服务器,且等待服务器端的主动连接。但是由于要通过NAT主机的转换,由FTP服务器所能获取的只是NAT主机的IP,而不是客户端的IP,因此由FTP服务器以端口20主动的连接请求是连向NAT主机的,而非客户端主机。这时就会出现明明命令通道已经建立但就是无法取得文件名称的列表,在超过一段时间后就会显示“无法进行数据传输”之类的信息。
怎么解决这个问题,
1.就是在NAT主机上加载iptables所提供的FTP侦测模块,ip_conntrack_FTP,但注意服务器的命令端口号一定得是标准的21端口号。
2.客户端选择被动式连接模式。
由客户端向服务器端发起连接,这就没问题了,服务器端随机启用大于1024的端口让客户端连接。
vsFTPd服务器基础设置
配置文件
/etc/vsftpd/vsftpd.conf
/etc/pam.d/vsftpd #登录认证之用
/etc/vsftpd/user_list #允许或者不允许的用户登录FTP文件
/etc/vsftpd/ftpusers #在/etc/pam.d/vsftpd 文件中定义的哪些用户不能登录文件
/etc/vsftpd/chroot_list #是否允许用户变更目录的文件
vsftpd.conf 设置说明文件
与主机相关的设置值
connect_from_port_20=YES(NO) 主动连接时使用的服务器端口号
listen_port=21 监听端口号
dirmessage_enable=YES(NO) 当用户进入某个目录时,会显示该目录需要注意的内容,显示信息的文件默认是”.message”,也可以使用下面的方式来定义
message_file=.message
listen=YES(NO) 当为YES时代表FTP以stand alone的方式来启动。
pasv_enable=YES(NO) 启动被动式连接
use_localtime=YES(NO)
write_enable=YES(NO) 允许上传
connect_timeout=60 在数据连接为主动连接模式下,发出的连接信号在60秒内得不到客户端的响应,就不再等待并强制断线。
accept_timeout=60 当用户以被动式来进行数据传输时,如果主机等待客户机超过60秒无响应时,就要强制断线。
data_connection_timeout=300 数据连接已经建立成功,但可能由于线路问题导致300秒内无法顺利的完成数据的传送,那客户端的连接就会被强制剔除。
idle_session_timeout=300 在300秒内没有任何操作则强制离线。
max_clients=0 同一时间内最多有多少Client可同时连接到FTP
max_per_ip=0 同一个IP,同一时间最多可允许多少连接
pasv_max_port=0 pasv_min_port=0 定义被动模式使用的端口范围。
ftpd_banner= 连接到FTP时显示的说明文件
banner_file=/path/file 同上
与实体用户相关的设置
guest_enable=YES(NO) 为YES时任何匿名用户登录的账号,均被假设成为guest,可通 下面的设定改变
guest_username=FTP
local_enable=YES(NO)
local_max_rate=0
chroot_local_user=YES(NO)
chroot_list_enable=YES(NO) 是否将某些实体用户锁定在他们默认的目录内,YES是锁定,NO为不锁定,要锁定的用户在下面的文件中定义。
chroot_list_file=/etc/vsftpd/chroot_list
对上面三个设置的说明:
当chroot_local_user=YES ,所有的实体用户都被锁定在自己的默认目录里。
但当chroot_list_enable=YES,后在下个设定文件(chroot_list)中的用户是可以访问其它目录的。但当chroot_local_user=NO ,chroot_list_enable=YES,在chroot_list中的用户反而是被锁定在自己的目录里的。
userlist_enable=YES(NO)
userlist_deny=YES(NO)
userlist_file=/etc/vsftpd/user_list
当userlist_enable=YES,userlist_deny=YES,则在user_list中的用户不允许FTP登录。
当userlist_enable=YES,userlist_deny=NO,则在user_list中的用户允许FTP登录。
匿名用户登录的设置:
anonymous_enable=YES(NO)
anon_world _readable_only=YES(NO) 允许下载可读文件的权限
anon_other_write_enable=YES(NO) 允许写入的权限
anon_mkdir_write_enable=YES(NO) 是否允许新建目录
anon_upload_enable=YES(NO)是否允许上传文件(anon_other_write_enable=YES,有效)
deny_email_enable=YES(NO) 匿名用户登录时,要求输入密码,密码为E-Mail地址, 设定可以挡掉不想看的地址,与下面的配合。
banned_email_file=/etc/vsftpd/bannen_E-mail 可设定哪个E-Mail不允许登录。
no_anon_password=YES(NO)
anon_max_rate=0
anon_umask=077
系统安全方面的设置
ascii_download_enable=YES(NO)
ascii_upload_enable=YES(NO)
one_process_model=YES(NO)
tcp_wrappers=YES(NO)
xferlog_enable=YES(NO) 为YES时用户上传下载的文件都会被记录下来。
xferlog_file=/var/log/vsftpd.log 上面的记录文件
xferlog_std_format=Yes(NO) 设置日志的格式
nopriv_user=nobody
pam_service_name=vsftpd
在shell中实现 ftp 登录上传
id="backup61"
pw='backup61'
ftp -n 10.5.1.97 > / backup/backup.log 2>&1 <
user $id $pw
binary
lcd /backup
put backup61_pvs.tar.gz
bye
EOC
sync;
sync;