FTP 基础环境搭建
在 Linux 系统中,有几款优质的 FTP 软件,可以用于不同的场景。根据它们的配置能力,可以大致分为以下三类:
①功能简单的FTP软件:包括 ftpd和oftpd。这些软件功能标准,ftpd类似于 FTP 客户端工具,且支持 SSL。oftpd 是一款小巧的匿名 FTP 服务器。
②中等配置的FTP软件:包括 vsftpd 和 pure-ftpd。这两款软件注重安全、速度和轻量级,常用于大型 FTP 服务器,尤其是 vsftpd。这类服务器用户认证和权限控制较为简单,强调安全性和速度。它们支持虚拟用户,但用户权限依赖于文件系统权限,不支持目录权限配置,在涉及目录权限时稍显麻烦。
③高配置的FTP软件:包括 proftpd、wu-ftpd 和 glftpd。proftpd 的配置方式与 Apache 类似,支持虚拟服务器和目录、虚拟用户的权限配置,且支持继承和覆盖,还可以使用“.ftpaccess”文件。proftpd 是针对 wu-ftpd 的一些缺陷重新编写的,几乎可以取代 wu-ftpd。glftpd 以功能强大著称,可完成独特任务,如自动 CRC 校验,但这些功能强大的软件也带来了一些安全隐患,需要频繁打补丁。
综上所述,我们选择安装 vsftpd 软件。
【一】安装 VSFTP 软件
①VSFTP 概述:VSFTP 的全称是 Very Secure FTP,是一个基于 GPL 发布的类 UNIX 系统上使用的 FTP 服务器软件,广泛应用,特点如下:
1. 安全、高速、稳定。
2. 可作为基于多个 IP 的虚拟 FTP 主机服务器。
3. 匿名服务设置方便。
4. 匿名 FTP 的根目录不需要特殊的目录结构或系统文件。
5. 不执行外部程序,减少安全隐患。
6. 支持虚拟用户,每个虚拟用户可有独立配置属性。
7. 启动方式灵活,可从 inetd 启动,也可设置为独立 FTP 服务启动。
8. 支持两种认证方式(PAP 或 xinetd/tcp_wrappers)。
9. 支持带宽限制。
②VSFTP 安装
VSFTP 的安装非常简单,使用如下命令:
# 检查
rpm -qa | grep vsftp
# 如果已经安装,可以先移除
rpm -e + vsftpd 包名
# 或者
yum -y remove vsftp*
# 安装
yum -y install vsftpd
# 启动
systemctl start vsftpd
# 查看状态
systemctl status vsftpd
安装完成后,核心文件及目录位置如下:
/etc/vsftpd: vsftpd 软件主目录。
/usr/sbin/vsftpd: vsftpd 主程序。
/etc/vsftpd/vsftpd.conf: vsftpd 主配置文件。
/etc/vsftpd/ftpusers: 默认的 vsftpd 黑名单。
/etc/vsftpd/user_list: 可以通过主配置文件设置为黑名单或白名单。
③VSFTP 登录
使用如下命令登录 VSFTP:
# 添加新用户
useradd -d /data/test -g ftp -s /sbin/nologin test
# 修改密码
passwd test
如果登录时报错“vsftpd 530 login incorrect”,应修改 /etc/pam.d/vsftpd 文件,注释掉 “auth required pam_shells.so” 语句,然后重启 vsftp 服务。
【二】基于 VSFTP 的配置文件
VSFTP 的配置文件默认是 `/etc/vsftpd/vsftpd.conf`。VSFTP 会自动寻找以 `.conf` 结尾的配置文件,并使用该文件启动 FTP 服务。配置文件格式为:选项=值(中间不能有空格),以 “#” 开头的行为注释行。vsftpd 的主要配置选项及其含义如表所示:
账 户 类 别 | 设 置项 | 功能描述 |
全局设置 | listen=YES | 是否监听端口,独立运行守护进程 |
listen_port=21 | 监听入站FTP请求的端口号 | |
write_enable=YES | 是否允许写操作命令,全局开关 | |
download_enable=YES | 如果设置为 NO,则拒绝所有的下载请求 | |
dirmessage_enable=YES | 用户进入目录是否显示消息 | |
xferlog_enable=YES | 是否开启 xferlog 日志功能 | |
xferlog_std_format=YES | xferlog 日志文件格式 | |
connect_from_port_20=YES | 使用主动模式连接,启用20端口 | |
pasv_enable=YES | 是否启用被动模式连接,默认为被动模式 | |
pasv_max_port=24600 | 被动模式连接的最大端口号 | |
pasv_min port=24500 | 被动模式连接的最小端口号 | |
userlist_enable=YES | 是否启用 userlist 用户列表文件 | |
userlist_deny=YES | 是否禁止userlist 文件中的账户访问 FTP | |
max_clients=2000 | 最多允许同时 2000 客户端连接,0代表无限制 | |
max_per_ip=0 | 每个客户端的最大连接限制数,0代表无限制 | |
tcp_wrappers=YES | 是否启用 tcp_wrappers | |
guest_enable=YES | 如果为 YES,则所有的非匿名登录都映射为guest_usemame 指定的账户 | |
guest_username=ftp | 设定来宾账户 | |
user_config_dir=/etc/vsftpd/conf | 指定目录,在该目录下可以为用户设置独立的配置文件与选项 | |
dual_log_enable=NO | 是否启用双日志功能,生成两个日志文件 | |
anonymous_enable=YES | 是否开启匿名访问功能,默认为开启 | |
匿名账户 | anon_root=/var/ftp | 匿名访问 FTP 的根路径,默认为/var/ftp |
anon_upload_enable=YES | 是否允许匿名账户上传文件,默认禁止 | |
anon_mkdir_write_enable=YES | 是否允许匿名账户创建目录,默认禁止 | |
anon_other_write_enable=YES | 是否允许匿名账户进行其他所有的写操作 | |
anon_max_rate=0 | 匿名数据传输率(B/s) | |
anon_umask=077 | 匿名上传权限掩码 | |
本地账户 | local_enable=YES | 是否启用本机账户 FTP功能 |
local_max_rate=0 | 本地账户数据传输率(B/s) | |
local_umask=077 | 本地账户权限掩码 | |
chroot_local_user=YES | 是否禁锢本地账户根目录,默认为 NO | |
local_root=/ftp/common | 本地账户访间 FTP根路径 |
【三】 账户权限
vsftpd 支持三种常用的登录方式:匿名用户登录、本地用户登录和虚拟用户登录。
①匿名用户
如果 FTP 服务器支持匿名访问,用户可以通过匿名方式访问服务器上的某些公开资源。匿名用户登录 FTP 服务器时,通常使用 `anonymous` 或 `ftp` 账号和任意密码(包括空密码)。匿名用户登录后,默认进入的目录是匿名 FTP 服务器的根目录(非系统根目录)。一般情况下,匿名 FTP 服务器仅提供下载功能,不提供上传功能或上传功能受到严格限制。
②本地用户
本地用户是在服务器上预先创建的用户,他们拥有 FTP 服务器的 shell 登录权限。此类用户通过自己的账号和密码登录 FTP 服务器。本地用户登录后,默认目录是他们的 home 目录,并且可以访问其他目录(包括宿主目录和其他目录)。本地用户在 FTP 服务器上既可以下载文件,也可以上传文件。
③虚拟用户
当大量用户需要使用 FTP 时,vsftpd 支持虚拟用户登录功能,从而避免了创建大量系统账号。可以通过 `guest_enable` 启用 vsftpd 的虚拟用户功能,并使用 `guest_username` 指定本地账户的虚拟映射名称。虚拟用户只能访问其主目录中的文件,无法访问主目录以外的文件。由于虚拟用户不是系统中实际存在的用户,只用于 FTP 服务器认证,因此这种方式可以确保服务器上其他用户的安全。通常,虚拟用户在 FTP 服务器上既可以下载文件,也可以上传文件。
此外,vsftpd 提供了两个文件(黑名单文件和白名单文件)用于对用户进行 ACL 控制。`/etc/vsftpd/ftpusers` 默认是一个黑名单文件,存储在此文件中的所有用户都无法访问 FTP,每行一个账号名。`/etc/vsftpd/user_list` 文件的作用取决于主配置文件中的配置项,可以作为黑名单或白名单文件,也可以禁用此文件。主配置文件中的 `userlist_enable` 决定是否启用 `user_list` 文件,如果启用,还需根据 `userlist_deny` 决定该文件是黑名单还是白名单。如果 `userlist_deny=YES`,则该文件为黑名单;如果 `userlist_deny=NO`,则该文件为白名单。需要注意的是,黑名单表示仅拒绝名单中的用户访问 FTP,其他用户默认允许访问;而白名单表示仅允许白名单中的用户访问 FTP,未列入白名单的其他用户则默认拒绝访问。