Typecho被getshell之反思

人的一生啊就是这么不可预料,一个人的命运,当然要靠自己奋斗,但是也要考虑历史的进程。所以对我来说这可能就是“历史的钦定”吧!当然这些都是后话了,关于最近Typecho爆出的两个漏洞,我不幸中枪。这其中主因在于自己,毕竟那台腾讯云一只在吃灰,日常也疏于维护,基本上是看都不看的状态,所以这次,关于这“历史的抉择”,我还是有必要好好记录一下!!

0x00 背景

Typecho是国内的一个经典、轻巧的开源博客系统。在10月底新版发布之前,已发布的正式版已经是很久没更新了,但就国内博客圈的使用率来说算是很有分量的一款程序,所以对此废话不多说。最近Typecho接连爆出2个严重漏洞!!使得很多站点受到影响,包括我也是(服务器都被日成筛子了!)

由于这次漏洞影响比较大,网上出现了不少关于漏洞的分析,其中也有一些阴谋论的推测(后来被证实是想多了,个人认为该文章作者并不是恶意揣测开发团队的意图,仅仅是沟通问题)。


①知道创宇漏洞分析文档:https://paper.seebug.org/424/
②核心开发者joyqi的回复:
V2EX: https://www.v2ex.com/t/401202
joyqi博客:https://joyqi.com/typecho/about-typecho-20171027.html
③某造成误解的文章:https://mp.weixin.qq.com/s/IE9g6OqfzAZVjtag-M_W6Q

0x01 发现与分析确认

因为我日常也不怎么管理腾讯云主机,基本上就是吃灰状态,偶尔续续费什么的。直到某天我续费的时候提示说服务器被传木马了,在Typecho网站目录下多了一个zz.php。如此明显,初步分析是技术爱好者的“友情检测”,非勒索/恶意入侵。

于是,首先查看服务器的安全策略,我记得上一次设置这个好像在买这台主机时候做的,之后就没再管过。结果看了一眼:

  • 内心OS:妈耶!!开放全部端口访问!!这TM的不明摆着要被日吗???!!

于是乎,马上删掉了安全策略,只留下开放22端口。随后,用winscp连接服务器,通过查询最后修改日期,发现网站根目录下有一个zz.php的一句话木马,而phpmyadmin目录下有一个cgi-149.php是被修改过。虽然数据库还在,但是很有可能已经被脱裤了,万幸的是我那个吃灰站点也没什么数据价值,对个人来说影响不大

不过接下来我担心的就是这个大马的提权程度,是否已经拿下Linux下的更高权限呢??我从腾讯云的控制台查看操作记录,显示:没有!!这就说明一定是被删记录了!!用putty连接到主机,查看最后执行命令,发现2个令人可悲的记录:

1
2
cat default.pass
mysql -u root -p

emmmm看来很有可能被脱裤了,因为在成功进行Linux提权之后一般是可以直接通过webshell来执行命令的,接下来要检查的是主机有没有异常登录:命令查看了以下日志:

  • /var/log/message
  • /var/log/secure

发现在最后修改日期之前的记录完全没有!!这说明是被清理痕迹了!!也解释了为什么腾讯云后台记录没有日志。由此可以判定:已经被提权,并且是较高权限,数据库被脱裤的可能性极大!!

但是即使这样也没办法确认入侵者到底有没有拿下服务器密码(比如新增一个用户并且给予root权限,这样所获得的权限等同于拿下root账户和密码)

但是通过命令

1
last -f /var/log/wtmp

发现之前没有异常登录!由于这个日志理论上是永久性记录的,所以可信度极高。又输入

1
cat /etc/group

发现也没有异常的用户/用户组,所以可以确定:对方只是成功提权,删了webshell之后他就没有权限了!而关于数据库的问题,反正没什么重要数据何况密码什么的都是程序自己生成的那些!所以并无太大影响!!

0x02 处理

这还能怎么处理?后话再说,这里就只做了应急处理!即:

  • 删除webshell
  • 重新配置服务器端口的安全策略

关于要不要开蜜罐这个问题,我觉得人家都那么明显的去提示你留下木马了,也仅仅是个友情检测,并非深仇大恨不至于开个蜜罐故意抓人。但这一次的经历是要当作教训的!!

0x03 后话

经历了这次被黑得最惨的“入侵”,基本上对动态网站无爱了,考虑到这台腾讯云主机的实际使用情况,计划直接重装然后拿来做测试和展示平台,也会搭建一些环境用于程序/漏洞测试,但为了在学校那边装个样子,应该会建个ghost站点作为展示站点。

关于这次经历,一方面感谢国内各大安全团队提供漏洞分析与解决建议,另一方面则是对Typecho开发团队及时提供解决方案表示感谢,毕竟这个圈子的维护,眼下也是越来越难了。

而对我自己来说,完全就像回到过去一样,这大概就是命运的“钦定”,让我回归一个纯粹的技术爱好者,涉足开发与运维,也要尝试一下CTF。

系统重置与hexo迁移

因为win10坑爹的自动更新忘关了!所以在不知不觉当中它就给我更新了,然而每次系统盘更新都很恶心,日常eclipse因为JDK环境(安装在C盘)迷之缺失不能用还好说,毕竟我不是Java开发者,但是这次竟然让Node.js环境给和谐了!!所以我相当于数据完全丢失!!!本来想关机过几天再搞,却发现这个系统有问题不能关机!!或者说关不了机!!那就呵呵了,利用win10唯一一个比较人性化的设置——重置电脑来实现近似重装系统(效果上完全一样)

就这样,我翘了一节课,花了10小时时间成功重置电脑,并且又花了4小时去清理磁盘(200G的旧文件),让电脑变得“崭新”,就关了win10自动更新,依次去装那些常用软件,这些就不具体说了,下面讲一下重头戏:

新电脑上hexo的迁移

首先!!安装Node.js环境并且

1
npm install -g hexo

这个过程可能会非常漫长,并且会“报错”:

1
npm WARN deprecated swig@1.4.2: This package is no longer maintained

实际上是网速太慢,仍然在自动安装!等就行了!一定要等待!一定要等待!一定要等待!直到提示安装成功!!当然如果速度真的受不了,可以改npm源为淘宝源,具体怎么做这里就不具体说了。

下一步,Git bash 进入你存放hexo的目录,提前将备份好的这几个文件粘贴到里面!!注意仅仅要这几个!其他都!不!要!

1
2
3
4
5
 _config.yml
package.json
scaffolds/
source/
themes/

之后

1
npm install

这里也只要等待!!接下来就可以按照之前使用hexo的方式来使用了,相当于迁移成功!!但是,这个时候部署,Git 会要求确认你的身份!这里按照GitHub上的信息来写就行了,命令如下:

1
2
3
git config --global user.email  "you@example.com"

git config --global user.name "Your Name"

之后

1
hexo deploy

会弹出一个GitHub的登录窗口,登录即可!因为这时你并没有之前的残余文档,即public文件夹,所以直接部署即可。

之后,去验证一下是否部署成功,如果网站更新正常,即认为hexo迁移成功!!

注意!!!如果再次出现node命令无法使用,重新配置系统环境变量即可!!

最后再给出2个hexo插件:hexo-tag-aplayerhexo-tag-dplayer

TERMUX上ssh、vim和渗透环境配置

关于termux就不用多说了,安卓上少有的神器,对于运维党来说算是必备品!!但是要注意这玩意儿的安装目录就是系统根目录!!所以会有很严重的权限限制!!对于一些操作要谨慎!!不然就只能清除数据了!!

  • 设备:Yoga Book

每次启动建议先更新源,同时升级软件包

1
2
apt update
apt upgrade

或直接

1
apt update && apt upgrade

其他常用命令如下:

1
2
3
4
5
6
apt install <package>         安装软件包
apt show <package> 显示软件包的信息
apt list [--installed] 列出所有(或已安装)的软件包信息
apt remove <package> 删除软件包
chmod 修改文件权限
chown 修改文件归属

为了一次性直接装了所有要安装的包,如安装package1~3这3个包,可以用这个命令,就是并列之后加-y:

1
apt install <package1> <package2> <package3> -y

由于是Linux模拟终端,完全按Linux的套路来就行,国内网慢可以改用清华的源,大部分使用方法在termux官网上都有教程(英文),所以具体的这里就不多说了。演示日常装逼,使用cmatrix命令(前提是你装好了这个命令)

1
apt install cmatrix

同样的,装逼还有一个命令sl,怎么安装和运行完全同上。至于美化可以用zsh,但是我这个平板就比较方便,不需要这个了。感兴趣可以具体参考zsh的wiki

配置ssh

为什么要配置ssh?因为yoga book作为我的主力平板(实际上是嫌15.6的Acer太重了),在日常当中一直充当超级本(即使它是Android系统,但是超薄超轻真的方便太多!!)用于技术演示和应急维护,作为运维的一员,自然不必说ssh的重要性,配置ssh所实现的功能有2个:

  • 使用yoga book上的termux连接到服务器终端
  • 使用其他终端连接到termux终端

先说第一个,以阿里云/腾讯云为例,可以在官网的控制台查看外网ip,当然我绑定域名之后直接ping一下域名更方便

1
ping -c 1 https://liefeng.github.io

这样获取返回的外网ip,可以使用termux通过ssh连接主机终端。首先,termux安装sshd

1
apt install sshd

之后像使用putty一样连接主机终端就可以了,如以root账户连接ip为127.0.0.1的主机终端:

1
sshd 127.0.0.1 -lroot

这样的好处是对于我这种只能带着安卓平板(yoga book)到处跑的人来说,随时可以连接到主机进行配置/维护,同时也意味着远程连接着一台真·Linux主机,在某些时候能弥补Android平台限制的技术问题。

关于第二个,实际上对我来说没啥用。为了方便其他终端也能管理termux终端(实际上是因为安卓手机编程太蛋疼了!),在安装openssh之后使用JuiceSSH连接termux终端,电脑端可以用xshell连接(可以本地连接本地,毕竟Android手机用这个很麻烦,当然我yoga book自带灵光键盘不存在这个问题哦!),之后使用JuiceSSH提取密钥,毕竟termux不支持账户密码验证!!当然连接时注意端口!termux的ssh端口默认是8022,当然可以先自己查看一下!
安装openssh:

1
apt install openssh

查看sshd服务端口:

1
netstat -ntlp |grep sshd

当然openssh也是支持通过ssh连接其他终端的,语法为:

1
ssh 用户名@主机地址

配置vim
关于这里就完全是Linux配置vim的套路了,所以我真的不想写些什么了,毕竟用Google搜索任一“Linux+vim配置”的文章都比我写得好,写得全面!何况相对于vim本身,配置开发环境更为重要!毕竟vim配置的目的还是作为IDE来用。这里,说一下termux上所集成的语言包和其他必要包:

1
2
3
4
5
6
7
8
9
10
11
12
python         默认安装的是Python3
python2 这个才是python2.7
clang 大名鼎鼎的c++ 编译器
vim 这个就不用多少了,termux自带的是vi
git 这个码农都懂的
htop 任务管理器
tree 目录树
make 这个很重要,如果安装第三方包的话
irssi irc客户端,命令行聊天软件
wget 更不用说了
openssl ssh,这个之前说过了
tar 想必这个也不用多说

总之,有什么需要的直接输入

1
apt list

就可以了,对着列表安装自己所需要的。回到VIM配置的问题,如果你需要配置vim,只需在Home目录创建一个~/.vimrc文件即可以配置vim了,然而termux的vim自带该文件,就是配置写入有点问题(实际上还是权限问题!何况我是x86!!)所以既然对我来说足够用,那么就不多说了,具体建议参考这篇文章:
https://github.com/yangyangwithgnu/use_vim_as_ide

配置渗透环境

这里为了图方便,直接把所有基础包直接安装,大小约122MB。如果你的termux是第一次使用,可以直接复制我的安装命令:

1
apt install git wget vim nano tar less nmap openssh hydra python2 -y

nmap,openssh,hydra算是环境的一部分,具体怎么用问Google。之后就是安装其他的环境包:BBScan,subDomainsBrute,RouterSploit,whatportis和sqlmap,具体怎么用依然问Google,总之安装玩就算环境搭建成功,用法问Google!!!
安装sqlmap,BBScan,subDomainsBrute和RouterSploit;提示缺失python扩展包,直接用

1
pip2 install <对应扩展包>

1
2
3
4
5
git clone https://github.com/sqlmapproject/sqlmap.git
git clone https://github.com/lijiejie/BBScan.git
git clone https://github.com/y1ng1996/lijiejie_subDomainsBrute.git
git clone https://github.com/reverse-shell/routersploit
pip2 install requests

再安装whatportis

1
pip2 install whatportis

这样一个基础的渗透环境就配置好了,起码比N年前那种所谓Android渗透包(基本上都要root才能用)要好!!至于用法有不会的就Google!!有不会的就Google!有不会的就Google!重要的事情说三遍!!总之熟能生巧!!!

Linux下机器学习开发环境的配置

关于这个环境,我是准备拿来做计算的,毕竟搞工业仿真,如果一直在本机上测试那么我电脑直接捐了算了!!何况让服务器一直吃灰成何体统!!毕竟是已经续费到毕业的!不得不用!!

  • 设备:阿里云ECS
  • 执行终端:YogaBook(基于termux模拟终端)、Windows10

首先去下载Anaconda2,因为我的ECS是在青岛机房,而众所周知的一些原因,从官网上下载会导致速度特别特别慢,这个时候推荐从清华大学的镜像源下载。由于使用python2.7,就下载对应的Anaconda2-5.0.1。

如果你不确定选择什么版本,可以先查看一下系统信息

1
uname -a

我选择Anaconda2-5.0.1-Linux-x86_64.sh。并且创建一个Anaconda目录用于存放下载和安装,当然你也可以下载到根目录。

cd 到Anaconda目录,执行下载,不得不说国内的源下载速度是非常快的!!35mb/s

1
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda2-5.0.1-Linux-x86_64.sh

下载好之后执行安装,整个过程就是按几下Enter,输入几次yes。如果你的命令行卡在下载命令上了,记得先退出再安装!

1
bash Anaconda2-5.0.1-Linux-x86_64.sh

安装完之后记得添加环境变量!实际上安装过程中会自己问,可以选择yes

之后就是检测一下能不能用,输入python看是否能返回python。但是输入conda、jupyter一类的却返回command not found,解决方法是把anaconda2/bin这个目录添加到环境变量就好了(具体操作看安装目录,默认安装目录是在~下)

1
echo 'export PATH="~/anaconda2/bin:$PATH"' >> ~/.bashrc

更新path以立即生效

1
source ~/.bashrc

这时再输入那些命令就可以执行了!因为深度学习环境需要一些开源模块,尤其是依托于Scikit-Learn,这时候就需要自己手动去安装了,可以使用pip或者conda。当然Numpy ,Scipy ,Matplotlib这些包也是必须的!!剩下的包就随用随加。

1
2
3
4
5
6
7
conda install scipy
conda install theano
conda install keras
pip install tensorflow
pip install sklearn
pip install numpy
pip install matplotlib

但是还有一个问题是Anaconda官网因为众所周知的原因国内访问慢的要死,这个时候还是改用国内的源更方便一些!!

添加Anaconda的TUNA镜像

1
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/

设置搜索时显示通道地址

1
conda config --set show_channel_urls yes

这个时候可以考虑配置jupyter了,首先要测试一下环境

1
jupyter notebook

环境没问题就先来配置ipython,输入:

1
ipython profile create

然后

1
cd ~/.ipython/profile_default/

对生成的2个文件进行编辑,使用方法是先键入

1
c = get_config()

再查找到c.InteractiveShellApp.exec_lines语句,在[]里键入常用的模块,我以自己的为例

1
"import pandas as pd","import numpy as np","import scipy.stats as spstats", "import scipy as sp"

因为过多的导入会影响ipython的开启速度,这里就自己斟酌吧。

接下来,为了能够远程访问我这台ECS上的jupyter notebook,要进行最恶心的设置了。首先,为了保证能够完美设置,确认写入path环境之后重启ECS,之后,输入

1
jupyter notebook --generate-config

而root会报错,要求加入-allow-root再执行,所以

1
jupyter notebook --generate-config --allow-config

执行成功会显示:

1
Writing default config to: /root/.jupyter/jupyter_notebook_config.py

反之报错,重复上述步骤直至成功,一般重启服务器即可。既然生成了配置文件,接下来设置个密码,为了方便起见建议用ipython手动设置!!即先输入

1
ipython

进入ipython,然后配置自己的密码

1
2
3
4
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:

回车,之后会返回一串密文,即Out[2]:那个。这个时候配置jupyter_notebook_config.py

1
vim jupyter_notebook_config.py

找到,去掉注释#,然后按自己情况编辑

1
2
3
4
c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha:ce...刚才复制的那个密文'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 #可自行指定一个端口, 访问时使用该端口

因为这个文件大概600+行代码,建议用:?keyword 来查找。之后在非隐藏目录,启动jupyter notebook

1
jupyter notebook

若是root用户,则执行

1
jupyter notebook --allow-root

然后ip:端口号即可使用jupyter,实际上域名:端口号也可以。记得在安全组的公网入方向添加这个端口

但是这样又爆出了一个严峻问题,就是我是用root用户的,而jupyter是整个服务器的目录都能读取并且按照操作用户的权限来执行,所以一旦密码被破解我的服务器就会被日!!!因此要考虑一下安全问题:

  • 不到用的时候不要开启jupyter
  • 设置超级复杂的密码
  • 第三方安全软件监视端口

浅谈暴力web攻击

关于这个傻逼问题还是和阿里云有关。因为web应用防火墙,后台总是会看到一些“奇奇怪怪”的攻击记录,其中最多的就是脚本木马、上传漏洞类型的暴力攻击。

  • 首先看一下我的服务器安全组配置:公网出全部端口,公网入21/22/80/443端口
  • 其次,统计一下请求方式:POST、PUT、GET
  • 没有发现有CSRF攻击的记录

从上面的信息可以看出端口限制基本上是死的,对于80端口入侵,可行性最高的就是跑GCI,使用比较无脑的GCI扫描器进行穷举。对于21/22端口入侵,FTP就算了,我服务器上FTP服务是死的。而22端口,除非拿下我的账户密码直接ssh,否则入侵成功的几率是不存在的!443就算了。

那么从HTTP协议来看,实际的安全性如何:

  • GET (选择):从服务器上获取一个具体的资源或者一个资源列表。
  • POST (创建): 在服务器上创建一个新的资源。
  • PUT (更新):以整体的方式更新服务器上的一个资源。

关于具体的就不说了,实际应用当中都是一些嗅探手段,用于垃圾扫描。毕竟当下做SQL注入也是特别难的。从日志里看,这类请求无非是检测是否存在某目录文件。但是这一引出了一个大的问题——漏洞利用。HTTP协议,win10下可以使用telnet命令(在系统中手动开启这个命令才能用)。更具体的说明详见从入侵者的眼中去理解 http 协议

如上所述,从注入角度看基本上是攻不进来的,但是一旦自身内部有问题,存在漏洞就不好说了。关于漏洞影响这里不多说,而且给出的建议也很简单却很难做好:

  • 合理配置服务/端口与权限
  • 关注安全信息,及时更新软件,打补丁
  • 使用第三方高效的服务器安全软件

搭建本地git仓库

centos搭git仓库很别扭,而且….虽然是为了技术验证,但讲道理这个不如QQ群的群共享好用(如果是短期项目的话)

  • 设备:阿里云ECS(吃灰中)

首先通过yum源下载安装git

1
yum install -y git

安装之后会在/home/目录下生成一个git目录,但相关操作之后再说。首先添加个用户(这里用户名为git),并且为之设置密码

1
2
adduser git
passwd git

下一步,我们在/home/git/目录下建立一个子目录,作为git仓库目录。因为是给美赛准备的,我这里就是mcm

1
mkdir /home/git/mcm

接下来给予用户组和775权限:

1
2
sudo chown git:git /home/git/mcm
sudo chmod 755 /home/git/mcm

到这一步,基本上就配置完了,接下来切换到git用户组,在mcm目录下创建仓库即可

1
2
su git
cd /home/git/mcm

这里我建立一个仓库名为mcm的仓库

1
git init --bare mcm.git

至此,git仓库搭建与配置结束(结束了??是我懒得搞那些没用的权限设置,尤其是我习惯用shell!!何况用ssh来使用对我的队友极其不方便!!),马上打开git bash验证一下:

1
git clone git@ECS的ip:/home/git/mcm/mcm.git

输入yes之后,返回

1
warning: You appear to have cloned an empty repository.

到这里一切都ok了,虽然感觉使用起来然并卵。关于上传项目参考git上传仓库(感觉这样给队友用只会给她们增加压力XD)。当然,如果你是作大型的自建仓库使用,建议用Gogs或者GITLAB,当然我这里自用就用不着这么上纲上线的程序了。

win10 更新后WIFI无法链接的解决办法

一般来说都说win10强制更新导致的,首先先手动关闭自动更新(虽然然并卵):

  • win+R,输入services.msc,找到Windows Update,手动关闭。

之后,打开控制面板,网络和Internet-查看网络状态和任务-更改适配器设置-WLAN-右键,属性-Microsoft网络客户端-配置-驱动程序-更新驱动程序-浏览计算机以查找驱动软件-从计算机的设备驱动程序列表中选取-Qualcomm Atheros AR9485 无线网络适配器-下一步

以上,解决问题。

git无法部署hexo的解决办法

最近部署hexo会报错

1
fatal: HttpRequestException encountered.

提示连接不到GitHub,Google了一下,据说是因为Github最近停用了TLS 1.0和v 1.1导致的,但是呢感觉是慢性发作….

解决方法也很简单,把_comfig.yml中的repo由

1
https://github.com/examplename/examplename.github.io.git

改为

1
git@github.com:examplename/examplename.github.io.git

之后重新部署即可!!

WIN10内存占用过高的解决办法

首先对于WIN10真的是没法吐槽,系统原因导致很吃机械硬盘,再加上本来电脑配置就差,所以硬盘经常卡我也能接受,虽然配置差,但是内存经常占用过高我就实在是不能忍了,大概折腾了一下,可以这样解决:

先放电脑配置:

  • 硬盘:西数 1T 机械硬盘,5400转

  • 内存:4GB DDR3,什么牌子的不知道

  • CPU: i5-4210m,2.6GHZ

4GB的内存的确是寒酸了点,看任务管理器,主要是chrome占用比较高,网页运载大。所以把默认浏览器改换edge之后好了很多,内存占用大概是chrome的2/3

其次,考虑内存不足就去设置虚拟内存,在虚拟内存设置页面,对非系统盘都设置为无分页文件,仅对系统盘设置自定义大小,初始值和最大值都设置为推荐值。设置好之后重新启动。内存占用的确就能降下来了,之前大概剩余300MB左右,优化之后剩余稳定在1GB左右。

当然最好的方法还是加内存条,但是对于这台配置很烂的机器就算啦。等毕业了买matebook13还不是美滋滋!

给GITHUB PAGES绑定域名

阿里云(万网)的ink域名很便宜,我就注册了一个….

ping一下自己的github仓库地址,然后将IP做A、CNAME解析,并在github上补充自己的域名,在仓库目录下增加只含新域名的CNAME文件即可。

又回归独立域名了!!!

基于MKDocs建立个人Wiki

实际上这个东西是从冉酱那里发现的,然后我思考了一下现实需求,就决定也弄一个。

可以满足的需求如下:

  • 可以作为博客替代品,语言为英文(提供姿势水平)。

  • 仅用来写学习笔记,科目是数学、物理学、材料科学、计算机科学,语言为英文。

  • 如同作业一样强制自己做学习笔记,有利于留学生活的高效性。

因此,这个基于Python并可以部署到GitHub pages的Wiki程序还是很适合留学生用的,缺点是三栏式主题只有一个。

搭建

MKDocs的官方教程写得很详细,可以从官网上看:https://www.mkdocs.org

它支持多个版本的python,仅仅使用pip模块来安装即可。所以在CMD(建议管理员权限打开)下检查一下已安装的版本和pip,就能执行安装了:

1
2
3
python --version

pip --version

注意这里只要显示有较新版本pip即可,除非安装失败否则不要按照官网教程更新pip!!容易误删!!我的python版本是python3.7,pip版本是pip19.2.1。所以直接开始安装,并查看版本。

1
2
3
pip install mkdocs

mkdocs --version

安装成功,显示mkdocs版本为1.0.4,匹配python3.7。注意安装目录是python安装目录下\lib\site-packages\mkdocs,所以写文章之前,要先在你想要的目录下创建项目,以方便后期备份!!我习惯放到D盘里了,名字就是my-project。因此

1
2
3
4
D:
cd D:\
mkdocs new my-project
cd my-project

之后安装material主题

1
pip install mkdocs-material

然后在配置yml文件之前,先考虑一下如何建立这个可以web访问的网站?它可以放到GitHub Pages上,这意味着可以绑定域名并且开启https。而一个github账户只能开一个个人Github Pages,下属无数个项目GitHub Pages,所以首先要建立项目GitHub Pages。这里我参考了:https://segmentfault.com/a/1190000003946969

实际操作没文章里说的那么难,无非是:

  • 随意建立一个repo,名字随意,在setting里直接拉到GitHub Pages,Source选择master branch,Custom domain设置为自己的二级域名(当然你可以绑其他域名,无所谓一二级)。勾选Enforce HTTPS从而强制开启https。这个时候会自动生成一个CNAME文件,里面是二级域名,不带https的那种!!如wiki.chnliefeng.ink。

  • 打开域名服务商,如阿里云,在域名解析里开启二级域名,是CNAME记录。我的设置是CNAME主机记录为wiki,记录值为liefeng.github.io。然后解析,过一会儿即可访问 https://wiki.chnliefeng.ink

然后这个时候参考官方指南来配置mkdocs.yml。注意pages要用nav描述。

部署

先git clone那个repo,记得更改branch为gh-pages,然后把my-project里面所有东西放到repo目录下,之后

1
mkdocs gh-deploy

这样就部署好了

Mkdocs支持markdown数学公式

最近要用来写物理/数学的学习笔记,就研究了一下。实际上这个设置非常简单。安装pymdown-extensions然后配置mkdoc.yml文件即可,

首先安装插件

1
pip install pymdown-extensions

然后在mkdocs的根目录下的docs文件夹中新建一个mathjax-config.js文件,该文件是辅助配置MathJax,里面代码为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/* mathjax-loader.js  file */
/* ref: http://facelessuser.github.io/pymdown-extensions/extensions/arithmatex/ */
(function (win, doc) {
win.MathJax = {
config: ["MMLorHTML.js"],
extensions: ["tex2jax.js"],
jax: ["input/TeX"],
tex2jax: {
inlineMath: [ ["\\(","\\)"] ],
displayMath: [ ["\\[","\\]"] ]
},
TeX: {
TagSide: "right",
TagIndent: ".8em",
MultLineWidth: "85%",
equationNumbers: {
autoNumber: "AMS",
},
unicode: {
fonts: "STIXGeneral,'Arial Unicode MS'"
}
},
displayAlign: 'center',
showProcessingMessages: false,
messageStyle: 'none'
};
})(window, document);

之后在mkdocs.yml文件中添加以下代码即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
markdown_extensions:
- pymdownx.arithmatex
- pymdownx.betterem:
smart_enable: all
- pymdownx.caret
- pymdownx.critic
- pymdownx.details
- pymdownx.emoji:
emoji_generator: !!python/name:pymdownx.emoji.to_svg
- pymdownx.inlinehilite
- pymdownx.magiclink
- pymdownx.mark
- pymdownx.smartsymbols
- pymdownx.superfences
- pymdownx.tasklist:
custom_checkbox: true
- pymdownx.tilde
extra_javascript:
- mathjax-config.js
- https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-MML-AM_CHTML

之后部署带有markdown数学公式的文档,查看网页效果即可。

Zabbix 监控系统的搭建与应用

这是来自乌海市某物联网科技公司的需要,也是我的的第一单。

使用资源:

  • JAIST Cloud Service 提供Centos7桌面环境
  • Zabbix
  • 自己组装的电脑主机,装Centos7,作为Zabbix的总服务器端
  • 计算机网络集群,windows7,200台构成

由于这个公司某无法无天的技术员利用公司计算机集群挖矿,对公司造成重大经济损失,而他掌握公司技术命脉,且所有技术设置都是黑箱操作,因此我们建立zabbix系统的目的是:

  • 实现对计算机集群的实时检测,以确定运行情况,打破黑箱操作的现状。
  • 在监控之后,使用teamviewer进行远程维护,同时进行逆向技术破解计算机集群设置,实现技术夺权。

Zabbix简述

Zabbix是开源软件,是一个企业级分布式开源监控解决方案。其官网有中文版说明书。对Zabbix的概述中,官方说明中有这样2个需要注意的描述:

  • Zabbix server 是 Zabbix软件的核心组件,agent 向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。

  • Zabbix proxy 可以代替 Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。

  • Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。

所以,如果我们想构建一个Zabbix监控网络,假设要监控M台主机构成的网络,可以使用1台设备作为server端,其他主机节点作为agents,但是会很吃server的计算性能,导致单个server终端负载过大。如果在这个网络中的主机节点分为N个组,每组配置一台proxy,之后总的sever只要采集每一组当中那台proxy的数据,并进行整理即可实现对整个主机网络的监控。这里很明显M远大于N,从硬件的运行性能上看,对于大型网络集群配置并使用proxy是很有必要的。

针对这一点,官方说明中有提到:

  • 另外,回过头来整体的了解下 Zabbix 内部的数据流对Zabbix的使用也很重要。首先,为了创建一个采集数据的监控项,您就必须先创建主机。其次,在任务的另外一端,必须要有监控项才能创建触发器(trigger),必须要有触发器来创建动作(action)。因此,如果您想要收到类似“X个server上CPU负载过高”这样的告警,您必须首先为 Server X 创建一个主机条目,其次创建一个用于监控其 CPU的监控项,最后创建一个触发器,用来触发 CPU负载过高这个动作,并将其发送到您的邮箱里。虽然这些步骤看起来很繁琐,但是使用模板的话,实际操作非常简单。也正是由于这种设计,使得 Zabbix 的配置变得更加灵活易用。

举个例子:网路由A,B,C3个地区的计算机集群组成,不同集群当中主机数量不同,施工技术方案与质量不同,网络运营质量不同,因此如果单个server同时监控A,B,C3个地区的计算机集群,其负载可能过大导致运行可靠性不稳定。而如果A,B,C3个地区各配置一台proxy,这样server的实际负载只有3个proxy,而单个proxy的负载也仅为该地区的计算机集群。这种网络体系对后期的增改很有利,且更具稳定性。

Zabbix的安装与部署

我从学校获得了一个Centos的云主机,但是没有root权限,不过只能用有限的资源来做技术验证了,具体信息如下:

1
2
3
4
使用主机:JAIST Could
系统:Centos 7.6.1810
用户权限:普通用户,无root权限
系统默认的仓库:ftp.jaist.ac.jp

首先要搭建LAMP环境,安装包一类的在JAIST仓库里有很多,所以不用愁资源的问题,网上也有很多LAMP环境的搭建教程。而普通用户没有root权限,这就意味着不能使用yum命令来配置/安装服务,但是wget命令来搭建和配置简直灾难。所以我的解决办法是使用yumdownloader命令,但是在此之前要先检查仓库里有没有所需的服务包,命令格式如下:

1
yum list '安装包(rpm包)名称*'

如果显示有,则可以直接下载安装rpm包

1
yumdownloader rpm包

解压rpm包

1
rpm2cpio rpm包 |cpio -idvm

添加PATH,如果在HOME目录下,可以如下

1
2
vim  ~/.bashrc
export PATH=$PATH:$HOME/usr/bin/

重新登录 或者 source 一下.bashrc文件即可使用这个程序。