0


24_VSFTPD:安全易用的 FTP 服务器

系列文章导航:01_Linux基础操作CentOS7学习笔记-CSDN博客

文章目录


vsftpd 服务概述

1. vsftpd 简介

vsftpd(very secure FTP daemon)是一个在 UNIX 类操作系统上运行的 FTP 服务器软件。它以高安全性为最大特点,支持众多其他 FTP 服务器不支持的特性,如带宽限制、良好的可伸缩性、虚拟用户支持、IPv6 支持等。vsftpd 可在 Linux、BSD、Solaris、HP-UNIX 等多种系统上运行,是一个完全免费且开放源代码的软件。

2. vsftpd 特点

  • 小巧轻快,安全易用。
  • 广泛受推崇的 Linux 发行版 FTP 服务器程序。

3. 其他常用的 FTP 服务器

  • ProFTPD
  • PureFTPd
  • wuftpd

FTP 客户端

命令行客户端

  • ftp
  • lftp
  • sftp

图形工具

  • IE/Firefox
  • CuteFTP
  • FileZilla(支持 Windows/Linux)
  • 文件浏览器

FTP 工作模式

主动模式(PORT)

  1. 客户端打开端口 N 连接服务器 21 端口建立命令通道。
  2. 服务器使用 20 数据端口主动连接客户端通过 N+1 端口,建立数据传输通道。

被动模式(PASV)

  1. 客户端打开端口 N 连接服务器 21 端口建立命令通道。
  2. 服务端口随机建立一个 >1024 的端口,告知客户端,然后客户端通过 N+1 端口连接服务端告知的端口,进行数据传输。

服务端配置 PASV 模式

pasv_enable=YES
pasv_min_port=41000pasv_max_port=42000

客户端开启或关闭 PASV 模式

ftp> passive
Passive mode on.

安装 vsftpd 服务

# yum -y install vsftpd

相关文件

  • /etc/logrotate.d/vsftpd:日志滚动
  • /etc/pam.d/vsftpd:验证文件
  • /etc/rc.d/init.d/vsftpd:启动脚本
  • /etc/vsftpd:配置文件主目录
  • /etc/vsftpd/ftpusers:拒绝用户列表
  • /etc/vsftpd/user_list:用户访问控制文件(拒绝用户/只允许用户列表)
  • /etc/vsftpd/vsftpd.conf:主配置文件
  • /etc/vsftpd/vsftpd_conf_migrate.sh:额外配置文件
  • /usr/sbin/vsftpd:后台命令
  • /var/ftp:匿名用户的家目录(ftp/anonymous),默认服务目录
  • /var/ftp/pub:匿名用户的扩展目录

主配置文件中的三种配置

  • 全局配置(!local/anon):对所有用户起作用
  • 本地用户配置(local):只对本地用户(/etc/passwd)起作用
  • 匿名用户配置(anon):只对匿名用户起作用(ftp/anonymous)
  • 虚拟用户配置(local/anon)

FTP 配置文件常用选项

  • anonymous_enable=YES:启用匿名用户登录与下载
  • anon_upload_enable=YES:允许匿名用户上传
  • anon_mkdir_write_enable=YES:允许匿名用户创建目录
  • anon_other_write_enable=YES:允许匿名用户删除文件及空目录
  • anon_root=/home/serverDir:更改匿名用户的服务目录
  • local_enable=YES:启用本地用户
  • local_umask=022:本地用户文件生成码
  • chroot_local_user=YES:将所有本地用户限定笼环境
  • chroot_list_enable=YES:启用 chroot_list 文件,处于该文件中的用户是非笼环境“白名单”
  • chroot_list_file=/etc/vsftpd/chroot_list:指定非笼环境名单的文件
  • local_root=/var/ftp:将本地用户的服务目录更改为 /var/ftp
  • write_enable=YES:全局共享权限可读可写
  • dirmessage_enable=YES:进入某个目录时,会读取那个目录下 .message 文件内容输出
  • xferlog_enable=YES:记录上传下载的日志
  • connect_from_port_20=YES:允许采用 20 端口来传输数据
  • chown_uploads=YES:上传是否更改上传文件的所有者属性
  • chown_username=king:上传更改上传文件的所有者属性为 king
  • xferlog_std_format=YES:启用 xfer 日志格式
  • listen=YES:以独立 IPv4 服务的方式运行
  • listen_ipv6=YES:同时监听 IPv6 及 IPv4 服务连接,与 listen=YES 不可同时使用
  • pam_service_name=vsftpd:vsftpd 验证方式 /etc/pam.d/vsftpd
  • userlist_enable=YES:启用 /etc/vsftpd/user_list 文件进行访问控制
  • tcp_wrappers=YES:支持 tcpwrappers 防火墙访问控制

用户访问控制

  • /etc/vsftpd/ftpusers --拒绝用户的列表<黑名单> 由/etc/pad.m/vsftpd模块控制- 一个用户是一行,默认情况下把系统重要的用户都写在此- 如果被这个文件拒绝,总是报密码错误的提示
  • /etc/vsftpd/user_list --用户访问控制文件(拒绝用户/只允许用户列表)- 比/etc/vsftpd/ftpusers优先起作用- 拒绝时,连输入密码的机会都没有,直接报permission denied.- 默认情况下,这个文件的作用是拒绝的作用- 文件作用的控制选项: - userlist_enable=YES --启用/etc/vsftpd/user_list该文件为控制文件- userlist_deny=YES --拒绝的作用<默认>- userlist_deny=NO --只允许的作用
  • user01–>/etc/vsftpd/user_list–>/etc/vsftpd/ftpusers

实例 1:只启用匿名用户

只启匿名用户,匿名用户可读可写(上传/新建目录/删除/下载),禁用本地用户

# vim /etc/vsftpd/vsftpd.confanonymous_enable=yes
local_enable=NO
write_enable=yes
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES

给本地目录授权:

# chown ftp /var/ftp/pub/# service vsftpd restart# netstat -tnlp | grep :21

补充

匿名用户只能上传不能下载

anonymous_enable=YES
download_enable=NO
anon_upload_enable=YES

上传后自动更改属主

chown_uploads=YES
chown_username=root

虚拟用户

虚拟用户实际上是系统本地用户的映射。例如,tom 映射为 aa bb cc,以后公布 aa bb cc 用户给他人用,保证系统用户不被泄漏。

Step 1: 创建虚拟用户的数据库
# vim /tmp/userinfo.txt
aa
123456
bb
654321
cc
112233# yum -y install libdb-utils.x86_64# db_load -T -t hash -f /tmp/userinfo.txt /etc/vsftpd/virtual.db# chmod 0600 /etc/vsftpd/virtual.db# rm -rf /tmp/userinfo.txt
Step 2: 创建 PAM 的配置文件,指向新建用户数据库
# vim /etc/pam.d/vsftp_virtual
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual
Step 3: 新建一个本地用户,用于映射虚拟用户
# useradd -M -d /var/ftp -s /sbin/nologin virtual
Step 4: 更改主配置文件,包括以下选项
# vim /etc/vsftpd/vsftpd.confanonymous_enable=NO
local_enable=YES
chroot_local_user=YES
write_enable=YES
local_umask=077
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
idle_session_timeout=600data_connection_timeout=120ftpd_banner=Welcome to blah FTP service.
ls_recurse_enable=NO
listen=NO
listen_ipv6=YES
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
pam_service_name=vsftp_virtual
guest_enable=YES
guest_username=virtual
virtual_use_local_privs=YES
tcp_wrappers=YES
Step 5: 启动 vsftpd
# systemctl restart vsftpd
Step 6: 测试

使用 aa bb cc 三个用户测试。

主机访问控制

tcp_wrappers=YES

注意:

  • tcp_wrappers 优先查看 /etc/hosts.allow 白名单文件,如果没有则查看 /etc/hosts.deny 黑名单文件。
  • 一般 hosts.allow 文件也可以用户拒绝,因此常用 hosts.allow 文件即可。
# vi /etc/hosts.allow
vsftpd:192.168.110.1:DENY
vsftpd:192.168.110.

以上释义为允许 192.168.110. 网段的除 192.168.110.1 主机以外的所有主机访问 vsftpd 服务。

# vi /etc/hosts.deny
vsftpd:192.168.110.10:ALLOW
vsftpd:192.168.110.

当 hosts.allow hosts.deny 都存在时,先看 hosts.allow 规则,如果某主机在 allow 规则中被允许的则就被允许;如果某个主机没有在 hosts.allow 文件中出现,再看 hosts.deny,如果该主机在 hosts.deny 出现则被拒绝,如果该主机没有在该规则中出现则默认允许。

用户访问控制

userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=YES

启用服务安全模块 vsftpd

pam_service_name=vsftpd

流量控制

anon_max_rate
local_max_rate

连接数控制

max_clients
max_per_ip
max_login_fails

通过这些配置和步骤,你可以成功地在你的网络环境中部署和维护 vsftpd FTP 服务,确保其安全性和易用性。

标签: 安全 服务器 运维

本文转载自: https://blog.csdn.net/qq_52313022/article/details/143243552
版权归原作者 多练项目 所有, 如有侵权,请联系我们删除。

“24_VSFTPD:安全易用的 FTP 服务器”的评论:

还没有评论