使用 chroot 和 vsftpd 连接 FTPS 与多个用户
你好。
皮肤上的皱纹
是二进制日志系统解决部门生命的本质。
我想吃烤鸡肉串。我喜欢Seseri和Hatsu。
嗯,前几天我正在使用 vsftpd,它有一些奇怪的设置。我相信那些设置这个的人会同情我,但我觉得以一种让人认为“这是相反的相反”的方式设置事情会让大脑萎缩。
这次我将使用vsftpd进行FTPS通信,同时还启用chroot并灵活更改多个用户的权限,留下如何设置的备注。关于 vsftpd x FTPS 的信息不多,所以我希望这篇文章对某人有所帮助。
运行环境和使用的协议
我使用Alma Linux9。
该协议使用FTPS(显式模式),它比FTP更安全地交换数据连接。
vsftpd 版本是 3.0.5。
使用 chroot 的目的
基本上,它会统一访问
/mnt/ftp 然而,一些管理员希望能够自由移动目录,因此我们将它们添加到 chroot 列表中。通过这样做,
您将能够将文件上传到指定目录以外的目录。
另外,通过为每个用户定义一个文件,
可以灵活地使用它,例如,允许不想拥有很多权限的用户只能访问“ /mnt/ftp/user1
vsftpd安装
我们马上安装吧
dnf安装vsftpd
vsftpd 设置
安装完成后,可以立即修改conf文件。
首先,做好备份以防万一,然后
cd /etc/vsftpd cp -ip vsftpd.conf vsftpd.conf_org
配置 vsftpd.conf。
默认配置有很多东西需要更改/保留,所以我只会摘录这次将启用的部分。
请根据您的使用环境尝试适当调整设置。
#允许匿名 FTP?(注意 - 如果您将其注释掉,则默认情况下允许)。
▶匿名用户无法登录(NO)
# 取消注释以允许本地用户登录。 local_enable=YES
▶ 允许本地用户访问(是)
# 取消注释以启用任何形式的 FTP 写入命令 write_enable=YES。
▶ “write_enable”为YES表示授予用户上传权限
# 本地用户的默认 umask 是 077。您可能希望将其更改为 022,# 如果您的用户期望(大多数其他 ftpd 使用 022)local_umask=022
▶ 与上传文件的权限相关的项目。相当重要。
初始值为“022”,因此上传的文件权限将为 755,即 777 减去 022 。
# 激活目录消息 - 当远程用户进入某个目录时向他们发送的消息 dirmessage_enable=YES # 您可以完全自定义登录横幅字符串:ftpd_banner=欢迎!
▶ 这取决于你。登录时显示任意消息(在本例中为“欢迎!”)。
# 激活上传/下载的日志记录 xferlog_enable=YES # 如果您愿意,您可以覆盖日志文件的位置 # xferlog_file=/var/log/vsftpd.log log_ftp_protocol=YES Dual_log_enable=YES # 如果。如果您愿意,您可以使用标准 ftpd xferlog 格式的日志文件 # 请注意,在这种情况下,默认日志文件位置是 /var/log/xferlog。
▶ 特别是在复杂的原木周围。这取决于你的要求,但如果你能确认这四项,那就足够了。
“ xferlog_enable ”是最重要的。启用日志记录。默认值为 YES
" log_ftp_protocol " 记录 FTP 请求/响应。用于调试。同时,禁用“xferlog_std_format”。
" Dual_log_enable " 当您想要同时获取 vsftpd 和 xferlog 时启用。还必须启用“xferlog_enable”。
随着日志容量的增加,需要考虑这一点。 通过进行这些设置,FTP 文件交换将输出到“/var/log/xferlog”,FTP 连接日志将输出到“/var/log/vsftpd.log”。
⇩日志看起来像这样
xferlog
2023 年 7 月 24 日星期一 16:25:03 2023 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 [pid 42580] FTP 响应:客户端“10.10.10.10”,“220 欢迎!” 2023 年 7 月 24 日星期一 18:17:16 [pid 42580] FTP 命令:客户端“10.10.10.10” ,“退出”2023 年 7 月 24 日星期一 18:17:16 [pid 42580] FTP 响应:客户端“10.10.10.10”,“221 再见。”
# 确保 PORT 传输连接源自端口 20 (ftp-data) connect_from_port_20=YES pasv_address=<IP> pasv_min_port=61000 pasv_max_port=61010
▶ 被动模式相关设置。对于“pasv_address”,设置分配给 WAN 侧的 IP 地址(如果通过 Internet,则为全局)。
使用“pasv_min_port”和“pasv_max_port”指定用于数据连接的端口范围。
# 您可以更改空闲会话超时的默认值。
▶ 注释掉后默认值为 600。指定连接空闲(≒ 放弃)时断开连接之前的秒数。
仅在必要时发表评论。
ascii_upload_enable=是 ascii_download_enable=是
▶ 启用以允许以 ASCII 模式传输。
local_root=/mnt/ftp chroot_local_user=是 chroot_list_enable=是allow_writeable_chroot=是 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=是
allow_writeable_chroot=是
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 # 如果 userlist_deny=NO,只允许用户在此文件中 # 如果 userlist_deny=YES(默认),则绝不允许用户在此文件中,并且 # 甚至不提示输入密码 # 请注意,默认的 vsftpd pam 配置也是如此。检查 /etc/vsftpd/ftpusers # 是否有被拒绝的用户 root bin daemon adm lpsync shutdown stop mail news uucp Operator games nobody。
ssl_enable=是 ssl_sslv2=否 ssl_sslv3=否 ssl_tlsv1=否 ssl_tlsv1_1=是 ssl_tlsv1_2=是 ssl_ciphers=ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDS A-AES256-CCM:ECDHE - ECDSA-AES256-CCM8:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-CCM :ECDHE-ECDSA-AES128-CCM8:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-RSA-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/私有/vsftpd.key
▶ 围绕 SSL/TLS。
由于还存在 POODLE 的问题,因此将 YES 设置为仅 TLS 并启用 TLS 1.1 或更高版本。
添加各种密码设置并使用“force_local_...”强制连接进行加密通信。
在底部指定要使用的证书和私钥路径。
use_localtime=YES
▶ 指定当地时间。
用户准备
我们将准备一个只能连接到 FTP 的用户,因此授予以下最低用户权限。
同时,添加一个名为“ftp-group”的组。
useradd <username> passwd <username> usermod <username> -s /sbin/nologin # 仅当 /sbin/nologin 不在 /etc/shells 中时添加 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 七月 23 日 22:06 ftp
准备 chroot 和用户文件
在 vsftpd.conf 中指定的 /etc/vsftpd/chroot_list ,并根据需要在文件中写入用户名。
另外,使用mkdir创建/etc/vsftpd/users目录,必要时使用touch等在users/下创建用户名文件,写入local_root。
为 FTPS 准备自签名证书
按照以下步骤创建 Oreore 证书。如果要求没有问题,可以将有效期设置为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
由于在上述流程中需要输入证书ON信息等,因此请如下所示在Yoshina中进行设置。
(由于它是自签名的,如果您仅在内部使用它,我认为您可以使用主机名以外的任何名称。)
国家名称(2 个字母代码)[XX]:日本州或省名称(全名)[]:大阪地区名称(例如城市)[默认城市]:大阪组织名称(例如公司)[默认有限公司]:超越组织单位名称(例如,部分) []:通用名称(例如,您的姓名或服务器的主机名) []:测试服务器电子邮件地址 []: [电子邮件受保护]
连接测试
启动 vsftpd。
systemctl 启动 vsftpd.service
使用 WinSCP、FileZilla 等使用显式加密通信(显式模式)进行连接。
这可能会受到firewalld、SELinux等的干扰,因此请酌情允许或禁用它。
完全的