一、基本概念
FTP 是 File Transfer Protocol 的缩写,中文意思是文件传输协议,用于在网络上进行文件传输的一套标准协议。VSFTP 是一个基于 GPL 发布的类 Unix 系统上使用的 FTP 服务器软件,全称是 Very Secure FTP。
FTP服务器默认使用TCP协议的20、21端口与客户端进行通信。20端口用于建立数据连接,并传输文件数据;21端口用于建立控制连接,并传输FTP控制命令。
1、优缺点
1、优点
- 文件传输速度快:FTP协议传输文件时采用二进制方式,可以直接传送二进制数据,与其他传输协议相比,具有较高的传输速度。
- 支持多平台:FTP是可跨平台的应用程序,支持Windows、Linux等操作系统。
- 安全性好:FTP支持加密传输模式,能够有效地保证文件传输的安全性。
- 易于使用:FTP有一个简单而直观的图形用户界面,容易使用,操作便捷。
- 支持大文件传输:FTP支持大文件传输,可以处理大型文件的上传和下载。
2、缺点
- 使用上不如网络共享方便:网络共享的文件可以像本地文件一样使用,而FTP必须是下载下来才能使用。
- 安全性可能受到影响:尽管FTP支持加密传输模式,但在传输过程中仍然可能存在数据被截获或篡改的风险。
- 性能可能受到网络带宽和服务器性能的影响:如果网络带宽不足或服务器性能较差,FTP的性能可能会受到影响。
2、VSFTP工作模式
1、主动模式(port)
- FTP 客户端首先和服务器的 TCP 21 端口建立连接;用来发送命令,
- 客户端需要接收数据的时候在这个通道上发送 PORT 命令。PORT 命令包含了客户端用什么端口接收数据。
- 在传送数据的时候,服务器端通过自己的 TCP 20 端口连接至客户端的指定端口发送数据。
- FTP server 必须和客户端建立一个新的连接用来传送数据。
2、被动模式(passive)
- FTP 客户端首先和服务器的 TCP 21 端口建立连接,用来建立控制通道发送命令,
- 但建立连接后客户端发送 Pasv 命令。
- 服务器收到 Pasv 命令后,打开一个临时端口(端口大于 1023小于 65535)并且通知客户端在这个端口上传送数据的请求;
- 客户端连接 FTP 服务器的临时端口,然后 FTP 服务器将通过这个端口传输数据。.
- 注意:由于VSFTP的被动模式是随机端口进行数据传输,所以在设置防火墙时需要刻意放行–>这里一定要放心vsftp的服务。
3、vsftp主要配置文件
- 主程序:/usr/sbin/vsftp
- 启动脚本文件:/etc/rc.d/init.d/vsftpd
- 系统服务单元目录:/usr/lib/systemd/system/vsftpd.service
- 主配置文件:/etc/vsftp/vsftp.conf
- /etc/pam.d/vsftpd:这是PAM(Pluggable Authentication Modules)认证文件,用于配置vsftpd的用户认证方式。在该文件中,可以指定使用哪种PAM模块进行用户认证,以及相关的认证参数和规则。
- /etc/vsftpd/ftpusers:此文件用于记录不允许访问FTP服务器的用户名单。管理员可以把一些对系统安全有威胁的用户账号记录在此文件中,以免用户从FTP登录后获得大于上传下载操作的权利,而对系统造成损坏。
- /etc/vsftpd/user_list:此文件用于指定允许或禁止使用vsftpd的用户列表。在默认情况下(即在/etc/vsftpd/vsftpd.conf中设置userlist_deny=YES),此文件中指定的用户也不能访问FTP服务器;而在设置了userlist_deny=NO时,则仅允许user_list中指定的用户访问FTP服务器。匿名用户数据根目录:/var/ftp
- 匿名用户的下载上传目录:/var/ftp/pub此目录需赋权根chmod 1777 pub(1为特殊权限,使上载后无法删除)
- vsFTP的日志文件:/etc/logrotate.d/vsftpd.log
二、vsftp配置文件
1、实例配置文件
# 允许匿名登录。如果启用,用户名 ftp 和 anonymous 都可以以匿名身份登录。
anonymous_enable=YES
# 允许本地用户登录。必须启用此选项才能使任何非匿名登录正常工作,包括虚拟用户。
local_enable=YES
# 允许更改文件系统的 FTP 命令,如 STOR、DELE 等。
write_enable=YES
# 设置本地用户创建文件的权限掩码。022 表示默认创建新文件的权限为 755。
local_umask=022
# 允许匿名用户上传文件。必须激活 write_enable 选项,并且匿名 ftp 用户必须对所需上传位置具有写入权限。
#anon_upload_enable=YES
# 允许匿名用户创建新目录。必须激活 write_enable 选项,并且匿名 ftp 用户必须对父目录具有写权限。
#anon_mkdir_write_enable=YES
# 当 FTP 服务器的用户首次进入新目录时,显示消息。默认会扫描目录中的文件.message,但可以被配置设置 message_file 覆盖。
dirmessage_enable=YES
# 维护一个详细说明上传和下载的日志文件。默认文件位于 /var/log/vsftpd.log,但位置可以被配置设置 vsftpd_log_file 覆盖。
xferlog_enable=YES
# 使用20端口进行数据传输。
connect_from_port_20=YES
# 所有匿名上传的文件的所有权都将更改为 chown_username 中指定的用户。
#chown_uploads=YES
# 被授予匿名上传文件所有权的用户的名称。仅当设置了 chown_uploads 时,此选项才相关。
#chown_username=whoever
# xferlog_file 指定了写入传输日志的文件路径。如果设置了 xferlog_enable 和 xferlog_std_format,或者设置了 Dual_log_enable,则会写入传输日志。
xferlog_file=/var/log/xferlog
# 启用 xferlog_std_format 将以 wu-ftpd 使用的标准格式写入传输日志。默认位置为 /var/log/xferlog,但可以使用 xferlog_file 选项进行更改。
xferlog_std_format=YES
# idle_session_timeout 定义了远程客户端在 FTP 命令之间可以花费的最长时间。如果超时触发,远程客户端将被断开连接。
idle_session_timeout=600
# data_connection_timeout 定义了数据传输可以停滞的最长时间。如果超时触发,远程客户端将被断开连接。
data_connection_timeout=120
# 使用指定的用户名作为 vsftpd 运行的低权限用户。此用户名应为专门用户,不是通用用户。
nopriv_user=ftpsecure
# 启用 async_abor_enable 后,将启用异步 ABOR FTP 命令。此功能可能对某些 FTP 客户端在取消传输时有用。
async_abor_enable=YES
# 启用 ascii_upload_enable 后,将遵循 ASCII 模式上传数据。
ascii_upload_enable=YES
# 启用 ascii_download_enable 后,将遵循 ASCII 模式下载数据。
ascii_download_enable=YES
# ftpd_banner 可覆盖 vsftpd 显示的问候横幅。
ftpd_banner=Welcome to blah FTP service.
# 当 deny_email_enable 设置为 YES 时,可以创建一个文件来保存禁止使用的电子邮件地址。使用此文件的用户将无法使用这些电子邮件地址进行匿名登录。
deny_email_enable=YES
# banned_email_file 指定包含不允许的匿名电子邮件密码的文件名。启用 deny_email_enable 后,将参考此文件。
banned_email_file=/etc/vsftpd/banned_emails
# chroot_local_user 控制 Linux 系统本地用户是否能够切换到用户 home 目录以外的目录。设置为 ON 时,本地用户只能在其用户目录内活动。
chroot_local_user=YES
# chroot_list_enable 允许使用 chroot_list 文件来限制用户只能在指定的目录范围内操作。设置为 YES 时,允许使用此文件。
chroot_list_enable=YES
# chroot_list_file 指定包含本地用户列表的文件名,这些用户将被限制在其主目录的 chroot() 监狱中。仅当启用 chroot_list_enable 时相关。
chroot_list_file=/etc/vsftpd/chroot_list
# ls_recurse_enable 允许使用“ls -R”命令进行递归目录列表。设置为 YES 时可用。
ls_recurse_enable=YES
# 当 listen 设置为 YES 时,vsftpd 将作为独立的服务器运行并监听指定的 IP 地址和端口等待客户端连接请求。设置为 NO 时,vsftpd 将不独立监听并依赖于其他方式(如 inetd 或 xinetd)来启动和处理连接请求。
listen=NO
# listen_ipv6 指定 vsftpd 将监听 IPv6 套接字而不是 IPv4 套接字。与 listen 参数互斥。
listen_ipv6=YES
# pam_service_name 指定 PAM 服务名称,用于 vsftpd 的身份验证和授权。
pam_service_name=vsftpd
# 如果启用,vsftpd将从userlist_file提供的文件名加载用户名列表。如果用户试图使用此文件中的名称登录,则在要求用户输入密码之前,用户将被拒绝
userlist_enable=YES
# 每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务
tcp_wrappers=YES
2、其他配置文件
下面选项皆为默认配置
# 只有当 SSL_able 设置为活动状态时才适用。如果设置为 YES,匿名用户将被允许使用安全的 SSL 连接。
allow_anon_ssl=NO
# 如果设置为YES,将允许匿名用户执行除上传和创建目录之外的写操作,例如删除和重命名。通常不建议这样做,但为了完整性而将其包括在内。
# 注意:对于安全考虑,建议禁用此选项。
anon_other_write_enable=NO
# 当它为YES时,文件的其他人必须有读的权限才允许下载,而文件所有人为ftp且有读权限是无法下载的,必须其他人也有读权限,才允许下载。
# 若为NO,则只要ftp用户对文件有读权限即可下载。
# 注意:对于安全考虑,建议启用此选项。
anon_world_readable_only=NO
# 启用后,vsftpd在后台运行。这样可以在处理客户端请求的同时继续监听新的连接请求。
# 注意:对于需要长时间运行的命令(例如上传或下载大文件),将其放到后台执行可能会导致一些问题。
background=YES
# 此选项仅对 vsftpd 的非 PAM 版本有效。如果禁用,vsftpd 将不会检查 /etc/shells 是否有本地登录的有效用户 shell。
# 注意:为了安全考虑,建议启用此选项。
check_shell=YES
# 启用后,允许使用 SITE CHMOD 命令。这仅适用于本地用户。匿名用户永远无法使用 SITE CHMOD。
chmod_enable=YES
# 当启用此选项时,vsftpd将记录与OpenSSL连接相关的详细调试信息。
# 注意:为了调试目的,建议启用此选项。
debug_ssl=NO
# 如果为 true,则删除所有失败的上传文件。
delete_failed_uploads=NO
# 当设置为yes时,允许用户列出服务器上的目录列表,而不是下载整个目录。
dirlist_enable=YES
# 如果设置为 NO,则拒绝所有下载请求。
# 注意:为了安全性考虑,建议启用此选项。
download_enable=YES
# 如果启用,则会并行生成两个日志文件,默认情况下为 /var/log/xferlog 和 /var/log/vsftpd.log。前者是 wu-ftpd 风格的传输日志,可由标准工具解析。后者是vsftpd自己风格的日志。
# 注意:为了日志管理和分析,建议启用此选项。
dual_log_enable=NO
# 当设置为NO时,'.'和'..'不列出,只列出普通文件。而当设置为YES时,在指定'ls -a'时会列出所有以'.'开始的隐藏文件。
force_dot_files=NO
# 如果激活此选项,所有匿名登录都将强制使用安全SSL连接来发送和接收数据。
force_anon_data_ssl=NO
# 如果激活此选项,所有匿名登录都将强制使用安全SSL连接来发送密码。
force_anon_logins_ssl=NO
# 如果激活此选项,所有非匿名登录都将被迫使用安全SSL连接来发送和接收数据。
force_local_data_ssl=YES
# 如果激活此选项,所有非匿名登录都将强制使用安全SSL连接来发送密码。
force_local_logins_ssl=YES
# 如果启用此选项,所有非匿名登录都将被归类为“访客”登录。访客登录将重新映射到guest_username设置中指定的用户。
guest_enable=NO
# 如果启用此选项,目录列表中的所有用户和组信息将显示为“ftp”。
hide_ids=NO
# 启用此选项后,vsftpd将自动使用SSL加密来保护FTP连接。但请注意,这可能会对性能产生一定的影响,并且需要确保服务器和客户端都支持SSL加密并已正确配置了SSL证书。
implicit_ssl=NO
# 当用户上传文件时,如果启用此选项,上传的文件将被锁定,以防止其他用户在上传过程中访问或修改该文件。
lock_upload_files=YES
# 启用此选项后,如果未启用xferlog_std_format选项,则会记录所有FTP请求和响应。
log_ftp_protocol=NO
# 启用此选项后,可以设置MDTM以修改文件时间。
mdtm_write=YES
# 启用此选项后,vsftpd不会询问匿名密码,匿名用户将直接登录。
no_anon_password=NO
# 启用此选项后,VSFTPD在写入LOG文件时不会把文件锁住。请注意,这通常不推荐启用,因为它可能对某些工作区操作系统问题(如Solaris / Veritas文件系统共存时)有用。
no_log_lock=NO
# 当设置为YES时,vsftpd会为每个建立的连接分配一个独立的进程。这可以增加vsftpd的效能,因为每个连接都有自己的进程,可以并行处理请求。然而,这种设置也有一些风险。如果系统资源有限,或者硬件配备较低,那么为每个连接分配一个进程可能会导致系统资源耗尽。相反,当设置为NO时,vsftpd不会为每个连接分配独立的进程。这可以减少系统资源的消耗,但可能会降低vsftpd的性能。
one_process_model=NO
# 启用或禁用chroot_local_user功能。如果启用该功能,用户锁定的目录来自/etc/passwd每个用户指定的目录
passwd_chroot_enable=NO
# 如果设置为yes,那么vsftp会在被动模式下解析IP地址
pasv_addr_resolve=NO
# 启用或禁用被动模式。如果启用被动模式,FTP服务器的IP地址和端口将被客户机主动连接,而不是由服务器主动连接客户机
pasv_enable=YES
# 当该选项被开启时,服务器将不检查客户端的IP地址是否与数据连接的IP地址一致
pasv_promiscuous=NO
# 启用或禁用FTP数据连接的主动模式。当port_enable设置为YES时,FTP数据连接将使用主动模式,即服务器主动向客户端发起连接。而当port_enable设置为NO时,FTP数据连接将使用被动模式,即服务器等待客户端的连接请求
port_enable=YES
# 设置是否使用安全的传输模式。如果其值设为yes,表示允许在PASV模式下进行非安全传输,即不检验数据连接的目标IP地址是否是真正客户端的IP地址。反之,如果设为no(默认值即为no),则表示在PASV模式下进行安全传输,即会检验数据连接的目标IP地址是否是真正客户端的IP地址
port_promiscuous=NO
# 如果设置为 yes,则所有 SSL 客户端连接都需要提供客户端证书
require_cert=NO
# 是否要求SSL会话的重用。如果设置为YES,则要求所有SSL数据连接都会重用SSL会话。这样,它们会知道控制通道的主密码
require_ssl_reuse=YES
# 启用或禁用根据客户端IP反查DNS名的功能。如果启用该功能,vsftpd将尝试通过反向DNS查找客户端的IP地址,以确定客户端的主机名。如果将设置为NO,则vsftpd将不执行反向查找,从而可能加快登录速度。这也有助于减少对DNS服务器的依赖和减轻其负载。
reverse_lookup_enable=YES
# 用于确定vsftpd以哪个用户的身份运行。如果将此选项设置为YES,vsftpd将作为启动它的用户身份运行
run_as_launching_user=NO
# 用于启用或禁用安全电子邮件列表功能。当设置为YES时,vsftp将只接受以指定电子邮件地址作为密码的匿名用户登录。这意味着,匿名用户必须使用在email_password_file中指定的电子邮件地址作为密码才能登录。这个文件的格式是每行一个密码,没有额外的空格。默认的文件名是/etc/vsftpd/email_passwords。这个功能一般用于在不必要创建虚拟用户的情况下,以较低的安全限制去访问较低安全级别的资源。
secure_email_list_enable=NO
# 决定vsftpd是否保持会话。如果保持会话,会尝试更新utmp和wtmp。在PAM认证下,还会打开pam_session,直到登出。如果不需要保持登录会话,可以禁用此选项以减少进程和特权占用。
session_support=NO
# 在系统进程列表中显示会话状态信息。当这个选项启用时,进程报告将会显示每个vsftpd会话在做什么(闲置、下载等等)
setproctitle_enable=NO
# 如果启用,并且 vsftpd 是针对 OpenSSL 编译的,则 vsftpd 将支持通过 SSL 的安全连接
ssl_enable=NO
# 是否允许查看客户端证书。如果启用该选项,vsftpd会要求(但不一定需要)客户端提供一个证书来进行SSL连接
ssl_request_cert=YES
# 仅当 ssl_enable 被激活时才适用。如果启用,此选项将允许 SSL v2 协议连接。
ssl_sslv2=NO
# 仅当 ssl_enable 被激活时才适用。如果启用,此选项将允许 SSL v3 协议连接。
ssl_sslv3=NO
# 仅当 ssl_enable 被激活时才适用。如果启用,此选项将允许 TLS v1 协议连接。首选 TLS v1 连接
ssl_tlsv1=YES
# 如果启用该选项,SSL数据上传需要通过SSL终止,而不是套接字上的EOF。这个选项可以确保攻击者无法使用伪造的TCP FIN过早终止上传,从而提高上传的安全性。
strict_ssl_read_eof=NO
# 如果启用,SSL 数据下载需要通过 SSL 终止,而不是套接字上的 EOF
strict_ssl_write_shutdown=NO
# 如果启用,则任何本来会发送到 /var/log/vsftpd.log 的日志输出都会发送到系统日志
syslog_enable=NO
# 默认情况下,数字 ID 显示在目录列表的用户和组字段中。您可以通过启用此参数来获取文本名称
text_userdb_names=NO
# 用于启用或禁用对用户主目录的支持。如果启用该选项,用户可以通过在用户名前加上波浪线(~)来访问其主目录。例如,如果用户名为"john",则用户可以通过输入"~john"来访问其主目录。启用tilde_user_enable选项需要满足一些条件,例如必须启用chroot_local_user选项,并且必须禁用userlist_deny选项。此外,用户的主目录必须存在于FTP服务器上,并且具有适当的权限。
tilde_user_enable=NO
# 如果启用,vsftpd 将显示目录列表以及您本地时区的时间。默认显示 GMT
use_localtime=NO
# 当设置为YES时,vsftpd将尝试使用sendfile()系统调用来传输文件,从而提高文件传输的性能。当设置为NO时,vsftpd将使用传统的文件传输方式
use_sendfile=YES
# 如果已激活userlist_enable,则会检查此选项。如果将此设置设置为“否”,则将拒绝用户登录,除非用户明确列在userlist_file指定的文件中。当登录被拒绝时,拒绝会在用户被要求输入密码之前发出。
userlist_deny=YES
# 如果设置为yes,则接收到的所有SSL客户端证书都必须验证OK。自签名证书不构成OK验证。
validate_cert=NO
# 如果已激活userlist_enable,则会检查此选项。如果启用,则会记录基于用户列表的每次拒绝登录。
userlist_log=NO
# 如果启用,虚拟用户将使用与本地用户相同的权限。默认情况下,虚拟用户将使用与匿名用户相同的权限,这往往受到更多限制(特别是在写入访问方面)。
virtual_use_local_privs=NO
# 如果启用,请使用 CLONE_NEWNET 隔离不受信任的进程,以便它们无法执行任意 connect() 操作,而必须向特权进程请求套接字(必须禁用 port_promiscuous)
isolate_network=YES
# 如果启用,请使用 CLONE_NEWPID 和 CLONE_NEWIPC 将进程与其 ipc 和 pid 命名空间隔离。所以分离的进程不能互相交互。
isolate=YES
# 远程客户端与 PASV 样式数据连接建立连接的超时(以秒为单位)
accept_timeout=60
# 报告登录失败之前暂停的秒数。
delay_failed_login=1
# 允许成功登录之前暂停的秒数。
delay_successful_login=0
# 创建上传文件的权限。Umask 应用于该值之上。如果您希望上传的文件可执行,您可能希望更改为 0777。0666表示用户、组用户和其他用户都具有读写权限,但没有执行权限
file_open_mode=0666
# PORT 样式连接源自的端口(只要启用了命名不当的 connect_from_port_20)
ftp_data_port=20
# 如果 vsftpd 处于独立模式,它将监听传入 FTP 连接的端口。
listen_port=21
# 本地经过身份验证的用户允许的最大数据传输速率(以字节/秒为单位)。
local_max_rate=0
# 如果 vsftpd 处于独立模式,这是可以连接的最大客户端数量。任何其他连接的客户端都会收到错误消息。值 0 关闭限制。
max_clients=2000
# 经过这么多次登录失败后,会话将被终止。
max_login_fails=3
# 如果 vsftpd 处于独立模式,则这是可以从同一源互联网地址连接的最大客户端数量。如果超过此限制,客户端将收到错误消息。值 0 关闭限制。
max_per_ip=50
# 为 PASV 样式数据连接分配的最大端口。0表示使用任何端口
pasv_max_port=0
# 分配给 PASV 样式数据连接的最小端口。
pasv_min_port=0
# 您可能不想更改此设置,但尝试将其设置为 8192 之类的值,以获得更平滑的带宽限制器。0表示让 vsftpd 选择一个合理的设置
trans_chunk_size=0
# 该选项代表匿名登录后 vsftpd 将尝试更改的目录
anon_root=(none)
# 此选项是包含有人连接到服务器时显示的文本的文件的名称。 如果设置,它将覆盖 ftpd_banner 选项提供的横幅字符串。
banner_file=(none)
# 此选项是从中加载证书颁发机构证书的文件的名称,用于验证客户端证书。 加载的证书也会通告给客户端,以满足 TLSv1.0 客户端(例如 z/OS FTP 客户端)的需求。 遗憾的是,由于 vsftpd 使用受限文件系统空间 (chroot),因此未使用默认的 SSL CA 证书路径。
ca_certs_file=(none)
# 此选项指定允许的 FTP 命令的逗号分隔列表(登录后。USER、PASS 和 QUIT 等始终允许登录前)
cmds_allowed=(none)
# 此选项指定拒绝的 FTP 命令的逗号分隔列表(登录后。USER、PASS、QUIT 等始终允许登录前)
cmds_denied=(none)
# 此选项可用于设置文件名(和目录名等)的模式,该模式不应以任何方式访问。示例:deny_file={*.mp3,*.mov,.private}
deny_file=(none)
# 此选项指定用于 SSL 加密连接的 DSA 证书的位置
dsa_cert_file=(none) # RSA 证书就足够了
# 此选项指定用于 SSL 加密连接的 DSA 私钥的位置。 如果未设置此选项,则私钥应与证书位于同一文件中。
dsa_private_key_file=(none)
# 此选项可用于提供备用文件以供 secure_email_list_enable 设置使用。
email_password_file=/etc/vsftpd/email_passwords
# 这是我们用于处理匿名 FTP 的用户名。 该用户的主目录是匿名FTP 区域的根目录。
ftp_username=ftp
# 此设置是访客用户映射到的真实用户名。
guest_username=ftp
# 此选项可用于设置文件名(和目录名等)的模式,该模式应在目录列表中隐藏。示例: hide_file={*.mp3,.hidden,hide*,h?}
hide_file=(none)
# 如果vsftpd运行在独立模式,此设置可以覆盖默认的所有本地接口的监听地址。
# 需要提供一个数字IP地址。
listen_address=(none)
# 与listen_address类似,但专为IPv6设置。当启用了IPv6监听时,此设置指定默认的监听地址。
# 格式为标准IPv6地址。
listen_address6=(none)
# 当本地用户登录后,vsftpd会尝试将此目录作为用户的根目录。
local_root=(none)
# 当用户进入一个新目录时,vsftpd会查找此文件名并显示其内容给用户。
# 仅当dirmessage_enable选项启用时有效。
message_file=.message
# 此选项允许您覆盖vsftpd在响应PASV命令时通告的IP地址。
# 可以提供一个数字IP地址。如果启用了pasv_addr_resolve,您也可以提供一个主机名,该主机名将在vsftpd启动时进行DNS解析。
pasv_address=(none)
# 指定用于SSL加密连接的RSA证书的路径。
rsa_cert_file=/usr/share/ssl/certs/vsftpd.pem
# 指定用于SSL加密连接的RSA私钥的路径。如果不设置,私钥应在证书文件中。
rsa_private_key_file=(none)
# 应该是一个空目录的名称,此目录不应被ftp用户写入。有时用作安全的chroot()监狱。
secure_chroot_dir=/usr/share/empty
# 允许您选择vsftpd用于SSL加密连接的密码套件。
ssl_ciphers=DES-CBC3-SHA
# 允许基于每个用户覆盖其他指定的配置选项。
user_config_dir=(none)
# 与虚拟用户结合使用时很有用。它可以根据模板自动为每个虚拟用户生成主目录。
user_sub_token=(none)
# 当userlist_enable选项启用时,此文件将用于加载用户列表。
userlist_file=/etc/vsftpd/user_list
# vsftpd的日志文件路径。仅当启用xferlog_enable选项并且未设置xferlog_std_format时才会写入。如果启用了Dual_log_enable,也会写入此日志。注意:如果启用了syslog_enable,则不会写入此文件,而是将日志发送到系统日志。
vsftpd_log_file=/var/log/vsftpd.log
三、基于系统用户的FTP服务
# yum -y install vsftpd # 安装vsftp服务
# systemctl enable vsftpd
# systemctl start vsftpd
# setenforce 0 # 关闭安全服务
1、匿名访问的FTP服务
# tar zcf /var/ftp/vsftpdconf.tar.gz /etc/vsftpd/ # 创建测试文件
# chown ftp /var/ftp/pub/ # 使匿名用户ftp对该目录拥有写入权限
# chmod 755 /var/ftp/pub/
# vim /etc/vsftpd/vsftpd.conf # 开放匿名用户配置
anonymous_enable=YES # 是否允许匿名访问
local_enable=NO # 不启用本地用户
write_enable=YES # 开放服务器的写权限
local_umask=022 # 设置匿名用户所上传文件的默认权限掩码值
anon_upload_enable=YES # 是否允许匿名用户上传文件
anon_mkdir_write_enable=YES # 是否允许匿名用户有创建目录的写入权限
anon_root=/var/ftp # 匿名用户的 FTP 根目录
anon_other_write_enable=YES # 开放其他写入权(删除、覆盖、重命名)
anon_max_rate=0 # 限制最大传输速率(0 为不限速,单位:bytes/秒)
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES # 启用本用户列表
tcp_wrappers=YES
# systemctl restart vsftpd # 重启vsftpd服务
# netstat -anpt | grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 51154/vsftpd
windows主机操作
Linux操作:
# yum -y install ftp
# ftp 192.168.1.10
Connected to 192.168.1.10 (192.168.1.10).
220 (vsFTPd 3.0.2)
Name (192.168.1.10:root): ftp # 用户名为ftp或anonymous
331 Please specify the password.
Password: # 密码可任意输入,或直接按Enter键
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls # 查看FTP服务器中的内容
227 Entering Passive Mode (192,168,1,10,50,169).
150 Here comes the directory listing.
drwxr-xr-x 2 14 0 6 Apr 01 04:55 pub
-rw-r--r-- 1 0 0 2825 Jun 26 08:32 vsftpdconf.tar
-rw-r--r-- 1 0 0 2825 Jun 26 08:32 vsftpdconf.tar.gz
226 Directory send OK.
ftp> lcd /opt # 将本地目录切换到/opt/
Local directory now /opt
ftp> get vsftpdconf.tar.gz # 将文件下载到本地(/opt/目录)
local: vsftpdconf.tar.gz remote: vsftpdconf.tar.gz
227 Entering Passive Mode (192,168,1,10,112,156).
150 Opening BINARY mode data connection for vsftpdconf.tar.gz (2825 bytes).
226 Transfer complete.
2825 bytes received in 2e-05 secs (141250.00 Kbytes/sec)
ftp> lcd /root # 将本地目录切换到/root/
Local directory now /root
ftp> cd pub # 将FTP目录切换到/pub/
250 Directory successfully changed.
ftp> put initial-setup-ks.cfg # 将文件上传到服务器(/pub/目录)
local: initial-setup-ks.cfg remote: initial-setup-ks.cfg
227 Entering Passive Mode (192,168,1,10,143,15).
150 Ok to send data.
226 Transfer complete.
1797 bytes sent in 0.000324 secs (5546.30 Kbytes/sec)
ftp> ls # 查看所上传文件的权限
227 Entering Passive Mode (192,168,1,10,67,123).
150 Here comes the directory listing.
-rw------- 1 14 50 1797 Jun 26 08:53 initial-setup-ks.cfg
226 Directory send OK.
ftp> quit # 断开ftp连接并退出
221 Goodbye.
如果已经知道要下载文件的完整URL地址的情况下,也可以
# wget ftp://192.168.1.10/vsftpdconf.tar.gz
--2020-06-26 17:26:31-- ftp://192.168.1.10/vsftpdconf.tar.gz
=> “vsftpdconf.tar.gz”
正在连接 192.168.1.10:21... 已连接。
正在以 anonymous 登录 ... 登录成功!
==> SYST ... 完成。 ==> PWD ... 完成。
==> TYPE I ... 完成。==> 不需要 CWD。
==> SIZE vsftpdconf.tar.gz ... 2825
==> PASV ... 完成。 ==> RETR vsftpdconf.tar.gz ... 完成。
长度:2825 (2.8K) (非正式数据)
100%[====================================================================>] 2,825 --.-K/s 用时 0s
2020-06-26 17:26:31 (688 MB/s) - “vsftpdconf.tar.gz” 已保存 [2825]
2、用户验证的FTP服务
1、基本的本地用户验证
修改vsftp配置文件
# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES # 启用本地用户
write_enable=YES
local_umask=077 # 仅属主用户拥有权限
local_root=/var/ftp # 设置本地用户的 FTP 根目录
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES # 将FTP本地用户禁锯在宿主目录中
listen=NO
listen_ipv6=YES
allow_writeable_chroot=YES # 允许被限制用户的主目录具有写权限
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
用户lisi登录到FTP服务器192.168.1.10,并进行上传文件测试
# ftp 192.168.1.10
Connected to 192.168.1.10 (192.168.1.10).
220 (vsFTPd 3.0.2)
Name (192.168.1.10:root): lisi # 以lisi用户登录
331 Please specify the password.
Password: # 以lisi用户的密码验证
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put uptest.txt # 将文件上传到服务器
local: uptest.txt remote: uptest.txt
227 Entering Passive Mode (192,168,1,10,74,192).
150 Ok to send data.
226 Transfer complete.
122 bytes sent in 5e-05 secs (2440.00 Kbytes/sec)
ftp> ls # 查看上传文件的权限
227 Entering Passive Mode (192,168,1,10,207,245).
150 Here comes the directory listing.
-rw------- 1 1000 1000 122 Jun 26 09:41 uptest.txt
226 Directory send OK.
ftp> quit
221 Goodbye.
2、使用user_list用户列表文件
# vim /etc/vsftpd/user_list //编辑用户列表
lisi
wangwu
zhangliu
# vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES # 启用user_list用户列表文件
userlist_deny=NO # 不禁用user_list列表中的用户
# systemctl restart vsftpd //重新加载配置
3、vsftpd服务的其他常用配置
1、修改vsftpd服务的监听地址、端口
# vim /etc/vsftpd/vsftpd.conf
listen=YES # 允许独立监听服务
listen_address=192.168.1.10 # 只在一个接口监听服务
listen_port=2121 # 监听端口改为2121
listen_ipv6=NO
# systemctl restart vsftpd
# netstat -anpt | grep vsftpd
tcp 0 0 192.168.1.10:2121 0.0.0.0:* LISTEN 51996/vsftpd
2、允许使用FTP服务器的被动模式
# vim /etc/vsftpd/vsftpd.conf
pasv_min_port=24500 # 指定被动模式的下限端口
pasc_max_port=24600 # 指定被动模式的上限端口
#pasv_enable=NO # 禁用被动模式(版本默认幵启)
# systemctl restart vsftpd
3、限制FTP连接的并发数、传输速度
# vim /etc/vsftpd/vsftpd.conf
max_clients=20 # 限制并发客户连接最多20个
max_per_ip=2 # 限制每个IP地址的连接数最多两个
local_max_rate=200000 # 限制本地用户传输速率为200kB/s
# systemctl restart vsftpd
四、基于虚拟用户的FTP服务
1、建立虚拟用户的账号数据库
1、创建文本格式的用户名/密码列表
# vim /etc/vsftpd/vusers.list
mike
123
john
456
2、创建Berkeley DB格式的数据库文件
# cd /etc/vsftpd/
# db_load -T -t hash -f vusers.list vusers.db
# file vusers.db
vusers.db: Berkeley DB (Hash, version 9, native byte-order)
# chmod 600 /etc/vsftpd/vusers.*
# ls -lh /etc/vsftpd/vusers.*
-rw-------. 1 root root 12K 6月 26 18:54 /etc/vsftpd/vusers.db
-rw-------. 1 root root 18 6月 26 18:53 /etc/vsftpd/vusers.list
3、添加虚拟用户的映射账号、创建FTP根目录
# useradd -d /var/ftproot -s /sbin/nologin virtual
# chmod 755 /var/ftproot/
2、为vsftpd服务添加虚拟用户支持
1、为虚拟用户建立PAM认证文件
# vim /etc/pam.d/vsftpd.vu
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
2、修改vsftpd配置,添加虚拟用户支持
# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES # 启用本地用户(映射本地用户)
write_enable=YES # 启用上传写入支持
local_umask=022
anon_umask=022 # 指定上传权限掩码
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
allow_writeable_chroot=YES
pam_service_name=vsftpd.vu # 指定新的PAM认证文件
tcp_wrappers=YES
guest_username=virtual # 指定映射的系统用户名称
guest_enable=YES
user_config_dir=/etc/vsftpd/vusers_dir # 指定用户独立配置文件
3、为不同的虚拟用户建立独立的配置文件
# mkdir /etc/vsftpd/vusers_dir # 创建用户配置文件夹
# cd /etc/vsftpd/vusers_dir/
# vim john # 为用户john建立独立的配置文件
anon_upload_enable=YES # 允许上传文件
anon_mkdir_write_enable=YES # 允许创建目录
# touch mike # 用户mike只有默认的权限
# systemctl restart vsftpd
五、使用SSL证书加密数据传输FTP
1、使用OpenSSL生成自签证书
# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem -days 3650
Generating a 2048 bit RSA private key
..+++
..................................+++
writing new private key to 'vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:ZH # 国家
State or Province Name (full name) []:BJ # 省
Locality Name (eg, city) [Default City]:CP # 市
Organization Name (eg, company) [Default Company Ltd]:CSDN # 机构
Organizational Unit Name (eg, section) []:CSDN # 部门
Common Name (eg, your name or your server's hostname) []:CSDN.COM # 域名
Email Address []:123456@qq.com # 邮箱
参数 | 说明 |
---|---|
req | 是 X.509(CSR,证书签名请求)管理的一个命令 |
x509 | X.509 证书数据管理 |
days | 定义证书的有效日期 |
newkey | 指定证书密钥处理器 |
keyout | 设置密钥存储文件 |
out | 设置证书存储文件(证书和密钥都保存在一个相同的文件) |
2、创建证书文件存放目录
# mkdir /etc/vsftpd/.sslkey
# cp vsftpd.pem /etc/vsftpd/.sslkey/
# chmod 400 /etc/vsftpd/.sslkey/vsftpd.pem
3、修改配置文件,支持SSL
# vim /etc/vsftpd/vsftpd.conf
......
listen=YES
# config ssl
# 启用SSL支持
ssl_enable=YES
allow_anon_ssl=NO
# 强制匿名用户使用加密登陆和数据传输
force_local_data_ssl=YES
force_local_logins_ssl=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
# 指定vsftpd支持TLS v1
ssl_tlsv1=YES
# 指定vsftpd支持SSL v2
ssl_sslv2=NO
# 指定vsftpd支持SSL v3
ssl_sslv3=NO
# 不重用SSL会话,安全配置项
require_ssl_reuse=NO
# 允许用于加密SSL连接的SSL算法
ssl_ciphers=HIGH
# 定义SSL证书和密钥文件的位置
rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/.sslkey/vsftpd.pem
......
# systemctl restart vsftpd
注意:上面的配置项不要添加到vsftpd.conf 文件最后,否则启动报错
六、FTP数字代码意义
代码 | 说明 |
---|---|
110 | 重新启动标记应答 |
120 | 服务在多久时间内ready |
125 | 数据链路埠开启,准备传送 |
150 | 文件状态正常,开启数据连接端口 |
200 | 命令执行成功 |
202 | 命令执行失败 |
211 | 系统状态或是系统求助响应 |
212 | 目录的状态 |
213 | 文件的状态 |
214 | 求助的讯息 |
215 | 名称系统类型 |
220 | 新的联机服务ready |
221 | 服务的控制连接已关闭,可以注销 |
225 | 数据连接开启,但无传输动作 |
226 | 关闭数据端口,请求的文件操作成功 |
227 | 进入passive mode |
230 | 使用者登入 |
250 | 请求的文件操作完成 |
257 | 显示目前的路径名称 |
331 | 用户名称正确,需要密码 |
332 | 登入时需要账号信息 |
350 | 请求的操作需要进一步的命令 |
421 | 无法提供服务,关闭控制连接 |
425 | 无法开启数据链路 |
426 | 关闭联机,终止传输 |
450 | 请求的操作未执行 |
451 | 命令终止,有本地的错误 |
452 | 未执行的命令,磁盘空间不足 |
500 | 格式错误,无法识别命令 |
501 | 参数语法错误 |
502 | 命令执行失败 |
503 | 命令顺序错误 |
504 | 命令所接的参数不正确 |
530 | 未登入 |
532 | 储存文件需要账户登入 |
550 | 未执行请求的操作 |
551 | 请求的命令终止,类型未知 |
552 | 请求的文件终止,储存位溢出 |
553 | 未执行请求的命令,名称不正确 |
评论区