首页 > 其他 > 详细

文件共享服务之FTP

时间:2020-11-11 09:55:15      阅读:41      评论:0      收藏:0      [点我收藏+]
任务背景

某创业公司刚刚起步,随着业务量的增多,咨询和投诉的用户也越来越多,公司的客服部门由原来的2个增加到5个。客服部门平时需要处理大量的用户反馈,不管是邮件,还是QQ,还是电话,客服人员都会针对每一次的用户反馈做详细的记录 ,但是由于客观原因,客服人员没有成熟稳定的客户服务系统,所以希望运维部门能够提供一个可以通过浏览器查看并下载的方式来管理这些文档,并且随时跟踪客户的反馈情况。

任务要求

  1. 客服人员必须使用==用户名密码==(kefu/123)的方式登录服务器来下载相应文档。
  2. ==不允许匿名==用户访问
  3. 客服部门的相关文档保存在==指定的目录==里/data/kefu
  4. 客服用户使用用户kefu/123登录后就==只能==在默认的==/data/kefu目录里活动==

任务拆解

  1. 搭建ftp服务
  2. 根据需求修改配置文件
    • 不允许匿名用户访问
    • 指定kefu人员数据目录,并且只能在指定目录活动

涉及知识点

  • FTP服务的搭建(掌握)
  • FTP服务的基本配置(==重点==)

课程目标

  • 了解FTP服务的工作模式
  • ==能够禁止FTP服务匿名用户登录==
  • ==能够禁锢FTP服务本地用户的家目录==
  • ==能够指定FTP服务本地用户和匿名用户的默认数据目录==

理论储备

一、FTP服务介绍

FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。

技术分享图片

  • 主要用于互联网中==文件的双向传输==(上传/下载)、文件共享
  • 跨平台 Linux、Windows
  • FTP是==C/S==架构,拥有一个客户端和服务端,使用==TCP协议==作为底层传输协议,提供可靠的数据传输
  • FTP的默认端口 ==21号==(命令端口) ==20号==(数据端口,主动模式下) 默认被动模式
  • FTP程序(软件)vsftpd

二、FTP服务的客户端工具

  • Linux:ftp、lftp(客户端程序)
  • Windows:FileZilla、IE、Chrome、Firefox
  • lftp和ftp工具区别:
    • lftp:默认是以==匿名用户==访问
    • ftp:默认是以==用户名/密码==方式访问
    • lftp可以批量并且下载目录
lftp localhost:~> mirror remote local  下载整个目录到本地
lftp localhost:~> mirror -R local remote  rename 上传整个目录到远程同时可以重命名

三、FTP的两种工作模式

  • 主动模式

    技术分享图片

  1. 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
  2. ==服务端==的21号命令端口响应客户端的随机命令端口
  3. ==服务端==的20号端口==主动==请求连接客户端的随机数据端口
  4. 客户端的随机数据端口进行确认
  • 被动模式

    技术分享图片

  1. 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
  2. 服务端的21号命令端口响应客户端的随机命令端口
  3. ==客户端主动==连接服务端打开的大于1023的随机数据端口
  4. 服务端进行确认

思考1:

FTP的主动模式好还是被动模式好?

四、搭建简单FTP服务

了解配置文件: man 5 vsftpd.conf

[root@ftp-server ~]# grep -v ^# /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES            支持匿名用户访问    
local_enable=YES                非匿名用户
write_enable=YES                写总开关
local_umask=022             反掩码  file:644  rw- r-- r-- dir:755
dirmessage_enable=YES       启用消息功能
xferlog_enable=YES          开启或启用xferlog日志
connect_from_port_20=YES    支持主动模式(默认被动模式)
xferlog_std_format=YES      xferlog日志格式
listen=YES                     ftp服务独立模式下的监听

pam_service_name=vsftpd     指定认证文件
userlist_enable=YES         启用用户列表
tcp_wrappers=YES                支持tcp_wrappers功能

###任务解决方案

分析:
1. 搭建FTP服务
2. 通过修改配置文件完成服务搭建

步骤:
环境准备:
ftp-server:10.1.1.1     搭建ftp服务
client:10.1.1.2         测试验证
1.搭建FTP服务
[root@ftp-server ~]# rpm -ql vsftpd
/etc/rc.d/init.d/vsftpd         启动脚本
/etc/vsftpd                         ftp服务的配置文件主目录
/etc/vsftpd/ftpusers                用户列表文件【黑名单】
/etc/vsftpd/user_list           用户列表文件【白+黑】,默认黑名单
/etc/vsftpd/vsftpd.conf         主配置文件
/usr/sbin/vsftpd                    程序本身,二进制的命令
/usr/share/man/man5/vsftpd.conf.5.gz        man文档
/usr/share/man/man8/vsftpd.8.gz
/var/ftp                                匿名用户的数据根目录
/var/ftp/pub                        匿名用户的数据扩展目录

启动服务:
[root@ftp-server ~]# service vsftpd start
Starting vsftpd for vsftpd: [  OK  ]
[root@ftp-server ~]# netstat -nltp|grep vsftpd
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      1442/vsftpd 

2.通过修改配置文件完成服务的搭建
1)了解配置文件
man 5 vsftpd.conf

2)根据需求修改配置文件
测试匿名用户是否可以登录:
[root@client ~]# ftp 10.1.1.1
-bash: ftp: command not found
[root@client ~]# yum -y install ftp
[root@client ~]# ftp 10.1.1.1
Connected to 10.1.1.1 (10.1.1.1).
220 (vsFTPd 2.2.2)
Name (10.1.1.1:root): ftp
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 (10,1,1,1,130,60).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Dec 28 09:44 file1
-rw-r--r--    1 0        0               0 Dec 28 09:44 file2
-rw-r--r--    1 0        0               0 Dec 28 09:44 file3
-rw-r--r--    1 0        0               0 Dec 28 09:44 file4
-rw-r--r--    1 0        0               0 Dec 28 09:44 file5
drwxr-xr-x    2 0        0            4096 Mar 01  2013 pub
226 Directory send OK.
ftp> 
结论:默认匿名用户可以访问
需求1:禁止匿名用户登录
    1)修改配置文件:
anonymous_enable=NO
    2)重启服务:
[root@ftp-server ~]# service vsftpd restart
Shutting down vsftpd: [  OK  ]
Starting vsftpd for vsftpd: [  OK  ]
    3)测试验证:
[root@client ~]# ftp 10.1.1.1
Connected to 10.1.1.1 (10.1.1.1).
220 (vsFTPd 2.2.2)
Name (10.1.1.1:root): ftp
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

需求2:kefu人员固定家目录
    1.在ftp服务器上创建一个kefu普通用户
    [root@ftp-server ~]# useradd kefu
    [root@ftp-server ~]# echo 123|passwd --stdin kefu
    Changing password for user kefu.
    passwd: all authentication tokens updated successfully.

    2.创建一个目录/data/kefu用来存放数据文件
    [root@ftp-server ~]# mkdir /data/kefu -p
   3.修改配置文件来指定本地用户的默认数据根目录
   local_root=/data/kefu
   4.重启服务
   [root@ftp-server ~]# service vsftpd restart
    Shutting down vsftpd: [  OK  ]
    Starting vsftpd for vsftpd: [  OK  ]
    5.客户端测试验证
    Linux客户端:
    [root@client ~]# ftp 10.1.1.1
    Connected to 10.1.1.1 (10.1.1.1).
    220 (vsFTPd 2.2.2)
    Name (10.1.1.1:root): kefu
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> pwd
    257 "/data/kefu"
    ftp> 
    Windows客户端:
    测试结果,可以下载文件,但是不能上传文件
    分析:
    1.确定ftp服务本身是否允许本地用户上传,查看配置文件local_enable=YES
    2.确定本地用户数据根目录/data/kefu是否有权限让kefu用户去写
    结论:
    ftp服务本身允许写,但是数据目录权限不允许kefu用户写
    解决:
    [root@ftp-server ~]# setfacl -m u:kefu:rwx /data/kefu/
    说明:如果客服部门人员很多,可以将所有人加入到一个组里,然后让组成员对/data/kefu目录可写

需求3:禁锢本地用户的默认数据根目录(在自己的家里面活动)
    修改配置文件
    chroot_local_user=YES

补充:关于禁锢用户的家目录选项
1. 禁锢所有人的家
chroot_local_user=YES
2. 禁锢大部分人,允许小部分人
chroot_local_user=YES
chroot_list_enable=YES      开启用户列表文件
chroot_list_file=/etc/vsftpd/chroot_list    指定用户列表文件

echo stu1 >> /etc/vsftpd/chroot_list

3. 允许大部分人,禁锢小部分人
chroot_local_user=NO
chroot_list_enable=YES      开启用户列表文件
chroot_list_file=/etc/vsftpd/chroot_list    指定用户列表文件

echo kefu >> /etc/vsftpd/chroot_list
任务总结

FTP文件共享服务的搭建

  1. 明白需求——>学会拆解任务
  2. 实施落地——>做简单——>排错和分析定位问题(重要|掌握方法)——>情绪控制
  3. 测试验证——>完成任务——>总结经验

Linux下客户端工具使用

FTP工具
lcd
get  mget
put  mput
!shell-commands
LFTP工具

###补充扩展

FTP服务的访问控制

1. 对象访问控制

ftpusers 黑名单

user_list 默认是黑名单(可以成为白名单)

[root@client ~]# ftp 10.1.1.1
Connected to 10.1.1.1 (10.1.1.1).
220 (vsFTPd 2.2.2)
Name (10.1.1.1:root): root
530 Permission denied.
Login failed.
ftp> exit
原因:root用户在黑名单里.ftpusers

[root@client ~]# ftp 10.1.1.1
Connected to 10.1.1.1 (10.1.1.1).
220 (vsFTPd 2.2.2)
Name (10.1.1.1:root): stu1
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> 

原因:stu1用户在黑名单里。ftpuses

为什么两个用户的提示信息不一样?
原因:默认情况下user_list文件也是黑名单,如果在该文件里直接拒绝,不给输入密码的机会。

user_list要成为白名单,需要再配置文件里增加:
userlist_deny=NO
注意:如果user_list是白名单,那么必须在该文件里的用户才可以访问ftp服务。

总结:

  1. 用户在ftpusers文件中,那么用户不能访问ftp服务器
  2. 用户在user_list文件中,如果该文件是白名单,那么====在该文件中的用户可以访问ftp服务
  3. 如果user_list文件是白名单,用户即在ftpusers中又在user_list中,那么ftpusers拒绝优先
2. 网络访问控制
  • 支持tcp_wrappers

    /etc/hosts.allow 允许

    /etc/hosts.deny 拒绝

    技术分享图片

  • 写法
/etc/hosts.deny
vsftpd:all                        全部拒绝
vsftpd:all  EXCEPT 192.168.0.2    拒绝所有除了192.168.0.2  
vsftpd:192.168.0.254      拒绝单个ip地址=hosts.allow文件里增加vsftpd:192.168.0.254:allow  允许192.168.0.254访问

vsftpd:192.168.0.0/255.255.255.0   拒绝某个网段
vsftpd:192.168.0.0/255.255.255.0 EXCEPT 192.168.0.254   拒绝某个网段,但是除了某个ip地址
注意:子网掩码不支持192.168.0.0/24这种写法

思考2: 如何判断一个服务是否支持tcp_wrappers?

1)./configure --enable-libwrap 表示支持tcp_wrappers访问控制

2)rpm安装

[root@ftp-server vsftpd]# ldd /usr/sbin/vsftpd |grep libwrap*
    libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f2956480000)

[root@ftp-server vsftpd]# ldd /usr/sbin/sshd |grep libwrap*
    libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f015ff29000)

示例:拒绝10.1.1.0/24和192.168.91.0/24网段的所有人访问,除了10.1.1.3服务器

vim /etc/hosts.deny
vsftpd:10.1.1.0/255.255.255.0,192.168.91.0/255.255.255.0 EXCEPT 10.1.1.3

课后实战

  • 准备环境:

    主机1(server):FTP服务器 10.1.1.1
    主机2(client):FTP客户端 10.1.1.2

  • 根据需求搭建自己的FTP服务器:
  1. ==匿名用户==可以到==/anon/data目录==里==上传下载==文件,同时也可以下载其他人所上传的文件;
1. 更改匿名用户的默认数据根目录
[root@ftp-server ~]# mkdir /anon/data -p

anon_root=/anon/data
2. 开启匿名用户上传的功能          
anon_upload_enable=YES
anon_mkdir_write_enable=YES
3. 匿名用户创建上传文件的默认权限指定    anon_umask=022

测试验证:

[root@client tmp]# lftp 10.1.1.1
lftp 10.1.1.1:~> ls
ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable anonymous root
原因:匿名用户的默认数据根目录权限给太大
解决方案:
1.取掉默认目录权限,再创建一个目录并且给o+w
2.修改配置文件将匿名用户的家往上写一层  anon_root=/anon
  1. 客户端可以使用zhangsan(自己名字),访问你的ftp服务器,但是不能登录ftp服务器的操作系统,并且只能在自己的家目录中活动;
1.在服务端创建用户zhangsan
useradd -s /sbin/nologin zhangsan
echo 123|passwd --stdin zhangsan
2.禁锢张三的家目录
chroot_local_user=YES   禁锢所有人包含zhangsan
或者
chroot_local_user=NO        允许所有人跳转
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
echo zhangsan >> /etc/vsftpd/chroot_list        只禁锢张三
  1. zhangsan(自己名字)用户可以上传下载文件,并且所有本地用户上传的文件都存放在/local/data;
mkdir /local/data -p
local_root=/local/data
  1. 在客户端/tmp/zhangsan(自己名字)下面创建5个文件,叫file{1..5},通过客户端工具以匿名用户身份将/tmp/zhangsan整个以你名字命名的目录上传到FTP服务器的pub目录中;

    lftp 10.1.1.1:/> mirror -R /tmp/zhangsan/ ./pub/
    Total: 1 directory, 5 files, 0 symlinks    
    New: 5 files, 0 symlinks
    lftp 10.1.1.1:/> 
    
    lftp localhost:~> mirror remote local  下载整个目录到本地
    lftp localhost:~> mirror -R local remote  rename 上传整个目录到远程同时可以重命名
  2. 客户端通过redhat用户(密码redhat)下载FTP服务器上的"2018-11-10"文件(自己创建)到你本地/tmp/zhangsan(自己名字)目录里;
lftp redhat@10.1.1.1:~> mirror 2018-12-30/ /tmp/zhangsan/aaa
Total: 1 directory, 1 file, 0 symlinks
New: 1 file, 0 symlinks
6 bytes transferred
将远程目录下载到本地并且重命名
  1. 不允许192.168.0.254访问你的ftp服务。
vim /etc/hosts.allow
vsftpd:192.168.0.254:deny
或者
vim /etc/hoasts.deny
vsftpd:192.168.0.254
  1. 固定服务器端被动模式下的端口号范围为2000~2050
pasv_min_port=2000
pasv_max_port=2050
测试验证:
netstat -na|grep vsftpd
  1. 限制匿名用户下载文件的速率为500kbps,最大连接数为10个
anon_max_rate=500000
max_clients=10

文件共享服务之FTP

原文:https://blog.51cto.com/14625831/2548855

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!