ftp(文件传输协议)服务默认使用TCP协议的20、21端口与客户端进行通信。20端口用于建立数据连接,并传输文件数据;21端口用于建立控制连接,并传输ftp控制指令。

ftp数据连接分为 主动模式和被动模式;

客户端与服务器建立数据连接以后,就可以根据从控制连接中发送的ftp命令进行上传和下载文件。传输过程中是否进行字符转换,分为文本模式和二进制模式。使用二进制模式笔文本模式更有效率。大多数ftp客户端可以根据文件类型自动选择文件传输模式,无需用户手工指定。

ftp用户类型分为: 1.匿名用户; 2.本地用户; 3.虚拟用户。


接下来我们就在linux环境中搭建ftp服务
#### 1.准备工作:

[root@localhost ~]# ifconfig ens33
//确定本机IP地址(建议静态IP地址) [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 //关闭防火墙、SELinux

#### 2.自己创建yum仓库配置文件,并安装FTP服务:

[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# rm -rf * [root@localhost yum.repos.d]# vim a.repo //自己编写一个yum配置文件,必须以“repo”结尾,内容如下: [a] //yum仓库ID baseurl=file:///mnt //使用本地系统镜像作为YUM源 gpgcheck=0 //不查公钥 [root@localhost ~]# yum clean all //清楚YUM缓存(避免出错) [root@localhost ~]# mount /dev/cdrom /mnt //挂载系统盘 [root@localhost ~]# yum -y install vsftpd //安装FTP服务

#### 3.FTP的配置文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf //FTP服务的配置文件

>```
FTP服务配置文件一些常用的配置选项参数:
匿名用户常用参数:
anonymous_enable=YES:是否允许匿名访问
anon_umask=022:设置匿名用户所上传文件的默认权限掩码值
anon_root=/vat/ftp:设置匿名用户的宿主目录(默认为/var/ftp)
anon_upload_enable=YES:是否允许匿名用户上传文件
anon_mkdir_write_enable=YES:是否允许匿名用户有创建目录的写入权限
anon_other_write_enable=YES:是否允许匿名用户有其他写入的权限(例如改名、修改、删除等)
本地用户常用参数:
local_enable=YES:是否允许本地系统用户访问
local_umask=022:设置本地用户所上传文件的默认权限掩码值 
local_root=/var/ftp:设置本地用户的ftp根目录(默认为用户的宿主目录)
chroot_local_user=YES:是否将ftp本地用户禁锢在宿主目录中
local_max_rate=0:限制本地用户的最大传输速率(0为无限制),单位是字节/秒(B/s)
allow_writeable_chroot=YES:允许被限制用户的主目录具有写权限
全局配置常用参数:
listen=YES:是否以独立的运行方式监听服务
listen_address=0.0.0.0:设置监听ftp服务的IP地址
listen_port=21:设置监听ftp服务的端口号
write_enable=YES: 启用任何形式的写入权限(比如上传、删除文件等)都需要开启此项
download_enable=YES:是否允许下载文件(比如建立仅限于浏览、上传的ftp服务器时可将其设置                                                                     为"NO")
xferlog_enable=YES:启用xferlog日志,默认记录到/var/log/xferlog
xferlog_std_format=YES: 启用标准的xferlog日志格式
connect_from_port_20=YES:允许服务器主动模式
pasv_enable=NO:禁止被动模式连接;默认允许被动模式连接
pam_service_name=vsftpd:设置用于用户认证的PAM文件位置(/etc/pam.d/目录中对应的文件名)
userlist_enable=YES:是否启用user_list用户列表文件
max_clients=0:最多允许多少客户端同时连接(0为无限制)
max_per_ip=0                                         对来自同一个IP地址的客户端,最多允许多少个并发连接(0为无限制)
tcp_wrappers=YES:是否启用TCP_Wrappers主机访问控制
虚拟用户常用参数:
guest_username=test:指定映射的系统用户名称;
guest_enable=YES:是否启用虚拟用户;
allow_writeable_chroot=允许被限制用户的主目录具有写权限(此项必须写入,否则可能会报错)
anon_world_readable_only=NO:允许用户下载目录内容
anon_other_write_enable=YES:允许匿名用户有其他写入权限,如重命名、覆盖及删除文件等;
user_config_dir=/etc/vsftpd/vusers_dir:指定虚拟用户独立的配置文件目录;

常用的配置差不多就这些(配置文件严格区分大小写)

搭建匿名用户访问FTP服务

1.赋予匿名用户相应的权限

[root@localhost ~]# chown ftp /var/ftp/pub
//匿名用户默认登录的文件夹是/var/ftp/pub目录、匿名用户对应系统用户ftp;所以将ftp系统用户作用目录的属组

2.修改FTP服务的主配置文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
                  ………………                  //省略部分内容,填写以下内容
anon_upload_enable=YES              //允许匿名用户上传文件
anon_mkdir_write_enable=YES       
anon_other_write_enable=YES       //允许匿名用户具有写入权限
[root@localhost ~]# systemctl restart vsftpd
//重启FTP服务

3.客户机访问测试

搭建基于本地用户访问FTP服务

1.修改FTP服务配置文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
                  ………………                 //省略部分内容,添加以下内容
allow_writeable_chroot=YES           // 允许被限制用户的主目录具有写权限
chroot_local_user=YES                   //将用户禁锢在宿主目录

2.创建系统用户(用于测试)、重启FTP服务

[root@localhost ~]# useradd xiaozhang
[root@localhost ~]# passwd xiaozhang 
[root@localhost ~]# systemctl restart vsftpd

3.客户机访问测试

创建虚拟用户登录FTP服务

1.创建文本文件,用于存放虚拟用户的用户名、密码

[root@localhost ~]# vim /etc/vsftpd/123.txt        //添加以下内容
benet
123456
benet1
123456                
//奇数行为用户名、偶数行为密码(一行一个,不允许有空格)

2.创建Berkeley DB格式的数据库文件

[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# db_load -T -t hash -f 123.txt vusers.db
//使用db_load工具创建用户名、密码的数据库文件

3.为虚拟用户建立RAM认证文件

[root@localhost ~]# vim /etc/pam.d/vsftpd.vu
//必须创建一个以“vu”结尾的文本文件,填写以下内容:
auth    required        pam_userdb.so   db=/etc/vsftpd/vusers
account required        pam_userdb.so   db=/etc/vsftpd/vusers
//指定用户类型、用户属性和验证使用的模块、db数据库文件

4.新建一个系统用户(用于测试)

[root@localhost ~]# useradd -d /var/ftproot -s /sbin/nologin xiaoli
[root@localhost ~]# chmod 755 /var/ftproot/
//修改用户宿主目录的权限(这就是虚拟用户登录访问的目录)

5.修改ftp服务的主配置文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
              ………………                                  //省略部分内容,修改、添加以下内容
pam_service_name=vsftpd.vu                      //设置用于用户认证的PAM文件位置
userlist_enable=YES                                    //启用user_list用户列表文件
tcp_wrappers=YES                                      //启用TCP_Wrappers主机访问控制
guest_username=xiaoli                                //来宾用户对应的系统用户
guest_enable=YES                                      //启动来宾用户
allow_writeable_chroot=YES                      //禁锢在宿主目录
user_config_dir=/etc/vsftpd/vusers_dir       //指定虚拟用户独立的配置文件目录

4.为不同虚拟用户建立独立的配置文件

[root@localhost ~]# mkdir /etc/vsftpd/vusers_dir
[root@localhost ~]# vim /etc/vsftpd/vusers_dir/benet
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@localhost ~]# vim /etc/vsftpd/vusers_dir/benet1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
//需要手动创建目录及配置文件
[root@localhost ~]# systemctl restart vsftpd
//重启FTP服务

5.客户机测试访问

自行测试!!!

实验完成!!!