Linux搭建配置vsftp+本地用户|虚拟用户创建
文章目录
前言
最近正在写设计模式的案例结合,由于需要补充spring源码知识,现在正在看spring源码深度解析以结合设计模式创作,估计设计模式这篇需要要写很长一段时间了😅😅~~
工作中由于测试环境服务器到期需要变更服务器,服务环境需要重新搭建,同事搭建vsftp一直有问题,于是自己研究了三天终于搭建成功了(原来以为很简单,但是搭建中才发现各种权限问题,认证问题😅😅),谨此记录整理+归纳总结。
服务器系统:centos7.9 vsftpd版本: version 3.0.2
我的github主页地址: https://xdj68.github.io
vsftpd 官网地址:https://security.appspot.com/vsftpd.html
一、VSFTP简介
FTP 是 File Transfer Protocol(文件传输协议)的英文简称, 用于 Internet 上的控制文件的双向传输。同时,它也是一个应用程序(Application)。 基于不同的操作系统有不同的 FTP 应用程序,而所有这些应用程序都遵守同一种协议以传输文件。
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX 等系统上面,是一个完全免费的、开放源代码的 ftp 服务器软件,支持很多其他的 FTP 服务器。
vsftpd在千兆以太网上速度可以达到86MB/s,稳定性非常优秀,仅仅采用单机部署方式连续不间断工作24小时传输数据可达2.6TB,平均并发连接为1500用户,峰值可达最大4000用户。安全性非常高,采用了进程分离架构,不同任务进程彼此独立运行,进程均以最小权限运行,使用chroot权限机制,防止客户访问非法共享目录。除此之外,vsftpd 还包括以下特性:
- 基于IP的虚拟服务器
- 支持PAM或 xinetd/tcp_wrappers的认证方式
- 支持两种运行方式:独立和Xinetd
- 虚拟用户结合数据库的用户验证
- 每个用户独立配置文件
- 速率限制
- IPV6支持
- 支持SSL加密传输
FTP是仅基于TCP的服务,不支持UDP。 FTP传输使用2个端口,一个数 据端口和一个命令端口。通常来说这两个端口是21(命令端 口)和20(数据端口)。FTP存在俩种模式:主动模式和被动模式。
- PORT(主动)模式
所谓主动模式,指的是FTP服务器“主动”去连接客户端的数据端口来传输数据,其过程具体来说就是:客户端通过访问服务端的21端口,然后客户端分配一个端口供ftp服务端获取数据,然后服务端通过20端口主动到客户端指定端口获取数据,20为服务器的出向端口
此模式,防火墙只需要开放21端口的对外访问策略
- PASV(被动)模式
所谓被动模式,指的是FTP服务器“被动”等待客户端来连接自己的数据端口,其过程具体是:客户端通过访问服务端的21端口,然后客户端提交PASV命令,让服务端分配一个用于传输数据的端口,此端口范围为vsftpd.conf配置的pasv_min_port-pasv_max_port,然后客户端通过分配的端口上传数据。(注意此模式下的FTP服务器不需要开启tcp 20端口)
此模式,防火墙需要开放21端口的对外访问策略和pasv_min_port - pasv_max_port端口范围内的访问策略
二、VSFTP服务安装(非root权限)
因为测试环境给的非root用户,安装中遇到各种权限问题(毕竟不是运维,没有root权限😅😅很尴尬)
考虑服务器安全性,FTP 采用被动模式开放固定端口(一般要大于1024),禁止匿名用户,允许本机用户+虚拟用户结合的方式。
本机用户创建ftpsearch和ftptvip 一个给会员项目使用目录为/var/ftp/vip,一个给搜索项目使用目录为/var/ftp/search
本机用户ftpuser映射所有虚拟用户,创建virtual_vip和virtual_seach俩个虚拟用户,统一目录为虚拟用户目录/var/ftp/pub
1 安装vsftpd
sudo -s yum -y install vsftpd
2 修改配置文件
cd /etc/vsftpd/
sudo -s cp vsftpd.conf vsftpd.conf.bak
sudo -s vim vsftpd.conf
# 是否允许匿名登录
anonymous_enable=NO
# 是否允许本地用户登录
local_enable=YES
# 是否允许本地用户对FTP服务器文件具有写权限
write_enable=YES
# 本地用户主目录
local_root=/var/ftp
# 匿名用户主目录
anon_root=/var/ftp
# 是否允许匿名用户上传文件,如允许,须将全局的
write_enable=YES
anon_upload_enable=YES
# 是否允许匿名用户创建新文件夹
anon_mkdir_write_enable=YES
# 容许匿名用户除了新建和上传外的其他权限
anon_other_write_enable=YES
# 本地用户掩码
local_umask=022
# 设置匿名登入者新增或上传档案时的umask值
anon_umask=022
# 是否激活目录欢迎信息功能
dirmessage_enable=YES
xferlog_enable=YES
# 主动模式数据传输20端口
connect_from_port_20=NO
# 上传下载日志
xferlog_enable=YES
xferlog_file=/var/log/xferlog
vsftpd_log_file=/var/log/vsftpd.log
xferlog_std_format=YES
# 是否监听ipv4
listen=YES
# listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
# 是否设置被动模式
pasv_enable=YES
# 被动模式传输使用端口
pasv_min_port=30000
pasv_max_port=30500
# 被动模式返回给客户端的ip地址(服务器内网穿透时使用, 服务器外网ip)
pasv_address=xx.xx.xx.xx
# 设置用户访问目录,默认只允许用户自己的ftp目录
# 需要同时设置allow_writeable_chroot,允许受限用户的写权限,不然会报错
chroot_list_enable=YES
chroot_local_user=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
# 设置虚拟用户
guest_enable=yes
guest_username=ftpuser
user_config_dir=/etc/vsftpd/vuser_conf
3 创建本地用户
本地用户 不允许shell登录主机
sudo -s useradd -s /sbin/nologin ftpvip
sudo -s useradd -s /sbin/nologin ftpsearch
本地用户(虚拟用户映射本地用户) 不允许shell登录主机
sudo -s useradd -s /sbin/nologin ftpuser
用户修改相关的语句
修改用户
sudo -s usermod -s /sbin/nologin 用户名
删除用户
sudo -s userdel -r 用户名
4 创建FTP虚拟用户
cd /etc/vsftpd/
sudo -s touch vuser_passwd
sudo -s vim /etc/vsftpd/vuser_passwd
virtual_vip //一行对应用户名
123456 //一行对应密码
virtual_search
123456
根据虚拟用户账户文件生成虚拟用户库
sudo -s db_load -T -t hash -f /usr/local/vsftp/vuser_passwd /usr/local/vsftp/vuser_passwd.db
5 创建虚拟用户配置文件
创建虚拟用户配置目录
sudo -s mkdir /etc/vsftpd/vuser_conf
sudo -s touch virtual_vip
sudo -s touch virtual_search
新增虚拟用户配置内容
sudo -s vim /etc/vsftpd/vuser_conf/virtual_vip
sudo -s vim /etc/vsftpd/vuser_conf/virtual_search
全部权限:可上传、下载、删除和改名
(根据需要权限自由组合)
local_root=/var/ftp/pub
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
6 配置pam服务
配置本机用户虚拟用户登录认证
sudo -s vim /etc/pam.d/vsftpd
auth sufficient pam_userdb.so db=/etc/vsftpd/vuser_passwd
account sufficient pam_userdb.so db=/etc/vsftpd/vuser_passwd
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
7 设置FTP文件夹用户权限
cd /var/ftp/
sudo -s mkdir pub
sudo -s mkdir vip
sudo -s mkdir search
sudo -s chown -R ftpuser:ftpuser /var/ftp/pub
sudo -s chown -R ftpvip:ftpvip /var/ftp/vip
sudo -s chown -R ftpsearch: ftpsearch /var/ftp/ftpsearch
8 启动vsftpd服务
重启vsftpd
sudo -s systemctl restart vsftpd.service
查看服务状态
sudo -s systemctl status vsftpd.service
三、VSFTP安装文件介绍
文件 | 描述 |
---|---|
/etc/vsftpd/vsftpd.conf |
|
/usr/sbin/vsftpd |
|
/home |
|
/etc/pam.h/vsftpd |
|
/etc/vsftpd/ftpusers |
|
/etc/vsftpd/user_list |
|
/etc/vsftpd/chroot_list |
|
/var/ftp |
|
/var/log/vsftpd.log |
|
/var/log/xferlog |
|
/etc/vsftpd/vuser_conf |
|
/etc/vsftpd/vuser_passwd |
|
/etc/vsftpd/vuser_passwd.db |
|
四、VSFTP安装遇到的问题及解决方法
vsftp安装一波三折,遇到各种非root权限问题,pam安全认证问题,外网访问问题,本机/虚拟用户无法访问问题等😅😅
首先必须先了解下FTP响应代码:
- 110 新文件指示器上的重启标记
- 120 服务器准备就绪的时间(分钟数)
- 125 打开数据连接,开始传输
- 150 打开连接
- 200 成功
- 202 命令没有执行
- 211 系统状态回复
- 212 目录状态回复
- 213 文件状态回复
- 214 帮助信息回复
- 215 系统类型回复
- 220 服务就绪
- 221 退出网络
- 225 打开数据连接
- 226 结束数据连接
- 227 进入被动模式(IP 地址、ID 端口)
- 230 登录因特网
- 250 文件行为完成
- 257 路径名建立
- 331 要求密码
- 332 要求账号
- 350 文件行为暂停
- 421 服务关闭
- 425 无法打开数据连接
- 426 结束连接
- 450 文件不可用
- 451 遇到本地错误
- 452 磁盘空间不足
- 500 无效命令
- 501 错误参数
- 502 命令没有执行
- 503 错误指令序列
- 504 无效命令参数
- 530 未登录网络
- 532 存储文件需要账号
- 550 文件不可用
- 551 不知道的页类型
- 552 超过存储分配
- 553 文件名不允许
500 OOPS:config file not owned by correct user
重启vsftpd–显示active:fail
sudo -s systemctl vsftpd restart.service
查看服务状态
sudo -s systemctl status vsftpd.service
显示报错
500 OOPS:config file not owned by correct user
原因:当前用户非root权限通过yum安装的vsftpd,/etc/vsftpd/vsftpd.conf配置文件权限是当前非root用户权限,但是启动命令必须用root权限才能启动,没权限真恶心~~
解决方法:修改vsftpd.conf配置文件为root权限sudo -s chown -R root:root /etc/vsftpd/vsftpd.conf
Login failed: 530 Login incorrect
重启vsftpd–显示active:success
sudo -s systemctl vsftpd restart.service
查看服务状态-- 一切OK
sudo -s systemctl status vsftpd.service
ftp 内网ip–输入虚拟用户/密码显示530登录失败
Login failed: 530 Login incorrect
原因:pam认证文件虚拟用户配置错误 pam认证详细可参考https://cloud.tencent.com/developer/article/1729566
解决方法 /etv/pam.d/vsftpd 认证文件中新增虚拟用户库具有充分条件的用户口令和用户权限认证
auth sufficient pam_userdb.so db=/etc/vsftpd/vuser_passwd
account sufficient pam_userdb.so db=/etc/vsftpd/vuser_passwd
手动添加以上俩条内容,新增虚拟用户的安全和帐户权限进行验证。
开头的auth是指对用户的用户名口令进行验证,开头的accout是指对用户的帐户权限进行验证。中间的的sufficient表示充分条件,一旦在这里通过了验证,那么就不需要经过下面的验证步骤。相反,如果sufficient充分条件没有通过不会立即被系统拒绝登入,用户还必须经过下面的验证审核。
公网无法访问,内网可以访问,浏览器输入ftp地址一直跳出登录框
原因:vsftpd配置文件参数pasv_address=0.0.0.0未配置
解决方法 /etv/vsftpd/vsftpd.conf 参数pasv_address=0.0.0.0配置公网地址pasv_address=xx.xx.xx.xx
总结
原来以为搭建FTP很简单分分钟搞定问题不大~~囧,同时工作的任务也比较多,只能空闲时间搭建,前前后后加写博客搞了将近一个星期才完全弄好,运维工作基本算都是调参的工作也真不容易!太难了,又可以继续去搬设计模式的砖了😅😅,我们不是代码的生产者,而是代码的搬运者!
我的github主页地址 https://xdj68.github.io