1、安装vsftpd文件服务器

sudo apt-get install vsftpd

2、配置文件:/etc/vsftpd/vsftpd.conf 

  严格来说,整个 vsftpd 的配置文件就只有这个档案!这个档案的设定是以 bash 的变量设定相同的方式来处理的, 也就是『参数=设定值』来设定的,注意, 等号两边不能有空白喔!至于详细的 vsftpd.conf 可以使用 『 man 5 vsftpd.conf 』来详查。

 (1)与服务器环境较相关的设定值

connect_from_port_20=YES (NO)
#记得在前一小节提到的主动式联机使用的 FTP 服务器的 port 吗?这就是 ftp-data 的埠#号; listen_port=21
#vsftpd 使用的命令通道 port,如果你想要使用非正规的埠号,在这个设定项目修改吧! #不过你必须要知道,这个设定值仅适合以 stand alone 的方式来启动喔!(对于 super #daemon 无效) dirmessage_enable=YES (NO)
#当用户进入某个目录时,会显示该目录需要注意的内容,显示的档案默认是 .message #,你可以使用底下的设定项目来修订! message_file=.message
#当 dirmessage_enable=YES 时,可以设定这个项目来让 vsftpd 寻找该档案来显示
#讯息! listen=YES (NO)
#若设定为 YES 表示 vsftpd 是以 standalone 的方式来启动的!预设是 NO 呦!所以我#们的 CentOS 将它改为 YES 哩!这样才能使用 stand alone 的方式来唤醒。 pasv_enable=YES (NO)
#支持数据流的被动式联机模式(passive mode),一定要设定为 YES 的啦! use_localtime=YES (NO)
#是否使用本地时间?vsftpd 预设使用 GMT 时间(格林威治),所以预设的 FTP 内的档案#日期会比台湾晚 8 小时,建议修改设定为 YES 吧! write_enable=YES (NO)
#如果你允许用户上传数据时,就要启动这个设定值; 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 同一时间可允许多少联机? pasv_min_port=0, pasv_max_port=0
#上面两个是与 passive mode 使用的 port number 有关,如果你想要使用 65400 到 #65410 这 11 个 port 来进行被动式联机模式的连接,可以这样设定 pasv_max_port=65410 以及 pasv_min_port=65400。
# 如果是 0 的话,表示随机取用而不限制。 ftpd_banner=一些文字说明
#当使用者联机进入到 vsftpd 时,在 FTP 客户端软件上头会显示的说明文字。不过,这
#个设定值数据比较少啦! 建议你可以使用底下的 banner_file 设定值来取代这个项目; banner_file=/path/file
#这个项目可以指定某个纯文本档作为使用者登入 vsftpd 服务器时所显示的欢迎字眼。同#时,也能够放置一些让使用者知道本 FTP 服务器的目录架构!

(2)与实体用户较相关的设定值

guest_enable=YES (NO)
若这个值设定为 YES 时,那么任何实体账号,均会被假设成为 guest 喔 (所以预设是不开放的)! 至于访客在 vsftpd 当中,预设会取得 ftp 这个使用者的相关权限。但可以透过 guest_username 来修改。 guest_username=ftp
在 guest_enable=YES 时才会生效,指定访客的身份而已。 local_enable=YES (NO)
这个设定值必须要为 YES 时,在 /etc/passwd 内的账号才能以实体用户的方式登入我们的 vsftpd 服务器喔! local_max_rate=0
#实体用户的传输速度限制,单位为 bytes/second, 0 为不限制。 chroot_local_user=YES (NO)
#在预设的情况下,是否要将使用者限制在自己的家目录之内(chroot)?如果是 YES 代表#用户默认就会被 chroot,如果是 NO, 则预设是没有 chroot。不过,实际还是需要底
#下的两个参数互相参考才行。为了安全性,这里应该要设定成 YES 才好。 chroot_list_enable=YES (NO)
#是否启用 chroot 写入列表的功能?与底下的 chroot_list_flie 有关!这个项目得要开
#启,否则底下的列表档案会无效。 chroot_list_file=/etc/vsftpd.chroot_list
#如果 chroot_list_enable=YES 那么就可以设定这个项目了!这个项目与 #chroot_local_user 有关,详细的设定状态请参考 21.2.6 chroot 的说明。 userlist_enable=YES (NO)
#是否藉助 vsftpd 的抵挡机制来处理某些不受欢迎的账号,与底下的参数设定有关; userlist_deny=YES (NO)
#当 userlist_enable=YES 时才会生效的设定,若此设定值为 YES 时,则当使用者账号#被列入到某个档案时, 在该档案内的使用者将无法登入 vsftpd 服务器!该档案文件名与#下列设定项目有关。 userlist_file=/etc/vsftpd/user_list
#若上面 userlist_deny=YES 时,则这个档案就有用处了!在这个档案内的账号都无法使#用 vsftpd 喔!

(3)匿名者登入的设定值

anonymous_enable=YES (NO)
设定为允许 anonymous 登入我们的 vsftpd 主机!预设是 YES ,底下的所有相关设定都需要将这个设定为 anonymous_enable=YES 之后才会生效! anon_world_readable_only=YES (NO)
仅允许 anonymous 具有下载可读档案的权限,预设是 YES。 anon_other_write_enable=YES (NO)
是否允许 anonymous 具有除了写入之外的权限?包括删除与改写服务器上的档案及档名等权限。预设当然是 NO!如果要设定为 YES,那么开放给 anonymous 写入的目录亦需要调整权限,让 vsftpd 的 PID 拥有者可以写入才行! anon_mkdir_write_enable=YES (NO)
是否让 anonymous 具有建立目录的权限?默认值是 NO!如果要设定为 YES, 那么 anony_other_write_enable 必须设定为 YES ! anon_upload_enable=YES (NO)
#是否让 anonymous 具有上传数据的功能,默认是 NO,如果要设定为 YES ,则 #anon_other_write_enable=YES 必须设定。 deny_email_enable=YES (NO)
#将某些特殊的 email address 抵挡住,不让那些 anonymous 登入!如果以 #anonymous 登入服务器时,不是会要求输入密码吗?密码不是要你输入你的 email #address 吗?如果你很讨厌某些 email address, 就可以使用这个设定来将他取消登
#入的权限!需与下个设定项目配合: banned_email_file=/etc/vsftpd/banned_emails
#如果 deny_email_enable=YES 时,可以利用这个设定项目来规定哪个 email #address 不可登入我们的 vsftpd 喔!在上面设定的档案内,一行输入一个 email #address 即可! no_anon_password=YES (NO)
#当设定为 YES 时,表示 anonymous 将会略过密码检验步骤,而直接进入 vsftpd 服务#器内喔!所以一般预设都是 NO 的!(登入时会检查输入的 emai) anon_max_rate=0
#这个设定值后面接的数值单位为 bytes/秒 ,限制 anonymous 的传输速度,如果是 0 #则不限制(由最大带宽所限制),如果你想让 anonymous 仅有 30 KB/s 的速度,可以设#定『anon_max_rate=30000』 anon_umask=077
#限制 anonymous 上传档案的权限!如果是 077 则 anonymous 传送过来的档案权限#会是 -rw------- 喔!

(4)关于系统安全方面的一些设定值 

ascii_download_enable=YES (NO)
#如果设定为 YES ,那么 client 就优先 (预设) 使用 ASCII 格式下载文件。 ascii_upload_enable=YES (NO)
#与上一个设定类似的,只是这个设定针对上传而言!预设是 NO one_process_model=YES (NO)
#这个设定项目比较危险一点~当设定为 YES 时,表示每个建立的联机都会拥有一支 #process 在负责,可以增加 vsftpd 的效能。不过, 除非你的系统比较安全,而且硬件#配备比较高,否则容易耗尽系统资源喔!一般建议设定为 NO 的啦! tcp_wrappers=YES (NO)
#当然我们都习惯支持 TCP Wrappers 的啦!所以设定为 YES 吧! xferlog_enable=YES (NO)
#当设定为 YES 时,使用者上传与下载文件都会被纪录起来。记录的档案与下一个设定项
#目有关: xferlog_file=/var/log/xferlog
#如果上一个 xferlog_enable=YES 的话,这里就可以设定了!这个是登录档的档名啦! xferlog_std_format=YES (NO)
#是否设定为 wu ftp 相同的登录档格式?预设为 NO ,因为登录档会比较容易读! 不过,如果你有使用 wu ftp 登录文件的分析软件,这里才需要设定为 YES dual_log_enable=YES, vsftpd_log_file=/var/log/vsftpd.log
#除了 /var/log/xferlog 的 wu-ftp 格式登录档之外,还可以具有 vsftpd 的独特登录档#格式喔!如果你的 FTP 服务器并不是很忙碌, 或许订出两个登录档的撰写
#(/var/log/{vsftpd.log,xferlog) 是不错的。 nopriv_user=nobody
#我们的 vsftpd 预设以 nobody 作为此一服务执行者的权限。因为 nobody 的权限相当#的低,因此即使被入侵,入侵者仅能取得 nobody 的权限喔! pam_service_name=vsftpd
#这个是 pam 模块的名称,我们放置在 /etc/pam.d/vsftpd 即是这个咚咚! 

3、/etc/pam.d/vsftpd

  这个是 vsftpd 使用 PAM 模块时的相关配置文件。主要用来作为身份认证之用,还有一些用户身份的抵挡功能, 也是透过这个档案来达成的。你可以察看一下该档案:

   

4、启动vsftpd服务器并查看21端口的状态

    

5、vsftpd 默认值

    

  • 你可以使用 anonymous 这个匿名账号或其他实体账号 (/etc/passwd) 登入;
  • anonymous 的家目录在 /var/ftp ,且无上传权限,亦已经被 chroot 了;
  • 实体用户的家目录参考 /etc/passwd,并没有被 chroot,可前往任何有权限可进入的目录中;
  • 任何于 /etc/vsftpd/ftpusers 内存在的账号均无法使用 vsftpd (PAM);
  • 可利用 /etc/hosts.{allow|deny} 来作为基础防火墙;
  • 当客户端有任何上传/下载信息时,该信息会被纪录到 /var/log/xferlog 中;
  • 主动式联机的埠口为 port 20;
  • 使用格林威治时间 (GMT)。

·     

建立欢迎讯息

    登入者可查阅咱们系统管理员所下达的『公告』事项时,可以使用 banner_file=/etc/vsftpd/welcome.txt 这个参数,可以编辑这个档案建立欢迎画面(如果没有这个文件,可以手动创建)!

    

    

6、user_list文件:建立严格的可使用 FTP 的账号列表

  将下面的参数必须设置为NO,这样新用户登陆ftp服务器时,都要将用户名加入user_list文件中才能登陆。

  如果设置为YES的话,则默认每个用户都可以登陆ftp服务器。

    

  如果要添加FTP用户,必须将用户名加入到/etc/vsftpd/user_list文件中,否则不能登陆

     

    

7、对使用者 (包括未来新增用户) 进行 chroot

  chroot功能是服务器会默认实体用户只能在自己的home目录下操作,不能进入其他目录操作,这样保证了服务器的安全性。

  如果想让客户访问除家目录外的其他目录则可以在/etc/vsftpd.chroot_list加入用户名。

    

  此时vsftpd.chroot_list没有user1这个目录,user登陆却出现失败。

    这是 从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。

  此时要在vsftpd.conf中添加这一项,

    

  之后restart vsftpd服务器,然后重新用user1登陆

    

  此时,不能切换目录。此时创建一个目录haha,我们发现这个目录在user1的用户家目录下:

    

    

  注意:注释掉下面一项,不然的话,新加的用户登陆ftp之后是在share的目录下的

    

8、限制实体用户的总下载流量 (带宽)

  你可不希望带宽被使用者上传/下载所耗尽,而影响咱们服务器的其他正常服务吧?所以限制使用者的传输带宽有时也是需要的! 假设『我要限制所有使用者的总传输带宽最大可达 1 MBytes/秒 』时,你可以这样做即可:

  

上述的单位是 Bytes/秒,所以你可以依据你自己的网络环境来限制你的带宽!这样就给他限制好啰!有够容易吧! 那怎么测试啊?很简单,用本机测试最准!你可以用 dd 做出一个 10MB 的档案放在 student 的家目录下,然后用 root 下达 ftp localhost,并输入 student 的帐密,接下来给他 get 这个新的档案,就能够在最终知道下载的速度啦!

9、限制最大同时上线人数与同一 IP 的 FTP 联机数

  如果你有限制最大使用带宽的话,那么你可能还需要限制最大在线人数才行!举例来说,你希望最多只有 10 个人同时使用你的 FTP 的话,并且每个 IP 来源最多只能建立一条 FTP 的联机时,那你可以这样做:

  

这样就搞定了!让你的 FTP 不会人满为患吶!

10、常见问题与解决之道

  • 如果在 Client 端上面发现无法联机成功,请检查:
    1. iptables 防火墙的规则当中,是否开放了 client 端的 port 21 登入?
    2. 在 /etc/hosts.deny 当中,是否将 client 的登入权限挡住了?
    3. 在 /etc/xinetd.d/vsftpd 当中,是否设定错误,导致 client 的登入权限被取消了?
  • 如果 Client 已经连上 vsftpd 服务器,但是却显示『 XXX file can't be opend 』的字样,请检查:
    1. 最主要的原因还是在于在 vsftpd.conf 当中设定了检查某个档案,但是你却没有将该档案设定起来, 所以,请检查 vsftpd.conf 里面所有设定的档案档名,使用 touch 这个指令将该档案建立起来即可!
  • 如果 Client 已经连上 vsftpd 服务器,却无法使用某个账号登入,请检查:
    1. 在 vsftpd.conf 里面是否设定了使用 pam 模块来检验账号,以及利用 userlist_file 来管理账号?
    2. 请检查 /etc/vsftpd/ftpusers 以及 /etc/vsftpd/user_list 档案内是否将该账号写入了?
  • 如果 Client 无法上传档案,该如何是好?
    1. 最可能发生的原因就是在 vsftpd.conf 里面忘记加上这个设定『write_enable=YES』这个设定,请加入;
    2. 是否所要上传的目录『权限』不对,请以 chmod 或 chown 来修订;
    3. 是否 anonymous 的设定里面忘记加上了底下三个参数:
      • anon_other_write_enable=YES
      • anon_mkdir_write_enable=YES
      • anon_upload_enable=YES
    4. 是否因为设定了 email 抵挡机制,又将 email address 写入该档案中了!?请检查!
    5. 是否设定了不许 ASCII 格式传送,但 Client 端却以 ASCII 传送呢?请在 client 端以 binary 格式来传送档案!
    6. 检查一下 /var/log/messages ,是否被 SELinux 所抵挡住了呢?

上面是蛮常发现的错误,如果还是无法解决你的问题,请你务必分析一下这两个档案:/var/log/vsftpd.log 与 /var/log/messages ,里面有相当多的重要资料,可以提供给你进行除错喔!不过 /var/log/vsftpd.log 却预设不会出现! 只有 /var/log/xferlog 而已。如果你想要加入 /var/log/vsftpd.log 的支持,可以这样做:

  

FTP服务器基础设定的更多相关文章

  1. Win8.1设置ftp服务器并设定用户操作权限的详细教程

    http://wenku.baidu.com/link?url=VTDLnDa_yfQN9OldjVnYsOBf7UdIj76QjaLDyHP-I0A6iFEfzB8EyBf9uztwm2JDXlFL ...

  2. POI导出时写一份到ftp服务器,一份下载给客户端

    导语: 昨天接到项目经理这么一个需求,让我在POI导出Excel的时候写一份到我之前搭建的ftp服务器上.所以就有了这篇博客首先我们来分析下之前的业务逻辑:我们创建并构造了一个workbook,然后构 ...

  3. python 搭建ftp服务器

    代码示例: # coding: utf-8 import os from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.han ...

  4. Spring学习---Spring中利用组件实现从FTP服务器上传/下载文件

    FtpUtil.java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcepti ...

  5. FTP服务器文件上传的代码实现

    方式一: @Test public void testFtpClient() throws Exception { // 1.创建一个FtpClient对象 FTPClient ftpClient = ...

  6. java 上传文件到 ftp 服务器

    1.  java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...

  7. python搭建ftp服务器

    1 # coding: utf-8 import os from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handler ...

  8. java:nginx(java代码操作ftp服务器)

    1.检查是否安装了vsftpd [root@linux01 ~]# rpm -qa|grep vsftpd 2.安装vsftpd [root@linux01 ~]# yum -y install vs ...

  9. FTP服务器上传,下载文件

    public class FtpUtil { /** * * @param host FTP服务器地址 * @param port FTP服务器端口 * @param username FTP登录账号 ...

随机推荐

  1. JAVA-获取 JDK 动态代理生成的 Class 文件

    可指定路径 import sun.misc.ProxyGenerator; import java.io.FileOutputStream; import java.io.IOException; i ...

  2. vue @blur v-model数据没有更新问题

    今天遇到一个问题,是一个输入框绑定了一个失去焦点事件,要发送一个客户填写的数据给后台查询然后拿到返回值把它渲染到页面上,但是从后台获取到的数据却没有在页面上渲染出来,console.log打印时显示数 ...

  3. Github 开源项目(二)gorun (go语言工具)

    gorun是一个工具,可以在Go程序的源代码中放置“爆炸线”来运行它,或者明确运行这样的源代码文件. 它的创建旨在试图让Go更加吸引那些习惯于Python和类似语言的人们,他们使用源代码进行最明显的操 ...

  4. svn 在show log 时候出现 want to go offline

    今天终于把SVN服务器给配置好了,可以正常显示log信息了. 这周以来一直都在想着怎样解决svn log 显示 no date 这一问题,一时间不知道是怎么回事,上网都没能找到很好的解决方法.今天在使 ...

  5. loj 10181 绿色通道 二分答案+单调队列DP

    空题段长度即为单调队列长度区间 每次二分答案进行check即可 #include<bits/stdc++.h> using namespace std; ; const int inf=0 ...

  6. jQuery.extend 函数使用

    JQuery的extend扩展方法:      Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解.      一.Jquery的扩展方 ...

  7. [转] Linux shell判断文件和文件夹是否存在

    shell判断文件,目录是否存在或者具有权限 #!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/acc ...

  8. Vue.js 技术揭秘(学习) slot

    slot特性分发父组件的内容 作用域插槽:通过子组件的一些数据来决定父组件实现插槽

  9. 使用Docker部署javaWeb应用

    1. 安装Dcoker http://www.cnblogs.com/zhangqian27/p/9089815.html 2. 查看镜像 $ docker images 3. 搜索镜像 $ dock ...

  10. Linux 01 计算机系统硬件组成简介

    PC服务器 1U = 4.445cm 企业1-2U比较多 互联网公司,品牌 DELL,HP, IBM. Dell品牌 2010年之前:1850,1950(1u),2850,2950(2u) 2010年 ...