实验环境
1
、
Window
系统版本:
Windows 10
或者
Window11
系统;
2
、
VMware
软件版本:
VMware® Workstation 17 Pro
;
3
、
Linux
系统版本:
Red Hat Enterprise Linux 9.3 64
位
一、搭建ftp
1、安装ftp服务器
rpm -ivh vsftpd-1.1.3-8.i386.rpm
#离线安装
yum install vsftpd
#在线安装
yum remove vsftpd
#卸载程序
2、修改配置文件,使匿名账户具有访问、查看共享目录的权限
cd /etc/vsftpd
#进入vsftp的配置目录
cp vsftpd.conf vsftpd.conf_bak
#将原始配置文件备份
vim /etc/vsftpd/vsftpd.conf
#修改配置文件
基础配置只需要改以下三项
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
以下是配置项的说明,不一定修改:
local_enable=NO|YES #本地登陆控制,NO表示禁止,YES表示允许
anonymous_enable=yes/no #是否允许匿名用户访问
anon_upload_enable=YES/NO #上传控制
anon_world_readable_only=NO/YES #下载可读文件控制
anon_mkdir_write_enable=YES|NO #目录创建控制
max_clients=2 #表示最大同时访问数为2
#local_root=/mnt #家目录控制,默认进入的家目录是进入登录用户的家目录
write_enable=NO|YES #写权限控制
chroot_local_user=YES #锁定用户到自己的家目录中
vsftpd.conf 配置文件里可以写入此参数:
userlist_deny=NO 表示允许user_list的用户登录,则user_list变白名单。
/etc/vsftpd/ftpusers ##放入的用户永久黑名单
/etc/vsftpd/user_list ##放入的用户默认黑名单
3、修改本地上传目录权限
cd /var/ftp/pub
mkdir /var/ftp/pub/upload
chmod 777 /var/ftp/pub/upload -R
chmod 777 /var/ftp/pub -R
-R 递归地修改指定目录及其子目录和文件的权限。
4、重启ftp服务
systemctl restart vsftpd.service
#重启ftp服务
systemctl status vsftpd.service
#检查ftp服务状态
5、测试
在win10/11的地址栏输入 ftp:// 服务器IP地址 【在Linux中输入ifconfig即可查看】
6、问题解决
如果无法访问,权限不足 请检查以下两项是否关闭。
1、关闭 SELinux
setenforce 0
getenforce 查看是否关闭:Permissive 是关闭状态
或者:vim /etc/sysconfig/selinux 将SELINUX=enforcing 改为 SELINUX=disabled 然后重启
2、关闭 防火墙
systemctl stop firewalld #关闭防火墙
systemctl status firewalled
systemctl disable firewalld #关闭防火墙开机启动【不建议使用】
二、添加虚拟用户访问
1、建立认证文件模板
#建立模板需要在/etc/vsftp/的目录下完成
vim /etc/vsftpd/ftp_auth_file #建立模板
test1
123
test2
456
test3
789
#规则为一行用户名,一行该用户的密码。我们这里设置了三个虚拟用户和密码
2、加密认证文件
#然后我们把写出的文件,转换成系统可识别的认证文件
cd /etc/vsftpd/
db_load -T -t hash -f ftp_auth_file ftp_auth_file.db
#这里可能会提示需要下载,yes就行了
转换完成后我们可以看见文件夹里多出来ftp_auth_file.db样式的文件,打开查看为乱码,这串乱码就是加密后的文件。
3、建立pam认证文件
pam
是我们系统中的一个插件程序,用来确认配对信息, 例如我们用ftp
登录主机用户获取信息是需要先输入用户名,然后输入密码才可以进入。所以我们建立的虚拟用户也需要建立这样的认证文件才可以让别人访问。
vim /etc/pam.d/test #建立文件,test这个文件名可以自定义
account required pam_userdb.so db=/etc/vsftpd/ftp_auth_file
auth required pam_userdb.so db=/etc/vsftpd/ftp_auth_file
#这两行代码一定不能写错,格式也必须对齐
我们来分析一下这个文件内容:
account
:账户
auth
:认证,也就是密码
required
:必须通过,强制认证
pam_userdb.so
:
pam
的插件名称
db=/etc/vsftpd/ftp_auth_file
: 指定pam
插件认证的文件,注意的是我们刚转换的格式ftp_auth_file.db, 但是这里默认找的就是后缀为 .db
的文件,所以不需要加 .db
4、编辑vsftp主配置文件
vim /etc/vsftpd/vsftpd.conf
pam_service_name=test
#指定认证的文件,之前用的是/etc/pam.d/vsftp
guest_enable=YES
#指定虚拟用户功能开启
guest_username=ftp
#指定虚拟用户在ftp服务器上的用户身份,ftp的家目录就是/var/ftp/pub 目录
完成这些设定后就完成了虚拟用户的建立, 重启服务 systemctl restart vsftpd 就可以在win的cmd中测试登录查看。
![](https://img-blog.csdnimg.cn/direct/7f3a051df1c448eaa0eef0f67dc4f96e.png)
三、虚拟用户家目录的独立设定
默认的虚拟用户我们登录的家目录都在
/var/ftp
里,那他们创 建的目录上传的东西都会在一起, 如果要删除某个虚拟用户的文件,找起来就很麻烦了,所以 为了方便管理我们将这些虚拟用户建立分开的家目录。
mkdir /home/test{1..3}
touch /home/test1/abc1
touch /home/test2/abc2
touch /home/test3/abc3
#首先我们去给每个虚拟用户建立他们的家目录
vim /etc/vsftpd/vsftpd.conf
#编辑配置文件,写入两条配置
local_root=/home/$USER: 指定用户的登录的家目录,$USER是系统对于用户的一个变量指代
user_sub_token=$USER: 指定上面写的 $USER是我们系统中的,否则vsftp无法识别
完成后,依然是重启服务
systemctl restart vsftpd
四、文件的上传与下载
下载:get [文件名] #下载后在用户目录下寻找【进入cmd后C:后面跟的路径】
上传:put [文件名] #上传时一定要保证该文件在用户目录下