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 端上面发现无法联机成功,请检查:
- iptables 防火墙的规则当中,是否开放了 client 端的 port 21 登入?
- 在 /etc/hosts.deny 当中,是否将 client 的登入权限挡住了?
- 在 /etc/xinetd.d/vsftpd 当中,是否设定错误,导致 client 的登入权限被取消了?
- 如果 Client 已经连上 vsftpd 服务器,但是却显示『 XXX file can't be opend 』的字样,请检查:
- 最主要的原因还是在于在 vsftpd.conf 当中设定了检查某个档案,但是你却没有将该档案设定起来, 所以,请检查 vsftpd.conf 里面所有设定的档案档名,使用 touch 这个指令将该档案建立起来即可!
- 如果 Client 已经连上 vsftpd 服务器,却无法使用某个账号登入,请检查:
- 在 vsftpd.conf 里面是否设定了使用 pam 模块来检验账号,以及利用 userlist_file 来管理账号?
- 请检查 /etc/vsftpd/ftpusers 以及 /etc/vsftpd/user_list 档案内是否将该账号写入了?
- 如果 Client 无法上传档案,该如何是好?
- 最可能发生的原因就是在 vsftpd.conf 里面忘记加上这个设定『write_enable=YES』这个设定,请加入;
- 是否所要上传的目录『权限』不对,请以 chmod 或 chown 来修订;
- 是否 anonymous 的设定里面忘记加上了底下三个参数:
- anon_other_write_enable=YES
- anon_mkdir_write_enable=YES
- anon_upload_enable=YES
- 是否因为设定了 email 抵挡机制,又将 email address 写入该档案中了!?请检查!
- 是否设定了不许 ASCII 格式传送,但 Client 端却以 ASCII 传送呢?请在 client 端以 binary 格式来传送档案!
- 检查一下 /var/log/messages ,是否被 SELinux 所抵挡住了呢?
上面是蛮常发现的错误,如果还是无法解决你的问题,请你务必分析一下这两个档案:/var/log/vsftpd.log 与 /var/log/messages ,里面有相当多的重要资料,可以提供给你进行除错喔!不过 /var/log/vsftpd.log 却预设不会出现! 只有 /var/log/xferlog 而已。如果你想要加入 /var/log/vsftpd.log 的支持,可以这样做: