CentOS 环境下部署 vsftpd

本文涉及的产品
运维安全中心(堡垒机),免费版 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 都使用 二进制传输模式

目录
相关文章
|
2月前
|
Linux 网络安全 开发工具
Centos6.5搭建一个简单的vsftpd服务
在CentOS 6.5上配置vsftpd服务器:确保与Win10能互通,更新yum源,安装vsftpd,编辑配置文件禁用匿名访问,重启服务并关闭防火墙。创建新用户和密码,通过FTP在Win10文件管理器中使用实验机IP访问,用创建的用户和密码登录,成功创建远程文件夹,实验机上可见。
61 2
|
22天前
|
Linux 虚拟化 数据安全/隐私保护
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
|
22天前
|
关系型数据库 MySQL Linux
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
|
1月前
|
Java Linux
IDEA远程调试Centos部署的jar包
IDEA远程调试Centos部署的jar包
25 0
|
1月前
|
Java Linux
杨校老师课堂之CentOS7部署开发环境Jdk1.8【Linux】
杨校老师课堂之CentOS7部署开发环境Jdk1.8【Linux】
34 0
|
2月前
|
Shell Linux 应用服务中间件
centos系统内容器部署服务访问不到是因为run后面加了bash
centos系统内容器部署服务访问不到是因为run后面加了bash
|
2月前
|
网络安全 Docker 容器
测试开发环境下centos7.9下安装docker的minio
测试开发环境下centos7.9下安装docker的minio
128 1
|
2月前
|
存储 关系型数据库 Linux
CentOS如何使用Docker部署Plik服务并实现公网访问本地设备上传下载文件
CentOS如何使用Docker部署Plik服务并实现公网访问本地设备上传下载文件
55 4
|
2月前
|
Go
CentOS6.4安装GO语言环境
CentOS6.4安装GO语言环境
27 0
|
2月前
|
存储 安全 网络协议
云服务器 Centos7 部署 Elasticsearch 8.0 + Kibana 8.0 指南
云服务器 Centos7 部署 Elasticsearch 8.0 + Kibana 8.0 指南
84 0