首先恢复虚拟机1、虚拟机2快照,重新准备环境:
虚拟机1-单网卡-仅主机模式-192.168.100.3-FTP服务器
虚拟机2-单网卡-仅主机模式-192.168.100.4-FTP客户端
物理机(windows系统宿主机)-FTP客户端
两台虚拟机保证本地yum源配好!!
两台虚拟机均关闭SELinux与firewalld防火墙!!
-------------------------------------------------------
任务一、使用FTP实现文件下载
【1】虚拟机1上通过 yum 源安装 Vsftp 服务
Centos 7 系统上安装 Vsftp 软件有多种方式,比如源码编译安装、rpm方式安装、yum源方式安装等。因为前面的课程中已经配置好了yum源,在此直接通过yum 方式进行安装。
[root@localhost ~]# yum install -y vsftpd //-y 选项表示不再询问直接安装 安装完成后,可以通过 rpm 命令查看是否已经安装。
[root@localhost ~]# rpm -qa |grep vsftpd
如果能够在输出中看到 vsftpd-3.0.2-27.el7.x86_64 这个包,则说明安装成功。
【2】虚拟机1上运行 Vsftp 服务
启动服务。
[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# systemctl status vsftpd
通过该命令可以查看服务是否处于运行状态,比如结果中有 active (running)字样,表示服务正在运行中。
设置服务开机自启动。
[root@localhost ~]# systemctl enable vsftpd 设置为开机自启动后,当开机或者重启操作系统后,vsftpd 自动运行。
Windows 系统查看共享文件。
假如 FTP 服务器 IP 地址是 192.168.100.3,则打开“此电脑”,地址栏输入 ftp://192.168.100.3 可以看到文件共享页面。
【3】定制 Vsftp 实现文件下载
前面我们运行了 Vsftp 服务,并且能够看到文件共享,但这仅仅是使用了 Vsftp 默认的配置,而如果我们想定制自己的配置就需要修改配置文件来实现。
我们看一个案例,要求:
允许匿名用户登录,允许匿名用户上传、下载、修改、删除文件与文件夹;
匿名用户根目录:/home/ftp;
案例实现:
Vsftp 的默认配置文件在/etc/vsftpd/目录下,默认主配置文件为 vsftpd.conf,
我们可以通过修改该文件实现案例的要求。
(1)为了避免我们的修改造成 Vsftp 崩溃无法恢复的后果,建议先备份一下默认配置文件
[root@localhost ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bac
(2)准备共享文件目录
[root@localhost ~]# mkdir -p /home/ftp/share
[root@localhost ~]# echo “Welcome” >> /home/ftp/share/test.txt [root@localhost ~]# chmod -R 777 /home/ftp/share
(3)修改配置文件
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
对应配置项修改为以下内容(以下配置项若有则直接修改值,若没有则直接添加,若已注释则取消注释):
anonymous_enable=YES #允许匿名用户登录
write_enable=YES #可写
anon_upload_enable=YES #匿名用户可上传
anon_mkdir_write_enable=YES #匿名用户可创建目录
anon_other_write_enable=YES #匿名用户其他写权限,如删除、重命名
anon_root=/home/ftp #匿名用户登录后主目录
(4)重启 vsftp 服务
[root@localhost ~]# systemctl restart vsftpd
(5)此电脑地址栏输入地址(ftp://192.168.100.3),可以看到我们共享的文件,进去可以验证相关读写权限
-------------------------------------------------------
任务二、FTP服务实现用户登录限制
众所周知,Vsftp服务以安全性作为设计初衷,肯定会支持很多安全相关的配置,比如设置禁止匿名访问、设置文件访问权限、虚拟用户验证等,通过安全相关配置项的配置,能够最大程度地保证文件共享的安全性。
通过一个案例,来简单了解 Vsftp 服务的安全配置。
要求:
禁止匿名用户登录
允许 ftp1、ftp2 这两个账户登录 ftp
登录后主目录 ftp1 是/home/ftp1,ftp2 是/home/ftp2
将 ftp1 锁定在主目录下,ftp2 不做限制
【1】虚拟机1上创建测试用户
[root@localhost ~]# useradd -d /home/ftp1 ftp1
[root@localhost ~]# useradd -d /home/ftp2 ftp2
[root@localhost ~]# passwd ftp1
[root@localhost ~]# passwd ftp2
【2】虚拟机1准备本地待共享目录
[root@localhost ~]# mkdir -p /home/ftp1/pub1
[root@localhost ~]# touch /home/ftp1/test1.txt
[root@localhost ~]# mkdir -p /home/ftp2/pub2
[root@localhost ~]# touch /home/ftp2/test2.txt
【3】虚拟机1修改配置文件
[root@localhost ~]# cp /etc/vsftpd/vsftpd.conf.bac /etc/vsftpd/vsftpd.conf
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
修改为以下内容(以下配置项若有则直接修改值,若没有则直接添加,若已注释则取消注释):
anonymous_enable=NO #禁止匿名用户登录
local_enable=YES #允许本地用户登录
write_enable=YES #写权限
chroot_local_user=NO #切换目录限制
chroot_list_enable=YES #限制切换文件生效
chroot_list_file=/etc/vsftpd/chroot_list #设置哪些用户被限制
allow_writeable_chroot=YES #开启主目录写权限
pam_service_name=vsftpd #登录认证方式
这里补充一下:
Vsftp 限制用户切换目录主要是通过 chroot_local_user、chroot_list_enable、 chroot_list_file 这三个配置项配合实现。
chroot_list_file 配置项指向列表文件,列表文件中填入要被限制(或不被限制)的用户名,
如果要想让chroot_list_file文件生效,就需要设置 chroot_list_enable=YES,而这个文件中填入的用户是被限制还是不被限制则取决于 chroot_local_user 这个配置项。
第一种情形,假如我们配置 chroot_local_user=YES,那列表文件中列出的用户就是属于白名单用户,不被限制切换目录,而不在此文件中的所有用户均被设 置为禁止切换出主目录;
第二种情形,假如我们配置 chroot_local_user=NO,那列表文件中列出的用户就是属于黑名单用户,被禁止切换目录,而不在此文件中的所有用户均被设置为允许切换出主目录。
【4】虚拟机1修改 chroot_list 文件
[root@localhost ~]# vi /etc/vsftpd/chroot_list
其内容(限制哪个用户就把哪个用户添加进去):
ftp1
【5】虚拟机1重启 vsftp 服务
[root@localhost ~]# systemctl restart vsftpd
【6】测试
在虚拟机2的火狐浏览器输入 ftp://192.168.100.3,回车后弹出登录窗口
通过ftp1 用户登录,登录后无法切换到其他目录下
通过ftp2 用户登录,登录后可以切换到所有目录甚至根目录下
-------------------------------------------------------
任务三、FTP服务虚拟账号配置
我们前面任务二实现了通过用户登录FTP,但是我们用的用户都是系统实体账户,这样相当于泄露了我们账户的密码,FTP其实还可以实现通过虚拟用户进行登录。我们看一个案例:
案例:
使用虚拟用户user2、user3登录FTP服务器,访问主目录是/var/ftp/vuser,用户只允许查看文件,不允许上传、修改等操作。
步骤:
【1】创建用户数据库
(1)首先创建虚拟用户文件:
[root@server ~]# mkdir /vftp
[root@server ~]# vim /vftp/vuser.txt
内容如下:
user2
123456
user3
123456
保存退出。
(2)生成数据库
前面创建的txt文件并不能被系统直接识别,需要使用相关命令转换成db数据库文件才能够被系统识别
[root@server ~]# db_load -T -t hash -f /vftp/vuser.txt /vftp/vuser.db
[root@server ~]# ll /vftp/
总用量 16
-rw-r--r--. 1 root root 12288 10月 12 15:03 vuser.db
-rw-r--r--. 1 root root 26 10月 12 15:01 vuser.txt
(3)修改数据库文件权限
为了安全考虑,设置前面生成的db文件权限为700
[root@server ~]# chmod 700 /vftp/vuser.db
[root@server ~]# ll /vftp/
总用量 16
-rwx------. 1 root root 12288 10月 12 15:03 vuser.db
-rw-r--r--. 1 root root 26 10月 12 15:01 vuser.txt
【2】配置PAM文件
为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM模块(可插拔认证模块),我们修改vsftpd服务对应的PAM配置文件:
[root@server ~]# vim /etc/pam.d/vsftpd
将默认的所有配置全部注释(前面添加#),然后末尾添加两行:
auth required pam_userdb.so db=/vftp/vuser
account required pam_userdb.so db=/vftp/vuser
保存退出。
【3】创建虚拟账户对应的系统用户
(1)首先添加一个用户vuser,并指定家目录为/var/ftp/vuser
[root@server ~]# useradd -d /var/ftp/vuser vuser
(2)设置目录属性为vuser组vuser用户,并为其他所有用户赋予读和执行的权限
[root@server ~]# chown vuser.vuser /var/ftp/vuser
[root@server ~]# chmod 555 /var/ftp/vuser
[root@server ~]# ll /var/ftp/ |grep vuser
dr-xr-xr-x. 3 vuser vuser 78 10月 12 15:17 vuser
[root@server ~]# touch /var/ftp/vuser/test.sh
【4】修改vsftpd配置文件并重启vsftpd
[root@localhost ~]# cp /etc/vsftpd/vsftpd.conf.bac /etc/vsftpd/vsftpd.conf
[root@server ~]# vi /etc/vsftpd/vsftpd.conf
修改为以下内容(以下配置项若有则直接修改值,若没有则直接添加,若已注释则取消注释):
anonymous_enable=NO #禁止匿名用户登录
anon_upload_enable=NO #禁止匿名用户上传
anon_mkdir_write_enable=NO #禁止匿名创建目录
anon_other_write_enable=NO #禁止匿名其他写权限
local_enable=YES #允许本地用户登录
chroot_local_user=YES #切换目录限制,锁定根目录
allow_writeable_chroot=YES #开启主目录写权限
write_enable=NO #禁止写权限
guest_enable=YES #开启虚拟账号访问功能
guest_username=vuser #设置虚拟账号对应的系统账号
listen=YES #设置FTP服务ipv4
listen_ipv6=NO #关闭FTP服务ipv6
pam_service_name=vsftpd #登录认证方式
重启服务:
[root@server ~]# systemctl restart vsftpd
【5】测试验证
在虚拟机2上进行测试,发现能够通过user2进行登录,并且能够查看到里面的文件,不能切换出共享目录,没有写权限:
[root@client ~]# yum install -y ftp
[root@client ~]# ftp 192.168.100.3
Connected to 192.168.100.3 (192.168.100.3).
220 (vsFTPd 3.0.2)
Name (192.168.100.3:root): user2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,100,3,134,171).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Oct 12 11:06 test.sh
226 Directory send OK.
ftp> cd /etc
550 Failed to change directory.
ftp> mkdir testuser1
550 Permission denied.
ftp> quit
221 Goodbye.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!