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

  1. 文件传输协议

    • FTP用于跨平台文件传输(如Linux与Windows间),采用C/S架构(客户端发送指令,服务端响应)。
    • 传输模式
      • 主动模式(PORT):服务端主动连接客户端(数据端口默认20)。
      • 被动模式(PASV):服务端等待客户端连接(端口由协商决定)。
    • 默认端口:控制端口 21,数据端口 20(仅主动模式使用)。
  2. Vsftpd的安全性

    • 以低权限用户身份运行,限制系统危害。
    • 敏感指令通过受限的上层程序处理。
    • 客户端请求需严格身份验证(如chown、登录)。
    • 使用chroot()限制根目录,防止误用系统工具。
  3. Vsftpd用户类型

    用户类型访问权限登录方式
    匿名用户仅下载(默认),目录:/var/ftp账号:anonymousftp,密码:空或邮箱
    本地用户可读写主目录,可切换目录系统账号登录
    虚拟用户仅访问个人主目录,安全性最高独立FTP账号认证

1.2:安装vsftpd服务器程序

  1. 使用rpm命令安装

    # 挂载光盘并安装
    mount /dev/cdrom /mnt
    rpm -ivh /mnt/Packages/vsftpd-3.0.2-9.el7.x86_64.rpm
    # 卸载:rpm -e vsftpd
    
  2. 使用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:重要文件及功能

  1. 关键文件路径

    /etc/vsftpd/ftpusers    # 禁止登录的用户列表(黑名单)
    /etc/vsftpd/user_list   # 用户访问控制列表
    /etc/vsftpd/vsftpd.conf # 主配置文件
    /var/ftp                # 匿名用户默认根目录
    
  2. 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黑白名单

  1. /etc/vsftpd/ftpusers

    • 永久禁止登录的用户列表(如默认包含root)。
    • 修改后需重启服务生效。
  2. /etc/vsftpd/user_list

    • 需在主配置中启用:userlist_enable=YES
    • 控制逻辑:
      • userlist_deny=YES(默认):拒绝列表中的用户。
      • userlist_deny=NO:仅允许列表中的用户。

3:解析vsftpd服务器配置实例

3.1:允许匿名用户上传和重命名

  1. 修改配置文件

    anonymous_enable=YES
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES  # 允许删除/重命名
    
  2. 设置目录权限

    mkdir /var/ftp/up
    chown ftp:ftp /var/ftp/up
    
  3. 解决SELinux限制

    setsebool -P ftpd_full_access=on  # 开放FTP完全访问权限
    

3.2:限制用户切换到主目录外

  1. 修改配置文件

    local_enable=YES
    write_enable=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    allow_writeable_chroot=YES  # 允许被禁锢用户写入主目录
    
  2. 创建用户列表

    echo "liteng" > /etc/vsftpd/chroot_list
    systemctl restart vsftpd
    
  3. SELinux设置

    setsebool -P ftp_home_dir=on
    

3.3:使用虚拟用户模式访问vsftpd

  1. 创建虚拟用户数据库

    # 创建账号文件(奇数行账号,偶数行密码)
    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
    
  2. 创建虚拟用户映射的系统账号

    useradd -d /var/ftproot -s /sbin/nologin virtual
    chmod 755 /var/ftproot
    
  3. 配置PAM认证

    # /etc/pam.d/vsftpd.vu 内容:
    auth    required pam_userdb.so db=/etc/vsftpd/vuser
    account required pam_userdb.so db=/etc/vsftpd/vuser
    
  4. 主配置文件修改

    anonymous_enable=NO
    local_enable=YES
    guest_enable=YES
    guest_username=virtual
    pam_service_name=vsftpd.vu
    user_config_dir=/etc/vsftpd/vusers_dir  # 用户独立权限目录
    
  5. 设置用户独立权限

    # 为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无额外权限
    
  6. 重启服务并验证

    systemctl restart vsftpd
    systemctl enable vsftpd
    setsebool -P ftpd_full_access=on