linux运维15

一、实现基于MYSQL验证的vsftpd虚拟用户访问

FTP服务器搭建:

数据库配置
yum install -y mariadb-server
systemctl enable --now mariadb.service

mysql  创建虚拟账户aa,bb和数据库vsftpd
CREATE DATABASE vsftpd;
USE vsftpd;
CREATE TABLE users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,
password CHAR(48) BINARY NOT NULL
);
INSERT INTO users(name,password) values('aa',password('aa123456'));
INSERT INTO users(name,password) values('bb',password('bb123456'));
GRANT SELECT ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY 'vsftpd'; 
FLUSH PRIVILEGES;

安装认证模块
yum install -y gcc pam-devel mariadb-devel
wget https://jaist.dl.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz  --no-check-certificate
tar xf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure --with-pam-mods-dir=/lib64/security
make install

ll /lib64/security/pam_mysql.*   确认模块安装成功

配置PAM模块和数据库绑定认证
vi /etc/pam.d/vsftpd.mysql

auth required pam_mysql.so user=vsftpd passwd=vsftpd host=192.168.116.130 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required pam_mysql.so user=vsftpd passwd=vsftpd host=192.168.116.130 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

安装FTP服务
yum install -y vsftpd
useradd -s /sbin/nologin -d /data/ftproot -r vuser  创建系统账户vuser
mkdir -p /data/ftproot/upload
setfacl -m u:vuser:rwx /data/ftproot/upload
创建2个文件,验证登录
touch /data/ftproot/aa.txt
touch /data/ftproot/bb.txt

vi /etc/vsftpd/vsftpd.conf    修改配置文件

pam_service_name=/etc/pam.d/vsftpd.mysql   #原本的这个要修改为模块路径
#文件底部添加
anonymous_enable=YES
guest_enable=YES
guest_username=vuser

systemctl enable --now vsftpd

客户端访问

yum install -y ftp
ftp 192.168.116.130   输入虚拟账户aa和密码,查看文件

在这里插入图片描述

二、配置samba共享,实现/www目录共享

服务器安装:

yum install -y samba
mkdir /www -p  创建共享目录
touch /www/smb1.txt

useradd -s /sbin/nologin -r smb1  创建系统账户
smbpasswd -a smb1                 将系统账户映射为smb账户
pdbedit -L                        查看账户生成
vi /etc/samba/smb.conf            修改配置
[share1]
        path=/www
        writable=no               #只允许smb1进行写操作
        write list=smb1           #设置允许账户

setfacl -m u:smb1:rwx /www
systemctl start smb

客户端访问

yum install -y samba-client
smbclient //192.168.116.130/share1 -U smb1   访问共享目录
put anaconda-ks.cfg                          上传测试

在这里插入图片描述

三、使用rsync+inotify实现/www目录实时同步

备份服务器配置:

yum install -y rsync

vi /etc/rsyncd.conf             删除文件内容改为下面
uid = root
gid = root
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
[backup]
path = /data/backup/
comment = backup dir
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pas

mkdir /data/backup -p                         创建备份目录
echo "rsyncuser:rsyncuser" > /etc/rsync.pas   创建账户认证文件
chmod 600 /etc/rsync.pas
systemctl start rsyncd  
ss -tnl                                       确认873端口打开

在这里插入图片描述
主服务器配置(需要备份的服务器)

初始化环境
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

配置阿里源才能下载这个
yum install -y inotify-tools rsync 

vi /etc/sysctl.conf          修改内核参数

fs.inotify.max_queued_events=100000
fs.inotify.max_user_watches=100000

sysctl -p

echo "rsyncuser" > /etc/rsync.pas   创建密码文件,只要密码,不要写账户
chmod 600 /etc/rsync.pas
mkdir /www -p    创建数据目录
touch /www/rsync.txt

在主服务器上手动测试上传

rsync -az  --delete --password-file=/etc/rsync.pas /www/ rsyncuser@192.168.116.130::backup 

在这里插入图片描述
备份服务器查看

ls /data/backup/

在这里插入图片描述
在主服务器创建脚本后台运行,这样只要主服务器的/www下的文件发生变化就会自动更新到备份服务器

vi rsync_backup.sh
#!/bin/bash 
SRC='/www/'
DEST='rsyncuser@192.168.116.130::backup'
inotifywait  -mrq  --exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
       FILEPATH=${DIR}${FILE}
      rsync -az --delete  --password-file=/etc/rsync.pas $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >>/var/log/file_backup.log
done

前台运行脚本
bash rsync_backup.sh 

备份服务器开启实时监控目录

watch -n0.5 ls -l /data/backup/ 

测试图
在这里插入图片描述
最后在主服务器上,设置脚本开机运行

vi /etc/rc.d/rc.local 
/usr/bin/bash /root/rsync_backup.sh &

chmod u+x /etc/rc.d/rc.local

四、LVS调度算法总结

调度工具:ipvsadm
安装方式:yum install -y ipvsadm

一 静态算法

  1. rr:轮询,轮流调度后台数据,假如有2台web,那就是一台一次,轮流进行

  2. wrr:权重轮询,根据设置的权重值进行访问,权重大的访问较多次

  3. dh:请求绑定轮询:判断发起的协议类型或其他标准是不是同一种类型的请求,是的话全部调度到同台web服务器

  4. sh:客户端绑定轮询,根据客户端的cookie确认以前连接后台web服务器是哪台,有的话根据cookie绑定上次连接的web服务器。没有就随机连接。

二 动态算法:

  1. lc:最少连接轮询:通过查看哪个web服务器的连接量少,就提升web服务器的访问量

  2. wlc:加权最少连接轮询:通过访问量和权重进行计算,优先把访问量给到少量访问的服务器上。默认算法

  3. sed:最短期望延迟轮询,通过(活动数+1)*256/权重进行计算,将连接数发到计算值为最小的服务器上

  4. nq:最短期望延迟不排队轮询,通过(活动数+1)*256/权重进行计算,将连接数发到计算值为最小的服务器上,但是如果此时有设备是空闲状态,会直接把请求发到这台服务器上,而不会再把请求发到计算值为最小的服务器上。

  5. lblc:dh和lc加强版,根据客户端请求的是不是同一类型和连接数量进行判断。

  6. lblcr:dh和lc加强版,根据客户端请求的是不是同一类型和连接数量进行判断,多了一个复制缓存功能,如果请求的设备没有数据,那么可以从其他服务器缓存过来。

术语:
VS:调度服务器,一般指部署ipvsadm软件所在的服务器
RS:代理服务器,一般指部署nginx,haproxy软件所在的服务器
CIP:客户端IP,一般指普通用户访问网站或APP所使用的IP
VIP:调度服务器使用的对外IP,就是客户端访问网站时访问的IP
DIP:调度服务器使用对内的IP,也就是调度器跟代理服务器通信所使用的IP
RIP:真实IP,也就是实际网站或APP后台服务器的真实IP地址

五、LVS的跨网络DR实现

LVS-DR:修改MAC地址进行通信

原理:
在这里插入图片描述
官网介绍:LVS-DR

LVS-DR实现过程:
请求过程:CIP-路由网卡1-路由网卡2-调度器VIP-RIP
接收过程:RIP-VIP-路由网卡2-路由网卡1-CIP

1.  客户端(CIP)向路由服务器发起到VIP的请求
2.  路由器第一个网卡接收客户端请求,内核映射请求给路由器的第二个网卡
3.  路由器第二个网卡转发数据给调度器的虚拟(VIP)网卡
4.  调度器请求的数据包中的MAC地址,把数据转发给web1虚拟(VIP)网卡
5.  web1虚拟(VIP)网卡收到后,把数据直接返回给路由器的第二个网卡,不再经过调度器
6.  路由器的第二个网卡收到数据后,内核映射回给路由器第一个网卡
7.  路由器第一个网卡回复数据给客户端

LVS-DR特性:

  1. ipvsadm调度器和其他web服务器都要添加同一个对外(VIP)地址
  2. web服务器都要修改arp_ignore和arp_announce参数
  3. ipvsadm调度服务器DIP和web服务器RIP必须是要在同一个直连网络,web服务器的网关不能是调度器的IP,需要指定为路由服务服务器的网关
  4. 路由器服务器可以是最少是双网络,可以是多网络,只要和ipvsadm调度器服务器和web服务器有路由即可。
  5. 不支持端口映射,端口不能修改
  6. 调度器只需要修改请求报文,性能相对较好

arp_ignore和arp_announce解析:
因为配置同一个VIP,就会有IP冲突问题,所以web服务器就要修改内核参数。
限制响应级别:arp_ignore

0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
修改方式:
echo 1 >   /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 >   /proc/sys/net/ipv4/conf/lo/arp_ignore

限制通告级别:arp_announce

0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告
修改方式:
echo 2 >   /proc/sys/net/ipv4/conf/all/arp_announce 
echo 2 >   /proc/sys/net/ipv4/conf/lo/arp_announce

抓包分析:

根据下面的LVS-DR模型部署后

客户端IP:192.168.116.148,MAC:00:0c:29:df:55:8c
路由服务器的网卡1-ens33IP:192.168.116.145,MAC:00:0c:29:16:a1:b9
路由服务器的网卡2-ens34IP:10.0.0.1,MAC:00:0c:29:16:a1:c3
调度服务器的网卡IP:10.0.0.254,MAC:00:0c:29:2e:4a:3b
web1服务器的网卡IP:10.0.0.2,MAC:00:0c:29:ef:c9:b1

客户端分析:
curl 10.0.0.100 发起请求
00:0c:29:df:55:8c 为请求的MAC地址
在这里插入图片描述
路由器测试
ens33网卡抓包分析

在路由器上抓取ens33的网卡,查看来自客户端(192.168.116.148 )的请求
ip a
网卡ens33的MAC:00:0c:29:16:a1:b9             和客户端同网段,可以接收客户端请求
网卡ens34的MAC:00:0c:29:16:a1:c3             和web同网段,可以接收web返回的数据

在这里插入图片描述
tcpdump -i ens33 -nn -e host 10.0.0.100 抓取客户端到10.0.0.100的请求

通过第一个数据包这个可看到实际是客户端的MAC访问到路由器的ens33的MAC,端口和IP不变
00:0c:29:df:55:8c > 00:0c:29:16:a1:b9, ethertype IPv4 (0x0800), length 74: 192.168.116.148.53164 > 10.0.0.100.80
通过第二个数据包这个可看到路由器的ens33网卡的MAC回复客户端的MAC,端口和IP不变
00:0c:29:16:a1:b9 > 00:0c:29:df:55:8c, ethertype IPv4 (0x0800), length 74: 10.0.0.100.80 > 192.168.116.148.53164

所以可以得到客户端一直都是和路由器的ens33网卡进行通信
在这里插入图片描述
调度器查看
ip a
调度器的ens33的MAC地址:00:0c:29:2e:4a:3b
在这里插入图片描述

抓取源为路由器ens34网卡到调度器的数据
tcpdump -i ens33 ether src 00:0c:29:16:a1:c3 -nn -e  

通过第一个数据包可看到IP和端口不变,还是客户端请求10.0.0.100
可以看到调度器接收到了路由器转发过来的请求,然后调度器修改了目标MAC地址,把MAC地址改为了WEB1的MAC
00:0c:29:16:a1:c3             路由器的ens34的MAC地址
00:0c:29:ef:c9:b1             web1的真实MAC地址

00:0c:29:16:a1:c3 > 00:0c:29:ef:c9:b1, ethertype IPv4 (0x0800), length 74: 192.168.116.148.53164 > 10.0.0.100.80
时间点为17:04:58.727162

在这里插入图片描述
路由器ens34网卡抓包分析

原本路由器2个网卡IP
ip a
网卡ens33的MAC:00:0c:29:16:a1:b9          和客户端同网段,可以接收客户端请求
网卡ens34的MAC:00:0c:29:16:a1:c3          和web同网段,可以接收web返回的数据

在这里插入图片描述

抓取来自源web1网卡和路由器的ens34的数据
tcpdump -i ens34 -nn -e ether src 00:0c:29:ef:c9:b1   

通过第一个数据包可以看到web1返回数据给路由器的ens34网卡
00:0c:29:ef:c9:b1                  web1的MAC地址
00:0c:29:16:a1:c3                  路由器的ens34的MAC地址

00:0c:29:ef:c9:b1 > 00:0c:29:16:a1:c3, ethertype IPv4 (0x0800), length 74: 10.0.0.100.80 > 192.168.116.148.53164

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值