ftp: 文件传输协议
两类连接:
命令连接:传输命令
数据连接:传输数据

两种模式:
主动模式:PORT 20/tcp连接客户端的命令连接使用的端口向后的第一个可用端口
被动模式:PASV 打开一个随机端口,并等待客户端连接

PAM: 插入式认证模块
认证框架:库,高度模块化

协议:C/S
        Server: Filezilla proftpd pureftpd vsftpd
        Client: ftp Filezilla CuteFTP FlashFXP lftp ftp gftp

vsftpd:
        URL:SCHEME://HOST:PORT/PATH/TO/FILE
                  SCHEME://username:password@HOST:PORT/PATH/FILE
        路径映射:用户家目录:每个用户的URL的映射到当前用户的家目录

安装vsftpd:yum install vsftpd

程序环境:
1、主程序:/usr/sbin/vsftpd
2、配置文件:/etc/vsftpd/vsftpd.conf
3、数据跟目录:/var/ftp
4、Systemd Unit File: /usr/lib/systemd/system/vsftpd.service

查看vsftpd的配置文件:

[root@server01 ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf

vsftpd以ftp用户的身份运行进程,默认用户即为ftp用户,匿名用户的默认路径即ftp用户的家目录/var/ftp
查看ftp主机上用户的信息:

[root@server01 ~]# cat /etc/passwd | grep ^ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

启动vsftpd:

vsftp搭建 centos7_vsftp搭建 centos7

 向/var/ftp/pub下写一个测试文件: echo "this is a hello world" > /var/ftp/pub/ftp.txt

在同一网络内的另一台主机安装ftp客户端:

[root@proxy ~]# yum install lftp ftp

用户类别:

A) 匿名用户

匿名用户登录:
用lftp客户端测试:

匿名用户的三种登录方式:

1、使用ftp作为用户名

vsftp搭建 centos7_vsftp搭建 centos7_02

2、使用anonymous作为用户名

vsftp搭建 centos7_服务器_03

 3、缺省用户名

vsftp搭建 centos7_linux_04

匿名用户配置:
1、anonymous_enable:控制是否允许匿名登录。如果启用,用户名ftp和anonymous都被识别为匿名登录。默认:Yes
2、anon_world_readable_only:当启用时,用户将只被允许下载为全局可读的文件。这识别为ftp用户可以拥有文件,尤其在出现上传时。默认:yes
3、anon_mkdir_write_enable:如果设置成yes,匿名用户将被允许在某些情况下创建新目录。为了使这个起作用,必须激活write_enbable选项,默认:No
4、anon_other_write_enable:如果设置成yes,匿名用户将被允许执行除了上传和创建目录外还允许执行写操作,诸如删除和重命名。通常不推荐这个,但为了完整性而包括。默认:No。
5、anon_upload_enable:如果设置成Yes,匿名用户将在特定条件下被允许上传文件。为了使这个起作用,必须激活选项write_enable,并且匿名ftp用户必须对所要上传位置有写权限。对于虚拟用户要上传文件,也需要此设置;默认,用匿名权限对待虚拟用户。默认:No
6、anon_umask:匿名长传的掩码
7、anon_max_rate=0 匿名用户的最大上传下载速率。

在开启anon_upload_enable=YES前,不允许匿名用户上传文件:

上传一个本地路径下文件:

vsftp搭建 centos7_vsftp搭建 centos7_05

 修改/var/ftp/pub的目录所有者和所属组并且修改vsftpd.conf中anon_upload_enable=YES,并且重启vsftpd:

vsftp搭建 centos7_ftp服务器_06

 在客户端测试上传当前路径中一个文件到ftp服务器:

vsftp搭建 centos7_服务器_07

 在开启anon_mkdir_write_enable=YES前,不允许匿名用户在服务器上创建新目录:

vsftp搭建 centos7_vsftp搭建 centos7_08

 设置anon_mkdir_write_enable=YES并且重启服务器,创建一个fold目录,显示创建成功:

vsftp搭建 centos7_服务器_09

 

 注意:一个用户通过文件共享服务访问文件系统上的文件的实际权限是文件系统本身权限和共享权限的交集。
 

 在设置anon_other_write_enable=YES前,服务器不允许客户端删除服务器上的文件:

vsftp搭建 centos7_linux_10

设置anon_other_write_enable=YES,并且重启服务器,删除服务器上的一个文件和目录:

vsftp搭建 centos7_linux_11

 

 

B) 系统用户:至少禁止系统用户访问ftp服务,/etc/vsftpd/ftpusers PAM(/etc/pam.d/vsftpd)

在ftp服务器端创建一个登录用户并且设置其密码,在其家目录中创建一个文件:

vsftp搭建 centos7_服务器_12

用创建的用户名和密码登录ftp服务器,直接进入了这个用户的家目录,此用户可以切换到这个用户拥有访问权限的任何目录中:

vsftp搭建 centos7_vsftp搭建 centos7_13

用户通过vsftpd服务访问到的默认路径,是用户自己家目录;默认可以自己有权限访问的所有路径间切换。

1、local_enable=YES 是否启用本地用户

2、write_enable=YES 本地用户是否可写

3、local_umask=022  本地用户长传文件的掩码

辅助配置文件/etc/vsftpd/ftpusers: 列在此文件中的用户,均禁止使用ftp服务

4、local_max_rate=0 本地用户的上传下载速率

5、chroot_local_user=YES 禁锢所有本地用户于家目录,需要事先去除用户对家目录的写权限

6、chroot_list_enable=YES

7、chroot_list_file=/etc/vsftpd/chroot_list 禁锢列表中文件存在的用户于其家目录中,需要事先去除用户对家目录的写权限

并发连接数限制:
max_clients=2000
max_per_ip=50

把登录用户名添加到文件/etc/vsftpd/ftpusers后,这个用户就不能连接ftp服务器了。

把ftpuser添加到/etc/vsftpd/ftpusers末尾后,ftpuser这个用户就不能正常登录ftp服务器了:

vsftp搭建 centos7_用户名_14

 

设置vsftpd.conf参数为如下:

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

在ftp服务器端,添加两个新用户并且设置密码,把ftpuser1添加到/etc/vsftpd/chroot_list文件末尾并且除去ftpuser1用户对家目录的写权限,重启vsftpd:

vsftp搭建 centos7_用户名_15

 在客户端进行连接测试,用户ftpuser1被限制在自己的家目录中,而ftpuser2未被限制在家目录中:

vsftp搭建 centos7_服务器_16

 

控制可登录vsftpd服务的用户列表:
userlist_enable=YES
启用/etc/vsftpd/user_list文件类控制可登录用户
userlist_deny=
                        YES:黑名单
                        NO:白名单

启用白名单控制,设置userlist_enable=YES和userlist_deny=NO,并且删除/etc/vsftpd/user_list中原先内容,添加一个用户ftpuser1,重启vsftpd后,只有ftpuser1这个用户能够正常登录,其余用户都不能登录:

 

vsftp搭建 centos7_ftp服务器_17

 

C) 虚拟用户:非系统用户,用户账号非为可登录操作系统的用户账号(非/etc/passwd)

总结中...