文件服务- FTP

文件服务

FTP文件传输协议

简介:

ftp协议:文件传输协议(File Transfer Protocol)

1.协议定义了一个在远程计算机系统和本地计算机系统之间的一个传输文件的一个标准

2.FTP运行在OSI模型中的应用层,并利用传输协议TCP在不同的主机之间提供可靠的数据传输

3.FTP在文件传输中支持断点续传功能,可以大幅度减少cpu的网络带宽开销。

 

FTP模型:

1.用户接口:提供一个用户接口并使用客户端协议解释器服务

2.客户端协议解释器:向远程服务器发送命令,建立客户数据传输过程

3.服务端协议解释器:相应客户协议机发出命令,并且驱动服务端数据传输过程

4.客户端数据传输协议:负责完成和服务器数据传输过程以及客户端本地文件系统的通信

5.服务端数据传输协议:负责完成和客户数据以及服务器端文件系统的通信

 

控制连接(端口号21)

1.主要用来传送在实际通信过程中需要执行FTP命令,以及命令的相应

2.只要用很小的网络带宽

3.FTP服务器建立21端口号来等待控制连接建立

4.建立连接控制后,还需要验证客户身份,决定是否建立数据连接

5.当需要目录列表,传输文件时,才建立数据连接,并且每次客户端都是用不同的端口号来建立数据连接,数据传输完毕,就会中断这条数据连接

6.在FTP连接期间,控制连接始终保持连接状态。在数据连接期间,控制连接必须存在,一旦控制连接断开,数据连接也会自动关闭

 

数据连接(端口号20)

1.FTP服务器监听20端口来等待数据连接

2.数据连接一定是依赖于控制连接

3.建立方式

参考博客:https://blog.csdn.net/ludan_xia/article/details/105705473

主动模式

通过三次握手,建立控制连接;客户端的源端口是高位随机端口,目标端口是21端口

控制连接建立后,客户端进行身份验证,协商数据连接采用主动模式;随后客户端会向FTP

服务器发送Port报 文,表明自己监听的IP+端口,并等待FTP服务器(20端口)向自己监

听的IP+端口发起数据连接请求。

服务端发起数据连接请求,建立数据连接

被动模式

通过三次握手,建立控制连接;客户端的源端口是高位随机端口,目标端口是21端口;

控制连接建立后,客户端进行身份验证,协商数据连接采用被动模式;随后客户端会向

服务器发送PASV报 文,表示我们用被动模式

服务端收到PASV报文,于是向客户端发送Port报文,表明自己监听的IP+端口

客户端发起数据连接请求,建立数据连接

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。 

在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放 N+1号端口进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端 口(通常是20)来连接客户端指定的端口N+1,进行数据传输。 

在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开 启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开 放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到 命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。 

 

主动模式被动模式的区别 总的来说,主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等 待客户端连接自己的数据端口。 被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTp服务器的情况,因为在这种情况下,防火墙通常配置为不允许外界访问防火墙之后主机,而只允许由防火墙之后的主机发起的连接请求通过。 因此,在这种情况下不能使用主动模式的FTP传输,而被动模式的FTP可以良好的工作。

 

 

 

 

 

 

 

 

 

 

VSFTPD服务介绍:

服务包:vsftpd

服务类型:由Systemd启动的守护进程

配置单元: /usr/lib/systemd/system/vsftpd.service

守护进程:/usr/sbin/vsftpd

端口:21 (ftp)  20 (ftp-data)

主配置文件:/etc/vsftpd/vsftpd.conf

用户访问控制配置文件 /etc/vsftpd/ftpusers    /etc/vsftpd/user_list

日志文件:/etc/logrotate.d/vsftpd

 

参数

作用

listen=NO

是否以独立运行的方式监听服务

listen_address=ip地址

设置要监听的IP地址

listen_port=21

设置FTP服务的监听端口

download_enable=YES

是否允许下载文件

userlist_enable=YES

设置用户列表为"允许"

userlist_deny=YES

设置用户列表为"禁止"

max_clients=0

最大客户端连接数,0为不限制

max_per_ip=0

同一IP地址的最大连接数,0为不限制

anonymous_enable=YES

是否允许匿名用户访问

anon_upload_enable=YES

是否允许匿名用户上传文件

anon_umask

匿名用户上传文件的umask

anon_root=/var/ftp

匿名用户的ftp根目录

anon_mkdir_write_enable=YES

是否允许匿名用户创建目录

anon_other_write_enable=YES

是否开放匿名用户的其他写入权限(重命名、删除等)

anon_max_rate=0

匿名用户的最大传输速率,0为不限制

local_enable=yes

是否允许本地用户登录

local_umask=022

本地用户上传文件的umask值

local_root=/var/ftp

本地用户的ftp根目录

chroot_local_user=YES

是否将用户权限禁锢在ftp目录,以确保安全

local_max_rate=0

本地用户的最大传输速率,0为不限制

 

 

服务器端

 

基础配置:

安装vsftp

[root@centos7-server ~]# yum install  -y  vsftpd

[root@centos7-server ~]# systemctl start vsftpd

[root@centos7-server ~]# systemctl enable vsftpd

Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

[root@centos7-server ~]# systemctl stop firewalld.service 

[root@centos7-server ~]# systemctl disable firewalld.service 

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@centos7-server vsftpd]# setenforce 0

 

 

linux客户端

[root@centos7-client ~]# yum install   -y  ftp      

ftp 192.168.40.205

[root@centos7-client ~]# yum install   -y lftp

lftp 192.168.40.205

区别:ftp工具一定是要输入用户名和密码的,登录成功或者失败都会给出提示,lftp不会直接给出登录成功或者是失败的信息。

提示:lftp需要输入ls工具才可以发现是否连接成功,优点在于连接更加便捷

 

windows当中

第一种:可以在资源管理器当中输入 ftp://IP地址/形式  这样访问的是ftp根位置,也就是/var/ftp

如果需要访问其他目录,需要输入ftp://IP地址/目录/文件名的形式

第二种可以通过dos窗口 输入命令 FTP <IP地址>访问即可

 

 

 

案例1:匿名用户访问 (默认开启)

[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf

anonymous_enable=YES

anon_umask=022

anon_upload_enable=Yes

anon_mkdir_write_enable=Yes

anon_other_write_enable=Yes

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=NO

listen_ipv6=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

[root@localhost ~]# systemctl restart vsftpd

以上是假设允许匿名用户访问,需要的配置内容

 

案例2 本地用户访问

[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=NO

listen_ipv6=YES

pam_service_name=vsftpd

userlist_enable=YES

tcp_wrappers=YES

[root@localhost ~]# systemctl restart vsftpd

[root@localhost ~]# systemctl enable vsftpd

注意:出现在/etc/vsftpd/ftpuser  /etc/vsftpd/user_list这两个文件

中的内容将会被定义为黑名单

 

 

 

案例3:虚拟用户访问

  1. 创建用户进行FTP认证的用户数据文件,其中奇数行作为账户名,偶数行为密码

[root@centos7-server vsftpd]# cd /etc/vsftpd/

[root@centos7-server vsftpd]# vim vuser.list 

luxingjun

centos

wangminghao

centos

yaoxiaqian

centos

 

  1. 使用db_load 命令 用hash算法将原始的明文信息,通过加密转换成数据库文件

 

[root@centos7-server vsftpd]# db_load -T  -t hash   -f vuser.list    vuser.db

参数解释:

-T
选项-T允许应用程序能够将文本文件转译载入进数据库。由于我们之后是将虚拟用户的信息以文件方式存储在文件里的,为了让Vsftpd这个应用程序能够通过文本来载入用户数据,必须要使用这个选项。如果指定了选项-T,那么一定要追跟子选项-t
-t
子选项-t,追加在在-T选项后,用来指定转译载入的数据库类型。扩展介绍下,-t可以指定的数据类型有Btree、Hash、Queue和Recon数据库。
-f
参数后面接包含用户名和密码的文本文件,文件的内容是:奇数行用户名、偶数行密码

 

  1. 降低数据库文件的权限(避免其他人看到数据库文件的内容)

[root@centos7-server vsftpd]# chmod 600  vuser.db

  1. 把原始的明文信息文件删除

[root@centos7-server vsftpd]# rm -f   vuser.list

5.创建一个本地用户,用来做虚拟用户在本地的代理,为了安全起见,我们需要禁止这个用户本地登录shell

[root@centos7-server vsftpd]# useradd -d  /var/ftproot/   -s  /sbin/nologin    virtual

[root@centos7-server vsftpd]# ls   -ld   /var/ftproot/

drwx------. 2 virtual virtual 62 Feb 16 22:44 /var/ftproot/

[root@centos7-server vsftpd]# chmod   -Rf   777   /var/ftproot/

[root@centos7-server vsftpd]# ls  -ld  /var/ftproot/

drwxrwxrwx. 2 virtual virtual 62 Feb 16 22:44 /var/ftproot/

6.创建一个用户虚拟用户认证的PAM文件 vsftpd.vu

[root@centos7-server vsftpd]# vim /etc/pam.d/vsftpd.vu 

auth required pam_userdb.so  db=/etc/vsftpd/vuser

account required pam_userdb.so db=/etc/vsftpd/vuser

 

 

 

 

7.配置文件

[root@localhost vsftpd]#vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

local_enable=YES

guest_enable=YES

guest_username=virtual

allow_writeable_chroot=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_std_format=YES

listen=NO

listen_ipv6=YES

pam_service_name=vsftpd.vu

userlist_enable=YES

tcp_wrappers=YES

 

  1. 如果想要针对不同用户设置不同权限

[root@centos7-server vsftpd]# mkdir /etc/vsftpd/vusers_dir/

[root@centos7-server vsftpd]# cd  /etc/vsftpd/vusers_dir/

[root@centos7-server vusers_dir]# touch luxingjun

[root@centos7-server vusers_dir]# touch wangminghao

[root@centos7-server vusers_dir]# touch yaoxiaqian

[root@centos7-server vusers_dir]# vi luxingjun 

[root@centos7-server vusers_dir]# 

[root@centos7-server vusers_dir]# 

[root@centos7-server vusers_dir]# cat luxingjun 

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

 

还需要编辑配置文件指定用户配置目录,加入以下信息

user_config_dir=/etc/vsftpd/vusers_dir

 

验证:[root@centos7-client ~]# ftp 192.168.40.205

Connected to 192.168.40.205 (192.168.40.205).

220 (vsFTPd 3.0.2)

Name (192.168.40.205:root): luxingjun

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> 

ftp> mkdir 123

257 "/123" created

结果表明当前用户是可以来创建目录的

 

posted @   终究还是避免不了遗憾  阅读(330)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示