美文网首页LinuxLinux学习|Gentoo/Arch/FreeBSD
RHEL 平台基于 vsftpd 服务搭建 FTP 服务

RHEL 平台基于 vsftpd 服务搭建 FTP 服务

作者: mlya | 来源:发表于2018-10-24 12:00 被阅读1次

    RHEL 平台基于 vsftpd 服务搭建 FTP 服务

    本文参考刘遄老师的 Linux 就该这么学撰写.

    FTP

    • FTP: File Transfer Protocol, 文件传输协议
    • FTP使用:
      • 20 端口: 数据端口
      • 21 端口: 命令端口
    • 两种工作模式:
      • 主动模式: FTP 服务器主动向客户端发起连接请求
      • 被动模式: FTP 服务器等待客户端发起连接请求 (FTP 的默认工作模式)
    • vsftpd (very secure ftp daemon, 非常安全的 FTP 守护进程), Linux 的 FTP 程序.

    配置 vsftpd 服务

    关闭防火墙

    iptables -F
    service iptables save
    

    安装 vsftpd

    在 RHEL 或 CentOS 中, 使用 yum 直接安装:

    yum install -y vsftpd
    

    vsftpd 有三种认证模式:

    • 匿名开放模式: 可以通过匿名用户(anonymous) 登录到 FTP 服务器.
    • 本地用户模式: 通过 Linux 系统本地账户密码进行认证.
    • 虚拟用户模式: 为 FTP 服务单独建立用户数据库文件, 虚拟出用户进行认证, 这些用户并不是服务器用户.

    安装 ftp

    ftp 是一个简单的 ftp 客户端, 使用 yum 安装他:

    yum install -y ftp 
    

    匿名开放模式

    匿名开放模式的方式最简单, 可以适用于简单的使用场景, 可以使用防火墙来提供基本的安全.

    参数 作用
    anonymous_enable=YES 允许匿名访问模式
    anon_umask=022 匿名用户上传文件的 umask 值
    anon_upload_enable=YES 允许匿名用户上传文件
    anon_mkdir_write_enable=YES 允许匿名用户创建目录
    anon_other_write_enable=YES 允许匿名用户修改目录名称或删除目录

    允许匿名用户修改目录名称或删除目录是很危险的权限.

    修改完配置文件后, 需要重启 vsftpd 服务:

    systemctl restart vsftpd
    

    无法上传文件?

    我们可以使用 ftp 命令登录 ftp 服务器, 可以成功登录:

    image-20181024101330239

    在开启了上面的参数后, 我们应当能够创建创建文件, 我们可以尝试一下 mkdir a

    image-20181024101422486

    但是却失败了, 我们想一下可能是什么原因:

    1. 文件夹的权限问题
    2. SELinux 的防护
    文件夹权限问题

    我们先查看一下文件夹的权限:

    image-20181024101606491

    /var/ftp 路径下, 有一个 pub 文件夹, 我们看到它是属于 root 的, 而且其他人只有 rx 权限.

    我们修改一下所属用户:

    chown -R ftp pub
    
    image-20181024101733063

    这下我们登录进去之后再次尝试, 你会发现还是会碰到创建失败的问题.

    可能还是 SELinux 的问题

    如果你开启了 GUI, 可以看到 SELinux 报警:

    image-20181024102217211

    说明是 SELinux 的问题.

    我们可以先查看一下 SELinux 关于 ftp 的 bool 值:

    image-20181024101911104

    我们可以看到这些 bool 值都是 off 的状态.

    通过查阅资料, 需要 ftpd_full_access 设置为 yes 才行:

    setsebool -P ftpd_full_access=off
    

    这样就可以使用匿名用户上传文件了.

    本地用户模式

    参数 作用
    anonymous_enable=NO 禁用匿名访问模式
    local_enable=YES 允许本地用户模式
    write_enable=YES 设置可写权限
    local_umask=022 本地用户模式创建文件的 umask 值
    userlist_enable=YES 启用 "禁止用户名单", 名单文件为 ftpusers 和 user_list
    userlist_deny=YES 如果为 NO, 只允许 user_list 文件中的用户登录, 如果为 YES, 则禁止 user_list 文件中的用户登录

    需要注意的是在 ftpusers 和 user_list 中的禁止用上列表.

    注意 SELinux 的设置

    虚拟用户模式

    创建用户 FTP 认证的用户数据库文件

    1. 创建用户文件, 奇数行位用户名, 偶数行为密码.例如, 创建 /etc/vsftpd/vuser.list 文件, 中写入用户名和密码.
    2. 使用 db_load 创建加密文件: db_load -T -t hash -f vuser.list vuser.db
    3. 修改文件权限 chmod 600 vuser.db
    4. 删除明文文件.

    创建用于映射虚拟用户的系统本地用户

    useradd -d /var/ftproot -s /sbin/nologin virtual
    

    创建名叫 virtual 的用户, shell 设置为 /sbin/nologin, home 设置为 /var/ftprooot.

    创建 ftp 目录

    mkdir /var/ftproot
    chown -R virtual:virtual /var/ftproot/
    chmod -R 755 /var/ftproot/
    

    创建支持虚拟用户的 PAM 文件

    vim /etc/pam.d/vsftpd.vu
    # 写入:
    auth required pam_userdb.so db=/etc/vsftpd/vuser 
    account required pam_userdb.so db=/etc/vsftpd/vuser
    

    注意, 写入时, 不写 .db 后缀

    修改 vsftpd 配置文件

    参数 作用
    anonymous_enable=NO 禁用匿名模式
    local_enable=YES 允许本地用户模式
    guest_enable=YES 允许虚拟用户模式
    guest_username=virtual 指定虚拟用户账户
    pam_service_name=vsftpd.vu 指定 PAM 文件
    allow_writeable_chroot=YES 允许对禁锢的FTP根目录执行写入操作, 而且不拒绝用户的登录请求

    为不同用户设置不同的权限

    1. 创建文件夹, 保存权限文件 mkdir /etc/vsftpd/vuser_dir
    2. 为用户创建文件: touch zhangsan touch lisi
    3. 修改配置文件 (这里我试了一下, 按照上面的配置, 如果不写下面的话默认是有写入和创建目录权限的)
    vim zhangsan
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES 
    anon_other_write_enable=YES
    

    相关文章

      网友评论

        本文标题:RHEL 平台基于 vsftpd 服务搭建 FTP 服务

        本文链接:https://www.haomeiwen.com/subject/gjbttqtx.html