CentOS 环境下部署 vsftpd

本文涉及的产品
运维安全中心(堡垒机),企业双擎版|50资产|一周时长
运维安全中心(堡垒机),免费版 6个月
简介: CentOS 环境下部署 vsftpd

安装 vsftpd

yum install -y vsftpd

查看 vsftpd 版本

vsftpd -version

vsftpd: version 3.0.2

查看 vsftpd 启动方式

systemctl cat vsftpd.service

想要实现多实例 vsftpd 的场景,只需要复制 vsftpd.service 文件,重命名一下,然后修改一下指向的 /etc/vsftpd/vsftpd.conf 文件名称,配置文件内再修改一下 listen_port= 定义端口

# /usr/lib/systemd/system/vsftpd.service
[Unit]
Description=Vsftpd ftp daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
[Install]
WantedBy=multi-user.target

vsftpd 配置文件说明

ftp 访问路径

local_root=


是否开启匿名模式

anonymous_enable=YES

是否允许本地用户登录

local_enable=YES


是否允许任何形式写入 ftp

write_enable=YES


本地 umask

local_umask=022


允许匿名用户上传文件到 ftp

anon_upload_enable=YES


允许匿名用户在 ftp 上创建目录

anon_mkdir_write_enable=YES


虚拟用户是否和本地用户权限一致

virtual_use_local_privs=YES


是否记录目录活动信息

dirmessage_enable=YES


是否记录上传和下载的信息

xferlog_enable=YES

开启主动模式

connect_from_port_20=YES


开启被动模式

pasv_enable=YES


配置被动模式端口范围

默认为 0,表示 1024 以上的所有端口

pasv_min_port=30000

pasv_max_port=31000


指定登录传输的端口

listen_port=10022


指定上传文件属于哪个用户

chown_uploads=YES

chown_username=whoever


定义日志目录,默认为 /var/log/xferlog

xferlog_file=/var/log/xferlog


定义日志格式是否为 xferlog

xferlog_std_format=YES


定义空闲会话超时时间

idle_session_timeout=600


定义数据链接超时时间

data_connection_timeout=120

定义非特权用户

nopriv_user=ftpsecure


服务器是否识别 ABOR 异步请求

async_abor_enable=YES


是否允许 ASCII 模式,默认为 NO

ascii_upload_enable=YES

ascii_download_enable=YES


定义 ftp 登录时的横幅

ftpd_banner=Welcome to blah FTP service.


是否拒绝匿名电子邮件,

deny_email_enable=YES


指定用户登陆时 chroot 到某个指定的目录

chroot 可能非常危险。如果使用 chroot,请确保用户对 chroot 内的顶级目录没有写入权限

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list


是否启用 ls -R 参数,避免多用户造成 I/O 问题

ls_recurse_enable=NO


当启用“listen”指令时,vsftpd 以独立模式运行并侦听 IPv4 套接字

该指令不能与 listen_ipv6 指令结合使用

listen=NO


启用侦听 IPv6 套接字

listen_ipv6=YES


开启虚拟用户模式

guest_enable=YES

设定 PAM 服务下 vsftpd 的验证配置文件名

PAM 验证将参考 /etc/pam.d/ 下的 vsftpd 文件配置

pam_service_name=vsftpd

是否启用 user_list 文件

userlist_deny=NO 时表示 user_list 文件内的用户拒绝登录 vsftp

userlist_deny=YES 时表示 user_list 文件内的用户允许登录 vsftp

userlist_enable=YES


虚拟用户配置文件路径

user_config_dir=


支持 TCP Wrappers

tcp_wrappers=YES


配置 vsftpd

cp /etc/vsftpd/vsftpd.conf{,.bak}
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
connect_from_port_20=NO
pasv_enable=YES
pasv_min_port=20000
pasv_max_port=20480
listen_port=10021
chown_uploads=NO
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
async_abor_enable=YES
ascii_upload_enable=NO
ascii_download_enable=NO
ftpd_banner=Welcome My Friend
chroot_list_enable=NO
ls_recurse_enable=NO
listen=YES
tcp_wrappers=YES
guest_enable=YES
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/virtuser
pam_service_name=/etc/pam.d/virtftpuser

启动 vsftpd 并设为开机自启

systemctl enable vsftpd.service && \
systemctl start vsftpd.service

创建虚拟用户

创建虚拟用户配置文件目录

mkdir /etc/vsftpd/virtuser

创建一个不允许登录 shell 的用户,这样更安全

useradd ftptest -s /sbin/nologin

为用户设置密码

echo 'ftptest' | passwd --stdin ftptest

配置虚拟用户名和密码

奇数行为用户名

偶数行为密码

cd /etc/vsftpd
vim virtuser.list
ftptest
ftptest   # 密码不一定要和之前创建的用户一致,最终是通过 PAM 去访问生成的 db 文件

使用 db_load 命令用 HASH 算法生成 FTP 用户数据库文件 virtuser.db

如果有需要追加的情况,重新编写 virtuser.list ,重新使用下面的命令生成文件即可

db_load -T -t hash -f virtuser.list virtuser.db

修改 db 文件权限

chmod 600 virtuser.db

完成后,删除 list 文件,因为都是明文密码

rm -f virtuser.list

生成支持虚拟用户的 PAM 文件

vim /etc/pam.d/virtftpuser
auth required pam_userdb.so db=/etc/vsftpd/virtuser
account required pam_userdb.so db=/etc/vsftpd/virtuser

配置虚拟用户配置文件

vim virtuser/ftptest
guest_username=ftptest
local_root=/data/vsftpd

重启 vsftpd ,使配置生效

systemctl restart vsftpd

环境验证

先造一个假数据

mkdir -p /data/vsftpd
echo test > /data/vsftpd/test.txt

登录 ftp 查看

如果没有 ftp 命令,可以执行 yum install -y ftp

ftp 10.0.0.11 10021
Connected to 10.0.0.11 (10.0.0.11).
220 Welcome My Friend
Name (10.0.0.11:root): ftptest  # 配置的虚拟用户
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 (10,0,0,11,79,202).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               5 Jul 25 10:10 test.txt
226 Directory send OK.

关于主动模式和被动模式

主动模式配置

pasv_enable=YES
pasv_min_port=
pasv_max_port=

被动模式配置

pasv_enable=NO
port_enable=YES

pasv_enableport_enable 同时为 YES 时,同时支持主、被动模式

主动模式(PORT)

  • FTP 客户端连接到 FTP 服务器的 21 端口,发送用户名和密码登录,登录成功后要 list 列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT 命令到 FTP 服务器,告诉服务器,客户端采用主动模式并开放端口
  • FTP 服务器收到 PORT 主动模式命令和端口号后,通过服务器的 20 端口和客户端开放的端口连接,发送数据
  • 主动模式传输数据时是服务器连接到客户端的端口
  • 主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给 FTP 服务器访问比较困难

被动模式(PASV是Passive的缩写)

  • FTP 客户端连接到 FTP 服务器的 21 端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送 PASV 命令到 FTP 服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端,客户端再连接到服务器开放的端口进行数据传输
  • 被动模式传输数据是客户端连接到服务器的端口
  • 被动模式只需要服务器端开放端口给客户端连接就行了
总结
  • FTP 默认采用主动模式
  • 如果 FTP 在局域网内使用,主动模式不影响实际的使用
  • 如果 FTP 需要暴露在公网使用,需要切换成被动模式

关于 ftp 的 ASCII 传输模式和 二进制传输模式

ASCII 传输模式

传输时会对文件内容进行编译,主要是针对不同操作系统之间的 回车/换行/结束符等进行转译

如果要传输文本文件,建议使用 ASCII 数据类型或传输模式

  • 除了纯文本文件(扩展名为 .txt 的文件)之外以及使用 UTF-8 字符编码的文本文件 [ ASCII 不支持日文中文韩文字符 ]
  • HTML 文件
  • CGI 脚本
  • 级联样式表文件
  • javascript 文件
  • 同样属于此分类的一些文件扩展名包括:
  • .html
  • .php
  • .cgi
  • .js
  • .txt
  • .css

二进制传输模式

传输时保留文件的位序,逐位拷贝原始文件而不管内容

  • 图像文件(例如 .jpg.bmp.png
  • 声音文件(例如 .mp3.avi.wma
  • 视频文件(例如 .flv.mkv.mov.mp4
  • 存档文件(例如 .zip.rar.tar
  • 其他文件(例如 .exe.doc.xls.pdf 等)

通常 ftp 都使用 二进制传输模式

目录
相关文章
|
3月前
|
监控 前端开发 Linux
centos7系统安装部署zabbix5.0
【9月更文挑战第23天】在CentOS 7系统上部署Zabbix 5.0的步骤包括:安装MariaDB数据库及必要软件包,配置Zabbix仓库,设置数据库并导入Zabbix数据库架构,配置Zabbix服务器与前端参数,启动相关服务,并通过浏览器访问Web界面完成安装向导。
190 0
|
2月前
|
Web App开发 搜索推荐 Unix
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
317 4
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
|
3月前
|
Oracle Java 关系型数据库
CentOS 7.6操作系统部署JDK实战案例
这篇文章介绍了在CentOS 7.6操作系统上通过多种方式部署JDK的详细步骤,包括使用yum安装openjdk、基于rpm包和二进制包安装Oracle JDK,并提供了配置环境变量的方法。
290 80
|
2月前
|
存储 Linux 开发者
虚拟机centos7.9一键部署docker
本文介绍了如何在 CentOS 7.9 虚拟机上安装 Docker 社区版 (Docker-ce-20.10.20)。通过使用阿里云镜像源,利用 `wget` 下载并配置 Docker-ce 的 YUM 仓库文件,然后通过 `yum` 命令完成安装。安装后,通过 `systemctl` 设置 Docker 开机自启并启动 Docker 服务。最后,使用 `docker version` 验证安装成功,并展示了客户端与服务器的版本信息。文中还提供了列出所有可用 Docker-ce 版本的命令。
226 0
虚拟机centos7.9一键部署docker
|
3月前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
556 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
3月前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
135 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
2月前
|
安全 Linux 数据库连接
CentOS 7环境下DM8数据库的安装与配置
【10月更文挑战第16天】本文介绍了在 CentOS 7 环境下安装与配置达梦数据库(DM8)的详细步骤,包括安装前准备、创建安装用户、上传安装文件、解压并运行安装程序、初始化数据库实例、配置环境变量、启动数据库服务、配置数据库连接和参数、备份与恢复、以及安装后的安全设置、性能优化和定期维护等内容。通过这些步骤,可以顺利完成 DM8 的安装与配置。
285 0
|
3月前
|
Kubernetes Linux Docker
在centos7上搭建k8s环境
在centos7上搭建k8s环境
|
3月前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
141 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
|
4月前
|
Linux 数据安全/隐私保护 虚拟化
centos7部署openVPN
centos7部署openVPN