
Vsftpd服务器应用与管理
Linux Vsftpd服务器的应用与管理
引导
- 掌握vsftpd服务器的安装与启停控制
- 熟悉PAM功能和在vsftpd中的应用
- 熟悉vsftpd服务器的工作原理和配置文件
- 掌握vsftpd用户类型、授权与访问控制
- 熟悉SELinux对vsftpd服务的影响
- 掌握vsftpd服务器的配置方法
Vsftpd是一款运行在类Unix操作系统的FTP服务端程序,主打安全性、开源免费、速率高、支持IPv6、虚拟用户等功能。其设计出发点为安全性,Red Hat公司官方FTP服务器即采用Vsftpd。本项目涵盖FTP工作原理、vsftpd配置文件参数,并演示在开启SELinux的情况下配置匿名访问、本地用户及虚拟用户模式,同时介绍PAM认证模块原理。
实施
1:安装与启停控制vsftpd服务器
1.1:了解FTP和vsftpd
-
文件传输协议
- FTP用于跨平台文件传输(如Linux与Windows间),采用C/S架构(客户端发送指令,服务端响应)。
- 传输模式:
- 主动模式(PORT):服务端主动连接客户端(数据端口默认20)。
- 被动模式(PASV):服务端等待客户端连接(端口由协商决定)。
- 默认端口:控制端口
21
,数据端口20
(仅主动模式使用)。
-
Vsftpd的安全性
- 以低权限用户身份运行,限制系统危害。
- 敏感指令通过受限的上层程序处理。
- 客户端请求需严格身份验证(如
chown
、登录)。 - 使用
chroot()
限制根目录,防止误用系统工具。
-
Vsftpd用户类型
用户类型 访问权限 登录方式 匿名用户 仅下载(默认),目录: /var/ftp
账号: anonymous
或ftp
,密码:空或邮箱本地用户 可读写主目录,可切换目录 系统账号登录 虚拟用户 仅访问个人主目录,安全性最高 独立FTP账号认证
1.2:安装vsftpd服务器程序
-
使用rpm命令安装
# 挂载光盘并安装 mount /dev/cdrom /mnt rpm -ivh /mnt/Packages/vsftpd-3.0.2-9.el7.x86_64.rpm # 卸载:rpm -e vsftpd
-
使用yum命令安装
# 创建本地yum仓库 cp /mnt/Packages/ /root/rhel7-rpm/ -r cp /mnt/RPM-GPG-KEY-redhat-release /root/rhel7-rpm/ createrepo /root/rhel7-rpm/Packages/ # 配置仓库文件(/etc/yum.repos.d/dvdiso.repo) [rhel7-iso] name=RHEL-7.0 Server baseurl=file:///root/rhel7-rpm/Packages/ gpgcheck=1 enabled=1 gpgkey=file:///root/rhel7-rpm/RPM-GPG-KEY-redhat-release # 安装vsftpd yum clean all yum install vsftpd
1.3:控制vsftpd服务启停
# 启动/停止服务
systemctl start vsftpd # 启动
systemctl restart vsftpd # 重启
systemctl stop vsftpd # 停止
# 查看状态与开机自启
systemctl status vsftpd
systemctl enable vsftpd
systemctl is-enabled vsftpd
# 防火墙放行FTP
firewall-cmd --add-service=ftp --permanent
firewall-cmd --list-services # 检查服务列表
匿名访问测试:
浏览器输入 ftp://服务器IP
,使用账号 anonymous
密码为空登录(默认目录:/var/ftp
)。
2:详解vsftpd服务器的配置文件
2.1:重要文件及功能
-
关键文件路径
/etc/vsftpd/ftpusers # 禁止登录的用户列表(黑名单) /etc/vsftpd/user_list # 用户访问控制列表 /etc/vsftpd/vsftpd.conf # 主配置文件 /var/ftp # 匿名用户默认根目录
-
PAM认证模块
- 路径:认证模块
/lib64/security/
,配置文件/etc/pam.d/vsftpd
。 - 主配置参数:
pam_service_name=vsftpd
指定认证文件。
- 路径:认证模块
2.2:配置文件 vsftpd.conf 详解
配置项 | 功能说明 |
---|---|
匿名用户相关 | |
anonymous_enable=YES | 允许匿名登录(默认开启) |
anon_upload_enable=YES | 允许匿名用户上传文件 |
anon_mkdir_write_enable=YES | 允许匿名用户创建目录 |
anon_umask=022 | 匿名用户上传文件umask值(默认077) |
本地用户相关 | |
local_enable=YES | 允许本地用户登录 |
chroot_local_user=YES | 将本地用户禁锢在主目录 |
chroot_list_file=/path/to/list | 指定受禁锢的用户列表文件 |
虚拟用户相关 | |
guest_enable=YES | 启用虚拟用户 |
guest_username=ftp | 指定虚拟用户的映射系统账号 |
访问控制 | |
userlist_enable=YES | 启用用户列表控制 |
userlist_deny=YES | 拒绝user_list 中的用户登录(默认) |
网络与端口 | |
listen_port=21 | 命令通道端口(standalone模式生效) |
pasv_min_port=0 | 被动模式端口范围下限(0表示任意) |
完整参数:通过
man 5 vsftpd.conf
查看全部配置说明。
2.3:使用vsftpd黑白名单
-
/etc/vsftpd/ftpusers
- 永久禁止登录的用户列表(如默认包含
root
)。 - 修改后需重启服务生效。
- 永久禁止登录的用户列表(如默认包含
-
/etc/vsftpd/user_list
- 需在主配置中启用:
userlist_enable=YES
。 - 控制逻辑:
userlist_deny=YES
(默认):拒绝列表中的用户。userlist_deny=NO
:仅允许列表中的用户。
- 需在主配置中启用:
3:解析vsftpd服务器配置实例
3.1:允许匿名用户上传和重命名
-
修改配置文件
anonymous_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES # 允许删除/重命名
-
设置目录权限
mkdir /var/ftp/up chown ftp:ftp /var/ftp/up
-
解决SELinux限制
setsebool -P ftpd_full_access=on # 开放FTP完全访问权限
3.2:限制用户切换到主目录外
-
修改配置文件
local_enable=YES write_enable=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list allow_writeable_chroot=YES # 允许被禁锢用户写入主目录
-
创建用户列表
echo "liteng" > /etc/vsftpd/chroot_list systemctl restart vsftpd
-
SELinux设置
setsebool -P ftp_home_dir=on
3.3:使用虚拟用户模式访问vsftpd
-
创建虚拟用户数据库
# 创建账号文件(奇数行账号,偶数行密码) echo -e "xuni1\npassword\nxuni2\npassword" > /etc/vsftpd/vuser.list db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vuser.db chmod 600 /etc/vsftpd/vuser.db
-
创建虚拟用户映射的系统账号
useradd -d /var/ftproot -s /sbin/nologin virtual chmod 755 /var/ftproot
-
配置PAM认证
# /etc/pam.d/vsftpd.vu 内容: auth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser
-
主配置文件修改
anonymous_enable=NO local_enable=YES guest_enable=YES guest_username=virtual pam_service_name=vsftpd.vu user_config_dir=/etc/vsftpd/vusers_dir # 用户独立权限目录
-
设置用户独立权限
# 为xuni2赋予写权限 echo -e "anon_upload_enable=YES\nanon_mkdir_write_enable=YES\nanon_other_write_enable=YES" > /etc/vsftpd/vusers_dir/xuni2 touch /etc/vsftpd/vusers_dir/xuni1 # xuni1无额外权限
-
重启服务并验证
systemctl restart vsftpd systemctl enable vsftpd setsebool -P ftpd_full_access=on
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 牧之小岛-Allende
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果