“偷鸡”趣事一则

作者:wiLdGoose 发布时间:2020 年 12 月 18 日 分类:生活 Lifestyle 暂无评论

好久没有参加娱乐活动了,今天遇到“偷鸡”趣事一则,随笔记录,聊以慰藉。

起因是早上看到昨天后半夜收到钉钉通知一则:

那行猥琐的代码深深地吸引了我,直接请求了一下。好家伙,XSS 代码:

有点不开心,你好歹专业一点。往这里插入 XSS 代码叫怎么回事嘛。再一看网站,还有这么个玩意儿:

有点兴趣了,不过账号注册需要验证手机号码。暂且作罢。到库里找到这个用户,查下手机号码:

短信下发时通道返回成功,说明这号码还能收到短信的:

基本判断是太空卡无疑了。再查下登录设备:

可以看到是水果设备登录的,虚拟的可能性较低。

看看还能挖点什么。一开始我没往登录 IP 去想,感觉至少一跳起步。谁知道阁下居然选择裸奔:

在线时间 + 拨号 IP,应该能溯源到宽带账号的。只不过国内的运营商是不 care 这种鸡毛蒜皮的小事的。毕竟没出人命不是,还是赚钱要紧。

又翻了翻库,发现这哥们其实早来过了。当时通知还没开,就没看到:

感觉这哥们儿真的该去挂号了。我看在眼里,急在心里。太空卡又打不通电话,怎么通知他呢?

找到了回调 URL,构造一个温馨的提示:

https://xsshs.cn/xss.php?do=api&id=8SyG&username=fuck_you&password=fuck_your_monther_20_miniutes_no_problem_by_bike

PS:感谢老夫子友情提供私人密码用于伟大的无产阶级测试。

然后,找了大约 30 台 VPS:

1、Windows 系统:360 浏览器大法,间隔 2s,自动刷新,走你;

2、Linux 系统:小盆友,ApacheBench 了解一下?

- EOF -

墙内外服务器数据异地备份方案

作者:wiLdGoose 发布时间:2020 年 5 月 15 日 分类:技术 Technology 暂无评论

我们的宣传口号是:与墙斗,其乐无穷。

1、墙内服务器

1.1、需求与掣肘

需要对服务器数据进行异地备份,数据量级:GB 级。收费的阿里云 OSS 等用不起,土豪请自便。免费的 Google Drive 连不上。

1.2、方案选型

一番折腾后最终选定七牛云免费 10G 对象存储。不够用就建多个账号,用不同的 butket 来备份。

1.3、准备工具

  • 七牛云账号一枚
  • 安装 qshell
  • 本地备份脚本,若无可参考本文 2.4 部分

1.4、实施细节

下载并设置脚本:

wget -c http://devtools.qiniu.com/qshell-linux-x64-v2.4.1.zip
unzip qshell-linux-x64-v2.4.1.zip
mv qshell-linux-x64-v2.4.1 qshell
chmod +x qshell

前往七牛云密钥管理,找到 AccessKey 与 SecretKey:

添加七牛云账号鉴权:

/path/to/qshell account <AccessKey> <SecretKey> <账户标识>

确认一下:

/path/to/qshell user ls
Name: xxxx
AccessKey: xxxx
SecretKey: xxxx

七牛官方建议大于 100MB 的文件使用 rput 来代替 fput 来实现上传。由于备份文件普通较大,这里统一使用 rput:

/path/to/qshell rput xxxx qshell-linux-x64-v2.4.1.zip /root/qshell-linux-x64-v2.4.1.zip
Uploading /root/qshell-linux-x64-v2.4.1.zip => xxxx : qshell-linux-x64-v2.4.1.zip ...

Put file /root/qshell-linux-x64-v2.4.1.zip => xxxx : qshell-linux-x64-v2.4.1.zip success!
Hash: lhKbzJ8255w0m4BKgtYpPthvU5Mc
Fsize: 9739680 ( 9.29 MB )
MimeType: application/zip
Last time: 23.54 s, Average Speed: 413.8 KB/s

上传多个备份文件,我的思路是:

  • 用 bash 脚本跑批
  • 事先 tar 到一个文件中,再用 qshell 上传

提供上述第二个方案的初步思路:

tar czf /www/backup/`date +%Y%m%d`.tar.gz /www/backup/site/*`date +%Y%m%d`* /www/backup/database/*`date +%Y%m%d`*
/path/to/qshell rput xxxx `date +%Y%m%d`.tar.gz /www/backup/`date +%Y%m%d`.tar.gz
rm -f /www/backup/`date +%Y%m%d`.tar.gz

至于循环备份,七牛云提供对象存储的生命周期管理。设置一下就行了:

Update:这个生命周期管理不靠谱,发现设置为一天删除也会一直存下去的情况。手动修改前述脚本如下:

#!/bin/bash
date=`date +%Y%m%d`
deldate=`date -d -5day +%Y%m%d`
/path/to/qshell delete xxxx $deldate.tar.gz
tar czf /www/backup/$date.tar.gz /www/backup/site/*$date* /www/backup/database/*$date*
/path/to/qshell rput xxxx $date.tar.gz /www/backup/$date.tar.gz
rm -f /www/backup/$date.tar.gz

2、墙外服务器

2.1、需求与掣肘

也是需要对服务器数据进行异地备份,数据量级:GB 级。优先选择免费的存储,回国较快即可。

2.2、方案选型

经测试,Google Drive 是第一选择。

2.3、准备工具

2.4、实施细节

若暂无本地备份策略,直接按这个链接的步骤操作即可;若已有本地备份策略,可在 backup.sh 的 BACKUP 数组变量中指定需要异地备份的文件路径,诸如:

BACKUP[0]="/data/backup/www_bak_`date +%Y%m%d`.tgz"
BACKUP[1]="/data/backup/db_bak_`date +%Y%m%d`.tgz"

可根据实际情况修改变量。

关于循环备份的事,若非自有脚本解决,可使用 backup.sh 的相关功能,配置以下两项即可:

LOCALAGEDAILIES(指定多少天之后删除本地旧的备份文件,默认为 7 天)
DELETE_REMOTE_FILE_FLG(删除 Google Drive 或 FTP 上备份文件的 FLG,true 为删除,false 为不删除)

最后,crontab 就略了。别忘记添加环境变量:

SHELL=/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
MAILTO=root
HOME=/root

我在实际配置过程中,曾遇到这样的报错:

Backup progress start
mysql is not installed. Install it and try again

最后在上面的环境变量基础上加上 mysql 的路径得以解决。

crontab -e

头部添加环境变量:

SHELL=/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/usr/local/mysql/bin
MAILTO=root
HOME=/root

- EOF -

部署 MongoDB 的 Web 可视化工具:admin-mongo

作者:wiLdGoose 发布时间:2020 年 3 月 12 日 分类:技术 Technology 暂无评论

不知道有多少同学遇到过类似反人类的需求:在 Web 上对 MongoDB 进行可视化管理。之前在服务器上用 node 跑了一套 adminMongo,甚是不稳定。用户端一些随机操作容易导致这个服务宕掉,查日志是这个样子的:

/adminMongo/node_modules/nedb/lib/datastore.js:77
    if (err) { throw err; }
               ^

Error: "toString()" failed
    at Buffer.toString (buffer.js:495:11)
    at tryToString (fs.js:453:15)
    at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:444:12)

Google 半天资料也较少,遂欲弃之。

期间也折腾了一下 phpmoadmin,说实话距离我美好的想象相去甚远。

后来重新折腾了一遍 admin-mongo,感觉是我以前的打开方式不对。记录之,用于自我马克。

操作系统 CentOS 7,以 yum 方式安装 node:

yum install nodejs -y

理论上会为您安装好 node 与 npm。确认一下:

node --version
npm --version

我这里的情况是:

node --version
v6.17.1
npm --version
3.10.10

继续安装 pm2:

npm install -g pm2

确认一下:

pm2 --version

我这边是:

pm2 --version
3.3.1

然后就可以直接安装 admin-mongo:

npm install -g admin-mongo

安装目录是 /usr/lib/node_modules/admin-mongo,因此:

cd /usr/lib/node_modules/admin-mongo
pm2 start app.js --name admin-mongo

看到类似这样的信息:

[PM2] Starting /usr/lib/node_modules/admin-mongo/app.js in fork_mode (1 instance)
[PM2] Done.
┌─────────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬─────┬───────────┬──────┬──────────┐
│ App name    │ id │ version │ mode │ pid   │ status │ restart │ uptime │ cpu │ mem       │ user │ watching │
├─────────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼─────┼───────────┼──────┼──────────┤
│ admin-mongo │ 0  │ 0.0.23  │ fork │ 18021 │ online │ 0       │ 0s     │ 0%  │ 13.3 MB   │ root │ disabled │
└─────────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴─────┴───────────┴──────┴──────────┘

到这里 admin-mongo 就开始提供服务了,监听端口 TCP 1234。验证一下:

netstat -antlp | grep 1234
tcp        0      0 0.0.0.0:1234            0.0.0.0:*               LISTEN      18021/node /usr/lib

好,完美。赶紧做个反代用起来,不想被直接访问到的话,我用了比较猥琐的办法:

echo 用户名:密码 > /usr/local/nginx/conf/vhost/xxx.passwd
vim /usr/local/nginx/conf/vhost/xxx.conf

在 location / 中增加:

auth_basic "请替换成您的登录提示";
auth_basic_user_file /usr/local/nginx/conf/vhost/xxx.passwd;

最后 server nginx reload 一下完事儿。

通过 lftp 备份文件及删除过期文件的自动化小脚本

作者:wiLdGoose 发布时间:2019 年 8 月 27 日 分类:技术 Technology 暂无评论

可以看作是这篇文章的升级版本。这里感谢 druggo 留言提醒,让我决定抽时间折腾一下 lftp。

整个过程其实非常简单,照例自己马克一下。

安装 lftp 客户端:

yum -y install lftp

安装后使用过程中遇到报错:

Fatal Error: Certificate Verification: Not Trusted

原因是远端 FTP 服务器使用了自签发 SSL 证书,可以这样解决:

vim /etc/lftp.conf

在文件最后增加一行:

set ssl:verify-certificate no

改造后的脚本:

#!/bin/bash
date=`date +%Y%m%d`
deldate=`date -d -{NUMBER}day +%Y%m%d`
lftp ftp://{FTP_USER}:{FTP_PASSWD}@{HOST}:{PORT} <<!
cd /
lcd /data/backup
mrm *$deldate*
mput *$date*
exit
!

当然 lftp 还有一个更好用的指令:mirror。这里不用的原因是本地存储的时间与远端不一致。

依然是 3 点注意事项:

1、脚本中花括号内容替换为对应的变量;
2、cd 是远程的目录,lcd 是本地目录;
3、备份文件名需符合 date +%Y%m%d 这样的规则。

解决通过 crontab 调用 FTP 命令行客户端未正确退出导致大量 FTP 进程滞留内存的问题

作者:wiLdGoose 发布时间:2019 年 8 月 23 日 分类:技术 Technology 6 条评论

前阵子写了个小脚本,用于异地备份与自动删除过期文件。使用一段时间后发现异常,表现为:

ps aux | grep ftp

通过这个命令显示有大量的 FTP 客户端进程滞留内存。一开始以为传输未结束导致,经过文件比对后发现传输确实已结束。辣么为何 FTP 进程未能自动退出呢?

网上查询后有人说使用 passive 命令,但我的脚本中已经对 FTP 命令设置了 -inp 的参数,其中参数 p 即启用被动模式传输。若再使用 passive 命令,会使 FTP 从被动模式切换回默认的主动模式,导致连接与传输失败。

权宜之计是在 crontab 中,在定时备份的任务后若干小时再执行这个任务:

for i in `ps aux | grep "ftp -inp" | grep -v grep | awk '{ print $2 }'`; do kill -9 $i; done

确实挺 low 的,Google 了半天貌似没发现还有其他不幸遭遇的同志。若有更好的解决方案,跪求留言。

  1. 1
  2. 2
  3. 3
  4. 4
  5. ...
  6. 41