vsftpd 配置项说明
目录
- 一:vsftpd 配置文件说明
- 二:vsftpd 服务和连接设置
- 三:vsftpd 用户根目录管理
- 四:vsftpd 匿名用户模式管理
- 五:vsftpd 本地用户模式管理
- 六: vsftpd 虚拟用户模式管理
一:vsftpd 配置文件说明
vsftpd 官方配置参考手册:https://security.appspot.com/vsftpd/vsftpd_conf.html
配置文件的路径:
vsftpd 进程启动后,默认查找的配置文件是/etc/vsftpd.conf,如果配置文件是自定义的路径,则需要在启动vsftpd进程的的时指定配置文件路径,所以可以通过查看vsftpd进程的启动参数来查找配置文件路径。
例如:如果 vsftpd 是通过 systemd 管理的服务,你还可以查看 vsftpd 服务的启动参数来找出配置文件的位置。
配置文件的格式:
- 在 配置文件中,如果以
#号开头表示注释。 - 配置文件中的指令和值之间的
=号两边不能存在任何空格。
指定子配置文件:
- 通过 user_config_dir 选项可以指定vsftpd的子配置文件路径,一般配置虚拟用户模式的时候会用到。
二:vsftpd 服务和连接设置
服务端模式设置:
listen=yes/no:控制vsftpd是否作为独立服务运行,需要启用这个配置项。
服务端时间设置:
use_localtime=yes/no:FTP服务端的时间格式是否和服务器一致,如果不启用,默认使用的是格林威治时间。
服务端口设置:
listen_port=num:指定vsftpd监听的端口号。默认是 21,。pasv_min_port和pasv_max_port:设置被动模式下允许的数据通道端口范围。默认范围是1024-65535。ftp_data_port=num:主动模式下ftp服务端的数据通道端口。默认是 20,需要禁用connect_from_port_20才会生效。
工作模式设置:
pasv_enable=yes/no:是否将FTP服务端切换为被动模式,默认就是被动模式下运行。active_enable=yes/no:是否将FTP服务端切换为主动模式,默认就是被动模式下运行。
服务端日志设置:
xferlog_file=/path:指定日志文件路径,不指定默认是/var/log/vsftpd.logxferlog_enable=yes/no:启用后会记录上传和下载的日志信息,如果要看详细日志信息,就需要开启。xferlog_std_format=yes/no:禁用后会显示日志的更多详细信息,一般禁用,方便排查问题。log_ftp_protocol=yes/no:启用后会记录每个FTP会话的详细对话。一般启用,可以查看更多日志信息。
三:vsftpd 用户根目录管理
用户目录配置:
local_root=/path:指定非匿名用户的根目录。anon_root=/path:指定匿名用户的根目录
禁锢用户访问(Chroot):
chroot_local_user=YES/NO:启用或禁用非匿名用户被禁锢在其登录目录。allow_writeable_chroot=YES/NO:允许在禁锢模式下对根目录进行写操作(适用于非匿名用户)。
四:vsftpd 匿名用户模式管理
匿名用户指的就是FTP客户端通过ftp或anonymous这两个用户名登录FTP服务器。所以要使用匿名用户模式,需要确保服务器上存在 ftp 和 nobody 这两个系统用户。
匿名用户模式配置:
anonymous_enable=yes/no:是否启用匿名模式,如果启用,则允许匿名用户通过ftp或anonymous登录。no_anon_password=yes/no:是否允许匿名用户无需密码即可登录。启用后匿名用户不输入密码直接登录。
匿名用户权限控制:
-
anon_upload_enable=yes/no:是否允许匿名用户执行上传文件的FTP命令,如果允许则允许匿名用户上传文件到FTP服务端。 -
anon_other_write_enable=yes/no:是否允许匿名用户执行除了上传和创建目录之外的FTP命令,这类FTP命令会改变服务端的文件系统。 -
anon_mkdir_write_enable=yes/no:允许或禁止匿名用户创建目录。若允许则匿名用户将能够创建目录。 -
anon_world_readable_only=yes/no:是否只允许匿名用户下载具有全局读取权限的文件。若启用,则只有ftp或nobody具有读权限的文件才能下载。
说明:匿名用户如果要修改服务端的文件系统,需要启用write_enable配置,让用户有权限执行这些会改变文件系统权限的FTP命令。并且还需要保证ftp或nobody用户具有在操作系统层面上具备相应的文件权限。例如,必须对文件拥有写权限,才能执行删除、修改等操作。
五:vsftpd 本地用户模式管理
本地用户模式指的是FTP客户端使用操作系统中已存在的用户账户进行登录。此模式下,FTP用户与操作系统用户是绑定的。
本地用户模式配置:
local_enable=yes/no:是否允许使用操作系统本地用户登录 FTP 服务端。若允许则允许操作系统中已存在的用户使用自己的账户进行登录。
本地用户权限控制:
write_enable=yes/no:是否允许FTP客户端用户执行可以改变文件系统(例如上传、修改、删除)的FTP命令。
说明:
- 本地用户模式下,只需要允许本地用户执行可以改变文件启动的FTP命令(启用write_enable),然后确保该用户具有对应的文件系统权限去更改这个文件就行了。
- 本地用户必须有一个有效的登录 shell(如 /bin/bash),否则会拒绝该用户的 FTP 登录请求。
六: vsftpd 虚拟用户模式管理
虚拟用户指的是只在FTP服务中有效,在操作系统中不存在的用户。因为虚拟用户不具有操作系统层面的文件权限,因此需要将虚拟用户与系统用户进行绑定。
虚拟用户配置:
guest_enable=yes/no:是否启用匿名模式,如果启用了匿名模式,,所有连接到FTP服务端的用户都会被视为虚拟用户进行验证。guest_username=username:指定将虚拟用户映射为某个实际存在的操作系统用户。如果不指定默认就是ftp这个系统用户。virtual_use_local_privs=yes/no:是否让虚拟用户拥有guest_username指定的系统用户的文件系统权限,如果不指定的话,默认是匿名用户的权限。、
说明:启用虚拟用户模式,还需要启用local_enable选项才能正常使用。因为当虚拟用户被映射到一个本地用户时,会使用本地用户来处理权限和文件访问。vsftpd 会通过 local_enable 的设置来决定是否允许该本地用户的操作
虚拟用户权限控制:
指定了 guest_username 和 virtual_use_local_privs:虚拟用户会映射到指定的 本地系统用户,并使用该本地用户的权限。这时,权限控制将遵循 本地用户模式 的相关配置(如 local_enable、write_enable 等),即通过本地用户的权限控制来管理虚拟用户的操作权限。没有指定 guest_username 和 virtual_use_local_privs:虚拟用户默认映射到一个ftp这个匿名用户,并使用匿名用户模式的相关配置。这时,权限控制则需要通过 匿名用户模式 的配置项(如 anon_upload_enable、anon_world_readable_only 等)来管理虚拟用户的权限。
说明:
- 启用虚拟用户模式后,FTP登录FTP服务端使用的所有用户都会被认为是虚拟用户。
虚拟用户模式配置流程:
1、需要先检查当前的vsftpd是否加载了PAM相关库文件,如果没加载则pam验证不会生效。
ldd vsftpd | grep pam
2、创建一个系统本地用户,这个用户不要求拥有有效的登录 shell(如 /bin/bash)
useradd -r -m -d /ftp_data -s /sbin/nologin vsftpd
3、创建一个文本文件。文本文件里面存放用户名和密码
# 奇数行是用户名,偶数行是密码
sudo mkdir /etc/vsftpd/sudo vim /etc/vsftpd/vusers
tom
Abc123
bob
123456
alice
redhat
4、生成Berkeley DB 数据库文件
sudo db_load -T -t hash -f ~/vusers /etc/vsftpd/vusers.db
5、编写PAM验证规则
sudo vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
auth required pam_userdb.so db=/etc/vsftpd/vusers: 这个配置主要负责验证用户提供的密码是否正确。会根据用户输入的用户名去指定的数据库(如/etc/vsftpd/vusers)中查找对应的记录,并核对密码是否匹配account required pam_userdb.so db=/etc/vsftpd/vusers: 作用主要就是验证提供的账号是否存在于数据库中。会根据用户输入的用户名去指定的数据库(如/etc/vsftpd/vusers)中查找对应的记录
6、需改vsftpd的配置文件
# 虚拟用户配置# 启用虚拟用户模式
guest_enable=YES
local_enable=YES# 指定映射的用户
guest_username=vsftpd# 让虚拟用户拥有和系统用户同样的权限
virtual_use_local_privs=YES# 指定用于验证的PAM规则文件,不用加全路径,会默认到/etc/pam.d下找
pam_service_name=vsftpd# 权限配置# 允许用户指定更改文件系统的FTP命令
write_enable=YES# 指定用户创建文件的默认权限
local_umask=022# 指定用户的默认根目录
local_root=/ftp_data# 将用户禁锢到根目录下,从而使它不能进入更上层目录
chroot_local_user=YES# 禁锢模式下,如果该用户对根目录有写权限,需要开启该选项
allow_writeable_chroot=YES
虚拟用户配置时子配置文件方式:
步骤和上面的一致,就是修改vsftpd.conf配置文件的时候加上user_config_dir来指定子配置文件的位置。
虚拟用户的子配置文件需要以该用户的用户名命名,且不能带后后缀,然后在子配置文件里面加入相关的权限配置选项就行了。
例如:tom用户的配置
主配置文件:
$ sudo vim /etc/vsftpd.conf
# 虚拟用户配置# 启用虚拟用户模式
guest_enable=YES
local_enable=YES# 指定子配置文件路径
user_config_dir=/etc/vsftpd
子配置文件:
$ sudo vim /etc/vsftpd/tom
guest_username=vsftpd
virtual_use_local_privs=YES
pam_service_name=vsftpdwrite_enable=YES
local_umask=022local_root=/ftp_data
chroot_local_user=YES
allow_writeable_chroot=YES
相关文章:
vsftpd 配置项说明
目录 一:vsftpd 配置文件说明二:vsftpd 服务和连接设置三:vsftpd 用户根目录管理四:vsftpd 匿名用户模式管理五:vsftpd 本地用户模式管理六: vsftpd 虚拟用户模式管理 一:vsftpd 配置文件说明 …...
剑指offer第2版:搜索算法(二分/DFS/BFS)
查找本质就是排除的过程,不外乎顺序查找、二分查找、哈希查找、二叉排序树查找、DFS/BFS查找 一、p39-JZ3 找出数组中重复的数字(利用特性) 数组中重复的数字_牛客题霸_牛客网 方法1:全部排序再进行逐个扫描找重复。 时间复杂…...
Pytorch与大模型有什么关系
PyTorch 是 深度学习领域最流行的框架之一,在大模型的训练、推理、优化等方面发挥了重要作用。 大模型(如 GPT、LLaMA、Stable Diffusion)大多是基于 PyTorch 进行开发和训练的。 1. PyTorch 在大模型中的作用 大模型(如 ChatGP…...
在 CentOS 上更改 SSH 默认端口以提升服务器安全性
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …...
PyTorch Lightning pytorch.loggers模块介绍
pytorch.loggers 是 PyTorch Lightning 提供的一个模块,用于集成多种日志记录工具,方便开发者在训练过程中记录和监控模型的性能指标、超参数等信息。日志记录器(Loggers)是 PyTorch Lightning 的重要组成部分,可以通过…...
2025年:边缘计算崛起下运维应对新架构挑战
一、引言 随着科技的飞速发展,2025年边缘计算正以前所未有的速度崛起,给运维行业带来了全新的架构挑战。在这个充满机遇与挑战的时代,美信时代公司的美信监控易运维管理软件成为运维领域应对这些挑战的有力武器。 二、边缘计算崛起带来的运维…...
什么是UV环形光源
UV环形光源是一种用于特定照明需求的设备,以下是其关键点: 定义 UV环形光源:发出紫外光的环形照明装置,常用于机器视觉、工业检测等领域。特点 均匀照明:环形设计确保光线均匀分布,减少阴影。 高亮度&…...
怎么理解 Spring Boot 的约定优于配置 ?
在传统的 Spring 开发中,大家可能都有过这样的经历:项目还没开始写几行核心业务代码,就已经在各种配置文件中耗费了大量时间。比如,要配置数据库连接,不仅要在 XML 文件里编写冗长的数据源配置,还要处理事务…...
学习总结2.14
深搜将题目分配,如果是两个题目,就可以出现左左,左右,右左,右右四种时间分配,再在其中找最小值,即是两脑共同处理的最小值 #include <stdio.h> int s[4]; int sum0; int brain[25][25]; …...
Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档
Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档 本文将对七个流行的定时任务调度库:node-cron、rxjs、bull、node-schedule、agenda、bree、cron。这些库都可以用来处理定时任务,但它们的特点和适用场景有所不同。我们将从…...
【学术投稿-第四届智能电网和绿色能源国际学术会议(ICSGGE 2025)】CSS基本选择器详解:掌握基础,轻松布局网页
可线上 官网:www.icsgge.org 时间:2025年2月28-3月2日 目录 前言 一、基本选择器简介 1. 元素选择器(Type Selector) 基本语法 示例 注意事项 2. 类选择器(Class Selector) 基本语法 示例 注意…...
singleTaskAndroid的Activity启动模式知识点总结
一. 前提知识 1.1. 任务栈知识 二. Activity启动模式的学习 2.1 standard 2.2 singleTop 2.3.singleTask 2.4.singleInstance 引言: Activity作为四大组件之一,也可以说Activity是其中最重要的一个组件,其负责调节APP的视图ÿ…...
Java Stream 全面解析
Java Stream 全面解析 Java 8 引入的 Stream API 提供了一种高效且声明式的方式来处理集合数据。Stream 允许你以函数式编程风格操作数据,支持并行处理,并且可以显著简化代码。下面我们将从 创建操作、中间操作 和 终端操作 三个方面进行全面深入的解析…...
OpenCV识别电脑摄像头中的圆形物体
思路步骤 初始化摄像头:使用cv2.VideoCapture打开电脑摄像头。处理每一帧图像:对摄像头捕获的每一帧图像进行处理,包括灰度化、高斯模糊、霍夫圆变换等操作。绘制圆形和圆心:如果检测到圆形,使用cv2.circle函数用黄线…...
如何在 Tomcat 中屏蔽错误报告
Tomcat 屏蔽错误信息 <h1>HTTP状态 400 - 错误的请求</h1><hr class"line" /><p><b>类型</b> 异常报告</p><p><b>消息</b> 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义</p>&…...
Vue 入门到实战 十
第10章 Vue Router 目录 10.1 什么是路由 10.2 Vue Router的安装 10.2.1 本地独立版本方法 10.2.2 CDN方法 10.2.3 NPM方法 10.2.4 命令行工具(Vue CLI)方法 10.3 Vue Router的基本用法 10.3.1 跳转与传参 10.3.2 配置路由 10.…...
jenkins-获取当前时间戳
一. 简述: 很多场景下,需要获取当前时间戳。 二. 使用方法: 1. 安装: 最简单的, 莫过于直接部署相关插件: Build Timestamp Plugin 2. 配置: 3. 使用: post {success {script…...
springboot mybatis-plus 集成多数据源
在 Spring Boot 项目中集成 MyBatis-Plus 并配置多数据源,可以按照以下步骤进行。这个示例将展示如何配置两个数据源,并确保每个数据源都有自己对应的 SqlSessionFactory 和事务管理器。 1. 添加依赖 首先,在你的 pom.xml 文件中添加必要的…...
SSH 登录到 Linux 服务器为什么没有要求输入密码
如果你通过 SSH 登录到 Linux 服务器时没有要求输入密码,通常有以下几种可能性: 1. 使用 SSH 密钥认证 最常见的原因是你的 SSH 登录使用了 公钥认证,而不是密码认证。在这种情况下,服务器上已经配置了你的公钥,并且…...
Kafka 中基于 Segment 和 Offset 查找消息的过程
Kafka 中基于 Segment 和 Offset 查找消息的过程 假设我们有一个 Kafka Topic,其 Partition 划分为多个 Segment 文件。每个 Segment 文件包含 .log、.index 和 .timeindex 文件。现在我们需要查找 Offset 为 368801 的消息。 假设条件 Partition:par…...
【Jenkins流水线搭建】
Jenkins流水线搭建 01、SpringBoot项目 - Jenkins基于Jar持续集成搭建文档基于手动方式发布项目基于dockerfile基于jenkins + dockerfile + jenkinsfile +pieline基于jenkins + jar方式的发布01、环境说明01、准备项目02、准备服务器03、安装git04、安装jdk1.805、安装maven依赖…...
【Java】规则引擎 Drools
https://www.bilibili.com/video/BV1nW421R7qJ 来自尚硅谷 背景 /*** 设置订单积分*/ public void setOrderPoint(Order order){if (order.getAmout() < 100){order.setScore(0);}else if(order.getAmout() > 100 && order.getAmout() < 500){order.setScore(…...
Transformer以及BERT阅读参考博文
Transformer以及BERT阅读参考博文 Transformer学习: 已有博主的讲解特别好了: 李沐:Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili知乎:Transformer模型详解(图解最完整版) - 知乎 个人杂想&…...
深入浅出Java反射:掌握动态编程的艺术
小程一言反射何为反射反射核心类反射的基本使用获取Class对象创建对象调用方法访问字段 示例程序应用场景优缺点分析优点缺点 注意 再深入一些反射与泛型反射与注解反射与动态代理反射与类加载器 结语 小程一言 本专栏是对Java知识点的总结。在学习Java的过程中,学习…...
python 替换字符串
在 Python 中,替换字符串可以通过多种方式实现,具体取决于您的需求和上下文。以下是几种常见的方法: 1. 使用 str.replace() 方法 str.replace(old, new[, count]) 是最常用的字符串替换方法。它会将字符串中的所有匹配项替换为新的字符串。…...
数据挖掘智能Agent
🤗 CodeGenie - 智能编程助手 数据处理和分析对于数据分析工作人员来说,往往既复杂又令人头疼,需要耗费大量精力进行重复性工作。为了解决这一问题,我们开发了一款集成了自然语言处理和代码生成功能的智能编程助手——CodeGenie。…...
动手学深度学习11.7. AdaGrad算法-笔记练习(PyTorch)
以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。 本节课程地址:72 优化算法【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址:11.7. AdaGrad算法…...
【鸿蒙开发】第三十六章 状态管理 - (V2)
目录 1 V2所属装饰器 1.1 ObservedV2装饰器和Trace装饰器:类属性变化观测 1、概述 2、装饰器说明 3、使用限制 1.2 ComponentV2装饰器:自定义组件 1、概述 1.3 Local装饰器:组件内部状态 1、概述 2、装饰器说明 3、…...
基础算法# 求一个数的二进制表示当中有几个1 (C++)
文章目录 题目链接题目解读思路完整代码参考 题目链接 题目解读 给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。 如5的二进制为101,包含2个“1”。 思路 直接将该数字转为二进制表示,求其有几个1即可。 完整代码 #include<bits/stdc.…...
3D机器视觉的类型、应用和未来趋势
3D机器视觉的类型、应用和未来趋势 类型 3D机器视觉技术主要分为以下几类: 立体视觉(Stereo Vision) 通过两个或多个摄像头从不同角度捕捉图像,利用视差计算深度信息,生成3D模型。 结构光(Structured Li…...
