ftp服务介绍
FTP是用来在两台计算机之间传输文件,是Internet中应用非常广泛的服务之一。它可根据实际需要设置各用户的使用权限,同时还具有跨平台的特性,即在UNIX、Linux和Windows等操作系统中都可实现FTP客户端和服务器,相互之间可跨平台进行文件的传输。因此,FTP服务是网络中经常采用的资源共享方式之一。
FTP(File Transfer Protocol)即文件传输协议,是一种基于TCP的协议,采用客户/服务器模式。通过FTP协议,用户可以在FTP服务器中进行文件的上传或下载等操作。虽然现在通过HTTP协议下载的站点有很多,但是由于FTP协议可以很好地控制用户数量和宽带的分配,快速方便地上传、下载文件,因此FTP已成为网络中文件上传和下载的首选服务器。
vsftpd安装架构
实验环境:
rhel8-work:IP:192.168.0.20,提供ftp服务
rhel8-sever:IP:192.168.0.50,获取ftp服务
- 首先rhel8-work安装vsftp服务
注意,因为rhel8中yum命令变为了dnf的链接,所以我们这两个命令都可以使用,参数是一样的 - 关闭selinux和firewalld
关闭这两个的原因是:selinux属于内核的安全服务会阻止外部访问,
firewalld是火墙,也会组织访问,
在当前我们不去管这两个服务如何设定直接关闭就好
关闭selinux:
首先用命令 getenforce 查看状态
Enforcing 表示开启,要关闭需要在配置文件里去设定关闭 “vim /etc/sysconfig/selinux”
更改完后,因为是内核更改所以需要重启reboot
关闭firewalld:
关闭服务:systemctl stop firewalld
关闭开机启动:systemctl disable firewalld - 开启vsftp服务:systemctl start vsftpd
开机是启动vsftp服务:systemctl enable vsftpd
- 在rhel8-sever中测试
完成上述操作在rhel8-seve中打开浏览器去访问测试
会登陆到rhel8-work主机里hello用户的家目录里,这里演示的都是用户登录
vsftp服务简介
服务名:vsftpd.service
配置目录::/etc/vsftpd
主配置文件::/etc/vsftpd/vsftpd.conf
默认发布目录: /var/ftp
报错信息:
550 | 程序本身拒绝 |
553 | 文件系统权限限制 |
500 | 权限过大 |
530 | 认证失败 |
匿名用户访问控制
这里我们就不需要用浏览器了,在shell中使用lftp命令来操作,如果没有这个命令可以用yum仓库来安装
rnel8中默认是不允许匿名用户访问,我们需要更改配置允许访问
-
是否允许匿名用户访问
编辑配置文件:vim /etc/vsftpd/vsftpd.conf
更改anonymous_enable=yes/no,
yes表示允许,no表示不允许
更改配置一定要重启服务,然后就可以登录了
-
家目录控制
上面我们匿名登录进去看到的路径,在我们的共享端的真实路径是在 “/var/ftp/”
如果我们要匿名用户的访问目录,可以在配置文件中写入配置 “anon_root=/rhel8” 重启服务
-
上传控制
更改配置: “anon_upload_enable=YES/NO”,YES表示同意,NO表示否定
如果不该会报错550,更改完配置后,还需要更改目录的权限,传输文本对于 “/var/ftp” 同意的最大权限是755,我们上传可以上传到 “/var/ftp/pub” 目录,而这个目录可以改权限为777
我们把 “/etc/shadow” 放到 “pub” 目录里
-
下载控制
写入配置: anon_world_readable_only=NO/YES,NO表示可以下载不可读文件,YES表示不能下载
如果配置是YES,就会报错
配置NO,我们就可以下载了
-
目录建立控制
更改配置:anon_mkdir_write_enable=YES|NO
更改前,我们测试建立目录被拒绝
-
删除重命令控制
写入配置:anon_other_write_enable=YES|NO ,YES表示允许,NO表示否定
注意这里执行的rm删除命令只对文件起作用,不可删除目录 -
登陆数量控制
写入配置:max_clients=2,表示最大同时访问数为2
可以看到连续登录3个匿名用户,在第三个用户使用时无法正常访问了 -
上传速率控制 配置:anon_max_rate=
首先我们先测试一下本来上传速率,截取一个1G的大小的文件上传的 “pub” 目录下
看到没有限制下上传的速率使57.33M/s,可见如果所有人都是这个速率我们的服务器是无法承受的所以编辑配置文件限制速率,anon_max_rate=10240000,表示最大速率为10M
本地用户的访问控制
lftp 192.168.0.20 -u 用户名
-
登陆控制
更改配置:local_enable=NO|YES,NO表示禁止,YES表示允许
-
家目录控制
默认进入的家目录是进入登录用户的家目录,我们写入配置来更改
写入配置:local_root=/mnt,定位到 “/mnt” 里
-
写权限控制
编辑配置:write_enable=NO|YES,NO表示不允许写,YES表示允许
-
上传文件权限控制
编辑配置local_umask=055,这是表示建立文件时会扣除055的权限
-
用户登陆控制
这里有两个配置文件可以编写
/etc/vsftpd/ftpusers ##放入的用户永久黑名单
/etc/vsftpd/user_list ##放入的用户默认黑名单
首先测试 “vim /etc/vsftpd/ftpusers”,把hello用户放入改文件,并且这个文件不用重启服务,直接生效设置
放入在 “/etc/vsftpd/user_list” 里的用户默认也是黑名单 -
用户登陆白名单
在配置文件里新写入此参数:userlist_deny=NO 表示允许userlist的用户登录
将hello用户设定/etc/vsftpd/user_list中,重启服务测试
hello用户还是可以访问,testuser用户就会被拒绝 -
锁定用户到自己的家目录中
更改配置:chroot_local_user=YES
更改后因为直接去登录访问会出现500报错,所以我们更改目录的权限:chmod u-w /home/*,然后再访问
-
锁定用户到自己的家目录中的白名单
在锁定用户到家目录的配置起用后chroot_local_user=YES
既然有被锁定的,那我们就可以设置白名单来让某些用户不被锁定
打开:chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
表示chroot_list名单开启,并指定的文件是/etc/vsftpd/chroot_list
因为/etc/vsftpd/chroot_list,所以我们去编辑新建出来,并把hello用户写入
然后测试hello用户是否可以访问根目录
-
锁定用户到自己的家目录中的黑名单
如果配置chroot_local_user=NO,表示用户不会被锁定在家目录
这时我们想要让某些用户被锁定就需要设定
打开:chroot_list_enable=YES
在 chroot_list_file=/etc/vsftpd/chroot_list 写入用户
这里将hello用户写入名单,然后我们来测试
可以看到,hello用户指定访问它自己的家目录,不能切换到其他路径,而testuser用户就可以切换到/mnt里
虚拟用户访问
虚拟用户访问是避免通过ftp程序进入我们的真实用户的家目录操作,和和禁止匿名访问,从而创建的系统中不存在的用户,同样拥有用户名和密码认证,并且可以通过用户名和密码访问共享文件系统。
建立虚拟用户
-
建立认证文件模板
建立模板需要在/etc/vsftp/的目录下完成
我们建立 “vim /etc/vsftpd/ftp_auth_file”
我们写了3个虚拟用户和密码,注意写的时候注意后面的空格,在这里空格也是会被计算在内的。 -
加密认证文
然后我们把写出的文件,转换成系统可识别的认证文件
“ db_load -T -t hash -f ftp_auth_file ftp_auth_file.db”
参数 | 说明 |
---|---|
-T | 转换 |
-t | 类型,这里用的是hash |
-f | 指定的转换文件 |
转换出的就是一串加密字符
-
建立pam认证文件
pam是我们系统中的一个插件程序,用来确认配对信息,例如我们用ftp登录主机用户获取信息是,需要先输入用户名,然后输入密码才可以进入,可以来查看pam 的配置目录里的文件内容
可以pam.d目录里是有vsdtp的认证文件的,文件内容我们列出来了,所有我们建立的虚拟用户也需要建立这样的认证文件才可以让别人访问
建立文件 vim /etc/pam.d/test ,test这个文件名可以自定义
我们来分析一下这个文件内容:
account:账户
auth:认证,也就是密码
required:必须通过,强制认证
pam_userdb.so:pam的插件名称
db=/etc/vsftpd/ftp_auth_file:指定pam插件认证的文件,注意的是我们刚转换的格式ftp_auth_file.db,但是这里默认找的就是后缀为 .db 的文件,所以不需要加 .db -
编辑vsftp主配置文件
vim /etc/vsftpd/vsftpd.conf
pam_service_name=test:指定认证的文件,之前用的是/etc/pam.d/vsftp
guest_enable=YES:指定虚拟用户功能开启
guest_username=ftp:指定虚拟用户在ftp服务器上的用户身份,ftp的家目录就是/var/vsftp
ftp的家目录可以查看/etc/passwd里的内容找到
完成这些设定后就完成了虚拟用户的建立,如何确定是虚拟用户呢,可以命令 ip加用户 名查看,查不到说明不存在 -
测试登录
我们使用另一台主机登录这些虚拟用户
**注意:**虚拟用户的每个账户默认是被允许多个人同时去登录,但是我们可以设置限制,去限制一个账户同时登录人数,在匿名用户里有讲过。并且如果新增或要删除虚拟用户,都需重新进行转换加密文件。
虚拟用户家目录的独立设定
默认的虚拟用户我们登录的家目录都在/var/ftp里,那他们创建的目录上传的东西都会在一起,如果要删除某个虚拟用户的文件,找起来就很麻烦了,所以为了方便管理我们将这些虚拟用户建立分开的家目录。
- 首先我们去给每个虚拟用户建立他们的家目录
建立的家目录命名使用虚拟用户名设定,为了和系统的设定一致,因为系统在创建用户的时候就会自动生成和用户名一样的家目录,touch建立的文件是为了我们实验在登录是可以检测确实是在我们设定的目录里 - 编辑配置文件:vim /etc/vsftpd/vsftpd.conf
写入两条配置
local_root=/home/$USER: 指定用户的登录的家目录, $USER是系统对于用户的一个变量指代
user_sub_token= $USER:指定上面写的 $USER是我们系统中的,否则vsftp无法识别
完成后,依然是重启服务 - 测试
虚拟用户配置独立设定
在 /etc/vsftp/vsftp.conf 这个配置文件里,我们进行的设定是针对所有用户生效的,现在我们去建立独立的配置文件给独立的虚拟用户
- 首先在主配置文件里写入配置
user_config_dir=/etc/vsftpd/user_config:指定用户配置文件的目录
- 创建user_config目录,并创建和用户名一样的文件
在这个文件里写入anon_upload_enable=YES:允许上传文件
并且给虚拟用户的家目录里建立pub目录开启权限为777,使目录可以上传文件
- 测试
可以看到,只有test1这个虚拟用户可以上传,其他的用户不可以,这就是独立配置的作用
**注意的是这里写的独立配置使用的是虚拟用户的配置,**例如我们让test1用户不能登录
注意:每次改完配置一定要重启服务去识别,否则新写入的配置无法生效,如果重启服务时报错,那就是你入的配置有问题,可以通过删除配置文件重新装程序来还原配置文件,或者查看日志找出问题所在。