vsftpd配置详解

一、配置详解

匿名用户权限控制:

  • anonymous_enable=YES   #是否启用匿名用户
  • no_anon_password=YES   #匿名用户login时不询问口令
  • anon_upload_enable=(yes/no); #控制匿名用户对文件(非目录)上传权限
  • anon_world_readable_only=(yes/no); #控制匿名用户对文件的下载权限
  • anon_mkdir_write_enable=(yes/no); #控制匿名用户对文件夹的创建权限
  • anon_other_write_enable=(yes/no); #控制匿名用户对文件和文件夹的删除和重命名
  • write_enable=YES #全局设置,是否容许写入(无论是匿名用户还是本地用户,若要启用上传权限的话,就要开启它)
  • anon_root=(none) #匿名用户主目录
  • anon_max_rate=(0) #匿名用户速度限制
  • anon_umask=(077) #匿名用户上传文件时有掩码(若想让匿名用户上传的文件能直接被匿名下载,就这设置这里为073)
  • chown_uploads=YES #所有匿名上传的文件的所属用户将会被更改成chown_username
  • chown_username=whoever #匿名上传文件所属用户名

本地用户权限控制:

  • write_enable=YES #可以上传(全局控制) 删除,重命名

  • local_umask=022 #本地用户上传文件的umask

    • 这里说一下umask
      umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限
      umask = 022 时,新建的目录 权限是755,文件的权限是 644
      umask = 077 时,新建的目录 权限是700,文件的权限时 600
      
      在unix中文件权限是三类用户,三种权限。三类用户分别是文件所有者user(u),文件所有者所在主群组group(g)、其它用户others(o),三种权限分别是起读read(r)、写write(w)、执行execute(x)。
      如果一个文件的权限如下:所有者有读写的权限,群组有读和执行权限、其它用户有读权限,可以写成:
      rw-r-xr--
      其中前三位指明了所有者的权限、中间三位指明了组权限、最后三位指明了其它用户的权限。我们用ls -l可以看到文件权限详情,列出来的是10位,最前一位如果是d表示是子目录。
      如果权限是022(八进制)
      转换为二进制为:000010010
      转换权限为:
      000010010
      rwxrwxrwx
      =
      ----w--w-
      指取消组的写权限、取消其它用户的写权限。
      屏蔽这些权限后,剩下什么权限呢?用字母表示是:
      rwxr-xr-x
      用二进制数表示是:
      111101101
      你可以对比一下
      000010010
      可以知道屏蔽前后的换算关系。
      umask 解释
  • userlist_enable=YES #限制了/etc/vsftpd/user_list文件里的用户不能访问

  • local_root #设置一个本地用户登录后进入到的目录

  • user_config_dir #设置用户的单独配置文件所在目录,用哪个帐户登陆就用哪个账号名称在目录下新建文件,实现不同用户不同权限

  • download_enable #限制用户的下载权限

  • chroot_local_user=YES/NO #是否禁止用户离开设置的根目录

  • chroot_list_enable=YES #如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录

  • chroot_list_file=/etc/vsftpd/chroot_list #指出被锁定/允许 在自家目录中的用户的列表文件

  下面一段话很形象三个属性的配置

如果设置为
chroot_local_user=YES
chroot_list_enable=YES(这行可以没有, 也可以有)
chroot_list_file=/etc/vsftpd.chroot_list
那么, 凡是加在文件vsftpd.chroot_list中的用户都是不受限止的用户,即, 可以浏览其主目录的上级目录.

如果不希望某用户能够浏览其主目录上级目录中的内容,可以如上设置,然后在文件vsftpd.chroot_list中去掉或不添加该用户即可。

也可以如下配置
chroot_local_user=NO
chroot_list_enable=YES(这行必须要有, 否则文件vsftpd.chroot_list不会起作用)
chroot_list_file=/etc/vsftpd.chroot_list
然后把所有不希望有这种浏览其主目录之上的各目录权限的用户添加到文件vsftpd.chroot_list中即可(一行一个用户名,此时, 在该文件中的用户都是不可以浏览其主目录之外的目录的)

 

 

 

 

虚拟用户设置:

  • pam_service_name=vsftpd #设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。
  • check_shell=YES #(注意:仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录 )
  • guest_enable= YES/NO #启用虚拟用户。默认值为NO。
  • guest_username=ftp #这里设置虚拟用户的宿主用户。默认值为ftp。
  • virtual_use_local_privs=YES/NO #当该参数激活(YES)时,虚拟用户与其宿主用户有相同的权限。 当此参数关闭(NO)时,虚拟用户与匿名用户有相同的权限。默认情况下此参数是关闭的(NO)
    •   
      当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
      当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。
       
      
      当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。
      
       
      
      当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,
      anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。
      
       
      
      当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
      anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。
      
       
      
      当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
      anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。
      
       
      
      当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
      anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。
      
       
      
      当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
      anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。
      virtual_use_local_privs权限详解

超时设置

  • idle_session_timeout=600 #空闲连接超时
  • data_connection_timeout=120 #数据传输超时
  • ACCEPT_TIMEOUT=60 #PASV请求超时
  • connect_timeout=60 #PROT模式连接超时

服务器功能选项:

  • xferlog_enable=YES   #开启日记功能
  • xferlog_std_format=YES   #使用标准格式
  • log_ftp_protocol=NO   #当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.
  • pasv_enable=YES   #允许使用pasv模式
  • pasv_promiscuous=NO   #关闭安全检查,小心呀.
  • port_enable=YES   #允许使用port模式
  • tcp_wrappers=YES   #开启tcp_wrappers支持
  • pam_service_name=vsftpd   #定义PAM 所使用的名称,预设为vsftpd。
  • nopriv_user=nobody   #当服务器运行于最底层时使用的用户名
  • pasv_addr_resolve=YES    # 与下面配置组合使用
  • pasv_address=(none)   #使vsftpd在pasv命令回复时跳转到指定的IP地址.

服务器性能选项:

  • ls_recurse_enable=YES #是否能使用ls -R命令以防止浪费大量的服务器资源
  • one_process_model #是否使用单进程模式
  • listen=YES #绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式
  • text_userdb_names=NO #当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。
  • use_localtime=NO   #显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果
  • use_sendfile=YES   #测试平台优化

 

信息类设置:

  • ftpd_banner=welcome to FTP .  #login时显示欢迎信息.如果设置了banner_file则此设置无效
  • dirmessage_enable=YES   #允许为目录配置显示信息,显示每个目录下面的message_file文件的内容
  • setproctitle_enable=YES   #显示会话状态信息,关!

目录下文件定义:

  • chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #定义限制/允许更改用户主目录的文件
  • userlist_file=/etc/vsftpd/vsftpd.user_list #定义限制/允许用户登录的文件
  • banner_file=/etc/vsftpd/banner #定义登录信息文件的位置
  • banned_email_file=/etc/vsftpd/banned_emails #禁止使用的匿名用户登陆时作为密码的电子邮件地址
  • xferlog_file=/var/log/vsftpd.log #日志文件位置
  • message_file=.message #目录信息文件  与上面的信息设置关联

 目录定义:

  • user_config_dir=/etc/vsftpd/userconf  #定义用户配置文件的目录
  • local_root=webdisk #此项设置每个用户登陆后其根目录为/home/username/webdisk。定义本地用户登陆的根目录,注意定义根目录可以是相对路径也可以是绝对路径。相对路径是针对用户家目录来说的.
  • anon_root=/var/ftp   #匿名用户登陆后的根目录

用户连接选项:

  • max_clients=100   #可接受的最大client数目
  • max_per_ip=5   #每个ip的最大client数目
  • connect_from_port_20=YES   #使用标准的20端口来连接ftp
  • listen_address=192.168.0.2   #绑定到某个IP,其它IP不能访问,多网卡多IP机器时有用
  • listen_port=2121   #绑定到某个端口
  • ftp_data_port=2020   #数据传输端口
  • pasv_max_port=0   #pasv连接模式时可以使用port 范围的上界,0 表示任意。默认值为0。 需要开启被动模式
  • pasv_min_port=0   #pasv连接模式时可以使用port 范围的下界,0 表示任意。默认值为0。需要开启被动模式

数据传输选项、vsftp限速:

  • anon_max_rate=51200 #匿名用户的传输比率(b/s)
  • local_max_rate=5120000 #本地用户的传输比率(b/s)

安全选项:

  • Idle_session_timeout=600 #(用户会话空闲后600秒断)
  • Data_connection_timeout=120 #(将数据连接空闲120秒断)
  • Accept_timeout=60 #(将客户端空闲1分钟后断)
  • Connect_timeout=60 #(中断1分钟后又重新连接)
  • local_max_rate=50000 #(本地用户传输率50K)
  • anon_max_rate=30000 # (匿名用户传输率30K)
  • Max_clients=200 #(FTP的最大连接数)
  • Max_per_ip=4 #(每IP的最大连接数)
  • listen_port=5555 #绑定链接端口

SSL相关选项:

  • ssl_enable=yes/no //是否启用 SSL,默认为no
  • allow_anon_ssl=yes/no //是否允许匿名用户使用SSL,默认为no
  • force_anon_logins_ssl=yes/no //匿名用户登录时是否加密,默认为no
  • force_anon_data_ssl=yes/no //匿名用户数据传输时是否加密,默认为no
  • force_local_logins_ssl=yes/no //非匿名用户登陆时是否加密,默认为yes
  • force_local_data_ssl=yes/no //非匿名用户传输数据时是否加密,默认为yes
  • rsa_cert_file=/path/to/file //rsa证书的位置
  • dsa_cert_file=/path/to/file //dsa证书的位置
  • ssl_sslv2=yes/no //是否激活sslv2加密,默认no
  • ssl_sslv3=yes/no //是否激活sslv3加密,默认no
  • ssl_tlsv1=yes/no //是否激活tls v1加密,默认yes
  • ssl_ciphers=加密方法 //默认是DES-CBC3-SHA,也可以是值HIGH,安全性更加好。相关的值,可以用man ciphers在帮组文档中找到
  • implicit_ssl=YES // 是否启用隐式ssl功能
  • listen_port=990 // 隐式ftp端口设置,如果不设置,默认还是21,但是当客户端以隐式ssl连接时,默认会使用990端口,导致连接失败!!
  • debug_ssl=YES // 输出ssl相关的日志信息

链接限制相关:

connect_timeout=60

单位是秒,在数据连接的主动式联机模式下,我们发出的连接讯号在 60 秒内得
不到客户端的响应,则不等待并强制断线。

accept_timeout=60

当用户以被动式 PASV 来进行数据传输时,如果服务器启用 passive port 并等
待 client 超过 60 秒而无回应, 那么就给他强制断线!这个设定值与
connect_timeout 类似,不过一个是管理主动联机,一个管理被动联机。

data_connection_timeout=300

如果服务器与客户端的数据联机已经成功建立 (不论主动还是被动联机),但是
可能由于线路问题导致 300 秒内还是无法顺利的完成数据的传送,那客户端的
联机就会被我们的 vsftpd 强制剔除!

idle_session_timeout=300

如果使用者在 300 秒内都没有命令动作,强制脱机!

max_clients=0

如果 vsftpd 是以 stand alone 方式启动的,那么这个设定项目可以设定同一
时间,最多有多少 client 可以同时连上 vsftpd !限制使用 FTP 的用量!

max_per_ip=0

与上面 max_clients 类似,这里是同一个 IP 同一时间可允许多少联机

ftp文件配置文件

以下均为默认配置

名称/路径 用途
/etc/vsftpd/vsftpd.conf ftp配置文件
 /usr/sbin/vsftpd ftp主程序
/etc/rc.d/init.d/vsftpd ftp启动程序
/etc/pam.d/vsftpd PAM认证文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止访问的用户来自/etc/vsftpd/ftpusers文件中的用户)
/etc/vsftpd/ftpusers 禁止使用vsftpd的用户列表文件。记录不允许访问FTP服务器的用户名单,管理员可以把一些对系统安全有威胁的用户账号记录在此文件中,以免用户从FTP登录后获得大于上传下载操作的权利,而对系统造成损坏。(注意:linux-4中此文件在/etc/目录下)
/etc/vsftpd/user_list 禁止或允许使用vsftpd的用户列表文件。这个文件中指定的用户缺省情况(即在/etc/vsftpd/vsftpd.conf中设置userlist_deny=YES)下也不能访问FTP服务器,在设置了userlist_deny=NO时,仅允许user_list中指定的用户访问FTP服务器。(注意:linux-4中此文件在/etc/目录下)
/var/ftp 匿名用户主目录;本地用户主目录为:/home/用户主目录,即登录后进入自己家目录
/var/ftp/pub 匿名用户的下载目录,此目录需赋权根chmod 1777 pub(1为特殊权限,使上载后无法删除)
/etc/logrotate.d/vsftpd.log Vsftpd的日志文件

tcp_wrappers 详解 

 # 是否使用tcp_wrappers作为主机访问控制方式。

# tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制
# 在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制
# 前者设置允许访问记录,后者设置拒绝访问记录。
# 如想限制某些主机对FTP服务器192.168.57.2的匿名访问,编缉/etc/hosts.allow文件,如在下面增加两行命令:
# vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY
# 表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.57.2的FTP服务器
# 此时FTP服务器虽可以PING通,但无法连接
tcp_wrappers=YES

指定用户的权限设置

vsftpd.user_list文件需要与vsftpd.conf文件中的配置项结合来实现对于vsftpd.user_list文件中指定用户账号的访问控制:

(1)设置禁止登录的用户账号

当vsftpd.conf配置文件中包括以下设置时,vsftpd.user_list文件中的用户账号被禁止进行FTP登录:

1
2
userlist_enable=YES
userlist_deny=YES

userlist_enable设置项设置使用vsftpd.user_list文件,userlist_deny设置为YES表示vsftpd.user_list文件用于设置禁止的用户账号。

(2)设置只允许登录的用户账号

当vsftpd.conf配置文件中包括以下设置时,只有vsftpd.user_list文件中的用户账号能够进行FTP登录:

1
2
userlist_enable=YES
userlist_deny=NO

userlist_enable设置项设置使用vsftpd.user_list文件,userlist _deny设置为NO表示vsftpd.usre_list文件用于设置只允许登录的用户账号,文件中未包括的用户账号被禁止FTP登录。

 

Userlist_enable=YES

Ftpusers中用户允许访问
User_list中用户允许访问

Userlist_enable=NO

Ftpusers中用户禁止访问
User_list中用户允许访问

Userlist_deny=YES

Ftpusers中用户禁止访问(登录时可以看到密码输入提示,但仍无法访问)
user_list 中用户禁止访问

Userlist_deny=NO

ftpusers中用户禁止访问
user_list中用户允许访问

Userlist_enable=YES 并且
Userlist_deny=YES

Ftpusers中用户禁止访问
User_list中用户禁止访问(登录时不会出现密码提示,直接被服务器拒绝)

Userlist_enable=YES 并且
Userlist_deny=NO

Ftpusers中用户禁止访问
User_list中用户允许访问
 

 网上看到个很形象的文章

 

 在配置vsftpd的过程中,虽然查了不少资料,但一直没有搞清楚userlist_deny和userlist_enable到底有什么区别。只能动手测试一下各种情况的表现,从而推测他们的功能。上表为测试结果,从表中可以看出,当userlist_enable为NO时,userlist_deny为YES或NO都登录成功了。这里推测,userlist_enable的功能是关闭和启用userlist机制,而user_deny用于是否阻止user_list文件中的用户登录,这么说有点绕。换种说法就是,只要userlist_enable开启了,就可能有用户被禁止登录,如果开启userlist_deny,那么禁用的是user_list文件中指定的用户,否则user_list文件外的用户被禁用。

链接地址:https://www.cnblogs.com/helloxk/p/3592834.html

 

二、常用功能

开启日志功能

开始vsftp记录日志。修改/etc/vsftpd/vsftpd.conf 如下:

xferlog_enable=YES     

## 如果启用该选项,系统将会维护记录服务器上传和下载情况的日志文件。默认情况下,该日志文件为 /var/log/vsftpd.log。但也可以通过配置文件中的 vsftpd_log_file 选项来指定其他文件。默认值为NO。

xferlog_std_format=YES

## 如果启用该选项,传输日志文件将以标准 xferlog 的格式书写,该格式的日志文件默认为 /var/log/xferlog,也可以通过 xferlog_file 选项对其进行设定。默认值为NO。

xferlog_file=/var/log/xferlog

 dual_log_enable=YES

## 如果启用该选项,将生成两个相似的日志文件,默认在 /var/log/xferlog 和 /var/log/vsftpd.log 目录下。前者是 wu-ftpd 类型的传输日志,可以利用标准日志工具对其进行分析;后者是Vsftpd类型的日志。

常见的日志解决方案如下:

xferlog_enable=YES 

xferlog_std_format=YES 

xferlog_file=/var/log/xferlog   

dual_log_enable=YES 

vsftpd_log_file=/var/log/vsftpd.log  
该方案将xferlog_enable设置为YES,表明FTP服务器记录上传下载的情况,而将xferlog_std_format也设置为YES,则表明将记录的上传下载情况写在xferlog_file所指定的文件中,即/var/log/xferlog文件。

同时,该方案启用dual_log_enable,表明启用了双份日志。在用xferlog文件记录服务器上传下载情况的同时,vsftpd_log_file所指定的文件,即/var/log/vsftpd.log,也将用来记录服务器的传输情况。

2、/var/log/xferlog 实例:

Sun Feb 23 21:14:36 2014 4 212.73.193.130 915950 /LilleOL_IconSport4/win_230214_51_19.jpg b _ i r sipafranch ftp 0 * c

Sun Feb 23 21:14:46 2014 5 212.73.193.130 1018969 /LilleOL_IconSport4/win_230214_51_18.jpg b _ i r sipafranch ftp 0 * c

Sun Feb 23 22:07:44 2014 1 212.73.193.130 189 /Lille_IconSP/message_46263.txt b _ i r sipafranch ftp 0 * c

Sun Feb 23 22:07:49 2014 4 212.73.193.130 891359 /Lille_IconSP/win_230214_84_80.jpg b _ i r sipafranch ftp 0 * c

Sun Feb 23 22:07:54 2014 4 212.73.193.130 874509 /Lille_IconSP/win_230214_52_15.jpg b _ i r sipafranch ftp 0 * c

Sun Feb 23 22:07:59 2014 4 212.73.193.130 862666 /Lille_IconSP/win_230214_52_12.jpg b _ i r sipafranch ftp 0 * c

Sun Feb 23 22:08:04 2014 4 212.73.193.130 726242 /Lille_IconSP/win_230214_52_13.jpg b _ i r sipafranch ftp 0 * c

Sun Feb 23 22:08:09 2014 4 212.73.193.130 833576 /Lille_IconSP/win_230214_84_77.jpg b _ i r sipafranch ftp 0 * c

Sun Feb 23 22:08:15 2014 5 212.73.193.130 1009117 /Lille_IconSP/win_230214_84_78.jpg b _ i r sipafranch ftp 0 * c

Sun Feb 23 22:08:20 2014 4 212.73.193.130 507537 /Lille_IconSP/win_230214_84_79.jpg b _ i r sipafranch ftp 0 * c

Sun Feb 23 22:08:26 2014 6 212.73.193.130 1023575 /Lille_IconSP/win_230214_52_11.jpg b _ i r sipafranch ftp 0 * c

3、每列含义:

Sun Feb 23 22:08:26 2014|6|212.73.193.130|1023575| /Lille_IconSP/win_230214_52_11.jpg|b|_|i|r|sipafranch|ftp|0|*|c

记录含义

Sun Feb 23 22:08:26 2014FTP传输时间

6传输文件所用时间。单位/212.73.193.130ftp客户端名称/IP

1023575传输文件大小。单位/Byte

/Lille_IconSP/win_230214_52_11.jpg传输文件名,包含路径

b传输方式: a以ASCII方式传输;b以二进制(binary)方式传输;

_特殊处理标志位:"_"不做任何处理;"C"文件是压缩格式;"U"文件非压缩格式;"T"文件是tar格式;

i传输方向:"i"上传;"o"下载;

r用户访问模式:“a”匿名用户;"g"访客模式;"r"系统中用户;

sipafranch登录用户名

ftp服务名称,一般都是ftp

0认证方式:"0"无;"1"RFC931认证;

*认证用户id,"*"表示无法获取id

c完成状态:"i"传输未完成;"c"传输已完成
日志记录含义

三、其他配置

日志数据分析

/var/log/xferlog日志文件中数据的分析和参数说明

 

 

记录数据
 
参数名称
 
参数说明
 
Thu Sep 6 09:07:48 2007
 
当前时间
 
当前服务器本地时间,格式为: 
DDD MMM dd hh:mm:ss YYY
 
7
 
传输时间
 
传送文件所用时间,单位为秒
 
192.168.57.1
 
远程主机名称/IP
 
远程主机名称/IP
 
4323279
 
文件大小
 
传送文件的大小,单位为byte
 
/home/student/phpMyadmin-
2.11.0-all-languages.tar.gz
 
文件名
 
传输文件名,包括路径
 
b
 
传输类型
 
传输方式的类型,包括两种:
a以ASCII传输 b以二进制文件传输
 

 
特殊处理标志
 
特殊处理的标志位,可能的值包括:
_ 不做任何特殊处理
C 文件是压缩格式
U 文件是非压缩格式
T 文件是tar格式
 
i
 
传输方向
 
文件传输方向,包括两种:
o 从FTP服务器向客户端传输
i 从客户端向FTP服务器传输
 
r
 
访问模式
 
用户访问模式,包括:
a 匿名用户
g 来宾用户
r 真实用户,即系统中的用户
 
student
 
用户名
 
用户名称
 
ftp
 
服务名
 
所使用的服务名称,一般为FTP
 
0
 
认证方式
 
认证方式,包括:
0 无
1 RFC931认证
 
*
 
认证用户id
 
认证用户的id,如果使用*,则表示无法获得该id
 
c
 
完成状态
 
传输的状态:
c 表示传输已完成
i 表示传输示完成

 常见FTP命令及其功能

 

FTP命令
 
功能
 
FTP命令
 
功能
 

ls

显示服务器上的目录
 
ls [remote-dir][local-file]
 
显示远程目录remote-dir,并存入本地文件local-file
 

get remote-file [local-file]

从服务器下载指定文件到客户端 
 
mget remote-files
 
下载多个远程文件(mget命令允许用通配符下载多个文件)
 

put local-file [remote-file]

从客户端上传指定文件到服务器
 
mput local-file
 
将多个文件上传至远程主机(mput命令允许用通配符上传多个文件)
 

open

连接FTP服务器
 
mdelete [remote-file]
 
删除远程主机文件
 

close

中断与远程服务器的ftp会话(与open对应)
 
mkdir dir-name
 
在远程主机中创建目录
 

open host[port]

建立指定的ftp服务器连接,可指定连接端口
 
newer file-name
 
如果远程主机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件
 

cd directory

改变服务器的工作目录
 
rename [from][to]
 
更改远程主机的文件名
 

lcd directory

在客户端上(本地)改变工作目录
 
pwd
 
显示远程主机的当前工作目录
 

bye

退出FTP命令状态
 
quit
 
同bye,退出ftp会话
 

ascii

设置文件传输方式为ASCII模式
 
reget remote-file [local-file]
 
类似于get,但若local-file存在,则从上次传输中断处续传
 

binary

设置文件传输方式为二进制模式
 
rhelp [cmd-name]
 
请求获得远程主机的帮助
 

![cmd [args]]

在本地主机中交互shell后退回到ftp环境,如:!ls *.zip
 
rstatus [file-name]
 
若未指定文件名,则显示远程主机的状态,否则显示文件状态
 

accout [password]

提供登录远程系统成功后访问系统资源所需的密码
 
hash
 
每传输1024字节,显示一个hash符号(#)
 

append local-file [remote-file]

将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名
 
restart marker
 
从指定的标志marker处,重新开始get或put,如restart 130
 

bye

退出ftp会话过程
 
rmdir dir-name
 
删除远程主机目录
 

case

在使用mget命令时,将远程主机文件名中的大写转为小写字母
 
size file-name
 
显示远程主机文件大小,如:
size idle 7200
 

cd remote-dir

进入远程主机目录
 
status
 
显示当前ftp状态
 

cdup

进入远程主机目录的父目录
 
system
 
显示远程主机的操作系统
 

delete remote-file

删除远程主机文件
 
user user-name [password][account]
 
向远程主机表明自己的身份,需要密码时,必须输入密码,如:user anonymous my@email
 

dir [remote-dir][local-file]

显示远程主机目录,并将结果存入本地文件
 
help [cmd]
 
显示ftp内部命令cmd的帮助信息,如help get

 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 未执行请求的的命令,名称不正确。

 

主动模式与被动模式 

主动模式
Port_enable=YES               开启主动模式
Connect_from_port_20=YES      当主动模式开启的时候 是否启用默认的20端口监听
Ftp_date_port=%portnumber%    上一选项使用NO参数是 指定数据传输端口
被动模式
PASV_enable=YES   开启被动模式
PASV_min_port=%number% 被动模式最低端口
PASV_max_port=%number% 被动模式最高端口

 在被动模式,服务器做了NAT,例如云主机,这时候我们用特定的IP访问机器,其实还转了一层。FTP客户端访问机器可能会没响应。具体情况为登录成功,但是list目录和文件的时候卡住。

 

这时候我们用lsof -i:21

vsftpd   22411   nobody    0u  IPv4  68905      0t0  TCP 10.140.41.65:ftp->10.10.10.98:43380 (ESTABLISHED)
vsftpd   22411   nobody    1u  IPv4  68905      0t0  TCP 10.140.41.65:ftp->10.10.10.98:43380 (ESTABLISHED)

这时候可以看到机器的真正IP。

我们需要设置

pasv_addr_resolve=yes
pasv_address=本机ip【就是我们能访问的外网IP】

这里补个图,感觉很形象

 

 

 

 

 

图片地址:https://www.jianshu.com/p/cd5f4f4a0d5d

 

 

 

IPV4与IPV6配置相关

vsftpd的配置文件/etc/vsftpd.conf把中"listen=YES"和"listen_ipv6=YES"是不能同时开启。 默认配置下"listen=YES"开启,"listen_ipv6=YES"被注释掉了,此时vsftpd只能监听到IPv4的FTP请求,不能监听到IPv6的FTP请求。怎样让vsftpd同时支持IPv4和IPv6哪?经过测试发现只要把'/etc/vsftpd.conf'配置文件中listen=YES"注释掉,,"listen_ipv6=YES"开启,保存配置文件。

常用配置相关

listen_port=5021                         ;命令通道端口,默认为21

listen_data_port=5020                     ;数据通道端口,默认为20

pasv_enable=YES                        ;允许被动模式

pasv_min_port=10000                     ;被动模式使用端口范围

pasv_max_port=10010

local_max_rate=200000                    ;用户宽带限制

chroot_local_user=YES                    ;禁用户离开主目录
pasv_addr_resolve=YES listen_address
=192.168.0.21 ;让他监听ip:192.168.0.21

 

四、遇到问题汇总

1、登入ftp:500 OOPS: vsf_sysutil_bind, maximum number of attempts to find a listening port exceeded

这是因为端口号占用,我这边是因为被动模式分配的端口太少,都被占用了,所以分配不到端口号了

修改/etc/vsftpd/vsftpd.conf,增加端口
       pasv_min_port=60000
       pasv_max_port=60100

2、**425 Security: Bad IP connecting.解决方法**

登录是成功的,ls一直连接超时,wget可以显示 ip地址更改。

注:可以单用户配置ip绑定

问题分析:
FTP客户端软件连接VSftpd服务报此错误,大概原因是在连接中变换了IP地址。

问题解决:
1.#vim /etc/vsftpd/vsftpd.conf
2.添加:pasv_promiscuous=YES
3.保存后退出
4.重启vsftpd #service vsftpd restart

还可以使用以下组合,进行ip绑定

pasv_addr_resolve=YES
pasv_address=本机ip

 

参考文章:https://blog.csdn.net/qq_15127715/article/details/69055099

 

 

 

 

附上一个最终版的配置

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
xferlog_std_format=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
chroot_local_user=YES
listen=YES

pam_service_name=vsftpd
userlist_enable=YES




use_localtime=YES
listen_port=2121
idle_session_timeout=300
guest_enable=YES
guest_username=vsftpd
user_config_dir=/etc/vsftpd/uconf
data_connection_timeout=100
virtual_use_local_privs=YES
pasv_enable=YES

pasv_min_port=60000
pasv_max_port=61000
accept_timeout=5
connect_timeout=100
allow_writeable_chroot=YES


pasv_promiscuous=YES
pasv_addr_resolve=YES
pasv_address=121.41.39.238


xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/data/logs/vsftp/xfer.log
dual_log_enable=YES
vsftpd_log_file=/data/logs/vsftp/vsftp.log
配置文件

 

参考文件:
https://www.cnblogs.com/idlo/p/10825094.html

umask的含义

https://www.xuebuyuan.com/404886.html  (virtual_use_local_privs 详解)

https://blog.csdn.net/hajistark/article/details/82954777  内外网访问配置

https://blog.csdn.net/weixin_33851604/article/details/89579494  日志参考

https://www.jb51.net/article/94223.htm  

https://www.cnblogs.com/helloxk/p/3592834.html 

https://blog.csdn.net/weixin_34384915/article/details/94629922

https://blog.csdn.net/hawht/article/details/22684865

 

posted @ 2020-09-29 21:34  苦心明  阅读(15928)  评论(2编辑  收藏  举报