一、FTP服务概述:
1、FTP介绍
FTP是文件传输协议,用于Internet上的控制文件的双向传输,是一个应用程序。
基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。
FTP大大的简化了文件传输的复杂性,它能够使文件通过网络从一台主机传送到另一个主机,却不受其计算机和操作系统类型的限制。无论是PC、服务器、大型机、还是ISO、Linux、Windows。只要双方都支持FTP,就可以方便可靠的传送文件。
2、端口说明
FTP服务器默认使用TCP协议的20、21端口与客户端进行通信。
20端口用于建立数据连接,并传输文件数据。
21端口用于建立控制连接,并传输FTP控制命令。
3、FTP数据链接的两种方式
(1)主动模式:服务器主动发起数据连接
客户端-->服务器建立控制连接(21端口)。
客户端随机选择一个未使用的端口,告知服务器使用这个端口进行数据连接,服务器通过控制连接把请求发送到客户端指定的端口。
(2)被动模式:服务器被动等待数据连接
客户端-->服务器建立控制连接(21端口)。
服务器随机选择一个端口,作为数据连接,数据传出。服务器告知客户端使用服务器指定的端口进行数据连接和数据传输。
被动模式更容易穿越防火墙,因此在实际应用中被广泛使用。
这里的主动和被动,是相对于的FTP server 端来判断的。
如果server 去连接client 开放的端口,说明是主动的,相反,如果client去连接server开放的端口,则是被动的。
二、实验:搭建FTP服务器
Linux系统中的VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件。
1、实验环境准备:
FTP服务端:xnode1 IP:192.168.200.11
FTP客户端:xnode2 IP:192.168.200.12
关闭防火墙和selinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
systemctl stop firewalld;systemctl disable firewalld
2、安装vsftp服务器
yum -y install vsftpd
#启动服务
systemctl start vsftpd
systemctl enable vsftpd
3、FTP默认目录:/var/ftp目录
该文件夹是vsftpd提供服务的文件集散地,包括一个pub子目录。在默认配置下,所有的目录都只是只读的。
ls /var/ftp/
三、登录FTP服务器
vsftpd允许用户以下3种认证模式登录到FTP服务器:
- 匿名用户:任何人都可以直接登录服务器
- 本地用户:通过本地用户输入密码登录服务器
- 虚拟用户:本身不存在、是一个虚拟出来的用户、就算黑客破解的用户信息也无法登录服务器
1、匿名用户登录
FTP服务首先要求登录到服务器上,然后再传输文件,这对于很多公开提供软件下载的服务器来说十分不便,于是匿名用户访问就诞生了。使用一个公共的用户anonymous,让任何人都可以很方便的从这些服务器上下载软件。
以下实验所设置的匿名用户可实现登录,可上传,下载文件。
将vsftpd的配置文件进行备份:
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
vi /etc/vsftpd/vsftpd.conf
取消#anon_upload_enable=YES和#anon_mkdir_write_enable=YES这两行的注释,即设置允许匿名用户上传文件、允许匿名用户创建目录,如下图所示:
注:anon_other_write_enable=YES这个参数默认没有,这个参数对匿名用户来说权限太大,可进行删除、重命名等操作,不安全,请慎重使用这个参数!本实验不设置这个参数。
重启服务并授权:
systemctl restart vsftpd
# 授权:为匿名用户授权/var/ftp/pub/目录,以实现上传文件、创建目录操作
chown ftp.ftp /var/ftp/pub/
cd /var/ftp/pub
echo hahaha >test.txt
验证1:Win+R-->cmd
在C:\Users\Administrator下可以看到下载的文件。
注:匿名用户名可以是anonymous或ftp,没有密码。FTP匿名登录时,建议用户名使用 anonymous,它是标准规范,而 ftp 仅作为备选或特定系统实现。
验证2:打开资源管理器,在地址栏输入地址:ftp://192.168.200.11
测试:在pub目录下匿名用户可进行创建目录、上传文件操作。
验证3:Xnode2安装客户端访问ftp服务器
Linux客户端:
lftp 是一个功能强大的下载工具,它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在编译的时候包含openssl库)。lftp的界面非常好一个shell: 有命令补全,历史记录,允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载等功能。
yum install -y lftp
lftp 192.168.200.11
lftp 192.168.200.11:/> cd pub
#创建目录
lftp 192.168.200.11:/pub> mkdir test
lftp 192.168.200.11:/pub> ls
#下载文件
lftp 192.168.200.11:/pub> get test.txt
#上传文件
lftp 192.168.200.11:/pub> put /root/anaconda-ks.cfg
注:工作中,匿名用户只是只读访问,写的权限也没有的。默认匿名用户家目录的权限是755,这个权限一般是不能改变的。
还可以设置匿名访问的家目录:
mkdir /opt/centos
mount /dev/sr0 /opt/centos
#修改ftp匿名访问的家目录
echo anon_root=/opt >>/etc/vsftpd/vsftpd.conf
systemctl restart vsftpd
测试:
2、禁止匿名用户登录
vi /etc/vsftpd/vsftpd.conf #设置anonymous_enable=NO
重启服务:
systemctl restart vsftpd
验证:Win+R-->cmd
3、普通用户登录
#创建用户yun
useradd yun
#更改用户 yun 的密码
echo 123 | passwd --stdin yun
#创建用户jsj
useradd jsj
#更改用户 jsj的密码
echo 123 | passwd --stdin jsj
验证:Win+R-->cmd,用户名yun,密码123;用户名jsj,密码123
4、对本地用户访问ftp服务器时的切换目录权限进行限制
本地用户登录ftp服务器时,其默认的ftp根目录为该用户的主目录,如:用户yun为/home/yun。默认本地用户可以切换到其它目录,这很不安全,如下图所示:
很多情况下,我们希望限制ftp用户只能在其主目录下活动,不允许他们跳出主目录之外去浏览服务器上的其他目录。
vi /etc/vsftpd/vsftpd.conf
注:chroot_local_user=yes表示将用户限制在自己的主目录,allow_writeable_chroot=YES表示设置用户在自己的主目录下有写权限。
重启服务:
systemctl restart vsftpd
验证:Win+R-->cmd
5、账号的权限控制
黑名单:在黑名单上标记的用户,是禁止访问ftp服务的用户
白名单:在白名单上标记的用户,是允许访问ftp服务的用户,白名单比黑名单的制定更为严格和安全
(1)黑名单
开启黑名单
vi /etc/vsftpd/vsftpd.conf
注:新增一行:userlist_deny=YES,表示开启黑名单,即不允许/etc/vsftpd/user_list中的用户登录ftp服务器。参数userlist_enable=YES,表示启用user_list用户列表名单。
将yun用户加入到用户名单列表中:
vi /etc/vsftpd/user_list # user_list为用户列表文件
重启服务:
systemctl restart vsftpd
验证:Win+R-->cmd
(2)白名单
开启白名单
vi /etc/vsftpd/vsftpd.conf
注:vi编辑器下快速按行号定位方法:非编辑模式下输入:ngg,如:128gg,将快速定位到第128行。
以上设置userlist_deny=NO,表示开启白名单,即只允许/etc/vsftpd/user_list中的用户登录ftp服务器。
重启服务:
systemctl restart vsftpd
验证1:Win+R-->cmd,分别使用yun、jsj两个用户进行测试:
yun用户在白名单中,登录成功,jsj用户没在白名单中,登录失败。
验证2:Xnode2客户端访问ftp服务器
lftp yun@192.168.200.11
注:要想使用root用户登录ftp服务器,需要把/etc/vsftpd/ftpusers里面的root用户注销掉即可。但不建设这么做!!!!
所有位于/etc/vsftpd/ftpusers文件内的用户都不能访问vsftpd服务。当然为了安全起见,这个文件种默认包括了root、bin和daemon等用户。
总结:
关于FTP用户列表文件/etc/vsftpd/user_list的说明:
这个文件包括的用户可能是被拒绝访问vsftpd服务的,也可能是允许访问vsftpd服务的。主要取决于/etc/vsftpd/vsftpd.conf中的userlist_deny参数是设置为yes还是no。
当userlist_deny=NO时,仅允许文件中的用户访问FTP服务器(白名单);
当userlist_deny=YES时,不允许文件中的用户访问FTP服务器(黑名单)。
6、使用工具:FTP客户端_FileZilla
Windows中安装并运行FileZilla,使用yun登录,密码123。
上传文件test.txt:
实验发现:用户yun登录服务器后,可以创建文件,上传文件、下载文件、删除文件等操作。
******************************************上机实践***************************************
虚拟机xnode1恢复快照,然后完成以下实验:
练习1:某公司技术部准备搭建一台功能简单的FTP 服务器,允许所有员工上传和下载文件,并允许创建用户自己的目录。
分析:
允许所有员工上传和下载文件需要设置允许匿名用户登录,并且需要开启允许匿名用户上传功能、创建目录功能。
关闭防火墙和selinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
systemctl stop firewalld;systemctl disable firewalld
安装ftp服务并启动
yum -y install vsftpd
#启动服务
systemctl start vsftpd
systemctl enable vsftpd
修改配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
vi /etc/vsftpd/vsftpd.conf #去掉以下行的注释
#允许匿名用户访问
anonymous_enable=YES
#允许匿名用户上传文件并可以创建目录
anon_upload_enable=YES
anon_mkdir_write_enable=YES
重启服务并授权:
systemctl restart vsftpd
#授权
chown ftp.ftp /var/ftp/pub/
同理,你也可以在/var/ftp下新建一个目录并授权,以供员工上传文件使用。
然后测试,可以新建文件夹、上传文件了,但是不能重命名,不能删除!
注意,默认匿名用户家目录的权限是755,这个权限是不能改变的。
注:工作中,匿名用户只是只读访问,写的权限也没有的。
测试:
练习2:某公司内部现在有一台FTP 和WEB 服务器,FTP 的功能主要用于维护公司的网站内容,包括上传文件、创建目录、更新网页等等。公司现有两个部门负责维护任务,他们分别使用team1 和team2帐号进行管理。现要求仅仅允许team1 和team2 帐号登录FTP 服务器,但不能登录本地操作系统,并将这两个帐号的根目录限制为/var/www/html,且不能进入该目录以外的任何目录。
分析:
ftp 和www web服务器相结合。
www web服务器根目录: /var/www/html
只允许:team1和team2两用户可以上传。禁止匿名登录。
将FTP 和WEB 服务器做在一起是企业经常采用的方法,这样方便实现对网站的维护,为了增强安全性,首先需要设置仅允许本地用户访问,禁止匿名用户登录。其次使用chroot 功能将team1和team2 锁定在/var/www/html 目录下。如果需要删除文件则还需要注意本地权限。
解决方案:
(1)建立ftp 帐号team1 和team2 ,并禁止本地登录操作系统,设置其密码
useradd -s /sbin/nologin team1
useradd -s /sbin/nologin team2
echo "123456" | passwd --stdin team1
echo "123456" | passwd --stdin team2
(2)配置vsftpd.conf主配置文件
cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/vsftpd.conf
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #12行:禁止匿名用户登录
local_enable=YES #16行:允许本地用户登录
chroot_local_user=YES #101行,去掉行首的#,把用户限制在ftp根目录
allow_writeable_chroot=YES #新增102行,设置用户在ftp根目录有写的权限
local_root=/var/www/html #新增103行,设置本地用户ftp访问的根目录为/var/www/html
userlist_deny=NO #新增130行,开启白名单
如下图所示:
将用户team1、team2加入到用户名单列表中:
vi /etc/vsftpd/user_list
(3)安装httpd,修改目录权限、重启服务
yum install -y httpd
ll -d /var/www/html/
chmod -R o+w /var/www/html/
ll -d /var/www/html/
#重启服务
systemctl restart vsftpd
测试
不能切换目录:
用户team1、team2可以在自己的ftp根目录下上传、下载文件、创建目录、进行删除、重命名等操作,请自行实验验证。
客户端用lftp登录查看:
lftp 192.168.200.11 -u team1,123456
lftp team1@192.168.0.63:~> ls
参考文献:https://blog.csdn.net/m0_58076958/article/details/130818054?ops_request_misc=&request_id=&biz_id=102&utm_term=ftp%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%90%AD%E5%BB%BA%E4%B8%8E%E9%85%8D%E7%BD%AE&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-130818054.142^v102^pc_search_result_base2&spm=1018.2226.3001.4187