一、FTP服务器简介

FTP(File Transfer Protocol):文件传输协议,是一个客户机/服务器系统。使用FTP的用户需要经过验证后才能登录,FTP服务器的用户可分成3类。

**系统用户:**即系统本机的用户。Linux一般不会针对实体用户进行限制,因此实体用户可以针对整个文件

系统进行工作。但通常不希望他们通过FTP方式远程访问系统。

**虚拟用户:**只能采用FTP方式使用系统的用户,不能直接使用Shell登录系统,即虚拟用户,访问服务器

时需要验证。大多数FTP用户是这类用户。

**匿名用户:**对于公共性质的服务器可以提供匿名用户访问,用户名:anonymous。但在使用匿名用户时,应对其进行尽可能多的限制,权限较低,如:同时连接的用户数量受限,访问的文件数目受限,

不能上传文件,允许操作的指令较少,设置匿用户同时登入的最大联机数量等。

二、FTP服务器的安装

1、使用yum安装vsftpd软件包

[root@localhost ~]#yum install vsftpd ftp

2、启动服务并设置开机自启

[root@localhost ~]#systemctl start vsftpd.service
[root@localhost ~]#systemctl enable vsftpd.service

3、设置防火墙与selinux机制

[root@localhost ~]#firewall-cmd --permanent --zone=public --add-service=ftp
[root@localhost ~]#firewall-cmd --reload
[root@localhost ~]#setenforce 0

三、设置匿名用户访问FTP

1、匿名用户访问FTP

(1)默认允许匿名用户与系统用户访问

访问测试(用户名:anonymous 密码为空)

VSFTP服务器的部署-LMLPHP

(2)设置匿名用户访问ftp:

anonymous_enable=YES

(3)设置匿名用户登录ftp时不输入密码:

no_anon_password=YES

(4)设置匿名用户上传、新建、删除文件:

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=yes

(5)设置文件权限

   [root@localhost ~]#chmod 777 pub     //不推荐使用
   [root@localhost ~]#setfacl u:ftp:rwx pub     //推荐使用

(6)设置匿名用户上传或新建文件的权限

如果使用vsftp的是本地用户,则要修改配置文件中的 local_umask 的值;
如果使用vsftp的是虚拟用户,则要修改配置文件中的 anon_umask 的值。

umask = 022 时,新建的目录权限是755,文件的权限是 644;
umask = 077 时,新建的目录权限是700,文件的权限时 600。

(7)设置不允许系统用户登录,只能匿名用户登录:

anonymous_enable=YES

local_enable=no

(8)设置匿名用户访问ftp的默认目录

anon_root=/var/public

注意:要修改vsftp服务器匿名用户默认目录时,不可以将anon_root设置为一个其他账号已有的家目录,否则不能实现匿名用户访问ftp服务器。

四、设置系统用户访问FTP

1、系统用户访问FTP

(1)系统用户默认访问主目录,具有上传、下载、新建、删除的权限,还可以切换到的系统其他目录(安全隐患)。

anonymous_enable=no

local_enable=yes

local_umask=022

(2)设置系统用户只能访问自己的主目录并具有所有权限,不允许切换到系统的其他目录。

chroot_local_user=YES //控制用户访问路径访问自己的主目录,不能切换到其他目录

allow_writeable_chroot=YES //允许写入

ftpd_banner= welcome to our home! //提示信息

max_clients=30 //设置最大连接数

idle_session_timeout=60 //设置超时退出时间,单位为秒

(3)设置系统用户访问指定目录,不允许切换到系统的其他目录,并具上传、下载、新建、删除的权限。

​ local_root=/mnt/public/ //设置系统用户访问ftp的默认目录

​ write_enable=YES //允许写入

​ chroot_local_user=YES //控制用户访问路径访问指定目录,不能切换到其他目录

​ allow_writeable_chroot=YES //允许写入

​ 修改/mnt/public/目录下的文件权限

2、基于本地用户的访问控制

默认情况下,FTP服务器中所有系统用户都可以访问FTP,如何来限定只有指定的系统用户可以访问呢?

VSFTP中提供了两个与系统用户相关的配置文件:

  • /etc/vsftpd/ftpusers提供了一份用于禁止登录的FTP用户列表(黑名单)。此文件中包含的用户将被禁止登录VSFTP服务器,不管该用户是否在/etc/vfsftpd/user_list中出现。

  • /etc/vsftpd/user_list提供了一份用于允许登录的ftp用户列表(白名单)。此文件中包含的用户可能被禁止登录,可能被允许登录。

**理解:**ftpusers不受任何配制项的影响,它总是有效,它是一个黑名单。该文件存放的是一个禁止访问FTP的用户列表,通常为了安全考虑,管理员不希望一些拥有过大权限的帐号(比如root)登入FTP,以免通过该帐号从FTP上传或下载一些危险位置上的文件从而对系统造成损坏。

而user_list则是和vsftpd.conf中的userlist_enable和userlist_deny两个配置项紧密相关的,它可以有效,也可以无效,有效时它可以是一个黑名单,也可以是一个白名单!那么是什么的设置决定了它的作用呢?这就是问题二要解释的。

所以简单总结就是:ftpusers和user_list没有任何关系,ftpusers文件总是生效,user_list则取决于userlist_enable和userlist_deny两项配置。

  • userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户)和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置。
  • 当且仅当userlist_enable=YES时:userlist_deny项的配置才有效,user_list文件才会被使用;当其为NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP。
  • 当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入。
  • 当userlist_enable=YES时,userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入)。

**提示:**使用白名单后,匿名用户将无法登入。除非在user_list中加入一行:anonymous。ftpusers文件的优先级要高于user_list文件,即如果一个用户同时存在 于两个文件中,则都被拒绝访问。

**举例:**只让ftpuser用户访问ftp,那么可以进行如下设置:

[root@localhost ~]#vim /etc/vsftpd/vsftpd.conf
  userlist_enable=YES       //启用userlist用户列表(系统默认设置)
  userlist_deny=NO          //只允许列表中的用户登录
[root@localhost ~]#vim/etc/vsftpd/user_list

服务重启后,在客户端测试,此时只有ftpuser用户可以访问ftp

五、VSFTP日志管理

1、VSFTP服务器的日志文件的配置

在/etc/vsftpd.conf中:

xferlog_enable=YES //开启FTP服务器记录上传下载的情况

xferlog_std_format=YES //日志格式

xferlog_file=路径 //指定日志文件

默认为:/var/log/xferlog

2、日志文件输出格式如下:

(1)当前时间(为本地时间),格式为:DDD MMM dd hh:mm:ss YYYY

(2)传输时间:传送文件所用时间,单位为秒

(3)远程主机名称/IP

(4)文件大小:传输文件的大小,单位为byte

(5)文件名:传输文件名,包括路径

(6)传输类型:a–以ASCII传输;b–以二进制文件传输

(7)特殊处理标志:

_:不做任何特殊处理

c:文件是压缩格式

u:文件是非压缩格式

t:文件时tar格式

(8)传输方向:o 从FTP服务器想客户端传输;i 从客户端向FTP服务器传输

(9)访问模式:a 匿名用户;g 来宾用户;r 系统中的用户

(10)用户名

(11)服务名:一般为FTP

(12)认证方式:0 无; 1 RFC931认证

(13)认证用户id:如果使用*,测表示无法获得该id

(14)完成状态:i 传输未完成;c表示传输已完成。

六、设置虚拟用户访问FTP

1、安装VSFTP虚拟用户需要用到的软件及认证模块

[root@localhost ~]#yum install pam* libdb-utils libdb* --skip-broken -y

2、创建虚拟用户临时文件:/etc/vsftpd/ftpusers.txt

用户名密码格式如下:

techftp

123456

netftp

123456

admftp

123456

markftp

123456

3、生成VSFTP虚拟用户数据库认证文件,设置权限为600

[root@localhost ~]#db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftp_login.db
[root@localhost ~]#chmod 600 /etc/vsftpd/vsftp_login.db

4、配置PAM认证文件:

[root@localhost ~]#vim /etc/pam.d/vsftpd.vu
   auth   required   pam_userdb.so   db=/etc/vsftpd/vsftp_login
   account  required  pam_userdb.so  db=/etc/vsftpd/vsftp_login

5、创建一个系统用户,用于虚拟用户映射

[root@localhost ~]#useradd -s /sbin/nologin ftpuser

6、修改配置文件:/etc/vsftpd/vsftpd.conf

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

  #pam_service_name=vsftpd   //注释原本信息
   pam_service_name=vsftpd.vu
   guest_enable=YES
   guest_username=ftpuser
   user_config_dir=/etc/vsftpd/vsftpd_user_conf

7、分别为虚拟用户创建私有的虚拟目录与独立的配置文件

[root@localhost ~]#mkdir /home/ftpuser/techftp
[root@localhost ~]#mkdir /etc/vsftpd/vsftpd_user_conf
[root@localhost vsftpd_user_conf]#vim techftp

  local_root=/home/ftpuser/techftp
  virtual_use_local_privs=NO  //后文有理解
  write_enable=YES
  anon_world_readable_only=YES
  anon_upload_enable=YES
  anon_mkdir_write_enable=YES
  anon_other_write_enable=YES

理解:

  • 当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;

  • 当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。

比如:

  • 当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。

  • 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。

  • 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。

  • 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。

  • 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。

  • 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。

04-10 05:24