防火墙设置

为了使我们的vsftpd服务器正常工作,我们必须允许流量通过所需的端口,有些端口必须为防火墙设置适当的规则。在本教程中,我将假设使用ufw防火墙管理器(简单防火墙)。

我们希望允许流量通过的第一个端口是端口'21',这是FTP协议使用的标准端口:

$sudo ufw allow in 21/tcp

允许上面设置的指定端口范围的流量通过防火墙:

$sudo ufw allow in 10090:10100/tcp

VSFTPD设置

VSFTPD的默认配置文件是“/etc/vsftpd.conf”。

启用匿名登录

要启用匿名访问,将Anonymous_Enable指令改为:

anonymous_enable=YES

设置匿名用户默认访问的目录:

anon_root=/srv/ftp

默认情况下,所有的匿名登录都会在内部映射到用户ftp。

我们可以使用 ftp_username 设置要映射的匿名用户名。

默认情况下,为了安全,匿名用户是没有写权限的。
你可以设置可写入文件(但不建议这么做)

# Uncomment this to enable any form of FTP write command.
write_enable=YES

另外anon_upload_enable用于设置匿名用户是否能够上传文件

anon_mkdir_write_enable设置是否允许匿名用户创建新目录

允许匿名用户执行其他类型的写操作,例如重命名或者删除目录,我们必须使用配置文件中不存在的另一个指令,“anon_other_write_enable”:

anon_other_write_enable=YES

经过身份验证的登录

要允许本地系统用户使用其系统密码访问FTP服务器,必须将“Local_Enable 指令”设置为“yes”

# Uncomment this to allow local users to log in.
local_enable=YES

默认情况下,本地用户登录后,会将其home目录作为FTP的根目录。

我们可以使用Local_Root设置根目录:

local_root=/srv/ftp

Chroot本地用户

作为一种安全措施,可以在每个经过身份验证的用户自己的主目录中chroot。要完成此任务,我们必须使用'chroot_local_user'指令:

chroot_local_user=YES

启用此功能后,可以使用以下指令指定排除列表(不应chroot的用户列表):

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

作为一种安全措施,当用户被Chroot时,它不应该能够写入Chroot的顶级目录。
如果是这种情况,在最新版本的VSFTPD中,用户将无法登录,服务器将提示以下消息:

500 OOPS: vsftpd: refusing to run with writable root inside chroot()

解决方法有两种:

第一种是修复权限,拒绝用户对chroot的顶级目录的写访问,并允许他们只在子目录上写。

如果您不关心安全影响,解决问题的第二种方法是使用以下指令绕过此限制:

allow_writeable_chroot=YES

本地用户的默认umask被设置为“077” ,可以使用“Local_umask”指令更改它。

# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
#local_umask=022

使用虚拟用户登录

vsftpd提供的一个很好的特性是可以使用虚拟用户登录。
虚拟用户是指系统中不存在的用户,但仅存在于sftpd应用程序的上下文中。

要启用此功能,我们必须使用以下指令:

guest_enable=YES

启用该功能后,所有非匿名登录(即使是真正/本地用户)都映射到使用“guest_Username指令”指定的用户,

下一步是创建包含虚拟用户的用户名和密码的文件。
生成散列密码:

$openssl passwd -1
Password:
Verifying - Password:
$pfwh3Jou$DQBiNjw8bBtDqys7ezTpr.

openssl的passwd命令用于生成哈希密码(MD5)。

将用户名和密码添加到/etc/virtual_users.pwd文件中

username:hashed_password

例如:

onitroad:$pfwh3Jou$DQBiNjw8bBtDqys7ezTpr.

现在我们必须创建pam服务,vsftpd将使用该服务对虚拟用户进行身份验证。
我们将把文件命名为“vsftpd_virtual”,并将其放在“/etc/pam.d”目录中。
其内容如下:

#%PAM-1.0
auth    required pam_pwdfile.so pwdfile /etc/vsftpd/virtual_users.pwd
account required pam_permit.so

第一行中包含虚拟用户的用户名和密码的文件的路径。

使用“pam_service_name指令”指示VSFTPD使用此PAM“服务”。

pam_service_name=vsftpd_virtual

启用SSL支持数据加密

默认情况下,在vsftpd上禁用SSL支持,因此传输的数据不会加密。
要启用SSL支持,我们必须使用以下指令:

# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/certs/ssl-cert-oir.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-oir.key
ssl_enable=YES

“rsa_cert_file”用于指示用于SSL加密连接的RSA证书的路径。
“rsa_private_key”用于指定RSA私钥的位置。
最后,使用“SSL_ENABLE指令”用于启用SSL加密。

指定被动模式的端口范围

FTP被动模式是新安装的vsftpd的默认模式,但如果我们想明确启用它,可以使用以下指令:

# Set to NO if you want to disallow the PASV method of obtaining a data connection
# (passive mode). Default: YES
pasv_enable=YES

当服务器在被动模式下运行时,它会向客户端发送一个IP地址和端口,以便进行连接。默认情况下,这些端口是随机选择的,但是,由于我们必须在服务器上使用防火墙,我们必须知道应该允许哪些端口进行通信。要使用的端口范围可以使用“pasv_min_port”和“pasv_max_port”指令指定,例如:

# The minimum port to allocate for PASV style data connections. Can be used to
# specify a narrow port range to assist firewalling.
pasv_min_port=10090
# The maximum port to allocate for PASV style data connections. Can be used to
# specify a narrow port range to assist firewalling. Default: 0 (use any port)
pasv_max_port=10100

安装VSFTPD软件包

Vsftpd在官方Debian存储库中可用,
运行以下命令:

$sudo apt-get update && sudo apt-get install vsftpd

为了能够使用VSFTPD提供的虚拟用户功能,我们还需要安装另一个包:

$sudo apt-get install libpam-pwdfile
如何在debian上安装vsftpd服务器
日期:2020-07-07 20:56:36 来源:oir作者:oir