FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。
FTP软件名称 => vsftpd => vs(very secure ftp daemon)
lftp和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. => 关闭提示
# yum install lftp -y => 下载工具
# lftp 用户名称@远程IP地址 => 登录方式,输入密码登录
#l 常用命令
ftp> ?或help => 求帮助命令
help+命令:ftp> help mirror => 针对某个文件求帮助
#l 批量上传下载命令
lftp> mirror -R 本地文件夹名称 => 批量上传(把shop文件夹上传到FTP服务器端
lftp> mirror 远程FTP路径 => 批量下载(把整个FTP下载到本地)
在FTP服务中,其一共拥有两种模式(主动模式 + 被动模式)
主动模式工作原理:
服务端的20号端口主动请求连接客户端的随机数据端口
主动模式容易被客户端的防火墙拦截
客户端发起连接请求,发送打开的随机数据端口信息
客户端主动连接服务端打开的大于1023的随机数据端口
客户端不会拦截自身往外发送的请求
客户端发起连接请求,发送PASY命令
服务搭建流程:
1. 关闭防火墙和selinux
2. 配置yum源(mount /dev/sr0 /mnt)
3. 软件三部曲
4. 了解配置文件
5. 根据需求修改配置文件来完成服务的搭建
6. 启动服务,开机自启动
7. 测试验证
第一步:关闭防火墙与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选项关掉
基于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服务器
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上传下载限速操作)
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 为准
总结:
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)
# vim /etc/vsftpd/vsftpd.conf => 打开ftp配置文件,增加一行
local_max_rate=0 => 0代表不限速,默认单位为字节如:local_max_rate=1024
写法:local_max_rate=数值 + 字节
服务程序:主机 => 基本语法
# 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)搭建一个客户服务系统(主要涉及客服资料上传与下载)
/data/kefu
local_root=/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
响应: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
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.
[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 => 重启服务
第一步:在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