linux-ftp服务部署(详解)

介绍:

           FTP:是文件传输协议的缩写。

           功能:用来实现文件的上传(upload)和下载(download)

           ftp的工作端口: 21 : 控制端口,用于在客户机和服务器之间建立连接

                                    20 : 数据端口,用于服务器给客户机主动进行数据连接

vsftpd:非常安全文件传输协议守护进程(very secure ftp daemon)


vsftpd部署思路:

1.关闭安全功能,并查状态:

    systemctl  stop  firewalld    ;  setenforce  0                  #关闭防火墙及selinux安全设置

    systemctl  status  firewalld  ;  getenforce                    #查看防火墙状态,检查是否关闭

2.查软件是否已安装,如果未安装就安装软件。

    rpm  -q  vsftp  ftp  lftp                                                  #vsftpd是服务器端程序, ftp lftp为客户端程序 

3.启动服务,并允许开机自动启动

   systemctl  restart  vsftpd                                               #重启vsftpd服务

   systemctl  enable  vsftpd                                               #设置vsftpd开机自启动

4.设置共享目录,重新加载设置。

5.做本地(内测)访问测试,做异地(公测)访问测试。


实验环境:

  centos7.6 (以本机IP为例 192.168.11.11)


安装步骤:

  yum  install  -y  vsftpd  ftp  lftp                                       #使用yum安装vsftpd  ftp  lftp 软件

  systemctl  restart  vsftpd                                                 #启动服务

  systemctl  enable  vsftpd                                                 #设置开机自启动

  systemctl  status  vsftpd                                                  #查看服务状态,为running 时则服务启动成功


共享需要的文件:

vsftpd的默认共享目录:

1.匿名用户(ftp或anonymous)共享:/var/ftp目录

2.普通用户:访问的是普通用户自己的家目录,通常是"/home/用户名"文件夹

注意:root用户默认不能登录vsftpd服务器来访问共享,因为root账号在黑名单里。


服务测试:

 方式一: ftp 192.168.11.11  回车 再按照提示输入用户密码即可登陆

              image.png

 方式二: lftp  192.168.11.11  -u  用户名,密码  即可登陆成功 (例: 用户名为tom  密码为0 登陆)

              image.png

 在window下可以用资源管理器进行登陆: ftp://192.168.11.11

              image.png


vsftpd配置文件:  rpm  -qc  vsftpd  (查看vsftpd的配置文件)

image.png

图片上除/etc/logrotate.d/vsftpd 都为重点


配置文件详解:


黑名单功能:


/etc/vsftpd/ftpusers  和  /etc/vsftpd/user_list  为黑名单文件

功能:可以把用户设置为黑白名单,限制用户访问


例:root用户默认在黑名单中,把两个上述文件中的root用#号注释即可用root用户访问

image.png

也可以把其他用户加入黑名单中

(注: user_list 可以设置为白名单,在/etc/vsftpd/vsftpd.conf 配置文件中最后一行添加 userlist_deny=NO )

 添加后重启服务,白名单的用户可以访问,而非白名单用户不能访问,当黑白名单同时存在时,黑名单优先级大于白名单,也就是只要出现在  黑名单就不能正常登陆服务

 建议:修改配置文件时最好先备份文件


chroot牢笼功能:

 因登陆的用户访问的是自身的家目录,但可以通过命令查看其他文件,比如根目录或其他配置文件,所以可以使用chroot牢笼功能限制,只  允许登陆的用户访问自己的家目录

chroot牢笼分为四种情况:

 1.全部用户不加锁(默认,但不安全)

 2.全部加锁

 3.少数用户不加锁

 4.少数用户加锁


情况一:使用vim 编辑 配置文件/etc/vsftpd/vsftpd.conf ,并用set nu显示行号,可以看到以下行数的配置文件,默认不加锁,不用修改

image.png


情况二:启动所有普通用户的牢笼功能(即对所有人加锁)

按照上述步骤编辑配置文件/etc/vsftpd/vsftpd.conf ,set nu显示行号,去除101行#号,并添加allow_writeable_chroot=YES,如下图所示:

image.png


情况三:给指定少数用户不启用牢笼功能(即少数人不加锁)

同理编辑配置文件,并指定白名单路径,如下图所示:

image.png

vim编辑/etc/vsftpd/chroot_list,添加不需要启用牢笼功能的用户,再重启服务即可


情况四:给指定的少数普通用户启用牢笼功能(即少数人加锁)

编辑配置文件如下图所示:

image.png

用#号注释掉101行 chroot_local_user=YES,此时只有文件/etc/vsftpd/chroot_list 中的用户启用了牢笼功能

最后重启服务(注:每次修改完配置文件都得重启服务  systemctl  restart  vsftpd)


anonymous匿名用户功能

实际作用:实现允许anonymous匿名用户对共享文件具有可读可写的权限

分析:想实现上述功能必须满足以下条件

1.文件共享软件必须允许这个用户有可读可写的权限。

2.用户对共享目录自身要有可读可写的权限。

3.匿名用户仅允许上传文件到/var/ftp中的子目录中。如/var/ftp/upload,且ftp匿名用户对upload目录要有可读可写权限。

(警告:/var/ftp目录的属主、属组不允许修改,且other权限不允许有w可写权限,否则用ftp匿名用户访问共享时会提示下面这个500错误:500 OOPS: vsftpd: refusing to run with writable root inside chroot()

           Login failed.

           421 Service not available, remote server has closed connection)


实际操作步骤:

                   

1.编辑配置文件/etc/vsftpd/vsftpd.conf ,去除29 , 30行的#号,再添加两行代码,如图所示:

        image.png

       

代码解释:29 #anon_upload_enable=YES      允许匿名用户上传

               33 #anon_mkdir_write_enable=YES   允许匿名用户用mkdir创建目录

               anon_other_write_enable=YES     允许匿名用户执行rm删除等操作(添加此行)

               anon_world_readable_only=NO     关闭匿名用户只读的限制(为YES时会无法下载)


2.用root用户创建/var/ftp/upload目录,权限为777或属主和属组均为ftp,重启vsftpd服务,使用ftp登陆,即可实现匿名共享

        image.png



ftp服务限速功能:  

即对不同用户限制不同的文件传输速度


1.在配置文件/etc/vsftpd/vsftpd.conf 中添加如下内容:

   user_config_dir=/etc/vsftpd/userconf                        #指定个性化配置文件的主目录

  image.png


2.创建指定个性化配置文件的主目录: mkdir -pv /etc/vsftpd/userconf

   使用vim 创建编辑 /etc/vsftpd/userconf/gg

   添加内容: local_max_rate=2000000          #即对名为gg的用户上传和下载速度限制为2MB/s


vsftpd的tcp_wrapers防火墙设置:

tcp_wrapers功能:一个迷你的防火墙,可以用来做基于tcp协议的应用程序的ip安全访问控制

配置文件: /etc/hosts.allow (白名单)  ;  /etc/hosts.deny (黑名单)

!技巧:让少数人为白户,那么先在hosts.deny中做拒绝所有(all)黑名单,然后在hosts.allow中做少数IP的放行白名单。

设置举例:

格式说明: 守护进程名称 : 主机名或IP地址

vim  /etc/hosts.deny           #黑名单

vsftpd:192.168.11.1              #拒绝192.168.11.1这台主机访问vsftpd共享

sshd:192.168.11.1                 #拒绝192.168.11.1这台主机访问sshd共享


vsftpd虚拟用户功能:

虚拟用户:即非useradd创建的用户账号(非/etc/passwd中的账号),而是用vim创建的属于vsftpd的独立用户账号。

虚拟用户的优势:可以避免系统中的用户账号过多,让vsftpd文件共享软件独立管理自己的用户账号。


虚拟用户账号文件格式:

文件中的奇数行是用户账号,偶数行是用户的密码。

例:

1.创建虚拟用户账号文件:vim /etc/vsftpd/vuser.txt,输入图中内容,即创建虚拟用户f1,f2,f3,密码为123456

image.png


2.将虚拟用户账号转换成加密的数据库格式文件。

yum  install  -y  libdb-utils                                 #安装libdb-utils

cd  /etc/vsftpd                                                     #cd到/etc/vsftpd目录下

db_load  -T  -t  hash  -f  /etc/vsftpd/vuser.txt  /etc/vsftpd/vuserdb.db         #用hash算法对vuser.txt转化格式为.db

chmod  -v  600  /etc/vsftpd/vuserdb.db              #给予文件/etc/vsftpd/vuserdb.db 权限


3.在vsftpd的pam认证文件中添加虚拟用户账号文件的认证关系。

vim  /etc/pam.d/vsftpd , 在文件开头插入以下两行,并如图:

     auth  sufficient  pam_userdb.so     db=/etc/vsftpd/vuserdb

      account  sufficient  pam_userdb.so  db=/etc/vsftpd/vuserdb (代码作用:既能让虚拟用户访问共享,也能让普通用户访问共享。)

image.png


4.用useradd创建一个普通用户账号qq

 useradd  qq  -s  /sbin/nologin                #创建一个名为qq的用户,指定登录shell为.sbin/nologin


5.在vsftpd.conf配置文件中设置一个真实用户账号,并将真实用户账号vftper和虚拟用户账号文件关联起来。

 vim  vsftpd.conf 在文件最后添加如下内容:

 guest_enable=YES                                        #允许来宾用户访问共享,即虚拟用户

 guest_username=vftper                               # 指定来宾用户名为vftper用户(即第4步新建的用户)

 user_config_dir=/etc/vsftpd/vuser_conf     #指定用户配置文件目录

 allow_writeable_chroot=YES                       #允许chroot功能下执行写操作(必须加此行,否则会登录失败)


6.给每个虚拟用户账号设置独立的共享访问速度和访问目录。

cd  /etc/vsftpd

mkdir  -v  vuser_conf

cd  vuser_conf                                             #在/etc/vsftpd目录下,创建vuser_conf目录

#创建f1、f2虚拟用户的会员个性化设置文件,允许f1这个虚拟用户在自己的家目录中可读可写。

touch  f1  f2

mkdir  -v  /home/vftper/{f1,f2}

chmod  -v  777  /home/vftper/{f1,f2}

vim  f1 输入内容:

                    write_enable=YES

                    anon_world_readable_only=NO

                    anon_upload_enable=YES

                    anon_mkdir_write_enable=YES

                    anon_other_write_enable=YES

                    local_root=/home/vftper/f1

#允许f2这个用户在自己的家目录中可读,但不可写。

vim  f2 输入内容:

                    local_root=/home/vftper/f2        #只写这行,其余行可以不写

                    write_enable=NO

                    anon_world_readable_only=NO

                    anon_upload_enable=NO

                    anon_mkdir_write_enable=NO

                    anon_other_write_enable=NO

7.重启vsftpd服务,并分别用虚拟用户账号访问共享。

    systemctl  restart  vsftpd

    ftp  192.168.11.11 -->用f1、f2虚拟用户分别访问共享,测试文件的上传。


    到此,vsftpd的虚拟用户项目试验完毕。



ftp和lftp客户端程序的操作功能:

两者都是客户端应用程序

ftp命令格式: ftp   192.168.11.11 

lftp命令格式:lftp  192.168.11.11  -u  qq,0    #使用密码为0,用户名为qq的账号登陆

ftp 和 lftp 的区别: ftp模式下传输文件需指定文件的根目录,lftp则不需指定文件的根目录



ftp的工作模式:主动port、被动passive模式

客户端与服务端传输数据时,服务端传输端口为20时为主动模式,传输端口为>1024的随机端口时为被动模式


ftp主动(port)模式工作过程

1.客户机和服务器建立连接关系(登录): 客户机(>1024的随机端口号)  <---->   服务器 21号port

2.双方建立数据连接关系,传输数据:客户机(>1024的随机port) <---->   服务器 20号port


ftp被动(pasv)模式工作过程

1.客户机和服务器建立连接关系(登录): 客户机(>1024的随机端口号)  <---->   服务器 21号port

2.双方建立数据连接关系,传输数据:客户机(>1024的随机port) <---->   服务器(>1024的随机port)

说明:当ftp服务器上有防火墙时,通常客户机是以被动模式去访问ftp服务器的。在ftp服务器的vsftpd.conf和防火墙上要指定放行的被动模式端口范围的最小值和最大值。

vsftpd.conf 的被动模式端口范围:

pasv_min_port=5000

pasv_max_port=6000


关于ftp的服务部署即配置文件的设置就介绍到这里!





                  



猜你喜欢

转载自blog.51cto.com/14181896/2346389