一、FTP介绍
全称:file transfer protocol
FTP是TCP/IP协议组中的协议之一,是一个客户/服务器系统。在开发网站的时候,通常利用ftp协议把网页或程序传到Web服务器上。此外,由于ftp传输效率非常高,在网络上传输大的文件时,一般也采用该协议。ftp的主要功能是做文件共享
二、vsFTP安装
1、yum install vsftpd -y
2、关闭selinux
关闭firewalld
3、systemctl start vsftpd #开启ftp服务
4、systemctl enable vsftpd #开机自启
5、测试安装发布(在另一台主机上):
方式一:
firefox ftp://ftp服务器的ip
方式二:
lftp ftp服务器的ip #此访问方式必须能列出资源才算访问成功
测试:
三、vsFTP基本信息
1、服务名称:
vsftpd.service
2、配置目录: /etc/vsftpd
主配置文件: /etc/vsftpd/vsftpd.conf
默认发布目录: /var/ftp
3、报错信息:
550 #程序本身拒绝
553 #文件系统权限限制
500 #权限过大
530 #认证失败
四、匿名用户访问控制
一、实验环境:
两台rhel7主机,
主机一的ip:192.168.0.99(服务器)
主机二的ip:192.168.0.102(客户主机)
lftp 192.168.0.99 #当访问ftp服务时没有加入用户认证为匿名访问
lftp 192.168.0.99 -u westos #本地用户访问!
二、实验目的:
当匿名用户登录服务以后,我们需要对他们的权限进行管理,管理的方式主要是通过修改ftp服务的主配置文件 /etc/vsftpd/vsftpd.conf,每修改一次主配置文件,都需要重启服务,重启服务的命令为systemctl restart vsftpd
三、实验过程
1、登陆控制
通过修改主配置文件中的anonymous_enable=YES|NO参数来决定匿名用户是否能登录服务
注意:在rhel7中匿名用户访问默认为YES,在rhel8中匿名用户访问默认为NO
2、家目录控制
默认情况下,用户登录ftp服务看到的是/var/ftp目录里的内容,通过在主配置文件中添加anon_root参数来更改匿名用户的家目录
如图:
设置后结果如下:匿名用户默认访问/software目录
3、上传控制
通过修改主配置文件中的anon_upload_enable=YES|NO参数来控制匿名用户是否能上传自己的文件到ftp服务中
参数未打开之前,匿名用户上传时会报错550,表示程序本身拒绝该操作
参数打开以后,匿名用户上传时会报错553,表示文件系统权限过小,因为我们要上传文件的目录为/var/ftp,在服务器主机中可以看到该目录只对超级用户可写
此时我们给该目录满权限,任何人可以读写执行:chmod 777 /var/ftp/pub
但是在客户端登陆时报错500,表示权限过大,因为我们下载的是vsftp(very secure ftp),一旦给用户过大的权限(大于755),服务会直接报错,不允许访问
如果你的文件系统是一个默认的发布目录,那么该文件系统对于默认的发布用户是不可以写的,但是我们可以给给它的pub子目录中上传,但需要设置该目录为满权限
此时可以看到pub目录中有上一步上传的文件
4、下载控制
注意:此种方式下载的文件默认存放在登录服务器时的目录,如果不想在该目录下面下载,则可以先进入想存放文件的目录,然后再该目录下登录ftp,或者使用下载工具wget进行下载,下载命令为:wget ftp://ip -O 指定目录
虽然刚才成功上传了文件passwd,但是却不能下载,因为可以看到匿名用户对该目录没有读的权限
此时我们可以通过修改anon_world_readable_only=NO参数
anon_world_readable_only=NO表示匿名用户可以下载不能读的文件
此时下载成功
5、目录建立控制
注意:因为此时环境不是shell环境,因此建立文件不用touch命令,它所支持的命令可以用“ ?”查看
anon_mkdir_write_enable=YES表示用户可以建立目录,注销该参数,则不能建立
6、删除和重命令控制
通过修改参数anon_other_write_enable=YES|NO来控制是否能够删除文件
anon_other_write_enable=YES表示能够删除和重命名文件
anon_other_write_enable=NO表示不能删除和重命名文件
修改后结果如下:
7、登陆数量控制:
通过对参数max_clients进行修改来控制同时登录服务的最大数量未设定登录数量之前:可以有无限多个客户同时登录
设定以后:
8、 上传速率控制
通过控制参数anon_max_rate的大小来控制客户主机上传文件时的最大传输速率
例如:
哈哈,这大概就是会员与非会员的待遇了
五、本地用户的访问
本地用户:在ftp所在的主机中具有真实的用户身份
实验环境:
两台rhel7主机,
主机一的ip:192.168.0.99(服务器)
主机二的ip:192.168.0.102(客户主机)
新建两个本地用户并且必须给他们设置一个密码:
useradd westos
passwd westos
useradd lee
passwd lee
实验过程:
1、登陆控制
通过控制参数local_enable来决定本地用户是否可以登录,但要注意,当用户密码输入错误或者用户本身不存在时,会报错530
local_enable=YES 本地用户可以登录
local_enable=NO 本地用户不可以登录
2、家目录控制
本地用户默认登录都在自己的家目录中,如果要修改本地用户家目录,则修改参数local_root即可
修改以后再登录结果如下:
3、写权限控制
可以通过控制参数write_enable的值来控制本地用户是否可写可删除文件
write_enable=YES 本地用户可写可删除文件
write_enable=NO 本地用户不能写入和删除文件
默认情况下本地用户可以写入和删除文件:
write_enable=YES时:
write_enable=NO时:
4、上传文件权限控制
通过修改local_umask的值:
local_umask=022和local_umask=077时分别创建文件的权限如下图:
5、用户登陆控制
/etc/vsftpd/ftpusers ##永久黑名单,只要进入名单,无论进行何种操作都是黑名单用户
/etc/vsftpd/user_list ##默认黑名单,可以通过某些设定变成白名单
将lee用户添加到永久黑名单:vim ftpusers
此时lee用户登陆失败:
在名单中删掉lee用户后,lee用户可以直接登录
将lee用户添加到临时黑名单:vim user_list。然后将user_list名单设为白名单,当该名单为白名单时,默认用户不能登录,只有名单里的用户才可以登录,修改主配置文件中的userlist_deny参数即可
6、锁定用户到自己的家目录中
默认情况下,本地用户可以进入根目录,这样是很危险的事情,有些用户我们需要把他锁定到自己的家目录中,打开参数chroot_local_user=YES后,所有用户将被锁定到自己的家目录中出不去
但是打开参数后,意味着用户被锁定到了自己的家目录中,因此级别降低了,所以权限也需要降低,所以我们需要去掉用户写的权利chmod u-w /home/*
7、锁定用户到自己的家目录中的白名单
在该名单的人没有被锁定到自己的家目录中,其他默认用户都被锁定到自己的家目录中,需要修改的参数如下:
chroot_local_user=YES
chroot_list_enable=YES 表示名单开启
chroot_list_file=/etc/vsftpd/chroot_list 其中/etc/vsftpd/chroot_list为名单的名字,该名单默认情况下在系统中是没有的,需要自己编辑
8、锁定用户到自己的家目录中的黑名单
在该名单的人被锁定到自己的家目录中,其他默认用户都没有被锁定到自己的家目录中,需要修改的参数如下:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
六、虚拟用户的访问
虚拟用户:在我们当前的系统中没有用户身份,只有在登录ftp服务时才承认这个身份
问:为什么引入虚拟用户?
答:假设一个企业在互联网中开放了一个ftp服务,那么它会在服务器中给每个要登陆服务器的人建立一个账号吗,显然不会,因为不管从资源消耗还是安全角度考虑,都不太合适,我们只想让客户登录服务器便可以,并不想给客户太多权利,但是如果我们建立的是普通用户,那么该用户除了能登陆ftp服务之外,还有很多别的权利,所以我们只需要为ftp服务构建一系列的认证体系,不要让他拥有对系统进行操作的权利,这就体现了虚拟用户的价值。
实验
实验环境(rhel8):在rhel8中安装ftp服务,关闭selinux,关闭防火墙
实验1.建立虚拟用户
1、建立虚拟用户并对文件进行加密
1、vim /etc/vsftpd/ftp_auth_file #建立认证文件模板
注意:该文件为明文,不能直接在系统中使用
2、db_load -T -t hash -f ftp_auth_file ftp_auth_file.db
#加密认证文件 -T:转换 -t:加密类型 -f:指定转换文件
加密完成后会产生/etc/vsftpd/ftp_auth_file.db文件,是系统识别的文件
3.加密后的.db文件和ftp服务也没有什么关系,需要用该文件去生成pam的认证策略(pam理解:客户端登录vsftp服务时会输入一个用户名字,vsftpd会根据pam程序去读取配置文件,配置文件中写了认证方式,可以验证该用户的信息是否正确,正确时认证通过,错误时认证失败),生成过程如下:
在/etc/pam.d下编辑pam的生成策略文件,文件名字任意,但必须在/etc/pam.d目录下
vim /etc/pam.d/strategy
文件内容:
account required pam_userdb.so db=/etc/vsftpd/ftp_auth_file
auth required pam_userdb.so db=/etc/vsftpd/ftp_auth_file
#account:账号 required:认证策略,表示强制认证,必须通过认证才能继续进行
pam_userdb.so:使用该插件完成认证
db=/etc/vsftpd/ftp_auth_file:认证信息的名单需要让该插件知道
4.此时,建立的strategy文件依然和ftp无关,因此我们需要让ftp程序能够识别认证具体操作如下:
修改ftp的主配置文件
vim /etc/vsftpd/vsftpd.conf
修改如下内容:
pam_service_name=strategy #指定认证策略文件
guest_enable=YES #指定虚拟用户功能开启
guest_username=ftp #指定虚拟用户在ftp服务器上的用户身份
5、重启vsftpd服务后可以进行测试:
如图所示,三个虚拟用户都可以成功登录ftp,但是这些用户在系统中并不是真实存在的,只有在ftp程序中才承认这三个用户的存在
实验2、虚拟用户家目录的独立设定
1、建立目录以及标识文件,以便区分三个用户
2、修改ftp的配置文件
vim /etc/vsftpd/vsftpd.conf
具体修改内容如下:
local_root=/ftpuserdir/$USER #$USER 是一个变量,哪个用户登录该处就指的是哪个用户的目录
user_sub_token=$USER #告诉ftp所做的指定
写完配置文件后重启服务:
systemctl restart vsftpd
修改完配置文件后在登陆时每个虚拟用户可以看到自己独立的家目录
实验3、用户配置独立
建立pub目录并且修改pub目录的权限是为了上传文件
此时每个用户都可以上传文件(在参数anon_upload_enable参数打开状态下),但是如果只想要有些用户可以上传有些用户不可以上传,这种方法是不行的,需要把每个用户的配置都独立起来
首先,需要编辑ftp配置文件:
user_config_dir=/etc/vsftpd/user_config
并且关闭上传功能:anon_upload_enable=NO
#在此目录中与用户名称相同的文件为用户
此时所有虚拟用户都不能上传文件
要想把有些用户独立出来,需要编辑文件,具体步骤如下:
mkdir /etc/vsftpd/user_config
vim /etc/vsftpd/user_config/westos2
anon_upload_enable=YES
设定完成后westos2用户可以上传文件,westos1和westos3不行,此时就可以实现不同用户的独立
注意:做本章有关ftp的实验时,在修改ftp的配置文件遇到问题时,可用命令man 5 vsftp查找用法
结束!!!