目录
一.FTP相关知识
1.FTP的工作原理??
2.FTP的工作模式
3.匿名用户
二.项目设计与准备
项目实施
Ⅰ.安装,启动和停止vsftpd服务
?Ⅱ.认识VSftpd配置文件
Ⅲ.配置匿名用户FTP实例
Ⅳ.配置本地模式的常规FTP服务器案例
Ⅴ.设置vsftp虚拟账号
Ⅵ.补充服务器端vsftpd的主被动模式配置
一.FTP相关知识
? ? ? ? 以HTTP为基础的WWW服务功能虽然强大,但对于文件传输来说略显不足。一种专门用于文件传输的FTP服务应运而生
? ? ? ?FTP服务就是文件传输服务,全程File Transfer Protocol,顾名思义就是文件传输协议,具备更强的文件传输可靠性和更高的效率。
1.FTP的工作原理??
? ? ? ?FTP大大简化了文件传输的复杂性,它能够使文件系统通过网络从一台主机传送到另外一台计算机上却不受计算机和操作系统的限制。
Ⅰ/客户端向服务器发出连接请求,同时客户端系统动态地打开一个大于1024的端口等候服务连接。
Ⅱ.若FTP服务器在端口21侦听到该请求,则会在客户端1031端口和服务器的21号端口之间建立一个FTP会话连接
Ⅲ.当需要传输数据时,FTP客户端再动态地打开一个大于1024的端口,连接到服务端的20端口,并在这两个端口之间再进行数据的传输。当数据传输完毕,这两个端口会自动关闭
Ⅳ.当客户端断开与FTP服务器的连接时,客户端上动态分配的端口将自动释放。
2.FTP的工作模式
FTP服务有两种工作模式:主动传输模式(Active FTP)和被动传输模式(Passive FTP)
3.匿名用户
? ? ? ?FTP服务不同于WWW,他首先要求登录到服务器上,然后再进行文件的传输。这对于很多公开提供软件下载的服务器来说十分不便,于是匿名用户访问就诞生了:通过使用一个共同的用户名anonymous,密码不限的管理策略(一般使用用户的邮箱作为密码即可)让任何用户都可以很方便地从FTP服务器上下载软件?
二.项目设计与准备
Linux服务器和客户端的配置信息
主机名称 | ? ? ? ?操作名称 | IP地址 | ?角色 | Redhat 8 | redhat 8? ? ? ? ? ? ? ? | 192.168.80.3? ? | FTP服务器 | centos 8 | centos 8 | 192.168.80.4 | FTP客户端 | Windows | Windows | 192.168.10.1 | 宿主机,FTP客户端 |
项目实施
Ⅰ.安装,启动和停止vsftpd服务
[root@dns ~]# yum -y install vsftpd [root@dns ~]# yum -y install ftp [root@dns ~]# rpm -qa | grep vsftpd [root@dns ~]# rpm -qa | grep ftp
[root@dns ~]# systemctl restart vsftpd [root@dns ~]# systemctl enable vsftpd [root@dns ~]# firewall-cmd --permanent --add-service=ftp [root@dns ~]# firewall-cmd --reload?
[root@dns ~]#setsebool -p ftpd_full_access=on? ? //开放SElinux ?
?Ⅱ.认识VSftpd配置文件
1.主配置文件
vsftpd服务程序的主配置文件(/etc/vsftpd/vsftpd.conf)
vsftpd服务程序常用的参数以及作用 参数 作用 listen=[yes|no] 是否以独立运行的方式监听服务 listen_address=IP地址 设置要监听的IP地址 listen_port=21???????? 设置FTP服务的监听端口 download_enable=[yes|no] 是否允许下载文件
uesrlist_enable=[yes|no]
userlist_deny=[yes|no] 设置用户列表为“允许”还是“禁止”操作 max_clients=0 最大客户端连接数,0为不限制 max_per_ip=0 同一IP地址的最大连接说;0为不限制 anonymous_enable=[yes|no]
是否允许匿名用户访问 anon_uplode_enable=[yes|no] 是否允许匿名用户上传文件 anon_umask=022 匿名用户上传文件的umask值 anon_root=/var/ftp 匿名用的FTP根目录 anon_mkdir_write_enable=[yes|no] 是否允许匿名用户创建目录 anon_other_write_enable=[yes|no] 是否开放匿名用户的其他写入权限(包括重命名,删除等权限) aono_max_rate=0 匿名用户的最大传输速率,0为不限制 local_enable=[yes|no] 是否允许本地用户登录FTP local_umask=022 本地用户上传文件的umask值
local_root=/var/ftp 本地用户的FTP根目录 chroot_local_user=[yes|no] 是否将用户权限禁锢在FTP目录,确保安全 local_max_rate=0 本地用户最大传输速率(KB/S),0为不限制
?
2./etc/pam.d/vsftpd
? ? vsftpd的Pluggable Authentication Modules (PAM)配置文件,主要用来加强vsftpd服务器的用户认证
3./etc/vsftpd/ftpusers
所有位于此文件内的用户都不能访问vsftpd服务。当然,为了安全起见,这个文件中默认已经包括了root,bin和daemon等系统账号。
?4./etc/vsftpd/user_list
这个文件中包括的用户有可能是被拒绝访问vsftpd服务,也有可能是允许访问的,这主要取决于vsftpd主配置文件/etc/vsftpd/vsftpd.conf中的“userlist_deny”参数是设置为yes or no
- userlist_deny=NO时,仅允许文件列表中的用户访问FTP服务器
- userlist_deny=YES时,这也是默认值,拒绝文件列表中的用户访问FTP服务器
?5./var/ftp文件夹
该文件夹时vsftpd提供服务的文件集散地,他包含一个pub子目录。在默认配置下,所有的目录都是只读的,不过只有root有写权限
Ⅲ.配置匿名用户FTP实例
①vsftpd的认证模式
vsftpd允许用户以3中认证模式登录到FTP服务器上、
- 匿名开放模式:是一种最不安全的认证模式,任何人都无须密码验证而直接登录到FTP服务器
- 本地用户模式:是通过Linux系统本地的账户信息进行认证的模式,相较于匿名开放模式,该模式更加安全,而且配置起来也很简单。但是如果被黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。
- 虚拟用户模式:是一种最安全地认证模式,他需要为FTP服务单独建立用户数据库文件,虚拟映射用来进行口令验证地账户信息,而这些账户信息在服务器系统中实际不存在,仅供FTP服务程序进行认证使用。
?②配置匿名用户登录的FTP服务器实例
例:新建一台FTP服务器,允许匿名用户上传和下载文件,匿名用户的根目录设置为/var/ftp
1.新建测试文件,编辑/etc/vsftpd/vsftpd.conf
把anonymous_enable=NO 改为anony_enable=YES? ? ? ? //允许匿名用户登录
添加
anon_root=/var/ftp? ? ? ? ? ? ? ? ? //设置匿名用户的根目录为/var/ftp
anon_upload_enable=YES? ?//允许匿名用户上传文件
anon_mkdir_write_enable=YES? //允许匿名用户创建文件夹
anon_other_write_enable=YES? //表示允许匿名用户删除文件
2.允许SElinux,让防火墙放行ftp服务,重启vsftpd服务
3. 在windows10客户端资源管理器输入ftp://192.168.80.3,打开pub目录,新建一个文件夹
?社么原因呢?原来是系统的本地权限没有设置
4.设置本地系统权限,将属主设为ftp<匿名用户>,或者对pub目录赋予其他用户写的权限
5.重启服务器,在Windows10再次测试
?新建文件夹
?
?试试上传文件
上传了一个html文件
返回ftp服务器,查询
?上传成功
6.在linux客户端尝试上传文件与下载文件
在Linux上测试,用户名输入ftp,密码处按“enter”键即可
下载文件:
?上传文件:
Ⅳ.配置本地模式的常规FTP服务器案例
1.FTP服务器配置要求
? ? ? 公司内部现在有一台FTP服务器和Web服务器,FTP主要用于维护公司网站内容,包括上传文件,创建目录,更新网页等。公司现有两个部门负责维护任务,两者分别用team1和team2账号进行管理。先要求仅team1和team2账号登录FTP服务器器,但不能登录本地系统,并将这两个账号的根目录限制为/web/www/html,不能进入该目录以外的任何目录。
2.需求分析
? ? 将FTP服务器和Web服务器放在一起是企业常用的方法,这样方便实现对网站的维护。为了增强安全性,首先需要仅允许本地用户访问,并禁止匿名用户登录。其次,使用chroot功能将team1和team2锁定在/web/www/html目录下。如果需要删除文件,则还需要注意本地权限。
3.解决方案
①建立维护网站内容的FTP账号team1,team2和user1并禁止本地登录,然后为其设置密码。
②配置vsftp.conf主配置文件并做相应修改写入配置文件时。
anonymous_enable=NO? ? ? ? ? ? ? //禁止匿名登录 local_enable=YES? ? ? ? ? ? ? ? ? ? ? ?//允许本地用户登录 local_root=/web/www/html? ? ? ? ? ?//设置本地用户的根目录为/web/www/html chroot_local_user=NO? ? ? ? ? ? ? ? ?//是否限制本地用户,这也是默认值,可以省略 chroot_list_enable=YES? ? ? ? ? ? ? //激活chroot功能 chroot_list_file=/etc/vsftpd/chroot_list? ? ?//设置锁定用户在根目录中的列表文件 allow_writeable_chroot=YES? ?//只要启动chroot就一定加入这条:允许chroot限制,否则会出现连接错误
③建立/etc/vsftpd/chroot_list文件,添加team1和team2账号
?④防火墙放行,关闭Selinux,重启服务
⑤修改本地权限
⑥在linux客户端centos8上安装ftp
?⑦使用ftp登录,发现530报错:
首先查看 /etc/vsftpd/ftpusers和 /etc/vsftpd/user_list 这两个文件之中,是否有用来连接ftp的用户名,如果有,删掉。
/etc/vsftpd/vsftpd.conf? 之中关于userlist的设置,有两条语句
userlist_enable? ?和? ?userlist_deny
前者用于设置是否对/etc/vsftpd/user_list之中的用户名进行检查,后者设置是否拦截/etc/vsftpd/ftpusers和 /etc/vsftpd/user_list 这两个文件之中的所有用户。
但我们不用管那么多,只要确保/etc/vsftpd/ftpusers和 /etc/vsftpd/user_list之中没有我们的用户名就可以了
设完之后如果还不行,可能是pam模块设置的问题,用户验证FTP服务因为需要用到PAM模块,可能因为没有安装PAM模块限制而导致无法登陆
解决办法是打开 /etc/pam.d/vsftpd 文件,将下面两条语句前面加上#注释掉,重启ftp即可
auth?????? required? ? pam_listfile.so item=user sense=deny file=/etc/vsftpd/ft auth?????? required??? pam_shells.so
?⑧使用team1和team2用户不能转换目录,但能新建新文件夹,显示的是"/",其实是/web/www/html文件夹!
出现ftp:connect:没有到主机的路由问题的解决办法:
1:防火墙规则不对:解决办法:关闭防火墙或者添加防火墙端口规则
2:FTP服务的工作模式不对:解决办法:将模式改为被动模式
?为什么会出现报错呢?
观察防火墙是否关闭或者放行ftp服务
服务器和客户端同时关闭防火墙
?再次尝试
?如果你们的客户端,关闭防火墙还没有解决,就是FTP服务工作模式不对,
A 服务器 已启动vsftpd 服务,B服务器使用ftp连接A服务器成功后,提示“没有到主机的路由”
解决方法:ftp *.*.*.* ??????????????输入用户名和密码,成功后,输入 passive (将被动模式关闭),变为主动模式; ??????????????再次输入ls 查看ftp目录,成功! ?
言归正传:
?发现team1,team2用户不允许更改主目录
测试user1用户
发现user1可以自由转换目录,可以将/etc/passwd文件下载到主目录,很危险。
Ⅴ.设置vsftp虚拟账号
? ? ? ?FTP服务器的搭建工作并不复杂,但需要按照服务器的用途,合理规划相关配置。如果,FTP服务器并不对互联网上的所有用户开放,则可以关闭匿名访问,而开启实体账户或者虚拟账户的验证机制。但实际操作中,如果使用实体账户访问,FTP用户在拥有服务器真实用户民和密码的情况下,会对服务器产生潜在的危害。FTP服务器如果设置不当,则用户有可能使用实体账户进行非法操作,所以为了FTP服务器的安全,可以使用虚拟用户验证方式,也就是将虚拟的账户映射为服务器的实体账号,客户端使用虚拟账号访问FTP服务器。
? ? ?要求:使用虚拟用户user2,user3登录FTP服务器,访问主目录/var/ftp/pub,用户只允许查看文件,不允许上传,修改等操作。
1.创建用户数据库
(1)首先,保存保存虚拟账号和密码的文本文件,格式如下:
虚拟账号1
密码
虚拟账号2
密码
使用vim编辑器建立用户文件vuser.txt,添加虚拟账户user2,user3.
(2).生成数据库
保存虚拟账号及密码的文本文件无法被系统账号直接调用,需要使用db_load命令生成db数据库
文件。
?(3).修改数据库文件访问权限
数据库文件中保存着虚拟账号和密码信息,为了防止非法用户盗取,可以修改文件权限
?2.配置PAM文件
? ? ? ?为了使服务器能够使用数据库文件,对客户端进行身份验证,需要调用系统的PAM模块。PAM(Plugable Authentication Module)认可插拔认证模块,不必重新安装应用程序,通过修改指定的配置文件,调整对该程序的认证方式。
(1).备份一下/etc/pam.d/vsftpd文件
?(2).修改配置文件,将默认配置使用“#”全部注释,并添加相应字段
3.创建虚拟账户对应系统用户
?[root@localhost ~]# useradd -d /var/ftp/vuser vuser? ? ? ?---指定家目录为/var/ftp/vuser [root@localhost ~]# chown vuser.vuser /var/ftp/vuser? ? ---更改所属关系 [root@localhost ~]# chmod 555 /var/ftp/vuser? ? ? ? ? ? ? ?--更改权限 [root@localhost ~]# ls -ld /var/ftp/vuser? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--查看详细信息
4.修改/etc/vaftpd/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? //设置虚拟账号对应的系统账号为vuser listen=YES? ? ? ? ?//设置FTP服务器为独立运行 pam_service_name=vsftpd? //配置vsftp使用的PAM模块为vsftpd。
5.关闭防火墙,SElinux放行
6.在客户端上测试
?不能更改主目录,仅能查看,不能写入。
Ⅵ.补充服务器端vsftpd的主被动模式配置
(1):主动模式配置:<在主配置文件里>
Port_enable=YES? ? ? ? ? ? ? //开启主动模式
Connect_from_port_20=YES? ? //指定当主动模式开启的时候,是否启动默认的20端口监听
Ftp_date_port=%portnumber%? //上一选项使用NO参数时指定数据传输端口
(2)被动模式配置
connect_from_port_20=NO
PASV_enable=YES? ? ? ? ? ?//开启被动模式
PASV_min_port=%number%? //被动模式最低端口
PASV_max_port=%number%? ?//被动模式最大端口
|