Linux之FTP文件共享服务
Posted 锦衣admin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux之FTP文件共享服务相关的知识,希望对你有一定的参考价值。
Linux之FTP文件共享服务
FTP文件共享服务概述
FTP服务介绍
FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。
主要功能:
- 文件传输=>文件上传与文件下载
- 主要用于互联网中文件的双向传输(上传/下载)、文件共享
- 跨平台 Linux、Windows
- FTP是C/S架构,拥有一个客户端和服务端,使用TCP协议作为底层传输协议,提供可靠的数据传输
- FTP的默认端口 21号(命令端口) 20号(数据端口,主动模式下) 默认被动模式下
- FTP程序(软件)vsftpd
FTP服务的服务端工具
FTP软件名称 => vsftpd => vs(very secure ftp daemon)
FTP服务的客户端工具
- Linux:ftp、lftp(客户端程序)
- Windows:FlashFXP(虚拟主机)、FileZilla、IE、Chrome、Firefox
lftp和ftp工具区别:
- lftp:默认是以匿名用户访问
- ftp:默认是以用户名/密码方式访问
- lftp可以批量并且下载目录
Linux下ftp客户端管理工具使用方法
- 常用于用户名密码的管理
ftp命令:
# yum install ftp -y => 下载工具
# ftp 远程服务器IP => 登录方式,输入用户名和密码
#l 常用命令
ftp> ?或help => 求帮助命令
ftp>ls => 查看当前连接的FTP目录下有哪些文件。
ftp> quit => 退出
Ctrl + Shift + L => 代表清屏快捷键
help+命令:ftp> help put => 针对某个文件求帮助
put send one file => 上传文件
#l 单文件上传下载
put命令:ftp>ftp> put 本地文件路径+名称 上传(send命令速度更快)
get命令:ftp> get 远程文件路径+名称 下载
#l 批量文件上传下载
mput命令:ftp> mput 文件名称1 文件名称2 文件名称3 ... 批量上传
mget命令:ftp> mget 文件名称1 文件名称2 文件名称3 ... 批量下载
#l prompt屏蔽批量输出信息
ftp> prompt
Interactive mode on. => 开启提示
ftp> prompt
Interactive mode off. => 关闭提示
Linux下lftp客户端管理工具使用方法
- 常用于匿名账号的管理
- 主要针对整站下载和文件夹下载
lftp命令:
# yum install lftp -y => 下载工具
# lftp 用户名称@远程IP地址 => 登录方式,输入密码登录
#l 常用命令
ftp> ?或help => 求帮助命令
help+命令:ftp> help mirror => 针对某个文件求帮助
#l 批量上传下载命令
lftp> mirror -R 本地文件夹名称 => 批量上传(把shop文件夹上传到FTP服务器端
lftp> mirror 远程FTP路径 => 批量下载(把整个FTP下载到本地)
FTP的两种运行模式
在FTP服务中,其一共拥有两种模式(主动模式 + 被动模式)
- 参考点,FTP的服务器端。如果是FTP服务器端主动连接客户端=>主动模式,如果是客户端主动连接FTP服务器端=>被动模式。
- FTP默认使用的就是被动模式!
主动模式
- cmd:命令端口(发送FTP请求)
- data:数据端口(后期用于传输数据)
主动模式工作原理:
- 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务端的21号端口发起请求
- 服务端的21号命令端口响应客户端的随机命令端口
服务端的20号端口主动请求连接客户端的随机数据端口
- 客户端的随机数据端口进行确认
主动模式容易被客户端的防火墙拦截
客户端发起连接请求,发送打开的随机数据端口信息
被动模式
被动模式工作原理:
- 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
- 服务端的21号命令端口响应客户端的随机命令端口
客户端主动连接服务端打开的大于1023的随机数据端口
- 服务端进行确认
客户端不会拦截自身往外发送的请求
客户端发起连接请求,发送PASY命令
搭建FTP服务
服务搭建流程:
1. 关闭防火墙和selinux
2. 配置yum源(mount /dev/sr0 /mnt)
3. 软件三部曲
4. 了解配置文件
5. 根据需求修改配置文件来完成服务的搭建
6. 启动服务,开机自启动
7. 测试验证
服务器端搭建FTP服务
第一步:关闭防火墙与SELinux
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled
第二步:配置YUM源
https://jinyi.blog.csdn.net/article/details/116139354
第三步:安装vsftpd软件(FTP => vsftpd)
# yum install vsftpd -y
第四步:启动ftp服务并添加到开机启动项中
# systemctl start vsftpd
# systemctl enable vsftpd
第五步:测试FTP是否安装成功
# ifconfig ens33 => 查看FTP IP
[root@localhost ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.1.1.10 netmask 255.255.255.0 broadcast 10.1.1.255
查看默认登录目录存储位置:
# find / -name "pub" -type d
[root@localhost ~]# find / -name "pub" -type d
find: ‘/run/user/1000/gvfs’: Permission denied
/var/ftp/pub => 默认登录目录存放位置
-
基于浏览器访问
浏览器访问时访问不到,需要将IE 浏览器 => internet选项 => 高级 => 使用被动FTP选项关掉
-
基于FlashFxp、FileZilla软件(Windows客户端)
-
基于ftp以及lftp命令进行连接(Linux与Linux之间的FTP文件传输)
# yum install ftp lftp -y => 安装lftp和ftp Linux客户端,相当于两个小命令
# ftp 10.1.1.10 => 使用ftp软件匿名连接ftp服务器
或
# lftp 10.1.1.10 => 使用lftp软件匿名连接ftp服务器
FTP服务的配置文件详解
vsftpd 服务端软件生成了哪些文件:
# yum install vsftpd -y => 安装ftp服务
# rpm -ql vsftpd
/usr/lib/systemd/system/vsftpd.service => 启动脚本
/etc/vsftpd => 配置文件的目录
/etc/vsftpd/vsftpd.conf => 配置文件(主配置文件)
/etc/vsftpd/ftpusers => 用户列表文件,黑名单
/etc/vsftpd/user_list => 用户列表文件,可黑可白(默认是黑名单)
/usr/sbin/vsftpd => 程序本身(二进制的命令)
/var/ftp => 匿名用户的默认数据根目录
/var/ftp/pub => 匿名用户的扩展数据目录
vsftpd配置文件详解:/etc/vsftpd/vsftpd.conf
# man 5 vsftpd.conf => 当不清楚配置文件编写方式时候,用次命令查看配置文件编写方式
# 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服务独立模式下的监听,默认监听21端口
pam_service_name=vsftpd => 指定认证文件
userlist_enable=YES => 启用用户列表(黑名单),当开启这个功能,往/etc/vsftpd/user_list文件写入黑名单账号
tcp_wrappers=YES => 支持tcp_wrappers功能(FTP上传下载限速操作)
FTP访问对象控制(黑名单)
-
ftpusers 黑名单
-
user_list 默认是黑名单(可以成为白名单)
-
默认情况下,root账号是不允许登录FTP服务器( 原因:root用户在黑名单/etc/vsftpd/ftpusers和黑名单/etc/vsftpd/user_list中)
# cat /etc/vsftpd/ftpusers => 查看黑名单,默认不被允许登录FTP服务器的账号;需要删除两个黑名单中root账号才可以登录
[root@code ~]# cat /etc/vsftpd/ftpusers
...
root
...
# ftpusers 与 user_list黑名单效果不同点
ftpusers:
[root@localhost ftp]# ftp 10.1.1.10
Connected to 10.1.1.10 (10.1.1.10).
220 (vsFTPd 3.0.2)
Name (10.1.1.10:root): kefu
331 Please specify the password.
Password:
530 Login incorrect. => ftpusers被禁用,可以输入密码,返回530
Login failed.
user_list:
[root@localhost ftp]# ftp 10.1.1.10
Connected to 10.1.1.10 (10.1.1.10).
220 (vsFTPd 3.0.2)
Name (10.1.1.10:root): kefu
530 Permission denied.
Login failed.
原因:默认情况下user_list文件也是黑名单,如果在该文件里直接拒绝,不给输入密码的机会。
# user_list可以从黑名单变成白名单(允许某个用户登录FTP系统服务器)
user_list要成为白名单,需要再配置文件里增加:
# vim /etc/vsftpd/vsftpd.conf
userlist_deny=NO => 增加一行,让user_list可以从黑名单变成白名单
注意:如果user_list是白名单,那么必须在该文件里的用户才可以访问ftp服务。
#l 当黑白名单文件有同一账号,以黑名单文件ftpusers 为准
总结:
- 用户在ftpusers文件中,那么用户不能访问ftp服务器
- 用户在user_list文件中,如果该文件是白名单,那么只在该文件中的用户可以访问ftp服务
- 如果user_list文件是白名单,用户即在ftpusers中又在user_list中,那么ftpusers拒绝优先
FTP网络访问控制(限IP+限速)
-
FTP必须支持tcp_wrappers
-
/etc/hosts.allow 允许某些IP访问
-
/etc/hosts.deny 拒绝某些IP访问
如何判断某个服务是否支持tcp_wrappers:
-
./configure –enable-libwrap 表示支持tcp_wrappers访问控制(源码安装看配置项)
-
rpm安装(也包括yum安装)
#l 源码包安装时增加--enable-libwrap选项
# ./configure --enable-libwrap => 查看配置
#l rpm软件包安装和yum安装
# ldd命令 +二进制程序,查询某个软件包含哪些模块 =>基本语法
# ldd /usr/sbin/vsftpd |grep libwrap* => 查询vsftpd是否支持tcp_wrappers,有libwrap.so.0 代表支持
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f2956480000)
# ldd /usr/sbin/sshd |grep libwrap* => 查询vsftpd是否支持tcp_wrappers,有libwrap.so.0 代表支持
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f015ff29000)
限制FTP流量
# vim /etc/vsftpd/vsftpd.conf => 打开ftp配置文件,增加一行
local_max_rate=0 => 0代表不限速,默认单位为字节如:local_max_rate=1024
写法:local_max_rate=数值 + 字节
限制IP地址
服务程序:主机 => 基本语法
# vim /etc/hosts.deny => 编辑IP黑名单文件
vsftpd:all => 全部拒绝
vsftpd:192.168.0.254 => 拒绝单个IP地址
vsftpd:all EXCEPT 192.168.0.2 => 拒绝所有除了192.168.0.2
vsftpd:192.168.0.254:allow => 允许192.168.0.254访问,类似/etc/hosts.allow里增加vsftpd: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这种写法
#l 多个服务限制IP
# vim /etc/hosts.deny
vsftpd,sshd:10.1.1.1
任务解决方案
任务背景
简单来说:根据我们所学的内容(FTP)搭建一个客户服务系统(主要涉及客服资料上传与下载)
- 客服人员必须使用用户名密码(kefu/123)的方式登录服务器来下载相应文档
- 不允许匿名用户访问
- 客服部门的相关文档保存在指定的目录里
/data/kefu
local_root=/data/kefu
- 客服用户使用用户kefu/123登录后就只能在默认的/data/kefu目录里活动
解决方案
# useradd kefu => 创建客服账号(Server)
# echo 123 |passwd --stdin kefu => 给账号编写密码
# mkdir /data/kefu -p => 创建用户ftp登录时的目录
# vim /etc/vsftpd/vsftpd.conf => 修改配置文件
12行 anonymous_enable=NO => YES改为NO,不允许匿名用户访问
17行 local_root=/data/kefu => 增加一行,默认ftp登录目录为用户家目录,指定本地用户登录时访问的目录
18行 chroot_local_user=YES => 限定 kefu/123 账号等本地用户只能在/data/kefu目录下活动
# systemctl restart vsftpd => 重启服务让配置文件生效
禁锢目录补充
禁锢所有用户
# vim /etc/vsftpd/vsftpd.conf
18行 chroot_local_user=YES 禁锢所有用户,即所用用户登录FTP时只能处于禁锢目录内
给一小部分用户开通非禁锢权限
# vim /etc/vsftpd/vsftpd.conf
103 chroot_local_user=YES => 禁锢所有用户
105行 chroot_list_enable=YES => 开启用户列表文件
107行 chroot_list_file=/etc/vsftpd/chroot_list 指定用户列表文件,在此文件中的用户不会被禁锢在禁锢目录中,可以访问其他目录
# echo kefu >> /etc/vsftpd/chroot_list 代表客服这个账号不会被禁锢在指定目录
# systemctl restart vsftpd
FTP服务错误提示
响应: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
- 当限定本地用户登录目录 /data/kefu 后,对FTP服务器上传下载会出现以上报错
- 这个问题主要出现在FTP2.3.5以后的版本中,当然你可以使用
rpm -qi vsftpd
查看版本信息 - 高版本为了服务器安全性考虑,当禁锢目录
/data/kefu
具有写的权限就拒绝连接
# chmod a-w /home/dhj => 去除写权限(治标不治本,只能下载不能上传)
或
# vim /etc/vsftpd/vsftpd.conf => 核心解决方案,添加一个选项
19行 allow_writeable_chroot=YES => 允许禁锢目录/data/kefu 具有写的权限
响应: 553 Could not create file.
- 用户具有下载权限,但是没有上传权限。响应533错误信息
- 之所以无法上传,主要原因在于kefu这个账号对于/data/kefu文件夹没有w写权限
[root@code ~]# ll -d /data/kefu/
drwxr-xr-x. 2 root root 82 May 1 14:00 /data/kefu/
# setfacl -R -m u:kefu:rwx /data/kefu => 利用acl命令对用户增加写权限
# systemctl restart vsftpd => 重启服务
FTP协议引用第三方平台视频
第一步:在Linux电脑中安装httpd(阿帕奇)
# yum install httpd -y => 第一步:在Linux电脑中安装httpd(阿帕奇)
# systemctl start httpd => 第二步:启动httpd
# vim /var/www/html/demo.html => 第三步:在/var/www/html项目目录中创建一个demo.html文件
<iframe height=498 width=815 src='https://player.youku.com/embed/XNDU4OTM3NzM0NA==' frameborder=0 'allowfullscreen'></iframe>
#l 备注:引用视频网站的代码
#l 访问:ftp://10.1.1.10/demo.html
以上是关于Linux之FTP文件共享服务的主要内容,如果未能解决你的问题,请参考以下文章