部署FTP文件服务


FTP(文件传输协议)概念

  FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式,主被动模式均是以FTP服务器端为参照。企业实际环境中,如果FTP客户端与FTP服务端均开放防火墙,FTP需以主动模式工作,这样只需要在FTP服务器端防火墙规则中,开放20、21 端口即可。

工作模式
  服务器使用两个端口和客户端通信,一个是命令端口,也叫控制端口,默认是 21, 用于命令的传输 ,一个是数据端口,默认是 20 ,用于数据的传输。

主动模式
  客户端向FTP服务器发送端口信息,由服务器主动连接该端口,客户端和FTP服务器的命令端口(21)建立TCP连接,当需要传输数据时,客户端新启动一个用于数据传输的端口,并在命令端口的连接上用 PORT 命令告诉服务器该端口号,服务器与该端口建立TCP连接,连接成功之后,客户端开始传输数据。

被动模式
  FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接,客户端和FTP服务器的命令端口(21)建立TCP连接,当需要传输数据时,服务器侦听一个用于数据传输的端口,并在命令端口的连接上用 PASV 命令告诉客户端该端口号,客户端与该端口建立TCP连接,连接成功之后,客户端开始传输数据。

一、环捡需求:

  ①服务端系统CentOS 7或6         软件vsftpd

  ②客户端系统window7或10  软件xftp客户端或者网址ftp://IP

二、安装epel.repo源

  [root@localhost ~]# yum  -y  install   epel-release.noarch

   [root@localhost ~]# cd /etc/yum.repos.d/

三、安装vsftpd及相关依赖

  vsftpd:ftp软件

  pam:认证模块

  db4:支持文件数据库

  [root@localhost ~]# yum   -y   install  vsftpd*   pam*   db4*

四、关闭防火墙

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl enable firewalld
[root@localhost ~]# getenforce
  Enforcing
[root@localhost ~]# setenforce 0

[root@localhost ~]# vim /etc/selinux/config

    修改内容为:SELINUX=disabled

五、vsftpd 配置文件说明

配置文件 作用
/etc/vsftpd/vsftpd.conf vsftpd核心配置文件
vim /etc/vsftpd/ftpusers  用于指定那些用户不能访问FTP服务器
vim /etc/vsftpd/user_list 指定允许使用vsftpd的用户列表文件
/etc/vsftpd/vsftpd_conf_migrate.sh 是vsftpd操作的一些变量和设置脚本
/var/ftp/

默认情况下匿名用户的根目录

六、配置匿名用户访问上传文件

  ①编写配置文件

  [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
  [root@localhost ~]# cat /etc/vsftpd/vsftpd.conf | grep -v ^#

anonymous_enable=YES    #是否允许匿名用户访问
write_enable=YES      #
anon_upload_enable=YES    #是否允许匿名用户上传文件
anon_mkdir_write_enable=YES  #是否允许匿名用户创建目录
anon_other_write_enable=YES  #是否允许匿名用户有其他写入权限(改名,删除,覆盖)
dirmessage_enable=YES    #
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES


listen_ipv6=YES
local_umask=022
local_enable=YES

 

  ②常见的匿名FTP配置项

anonymous_enable=YES    #是否允许匿名用户访问
anon_upload_enable=YES    #是否允许匿名用户上传文件
anon_mkdir_write_enable=YES  #是否允许匿名用户创建目录
anon_other_write_enable=YES  #是否允许匿名用户有其他写入权限(改名,删除,覆盖)

anon_max_rate=0    #是否允许最大传输率(字节/秒)0为无限制

anon_umask=022    #匿名用户所上传文件的权限掩码

anon_root=/var/ftp    #设置匿名用户的FTP根目录

 

  ③、登录成功【浏览器访问和Xftp工具访问】

④、修改权限实现上传[浏览器不进行上传]

[root@localhost ~]# cd /var/ftp/
[root@localhost ftp]# ls
  pub
[root@localhost ftp]# chown -R ftp.ftp pub/
[root@localhost ftp]# ll -d  pub/
  总用量 0
  drwxr-xr-x. 2 ftp ftp 6 6月  10 2021 pub

[root@localhost ftp]# systemctl restart vsftpd

注意:改变根目录的属主,如果不改变的话,只能访问,其他权限不能生效,因为我们是以FTP用户的身份访问的,而pub默认的属组是root

七、启动vsftp服务、查看vsftp进程、查看所用端口以及查看进程路径【根据进程id查看进程占用端口,查看对应端口】

[root@localhost vsftpd]# systemctl start vsftpd
[root@localhost vsftpd]# systemctl enable vsftpd

[root@localhost vsftpd]# ps -ef | grep vsftp
  root    68044    1    0 13:11 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
  root    68191    2779   0 13:18 pts/0 00:00:00 grep --color=auto vsftp
[root@localhost vsftpd]# netstat -nap | grep 68044

[root@localhost ~]# netstat -lnpt | grep vsftpd

  tcp6  0  0   :::21   :::*    LISTEN    68044/vsftpd
  tcp6  0  0  :::21          :::*        LISTEN         68044/vsftpd

[root@localhost ~]# whereis vsftpd
  vsftpd: /usr/sbin/vsftpd   /etc/vsftpd   /usr/share/man/man8/vsftpd.8.gz

八、vsftp配置本地(系统)用户

  ①创建系统用户

[root@localhost ftp]# useradd zhangsan
[root@localhost ftp]# useradd lisi
[root@localhost ftp]# passwd zhangsan
[root@localhost ftp]# passwd lisi

  ②修改配置文件 

  [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

local_enable=YES
local_umask=022
chroot_local_user=YES
allow_writeable_chroot=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES

[root@localhost vsftpd]# systemctl restart vsftpd

 注意:查看配置文件中每行中是否存在空格 :set list

  ③常用的本地用户FTP配置项

local_enable=YES   #是否允许本地系统用户访问
local_umask=022    #本地用户所上传文件的权限掩码
local_root=/var/ftp    #设置本地用户的FTP根目录
chroot_list_enable=YES    #表示是否开启chroot的环境,默认没有开启
chroot_list_file=/etc/vsftpd/chroot_list    #表示写在/etc/vsftpd/chroot_list文件里>面的用户是不可以出chroot环境的。默认是可以的。
chroot_local_user=YES    #表示所有写在/etc/vsftpd/chroot_list文件里面的用户是可以出chroo
t环境的,和上面的相反。
local_max_rate=0    #限制最大传输速率(字节/秒)0为无限制

  ④添加用户到白名单

[root@localhost vsftpd]# vim /etc/vsftpd/user_list

zhangsan
lisi

[root@localhost vsftpd]# systemctl restart vsftpd

 

⑤登录成功【浏览器访问和Xftp工具访问】

实现上传

  FTP服务器上存放数据

[root@localhost zhangsan]# cd /home/
[root@localhost home]# ls
lisi userllg zhangsan
[root@localhost vsftpd]# cd /home/zhangsan
[root@localhost zhangsan]# touch zhangsan.txt
[root@localhost zhangsan]# systemctl restart vsftpd

 

 九、vsftp配置虚拟用户

  解决系统风险问题,作用于,只能访问FTP服务,不能登录系统。

①建立虚拟FTP用户的账号

[root@localhost zhangsan]# useradd -s /sbin/nglogin vu

 

  ②创建虚拟用户文件

[root@localhost zhangsan]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers   user_list   vsftpd.conf   vsftpd_conf_migrate.sh   vsftpd.conf_up
[root@localhost vsftpd]# vim /etc/vsftpd/user

zhao  #用户
123456  #密码
zhang
123456

 

③创建数据文件

  通过db_load工具创建Berkeley DB格式的数据库文件

[root@localhost vsftpd]# db_load  -T  -t  hash  -f  user  user.db

  -t  hash 读取文件的基本方法

  -T 允许非Berkeley DB的应用程序使用文本格式转换的DB数据文件

  -f 指定数据原文件


[root@localhost vsftpd]# ls
ftpusers   user.db   vsftpd.conf   vsftpd.conf_up  
user   user_list   vsftpd_conf_migrate.sh

 

④建立支持虚拟用户的PAM认证文件

  [root@localhost vsftpd]# vim  /etc/pam.d/vsftpd.vu

  auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/user
  account required /lib64/security/pam_userdb.so db=/etc/vsftpd/user

 

⑤修改配置文件

local_enable=YES
local_umask=077
allow_writeable_chroot=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
guest_enable=YES
guest_username=vu
chroot_local_user=YES
virtual_use_local_privs=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/user_dir

 

⑥为用户建立独立的配置目录及文件

[root@localhost vsftpd]# mkdir /etc/vsftpd/user_dir

[root@localhost vsftpd]# ls
ftpusers   user.db   user_list   vsftpd_conf_migrate.sh
user   user_dir   vsftpd.conf   vsftpd.conf_up
[root@localhost vsftpd]# cd /etc/vsftpd/user_dir/
[root@localhost user_dir]# vim zhao

  local_root=/etc/vsftpd/data  #虚拟用户数据的存储位置
[root@localhost user_dir]# cd ..

 

⑦创建虚拟用户数据存放目录

[root@localhost vsftpd]# mkdir /etc/vsftpd/data
[root@localhost vsftpd]# chmod  
777 data/

[root@localhost vsftpd]# cd data/
[root@localhost data]# touch zhao.txt
[root@localhost data]# ls
  zhao.txt
[root@localhost data]# systemctl restart vsftpd

 

十、FTP客户端lftp

 Ⅰ、服务器

[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# cd /var/ftp/
[root@localhost ftp]# ls
pub
[root@localhost ftp]# mkdir test
[root@localhost ftp]# cd test/
[root@localhost test]# ls
[root@localhost test]# touch llg
[root@localhost test]# ls
  llg

    [root@localhost test]# chmod 777 /var/ftp/test/llg

 

 Ⅱ、客户机

[root@localhost ~]# lftp 192.168.112.146
lftp 192.168.112.146:~> ls
drwxr-xr-x 2 14 50 6 Jun 09 2021 pub
drwxrwxrwx 2 0 0 21 May 17 07:14 test

  ①get下载文件

[root@localhost ~]#  lftp 192.168.112.146

lftp 192.168.112.146:~> ls
  drwxr-xr-x 2 14 50 6 Jun 09 2021 pub
  drwxrwxrwx 2 0 0 21 May 17 07:14 test
lftp 192.168.112.146:/> cd test/

lftp 192.168.112.146:/test> ls
  -rw-r--r-- 1 0 0 0 May 17 07:14 llg.txt

lftp 192.168.112.146:/test> get llg.txt  #下载到/root目录下

lftp 192.168.112.146:/test> get llg.txt -o /tmp/llg  #下载到指定目录下
lftp 192.168.112.146:/test> exit

   ②下载目录

    lftp 192.168.112.146:/test> mirror  /var/ftp/test   #下载test目录