热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vsftpdforUbuntu配置详解

简介:vsftpd是一种在GPL许可下开放源代码的FTP服务器,用于多种UNIX系统和Linux系统。Vsftpd也称为VerySecureFTPDaemon,它是一种安全、快速、稳定的FTP服务器,能够高效地处理大量的并发连接。特点:提供安全的体系结构,根据任务的最低特权需求单独

简介:

      vsftpd 是一种在GPL许可下开放源代码的FTP服务器,用于多种UNIX系统和Linux系统。Vsftpd也称为Very Secure FTP Daemon,它是一种安全、快速、稳定的FTP服务器,能够高效地处理大量的并发连接。

特点:

      提供安全的体系结构,根据任务的最低特权需求单独执行每个任务。

      支持虚拟IP配置,可以在提供一个IP地址的情况下,在域中用该地址建立多个FTP服务器。

      允许配置并使用虚拟用户,从而与系统用户账户分离。

      支持TCP封装。

      允许配置匿名服务器,用户可以在不需要身份验证的情况下上传和下载文件。

      性能稳定,可以处理大量的并发连接。

      可以配置为独立的服务器。

      vsftpd服务器支持带宽控制。 

文件布局:

/etc/vsftpd.conf 主配置文件 
/usr/sbin/vsftpd Vsftpd的主程序
/etc/init.d/vsftpd 启动脚本 
/etc/pam.d/vsftpd PAM认证文件 

安装:

# apt-get install vsftpd

创建生成口令文件:

# mkdir /etc/vsftpd
# gedit /etc/vsftpd/vsftpd_login.txt
# db_load -T -t hash -f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db
提示 db_load: command not found 说明没有db_util

#apt-get install db4.6_util
#db4.6_load -T -t hash -f /etc/vsftpd/vsftpd_login.txt /etc/vsftpd/vsftpd_login.db

当提示以下信息时应当注意用户密码文件 vsftpd_login格式 是否编写错误,网络上多是一行用户名一行密码。并没有讲到如果文档在编辑器中刚好偶数行的,最后一个帐号无法登录;在最后一行插入一个回车,奇数行,则可以(不知道其他人有没有碰到)。
db4.6_load: unexpected end of input data or key/data pair
db4.6_load: odd number of key/data pairs

口令文件权限
chmod 600 /etc/vsftpd/vsftpd_login.db

在/etc/pam.d/vsftpd文件里加入以下两行。
可选用 find / -name pam_userdb.so db 确定文件所在目录

auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login.db
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login.db

这里有一个注意点就是pam在查找vsftpd_login.db文件时,会自动在设置的db文件名vsftpd_login.db后增加一个“.db”后缀,于是,根据配置文件,pam实际上查找的是vsftpd_login.db.db文件,所以就找不到这个文件了。所以应改为:

auth required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
这是我在Ubuntu11.04中碰到的,不知道red是不是也这样。

配制vsftpd.conf文件:
# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
#
# Run standalone?  vsftpd can run either from an inetd or as a standalone
# daemon started from an initscript.
listen=YES
##
## listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式)
##
#
#
# Run standalone with IPv6?
# Like the listen parameter, except vsftpd will listen on an IPv6 socket
# instead of an IPv4 one. This parameter and the listen parameter are mutually
# exclusive.
#listen_ipv6=YES
#
# Allow anonymous FTP? (Disabled by default)
anonymous_enable=NO
##
## 匿名用户登录
##
#
#
# Uncomment this to allow local users to log in.
local_enable=YES
##
## 使用PAM方式此处必须为YES
##
#
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
##
## 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
##
# 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
##
## 上传后文件及文件夹的属性
##
#
#
anon_world_readable_Only=NO
##
##
##
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
anon_upload_enable=YES
##
## 是否允许匿名用户上传文件,须将全局的write_enable=YES。默认为YES
##
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
anon_mkdir_write_enable=YES
##
## 是否允许匿名用户创建新文件夹
##
#
anon_other_write_enable=YES
##
## 是否允许匿名删除和重命名文件
##
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
##
##
##
#
# If enabled, vsftpd will display directory listings with the time
# in  your  local  time  zone.  The default is to display GMT. The
# times returned by the MDTM FTP command are also affected by this
# option.
use_localtime=YES
##
##
##
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
##
##
##
#
############### 主动/被动 传输模式 #################
#port_enable=YES
##
## 声明允许主动模式
##
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
##
## 主动模式以20端口传输 与 port_enable=yes 同时设置
##
#
pasv_enable=YES
##
## 声明允许被动模式
##
#
pasv_min_port=0
##
## 服务器开放的被动连接的端口限制 上界,0表示任意。默认值为0
##
#
pasv_max_port=0
##
## 服务器开放的被动连接的端口限制 下界,0表示任意。默认值为0
##
#
#
listen_port=21
##
## 默认FTP服务器端口号是21,出于安全目的,建议修改默认端口号;
##
#
#ftp_data_port=20
##
##
##
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
##
## 设定是否允许改变上传文件的属主,与下面一个设定项配合使用
## 注意,不推荐使用root用户上传文件
##
#
#chown_username=whoever
## 设置想要改变的上传文件的属主,如果需要,则输入一个系统用户名
## 可以把上传的文件都改成root属主。whoever:任何人
##
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
xferlog_file=/var/log/vsftpd.log
##
## 日志地址
##
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=NO
##
## 是否启用标准格式记录日志
##
#
log_ftp_protocol=YES
##
## 记录登录信息,该项启用 xferlog_std_format=NO 有效
##
#
# You may change the default value for timing out an idle session.
idle_session_timeout=600
##
##
##
#
# You may change the default value for timing out a data connection.
data_connection_timeout=120
##
##
##
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
##
##
##
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
##
##
##
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
##
##
##
#ascii_download_enable=YES
##
##
##
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# You may restrict local users to their home directories.  See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
chroot_local_user=YES
##
##
##
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
# ls_recurse_enable=NO
##
## 是否能使用ls -R命令以防止浪费大量的服务器资源
##
#
# one_process_model=NO
##
## 是否使用单进程模式
##
#
# Debian customization
#
# Some of vsftpd's settings don't fit the Debian filesystem layout by
# default.  These settings are more Debian-friendly.
#
# This option should be the name of a directory which is empty.  Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
secure_chroot_dir=/var/run/vsftpd/empty
##
##
##
#
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
##
##
##
#
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
##
##
##
#
virtual_use_local_privs=YES
##
##当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
##当virtual_use_local_privs=NO 时,虚拟用户和匿名用户有相同的权限,默认是NO。
##
#
tcp_wrappers=YES
##
## 支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
##
#
guest_enable=YES
##
## 采用虚拟用户形式
##
#
#
guest_username=ftpsite
#ftpsite
#
##
## 采用虚拟用户形式
##
#
connect_timeout=60
##
##
##
#
accept_timeout=60
##
##
##
#
max_clients=100
##
## max_clients 用于设置FTP服务器所允许的最大客户端连接数,值为0时表示不限制。
## 例如max_client=100表示FTP服务器的所有客户端最大连接数不超过100个。
## 可以防止因客户连接数过多而导致服务器内存占满,死机。
## 当客户机数超过服务器所设置的最大值时,客户端会出现:421 There are too many connected users,please try later.
#
max_per_ip=10
# max_per_ip 用于设置对于同一IP地址允许的最大客户端连接数,值为0时表示不限制。
# 例如max_per_ip=5表示同一IP地址的FTP客户机与FTP服务器建立的最大连接数不超过5个。
# 可以防止一些人使用多线程下载资源,占用服务器的贷款、资源。
# 这样当客户机使用的线程数超过服务器的最大限制时,将出现:There are too many connections from your internet address.
#
anon_max_rate=0
##
## local_max_rate 用于设置本地用户的最大传输速率,单位为B/s,值为0时表示不限制。例如local_max_rate=500000表示FTP服务器的本地用户最大传输速率设置为500KB/s.
##
#
local_max_rate=0
##
## anon_max_rate 用于设置匿名用户的最大传输速率,单位为B/s,值为0表示不限制。例如ano_max_rate=200000,表示FTP服务器的匿名用户最大传输速率设置为200KB/s.
##
#
nopriv_user=nobody

userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd.user_list
##
## 这里的 userlist_enable=YES 和 userlist_deny=NO 组合,只允许vsftpd.user_list文件中的用户账号能够进行FTP登录;
## 这里的 userlist_enable=YES 和 userlist_deny=YES 组合,禁止vsftpd.user_list文件中的用户账号能够进行FTP登录(登录时不会出现密码提示,直接被服务器拒绝);
##
user_config_dir=/etc/vsftpd_user_conf
##
## user_config_dir 用户权限管理信息文件地址目录
##
#setproctitle_enable=YES
#session_suport=YES
##
##
##
# CONFIG END

用户权限:
anon_umask=022 #目录及文件上传后的权限属性
write_enable=YES #开放的写权限
anon_world_readable_Only=NO #开放的下载权限
anon_upload_enable=YES #开放的上传权限
anon_mkdir_write_enable=YES #开放创建目录的权限
anon_other_write_enable=YES #开放删除和重命名的权限

重启服务:

service vsftpd restart

常见错误:
### ====================================================
C:\Users\Administrator>FTP
ftp> OPEN 192.168.0.1
连接到 192.168.0.1。
220 (vsFTPd 2.3.2)
用户(192.168.0.1:(none)): admin
331 Please specify the password.
密码:
230 Login successful.
ftp> ls
550 Permission denied.
425 Use PORT or PASV first.
ftp> quote PASV
227 Entering Passive Mode (192.168.0.1,214,235).
ftp> ls
425 Failed to establish connection.
### ====================================================

500 OOPS: vsftpd: cannot locate user specified in 'guest_username':root2
500 OOPS: cannot read user list file:/etc/vsftpd.user_list
500 OOPS: priv_sock_get_cmd
创建/etc/vsftpd.user_list用户列表


530 Login incorrect.
1,这里有一个注意点就是pam在查找vsftpd_login.db文件时,会自动在设置的db文件名vsftpd_login.db后增加一个“.db”后缀,于是,根据配置文件,pam实际上查找的是vsftpd_login.db.db文件,所以就找不到这个文件了。
2,userlist_enable 和 userlist_deny 使用方式错误而使用户无法登录的情况也有发生。



FTP数字代码的意义


110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路端口开启,准备传送。
150 Here comes the directory listing.FY 是目录列表。
150 文件状态正常,开启数据连接端口。
200 PORT command successful. Consider using PASV
200 命令执行成功。FY 考虑使用被动模式。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接端口关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 Entering Passive Mode
227 进入passive mode。FY 227进入被动模式
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 Failed to establish connection.
425 无法开启数据链路。FY 没有建立连接。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。 
553 未执行请求的的命令,名称不正确。

查看VSFTPD情况
ps ax | grep vsftpd | grep -v grep


推荐阅读
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 本文介绍了一个基于 Java SpringMVC 和 SSM 框架的综合系统,涵盖了操作日志记录、文件管理、头像编辑、权限控制、以及多种技术集成如 Shiro、Redis 等,旨在提供一个高效且功能丰富的开发平台。 ... [详细]
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • 2012年7月30日,语言岛团队宣布其智能记单词软件V0.3.4.554版本正式开源。该版本不仅支持跨平台使用,还引入了多项创新功能,旨在帮助用户更高效地记忆单词。 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • 本文详细介绍了如何在Ubuntu的Enlightenment (E17) 桌面环境中管理和优化桌面图标及根菜单。通过本文,您将了解这些功能的作用及其配置方法。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文详细介绍了 Linux 系统中用户、组和文件权限的设置方法,包括基本权限(读、写、执行)、特殊权限(SUID、SGID、Sticky Bit)以及相关配置文件的使用。 ... [详细]
  • MySQL Debug 模式的实现与应用
    本文详细介绍了如何启用和使用 MySQL 的调试模式,包括编译选项、环境变量配置以及调试信息的解析。通过实际案例展示了如何利用调试模式解决客户端无法连接服务器的问题。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
author-avatar
Icy芸土_644
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有