vsftpd服务

vsftpd服务

简介:

vsftpd英文缩写:very secure FTP的缩写,基于GPL开发的;

进程分离:处理不通任务的进程彼此是独立运行的;

多数进程都是被chroot紧固,防止非法访问共享目录

使用多端口通信;21端口是用来处理客户端的请求数据的;也是俗称的命令端口;

如果数据传输的端口就得区分主动模式还是被动模式;

主动模式

主动模式的工作流程:

  • 客户端随机开启大于1024的X端口与服务器的21端口建立连接通道–>这个用于客户端发送指令给到服务器
  • 客户端如果需要传输数据的时候,客户端会再次开启一个大于1024的Y端口;然后通过X端口把Y端口给到服务器
  • 服务器收到了Y洞口,就主动连接客户端的Y端口,通过三次握手完成数据通道的建立;

被动模式

  • 客户端随机开启一个大于1024的X端口与服务器的21端口连接
  • 客户端通过X端口给服务器发送上传或者下载的指令
  • 服务器收到数据后,会随机开启一个Y端口,然后把Y端口发送给到客户端,
  • 客户端收到后开启一个随机端口Z,然后主动与服务器的Y端口进行连接,通过三次握手完成连接;

综上所述,FTP协议需要使用多个网络端口才能正常工作,其中21端口用于正常的命令传输,然后另外一个端口就用于数据传输;

安装与部署vsftpd

规划:

服务器:192.168.75.130

客户端:192.168.75.131

安装vsftpd

#安装vsftpd
[root@node0 ~]# yum install vsftpd

#关闭防火墙和selinux
[root@node0 ~]# iptables -F
[root@node0 ~]# systemctl stop firewalld
[root@node0 ~]# setenforce 0

#设置开机自启动
[root@node0 ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

#在查看一下配置文件
[root@node0 ~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd		#这个是日志轮转备份的文件
/etc/pam.d/vsftpd			#基于PAM模块的认证配置文件
/etc/vsftpd					#vsftpd的主目录
/etc/vsftpd/ftpusers		#默认的vsftpd的黑名单
/etc/vsftpd/user_list		#vsftpd的白名单
/etc/vsftpd/vsftpd.conf		#vsftpd的主配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/lib/systemd/system-generators/vsftpd-generator
/usr/lib/systemd/system/vsftpd.service
/usr/lib/systemd/system/vsftpd.target
/usr/lib/systemd/system/vsftpd@.service
/usr/sbin/vsftpd			#vsftpd的主程序
.................

vstpd的配置文件

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

配置要求:

  • 选项=值(注意等号的两边是没有空格的)
  • 以#开头的行就是注释的行
  • 配置文件也分为全局配置和局部配置
#查看配置文件
[root@node0 ~]# vim /etc/vsftpd/vsftpd.conf 
	#全局配置查看
listen=NO		#是否开启监听端口,独立运行守护进程
listen_port=21·	#监听端口是21号
write_enable=YES		#是否允许写操作,全局都开启
download_enable=YES		#是否允许下载功能
dirmessage_enable=YES	#用户进入目录是否显示信息
xferlog_enable=YES		#是否开启xferlog的功能
xferlog_std_format=YES	#设置日志的格式
connect_from_port_20=YES	#使用主动模式连接,启用20端口
pasv_enable=YES			#是否启用被动模式,默认模式
pasv_max_port=24600		#被动模式的连接的最大端口号
pasv_min_port=24500		#被动模式的连接的最小端口号
userlist_enable=YES		#是否启用黑名单
userlist_deny=YES		#是否禁止黑名单
max_clients=2000		#最大同时允许多少个客户连接
max_per_ip=0			#每个客户最大的连接限制,0代表的就是没有限制
tcp_wrappers=YES		#是否启用防火墙的tcp_wrappers
guest_enable=YES		#是否把所有的非匿名用户登录都映射为guest_username指定的账户
guest_user=ftp			#指定用户是ftp
user_config_dir=/etc/vsftpd/vsftpd.conf		#指定vsftpd的主配置文件
dual_log_enable=NO		#是否启用双日志功能
anonymous_enable=YES	#是否允许匿名用户访问

	#匿名账户的配置
anon_root=/var/ftp		#匿名用户默认的路径
anon_upload_enable=YSE	#是否允许匿名用户上传,默认是禁止上传的
anon_mkdir_write_enable=YES		#是否允许匿名用户创建目录,
anon_otherwrite_enable=YES		#是否允许匿名用户进行写操作
anon_max_rate=0					#指定匿名用户的传输速率
anon_umask=077					#指定匿名用户的上传权限掩码值

	#本地用户的配置
local_enable=YES				#是否允许本地用户的可以登陆
local_max_rate=0				#指定本地用户的传输速率
local_umask=077					#指定本地用户的掩码值
chroot_local_user=YES			#牢笼机制,限制本地用户的活动范围为自己的家目录
local_root=/ftp/common			#本地账户范围ftp的根路径

vsftpd的三种登陆方式

匿名账户登陆:无需输入用户名和密码,vsftpd默认是开启匿名共享的,默认的共享路径是/var/ftp/目录下

本地账户登陆:

  • 如果需要这个功能的话需要把local_enable=YES打开;
  • 登入后用户的家目录就是共享的目录;
  • 通常本地账户登入是可以切换到别的目录,这样子非常的不安全,因此需要结合牢笼机制来做好限制,同时配置文件中就得开启chroot_local_user,把用户锁定在自己的家目录,防止用户登入了到处查看;

虚拟账户登陆:

  • 为了避免创建大量的用户,vsftpd是可以支持虚拟账户登入的;
  • 通过guest_enable=YES开启虚拟账户功能,guest_username用来指定账户的虚拟映射名称;

vsftpd有两个文件:

  • /etc/vsftpd/user_list可以是黑名单也可以是白名单
  • /etc/vsftpd/user_deny可以是黑名单也可以是白名单
  • 这两个文件需要结合配置文件的选项userlist_enable=YES/NO

实战应用

1)本地账户的vsftpd

背景:公司需要搭建一个ftp服务器,只允许本地用户登入;

#修改配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES



#创建系统账户以及是测试文件
[root@localhost ~]# useradd -s /sbin/nologin tom
[root@localhost ~]# useradd -s /sbin/nologin jerry
[root@localhost ~]# useradd -s /sbin/nologin smith

#需要为本地用户添加密码
[root@localhost ~]# passwd tom
Changing password for user tom.
New password: 
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.

#创建测试文件
[root@localhost ~]# touch /home/{tom,jerry,smith}/test.txt

#然后在重启服务
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
[root@localhost ~]# service iptables stop
[root@localhost ~]# service vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]
[root@localhost ~]# chkconfig vsftpd on



#最后客户端测试访问
[root@localhost ~]# ftp 192.168.75.110
Connected to 192.168.75.110 (192.168.75.110).
220 (vsFTPd 2.2.2)
Name (192.168.75.110:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,75,110,50,102).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Jan 24 01:34 test.txt
226 Directory send OK.

2)创建虚拟账户,使用虚拟账户满足大量的访问需求

如果访问ftp服务器的用户不多,可以使用本地账户登陆,那么如果大量的用户访问vsftp那就需要用到虚拟账户来登陆,

vsftpd虚拟账户的信息需要保存在Berkeley DB格式的数据文件中,因此需要安装db4-utils工具来创建这类型的数据文件;

创建虚拟用户的数据库

#安装数据文件的转换工具对比-utils
[root@localhost ~]# yum -y install db4-utils

#首先需要创建明文密码文件
	#这个文件是单数行是用户名,然后双数行是密码
[root@localhost ~]# vim /etc/vsftpd/vlogin
user10
123456
user11
654321

#然后使用工具来创建指定的数据库文件
[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vlogin  /etc/vsftpd/vlogin.db

#修改权限,隐藏原来的密码文件,让别人无法看到
[root@localhost ~]# chmod 600 /etc/vsftpd/{vlogin,vlogin.db}
[root@localhost ~]# ll /etc/vsftpd/{vlogin,vlogin.db}
-rw------- 1 root root    28 Jan 24 09:49 /etc/vsftpd/vlogin
-rw------- 1 root root 12288 Jan 24 09:50 /etc/vsftpd/vlogin.db

创建PAM文件,是基于虚拟账户认证的

  • 一般是通过PAM文件设置账户的认证机制
  • 然后通过创建新的PAM文件进行登入认证
  • PAM文件中的db选项用于指定并且验证账户和密码的数据库文件,
  • 但是数据库文件无需使用.db结尾
  • 使用的6.4版本的centos,因此使用的是lib64文件
[root@localhost ~]# vim /etc/pam.d/vsftpd.pam
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vlogin
account required /lib64/serurity/pam_userdb.so db=/etc/vsftpd/vlogin

设置虚拟账户的登陆目录

所有的虚拟用户都会映射到一个真实的系统账户,因此需要设置一个系统用户并且设置其家目录

[root@localhost ~]# useradd -s /sbin/nologin -d /home/virtual virtual
[root@localhost ~]# cp /etc/redhat-release  /home/virtual/
[root@localhost ~]# 

修改主配置文件

guest_enable选项是开启虚拟用户功能,

guest_username就是指定的一个系统真实的用户

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
listen=YES
listen_port=21
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
pam_service_name=vsftpd.pam
user_config_dir=/etc/vsftpd_user_conf
user_sub_token=$USER

为每个用户设置独立的共享路径

  • 配置文件使用user_config_dir
  • 设置一个基于账户的配置目录
[root@localhost ~]# mkdir /etc/vsftpd_user_conf
[root@localhost ~]# mkdir -p /home/virtual/user10
[root@localhost ~]# vim /etc/vsftpd_user_conf/user10
local_root=/home/virtual/$USER

最后重启服务

[root@localhost ~]# service vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]


#登陆认证
[root@localhost ~]# ftp 192.168.75.110
Connected to 192.168.75.110 (192.168.75.110).
220 (vsFTPd 2.2.2)
Name (192.168.75.110:root): user10
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,75,110,119,195).
150 Here comes the dire
  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

Liang_GaRy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值