第15周-2022-03-22

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

环境:
mysql5.7:192.168.184.147
FTP服务器:192.168.184.129

安装配置mysql5.7:

#配置mysql yum源
[root@centos01 ~]# cat /etc/yum.repos.d/mysql.repo 
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0

#安装mysql
[root@centos01 ~]#yum -y install mysql-community-server
[root@centos01 ~]# systemctl enable --now mysqld
[root@centos01 ~]# grep password /var/log/mysqld.log
2022-03-15T05:30:33.949578Z 1 [Note] A temporary password is generated for root@localhost: h<MqzK,ss8hp
[root@centos01 ~]#mysql -uroot -p'h<MqzK,ss8hp'
mysql> alter user root@'localhost' identified by 'Zhrmghg@2022';

#创建FTP虚拟用户数据库和表
mysql> create database vsftpd;
mysql> use vsftpd;
mysql> create table users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,
password CHAR(48) BINARY NOT NULL
);

#添加虚拟用户
mysql> insert into users(name,password) values('user1',password('Zhrmghg@2022'));
mysql> insert into users(name,password) values('user2',password('Zhrmghg@2022'));

#创建数据库连接用户
mysql> grant select on vsftpd.* to vsftpd@'192.168.184.%' identified by 'Zhrmghg@2022';
mysql> flush privileges;

FTP服务器安装vsftpd和pam_mysql:

#配置mysql yum源
[root@centos02 ~]# cat /etc/yum.repos.d/mysql.repo 
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0

#安装vsftpd和相关包
[root@centos02 ~]# yum -y install vsftpd gcc gcc-c++ make mysql-community-devel pam-devel

#下载pam_mysql源码进行编译
[root@centos02 ~]# wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
[root@centos02 ~]# tar xvf pam_mysql-0.7RC1.tar.gz
[root@centos02 ~]# cd pam_mysql-0.7RC1
[root@centos02 pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security
[root@centos02 pam_mysql-0.7RC1]# make install
#使用以上官网包报错:
[root@centos02 ~]# tail -f /var/log/secure
Mar 15 17:01:57 centos02 vsftpd[14674]: PAM unable to dlopen(/usr/lib64/security/pam_mysql.so): /usr/lib64/security/pam_mysql.so: undefined symbol: make_scrambled_password
Mar 15 17:01:57 centos02 vsftpd[14674]: PAM adding faulty module: /usr/lib64/security/pam_mysql.so
#重新改用rpm包安装
[root@centos02 ~]# wget http://repo.iotti.biz/CentOS/7/x86_64/pam_mysql-0.8.1-0.22.el7.lux.x86_64.rpm
[root@centos02 ~]# yum install pam_mysql-0.8.1-0.22.el7.lux.x86_64.rpm
[root@centos02 upload]# ll /lib64/security/pam_mysql*
-rwxr-xr-x 1 root root   868 Mar 15 17:17 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 50784 Sep 21  2017 /lib64/security/pam_mysql.so

#建立pam认证所需文件
[root@centos02 pam_mysql-0.7RC1]# cat /etc/pam.d/vsftpd.mysql 
auth required pam_mysql.so user=vsftpd passwd=Zhrmghg@2022 host=192.168.184.147 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=Zhrmghg@2022 host=192.168.184.147 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

#建立虚拟用户映射的系统用户及对应的目录
[root@centos02 ~]# useradd -s /sbin/nologin -d /data/ftproot -r vuser
[root@centos02 ~]# mkdir -pv /data/ftproot/upload
[root@centos02 ~]# setfacl -m u:vuser:rwx /data/ftproot/upload
[root@centos02 ~]# vim /etc/vsftpd/vsftpd.conf
#添加:
guest_enable=YES
guest_username=vuser
#修改:
pam_service_name=vsftpd.mysql

#启动vsftpd服务
[root@centos02 ~]# systemctl enable --now vsftpd

#配置虚拟用户使用各自的配置文件
[root@centos02 ~]# vim /etc/vsftpd/vsftpd.conf
添加:
user_config_dir=/etc/vsftpd/conf.d/
[root@centos02 ~]# mkdir /etc/vsftpd/conf.d/
[root@centos7 ~]# systemctl restart vsftpd

#创建用户配置文件
[root@centos7 ~]# vim /etc/vsftpd/conf.d/user1
#若设置为只读,则将下面YES改为NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/user1
#创建相应文件夹
[root@centos02 ~]# mkdir -pv /data/user1/upload
[root@centos02 ~]# chown vuser.vuser /data/user1/upload/

测试登录:

[root@centos03 ~]# ftp 192.168.184.129
Connected to 192.168.184.129 (192.168.184.129).
220 (vsFTPd 3.0.2)
Name (192.168.184.129:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (192,168,184,129,62,71).
150 Here comes the directory listing.
drwxr-xr-x    2 997      993             6 Mar 15 09:55 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
ftp> put anaconda-ks.cfg
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (192,168,184,129,73,132).
150 Ok to send data.
226 Transfer complete.
1501 bytes sent in 5e-05 secs (30020.00 Kbytes/sec)

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

#安装samba
[root@centos01 ~]# yum -y install samba

#创建系统账号
[root@centos01 ~]# useradd smbuser1

#将系统账号转换为samba账号
[root@centos01 ~]# smbpasswd -a smbuser1
New SMB password:
Retype new SMB password:
Added user smbuser1.

#查看已有的samba账号
[root@centos01 ~]# pdbedit -L
smbuser1:2006:

#创建共享目录
[root@centos01 ~]# mkdir /www

#配置共享目录允许smbuser1读写
[root@centos01 ~]# vi /etc/samba/smb.conf
#添加以下内容:
[www]
path=/www
writable=no
write list=smbuser1

#修改文件系统权限
[root@centos01 ~]# chmod o+w /www/

#启动samba服务
[root@centos01 ~]# systemctl enable --now smb

客户端验证:

#安装客户端
[root@centos03 ~]# yum -y install samba-client

#上传文件
[root@centos03 ~]# smbclient //192.168.184.147/www/ -U smbuser1%123456
Try "help" to get a list of possible commands.
smb: \> put anaconda-ks.cfg
putting file anaconda-ks.cfg as \anaconda-ks.cfg (21.6 kb/s) (average 21.6 kb/s)
smb: \> ls
  .                                   D        0  Thu Mar 17 17:43:51 2022
  ..                                  D        0  Thu Mar 17 16:38:45 2022
  anaconda-ks.cfg                     A     1501  Thu Mar 17 17:43:51 2022

        103754244 blocks of size 1024. 95902648 blocks available

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

环境:
备份服务器:192.168.184.129
数据服务器:192.168.184.147

安装配置rsync

[root@centos02 ~]# yum -y install rsync
[root@centos02 ~]# 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

#创建备份目录
[root@centos02 ~]# mkdir /data/backup

#生成验证文件
[root@centos02 ~]# echo "rsyncuser:123456" > /etc/rsync.pas
[root@centos02 ~]# chmod 600 /etc/rsync.pas

#启动rsyncd服务
[root@centos02 ~]# systemctl enable --now rsyncd

数据服务器:

#安装rsync
[root@centos01 /]# yum -y install rsync

#查看备份服务器上的共享目录
[root@centos02 backup]# rsync rsync://192.168.184.129
backup          backup dir

#创建认证文件
[root@centos01 /]# echo "123456" > /etc/rsync.pas

#手动同步目录
[root@centos01 /]# rsync -az --delete --password-file=/etc/rsync.pas /www/ rsyncuser@192.168.184.129::backup

#安装inotify工具
[root@centos01 ~]# yum -y install inotify-tools

#创建inotify脚本
[root@centos01 ~]# vi inotify_rsync.sh
#!/bin/bash
SRC='/www/'
DEST='rsyncuser@192.168.184.129::backup'
rpm -q rsync &> /dev/null || yum -y install rsync
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/changelist.log
done

#后台运行脚本
[root@centos01 ~]# bash inotify_rsync.sh &

测试:

#对数据服务器/www目录下文件进行修改
[root@centos01 ~]# cp /etc/passwd /www/
[root@centos01 ~]# echo "test line" > /www/index.html

#查看备份服务器/data/backup目录下文件
[root@centos02 backup]# ls /data/backup/
index.html  passwd
[root@centos02 backup]# cat /data/backup/index.html 
test line

4、LVS调度算法总结

主要有静态调度算法和动态调度算法:
静态调度算法:不考虑后端服务器当前的负载情况,仅根据算法本身进行调度
动态调度算法:考虑后端服务器当前的负载情况

静态算法:
1、RR:roundrobin,轮询,较常用
2、WRR:Weighted RR,加权轮询,较常用
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing,目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存

动态算法:

  • 动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
  • 其中Overhead的值越小,说明服务器负载越小,可以优先被调度。
    1、LC:least connections 适用于长连接应用
    Overhead=activeconns256+inactiveconns
    activeconns:正处于连接的、活跃状态的连接、有数据在传输才表示活动状态的连接
    inactiveconns:连接但是并未进行数据连接
    2、WLC:Weighted LC,默认调度方法,较常用
    Overhead=(activeconns
    256+inactiveconns)/weight
    3、SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接
    Overhead=(activeconns+1)*256/weight
    4、NQ:Never Queue,第一轮均匀分配,后续SED
    5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等
    6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,,实现Web Cache等

内核版本 4.15 版本后新增调度算法:
1、FO(Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器,进行调度,属于静态算法
2、OVF(Overflow-connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。,属于动态算法

5、LVS的跨网络DR实现

服务器网络配置:

名称 接口 IP 网关
client eth0 192.168.189.10/24 192.168.189.11
route eth1 192.168.189.11/24 -
route eth0 192.168.184.102/24 -
lvs eth0 192.168.184.103 192.168.184.102
rs1 eth0 192.168.184.104 192.168.184.102
rs2 eth0 192.168.184.105 192.168.184.102

route配置:

#开启ip_forward转发
[root@route ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@route ~]# vi /etc/sysctl.conf

lvs配置:

#安装lvs管理工具
[root@lvs ~]# yum -y install ipvsadm
#配置VIP
[root@lvs ~]# ifconfig lo:1 192.168.184.100/32
#配置调度算法及DR模式
[root@lvs ~]# ipvsadm -A -t 192.168.184.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.184.100:80 -r 192.168.184.104 -g
[root@lvs ~]# ipvsadm -a -t 192.168.184.100:80 -r 192.168.184.105 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.184.100:80 rr
  -> 192.168.184.104:80           Route   1      0          0         
  -> 192.168.184.105:80           Route   1      0          0         

rs1和rs2配置:

#两台rs上都安装配置httpd
[root@rs1 ~]# yum -y install httpd;hostname -I > /var/www/html/index.html;systemctl enable --now httpd
#修改内存参数,关闭arp广播
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#添加VIP
[root@rs1 ~]# ifconfig lo:1 192.168.184.100/32
#以上命令在rs2上也同样执行

client上进行验证:

[root@client ~]# curl 192.168.184.100
192.168.184.105 
[root@client ~]# curl 192.168.184.100
192.168.184.104 
[root@client ~]# curl 192.168.184.100
192.168.184.105 
[root@client ~]# curl 192.168.184.100
192.168.184.104
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容