企业服务(VSFTPD服务)

文件服务
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

2. 使用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
参数后面接包含用户名和密码的文本文件,文件的内容是:奇数行用户名、偶数行密码

3.	降低数据库文件的权限(避免其他人看到数据库文件的内容)
[root@centos7-server vsftpd]# chmod 600  vuser.db
4.	把原始的明文信息文件删除
[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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值