使用 chroot 和 vsftpd 连接到支持多用户的 FTPS 服务器

您好,
二进制日志
系统解决方案部门的川。

我想吃烤鸡串。我喜欢鸡胸肉和鸡心。

前几天我有机会试用了一下 vsftpd,发现它的配置方式有点怪。我想任何配置过它的人都会同意,这种“反其道而行之”的配置方式简直让我头疼。

这次,我将分享如何使用 vsftpd 进行 FTPS 通信、启用 chroot 以及灵活地为多个用户更改权限。关于 vsftpd 与 FTPS 结合使用的资料不多,希望这篇文章能对大家有所帮助。

运行环境和协议

我们使用 AlmaLinux9。
协议采用 FTPS(显式模式),与 FTP 相比,FTPS 在数据连接交换方面更加安全。vsftpd
版本为 3.0.5。

使用 chroot 的目的

基本上,我们将允许所有管理员访问
/mnt/ftp 但是,我们希望部分管理员能够自由访问其他目录,因此我们会将他们添加到 chroot 列表中。这
将允许他们将文件上传到指定目录以外的其他目录。
如果我们不希望某个用户拥有过多的权限,我们可以限制其
/mnt/ftp/user1

vsftpd 安装

我们现在就安装它。

dnf install vsftpd

vsftpd 配置

安装完成后,我们将开始编辑配置文件。
首先,请先备份以防万一。

cd /etc/vsftpd cp -ip vsftpd.conf vsftpd.conf_org

配置 vsftpd.conf 文件。
默认配置中有很多需要更改/保留的内容,因此我们仅列出本次需要启用的部分。
请根据您的环境相应地调整设置。

#是否允许匿名FTP?(注意:如果注释掉此行,则默认允许)。anonymous_enable=NO

▶ 匿名用户无法登录(否)

# 取消注释以允许本地用户登录。local_enable=YES

▶ 允许本地用户访问(是)

# 取消注释以启用任何形式的 FTP 写入命令。write_enable=YES

▶ 必须将“write_enable”设置为YES才能授予用户上传权限

# 本地用户的默认 umask 为 077。如果您的用户期望使用 022(大多数其他 ftpd 服务都使用 022),您可以将其更改为 022。local_umask=022

▶这是关于上传文件权限的设置项,非常重要。
默认值为“022”,因此上传文件的权限将为755,即777减去022

# 启用目录消息 - 当远程用户进入特定目录时向其显示的消息。dirmessage_enable=YES # 您可以完全自定义登录横幅字符串:ftpd_banner=欢迎!

▶ 这由您决定。登录时显示任何消息(在本例中为“欢迎!”)。

# 启用上传/下载日志记录。xferlog_enable=YES # 您可以根据需要指定日志文件的位置。默认值如下所示。在本例中为 /var/log/xferlog。xferlog_std_format=NO

▶ 日志记录部分可能比较复杂。具体设置取决于您的需求,但检查以下四点应该就足够了。
xferlog_enable ”是最重要的,它启用日志记录功能。默认值为“YES”。
log_ftp_protocol ”记录FTP请求/响应,用于调试。同时禁用“xferlog_std_format”。
如果您希望同时收集vsftpd和xferlog日志,则需要启用
dual_log_enable 此外,“xferlog_enable”也必须启用,因为它会增加日志容量。通过配置这些设置,FTP文件传输日志将输出到“/var/log/xferlog”,FTP连接日志将输出到“/var/log/vsftpd.log”。

日志如下所示

xferlog

2023年7月24日 星期一 16:25:03 1 10.10.10.10 8230 /test.jpg b _ ir ftp_test ftp 0 * c 2023年7月24日 星期一 18:01:39 1 10.10.10.10 8230 /test.jpg b _ ir ftp_test ftp 0*c

vsftpd.log

2023年7月24日 星期一 18:17:16 [进程ID 42580] FTP响应:客户端“10.10.10.10”,“220 欢迎!” 2023年7月24日 星期一 18:17:16 [进程ID 42580] FTP命令:客户端“10.10.10.10”,“QUIT” 2023年7月24日 星期一 18:17:16 [进程ID 42580] FTP响应:客户端“10.10.10.10”,“221 再见。”

 

# 确保 PORT 传输连接源自端口 20(ftp 数据)。connect_from_port_20=YES pasv_address=<IP> pasv_min_port=61000 pasv_max_port=61010

▶ 被动模式相关设置。在“pasv_address”中设置分配给广域网侧的IP地址(如果通过互联网连接,则为全局地址)。
在“pasv_min_port”和“pasv_max_port”中指定用于数据连接的端口范围。

# 您可以更改空闲会话超时的默认值。idle_session_timeout=<数字>

▶ 注释掉此设置时,默认值为 600。此设置指定连接在空闲(即无人值守)状态下断开连接的秒数。
仅在必要时才注释掉此设置。

ascii_upload_enable=YES ascii_download_enable=YES

▶ 已启用,允许以 ASCII 模式进行传输。

local_root=/mnt/ftp chroot_local_user=YES chroot_list_enable=YES allow_writeable_chroot=YES chroot_list_file=/etc/vsftpd/chroot_list user_config_dir=/etc/vsftpd/users

▶ chroot 设置。
local_root ”指定连接时的根目录。在本例中,
它是 /mnt/ftp。“chroot_local_user ”允许您设置用户无法访问 local_root 指定的目录之上的目录。
这是基本的 chroot 设置。)

chroot_list_enable=YES
allow_writeable_chroot=YES
chroot_list_file=/etc/vsftpd/chroot_list

▶ 启用 chroot 列表应用程序并授予文件编辑权限。
此外,列在“chroot_list_file”中的用户可以移动到除“local_root”指定的目录之外的任何目录。
最后,您可以通过在“user_config_dir”下创建一个以用户名命名的文件,为每个用户指定根目录。

# 示例)local_root=/var/www/html

 

listen=YES # 请确保其中一个监听选项被注释掉! # listen_ipv6=NO

▶ 本次仅启用了监听 IPv4 的设置。除非启用其中一项设置,否则无法进行通信。

userlist_enable=YES userlist_file=/etc/vsftpd/user_list

使用“user_list”中的用户名登录。首先,它会阻止使用root和shutdown等常用用户名进行访问。

⇩默认情况下,用户列表位于 user_list 中。

# vsftpd 用户列表 # 如果 userlist_deny=NO,则仅允许此文件中的用户 # 如果 userlist_deny=YES(默认值),则永远不允许此文件中的用户,并且 # 甚至不提示输入密码。 # 请注意,默认的 vsftpd pam 配置还会检查 /etc/vsftpd/ftpusers # 以查找被拒绝的用户。 root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody

 

ssl_enable=YES ssl_sslv2=NO ssl_sslv3=NO ssl_tlsv1=NO ssl_tlsv1_1=YES ssl_tlsv1_2=YES ssl_ciphers=ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES12 8-GCM-SHA256:ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES128-CCM8:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-R SA-AES256-CCM8:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM:DHE-RSA-AES128-CCM8:!EXPforce_local_data_ssl =是force_local_logins_ssl =是rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem rsa_private_key_file=/etc/pki/tls/private/vsftpd.key

▶ SSL/TLS。
由于存在 POODLE 漏洞,请将 TLS 设置为“是”,并启用 TLS 1.1 或更高版本。
添加各种加密设置,并使用“force_local_...”强制加密通信。
在底部指定要使用的证书和私钥的路径。

use_localtime=YES

请指定当地时间。

用户准备

我们将创建一个只能通过 FTP 连接的用户,因此请授予该用户以下列出的最低用户权限。
此外,添加一个名为“ftp-group”的用户组。

useradd <用户名> passwd <用户名> usermod <用户名> -s /sbin/nologin # 仅当 /etc/shells 中不存在 /sbin/nologin 时才添加 echo /sbin/nologin >> /etc/shells groupadd ftp-group usermod -aG ftp-group <用户名>

此外,由于最好能够创建目录,因此请编辑 FTP 根目录权限。
(根据您的安全需求进行设置。在本文中,我们将为目录设置一个 SGID,并向属于该组的用户授予权限。)

cd /mnt chmod g+s ftp/ chgrp ftp-group -R ftp/ ls /mnt/ drwxr-sr-x 2 root ftp-group 4096 Jul 23 22:06 ftp

准备 chroot 和每个用户的文件

vsftpd.conf 中指定的 /etc/vsftpd/chroot_list ,并根据需要将用户名写入该文件。
此外,使用 mkdir 命令创建 /etc/vsftpd/users 目录,并使用 touch 等命令在 users/ 目录下创建用户名文件,并在其中输入 local_root。

准备用于 FTPS 的自签名证书

请按照以下步骤创建自签名证书。如果符合要求,请将有效期设置为大约 10 年。

cd /etc/pki/tls/private openssl genrsa 2048 > vsftpd.key openssl req -new -key vsftpd.key -x509 -days 3650 -out vsftpd.pem mv vsftpd.pem /etc/pki/tls/certs/vsftpd.pem chmod 600 /etc/pki/tls/certs/vsftpd.pem

您需要在上述步骤中输入证书的启用信息,请按如下所示进行设置。
(由于它是自签名证书,如果您仅在公司内部使用,则除了主机名之外,基本上可以输入任何内容。)

国家/地区名称(两位字母代码)[XX]:JP 州/省名称(全称)[]:大阪 地区名称(例如,城市)[默认城市]:大阪 组织名称(例如,公司)[默认有限公司]:Beyond 组织单位名称(例如,部门)[]:通用名称(例如,您的姓名或服务器主机名)[]:test-server 电子邮件地址[]: [email protected]

连接测试

启动 vsftpd。

systemctl start vsftpd.service

使用 WinSCP、FileZilla 等软件通过显式加密通信(显式模式)进行连接。
防火墙、SELinux 等可能会造成干扰,因此请根据需要允许或禁用它们。

完全的

如果您觉得这篇文章有用,请点击【点赞】!
11
加载中...
11票,平均分:1.00/111
5,892
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

川健

来自系统解决方案部门的
一只奇特的宝可梦