FTP文件传输协议(File Transfer Protocol),即能够让用户在互联网中上传、下载文件的文件协议,而FTP服务器就是支持FTP传输协议的主机,要想完成文件传输则需要FTP服务端和FTP客户端的配合才行。

   

FTP协议占用两个端口号:

   21端口:命令控制,用于接收客户端执行的FTP命令。

   20端口:数据传输,用于上传、下载文件数据。


FTP数据传输的类型:

    主动模式:FTP服务端主动向FTP客户端发起连接请求。

    被动模式:FTP服务端等待FTP客户端的连接请求。


    下面介绍用虚拟用户登录ftp,因为虚拟用户模式的帐号口令都不是真实系统中存在的,所以相对于本地用户要比较安全多了。


步骤:

1.查看系统版本

# uname -a
Linux node2 3.10.0-327.36.3.el7.x86_64 #1 SMP Mon Oct 24 16:09:20 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

2.安装vsftpd

#yum install vsftpd -y

3.备份配置文件

# cd /etc/vsftpd
# mv vsftpd.conf vsftpd.conf.bak
# egrep -v "^$|^#" vsftpd.conf.bak > vsftpd.conf

4.创建一个系统账户 (方便后面虚拟用户映射使用)

# useradd -d /data/ -s /sbin/nologin virturl
#  chmod 755 /data

5.创建虚拟用户并生成数据文件(这种方法比较麻烦,每次创建都需要重新生成数据库文件,不过可以使用mysql来代替 这种方法。)

# cd /etc/vsftpd
# vim vip.list (文件一行用户一行密码)
blog
123567
cache
123456

使用db_load命令用HASH算法生成FTP用户数据库文件vip.db
# db_load -T -t hash -f vip.list vip.db

刚创建的vip.list这个文件就可以删除了,不然被人发现就破解了,数据库文件比较重要,更改权限。
# chmod 600 vip.db

6.使用系统上面的pam认证文件

# vim /etc/pam.d/vip (指定我们刚刚上面生成的数据库文件,去掉后缀名就可以了)
auth required pam_userdb.so db=/etc/vsftpd/vip
account required pam_userdb.so db=/etc/vsftpd/vip

7.创建用户权限的文件

# cd /etc/vsftpd
# mkdir vip_dir (在里面用ftp账户命名创建文件,文件里面配置权限,默认是没有上传,下载,删除等权限的。)
# vim blog
anon_upload_enable=YES          #(上传权限)
anon_mkdir_write_enable=YES       #(创建文件目录)
anon_other_write_enable=YES       #(其他权限)

# vim cache
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

8.配置vsftpd配置文件

# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO                   # (禁用匿名用户)
local_enable=YES                     # (允许本地用户登录)
guest_enable=YES                     # (需要虚拟用户登录)
guest_username=virtual                  #  (映射的系统用户)
pam_service_name=vip                   #  (pam认证文件)
allow_writeable_chroot=YES                  #  (允许禁锢的FTP根目录可写而不拒绝用户登入请求)
user_config_dir=/etc/vsftpd/vip_dir                  #  (指定用户权限的目录)
 
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
userlist_enable=YES
tcp_wrappers=YES

9.启动vsftpd

# systemctl start vsftpd

10.防火墙允许 20,21端口通过

# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT

11.就可以用客户端去登录了。window软件的我用了filezilla这个软件,需要打开主动模式去连接,不会报错。