防火墙设置
为了使我们的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