FTP的原理及主被动解析

FTP的原理及规则详解
ftp :file transfer protocol 文件交换 get(下载) put(上传) mget(多个下载) mput(多个上传)
明文协议:账号和密码发送时明文。 C/S vsftp也是使用的c/S架构。
client:
server:监听在套接字上,21/tcp端口
有两类套接字:
命令链接:发送文件管理类命令,始终处于连接状态,始终监听在21/tcp端口。
数据链接:主要是实现数据传输,这种链接是按需连接的,而且在传输结束会立刻中断。
对于数据链接有两种工作模式:
主动工作的模式:服务器根据用户命令的21号端口,接收到的命令来使用自己的20号端口,将数据传输给客户端请求的端口加1那个端口(例如对方使用6432端口请求,服务器发给6433端口)。但是这样存在一个问题就是:客户端有防火墙的情况下,服务器的发送是无法到达的。于是有了
被动模式。这种方式是要经过三次握手,四次断开的。
ftp被动模式下的交互方式
被动模式:是用来解决多个用户请求ftp的同时,根据每个用户的每个请求对应开启一个随机端口(大于1023的端口),这个端口的开启是和原来的有关联关系的,如果存在关联关系,就放行(这种方式就是链接追踪)。传送给用户的两个数的方式是使用端口除以256的商和余数的方式(234,12)这个端口就是234*256+12.然后服务器通知给客户端,由client向服务器端口发送请求。这样服务器的只会对指定的用户开放端口,这样就实现了。
主动模式下的ftp交互方式
但是这样服务器的防火墙就是危险的了,服务器的原则就是把服务器的所有的端口全部关闭,只是把那些允许访问的端口开启。具体的处理措施。任何一个ftp的内部链接有来有往的链接方式都是
related:先关联的关系,在服务器之间。
服务器常见程序
wu-ftpd
proftpd
vsftpd
客户端常见程序
普通浏览器
filezilla
ftp服务单位响应码,和httpd的响应码是一样的三位数字:
1XX:信息类
2xx:成功类
3XX:提示需要,进一步补全需求
4XX:客户端错误。
5xx:服务器端错误。

登陆方式:
1.匿名用户
2.普通系统上的用户
3.虚拟用户:这类用户,不需要把自己额账号和密码放在,放在/etc/passwd 和/etc/shadow ;下面。
而是通过文件或者数据存放一个自己定义的用户,这个用户不是系统上的。在登录时,这些虚拟用户通过一个指定的用户
相关配置文件:定义了三类用户的登陆及其相应的允许权限
/etc/vsftpd/vsftpd.conf
关于匿名用户的配置: anonymous(就是匿名用户)
anonymous_enable=YES|NO --->此项开启开启匿名用户权限。
对于匿名用户的登陆是通过映射为FTP用户的方式。因此匿名用户想上传或者下载,需要ftp用户有执行的相应权限,那就是文件的属主和数组为ftp。另外服务器的相映的服务权限开启了。setfacl -m u:ftp:rwx /var/ftp 这个配置开启表示允许匿名用户的登陆。但是对于匿名用户还有其他的上传下载的权限定义
这里的表示是否允许上传文件(不包括目录),但是对于用户而言,想要能够上传文件,不仅仅是服务开启这个功能,就可以了。而是要求文件系统也同时允许写权限。

而且上传了,不代表自己就可以创建目录,也不代表可以删除目录。他们是分属于不同的权限,需要另外的定义。
anon_upload_enable=NO 允许上传协议。
anon_mkdir_write_enable=NO 允许创建目录否。 没有自己写入主配置文件。
anon_other_write_enable=NO 允许删除
lcd 用于切换本地文件系统目录。
本地文件系统用户的访问控制和相应的权限。
local_enable=YES|no 此项开启表示允许本地用户登陆使用,本地用户也有相应的权利。为了实现本地用户的特权,这里登陆需要使用密码,不然登陆就是匿名用户了。
lftp -u centos,centos 172,16.249.11 -u 指定用户逗号,后面紧跟密码。中间不允许空格。
这里登陆,我们可以发现,他的访问范围为用户自己的家目录。而且拥有的权限是由
---> local_umask=022 这个选项来定义的。
write_enable 允许本地上传操作
匿名用户是默认只允许在ftp这个映射用户的家目录中执行操作,但是本地用户默认是可以在文件系统中游荡的,那么这样就是很危险的,因此我们要对本地用户的活动范围进行限定。
禁锢用户于家目录中:
1.禁锢所有本地用户在自己的家目录中。
chroot_local_user=YES 这个指令默认是关闭的,需要自己启动。
2.禁锢部分本地用户于家目录中
chroot_list_enable=YES 启用一个列表
chroot_list_file=/etc/vsftpd/chroot_list 这个文件需要自己创建,在这个文件写入自己想要禁锢的用户名,就可以实现禁锢这个用户了。
虚拟用户的配置:
虚拟用户的配置是在文件中加入以下两行:
guest_enable=YES 允许虚拟宾客访问
guest_username=vuser 定义虚拟宾客映射的用户名。
日志:
xferlog_enable=yes 是否启用传输日志,但是这个启用的话,如果那个文件没有开启,也没用,因为没有存放位置。
xferlog_std_format=yes 是否使用标准格式。
xferlog_file=/var/log/xferlog 定义传输日志的存放位置
改变上传后文件的属主和数组:
chown_uploads=YES
chown_username=whoever whoever要修改为自己指定的人
vsftpd是使用pam完成用户定义的。
他的配置文件是 /etc/pam.d/vsftpd 。这里面写入了
pam_service_name=vsftpd 这个文件是定义的
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
这个文件的定义的这句话的含义:
required: 允许它使用pam_listfile.so这个模块,来定义item这些组中的人,如果sense执行的权限是deny.item这个组的文件在/etc/vsftpd/ftpusers 。因此ftpusers这个文件中的用户都是拒绝访问的。
但是这个文件是系统用户的访问文件,我们这里一般不使用这个来定义访问控制,
而是使用另外一个参数配置
userlist_enable=YES 这个配置参数表示启用用户列表。但是并没有指定是拒绝访问,还是允许访问,如果限制访问,就是要添加一句。
userlist_deny=yes|no 加上这句表示这是判断白黑名单的列表了,如果是yes这就是黑名单了。
这个用户列表就在 /etc/vsftpd/userlist
注意:这个文件原来是有很多用户名的,使用时全部清空,就可以了。注意,如果我们使用userlist_deny=no 这里表示这个名单是白名单,这样之后匿名用户就不可以登陆,如果匿名用户想要登陆需要在白名单里面,加入一个用户ftp,然后使用ftp登陆。
/etc/
listen=yes 表示vsftpd使用套接字监听。
用户限制登陆:
连接限制:
max_clients:最大并发连接数;
max_per_ip:每个IP可同时发起的并发请求数;
传输速率:
anon_max_rate:匿名用户的最大传输速率;
local_max_rate:本地用户的最大传输速率。

下图是登陆显示:
ftp登陆成功

转载请注明出处: http://www.ppzedu.com/archives/29.html

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: