美文网首页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