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文件即可使用这个程序。

后来由于JAIST Could 是分出来的目录权限,不是云主机也不是VPS那种类型,而是类似N年前流行的那种虚拟空间。给学生的账号也没有root权限,能用的服务也很少。但是学校的docker我还没测试,因此就直接转战虚拟机了。

CentOS的安装与配置

总结一下步骤:

  • 系统的版本选择与USB系统盘的制作
  • 系统安装与网络及其他设置

关于Centos要注意一下它的版本问题,针对不同版本的Linux主要以下2个命令:

1
2
uname -a
cat /etc/redhat-release

这里要说明一下Centos的发行版本之间的区别(机翻自readme文档):

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
List of images in this directory
================================
CentOS-7-x86_64-DVD-1804.iso
This DVD image contains all the packages that can be installed using the
installer. This is the recommended image for most users.

CentOS-7-x86_64-NetInstall-1804.iso
This is the network install and rescue image. The installer will ask from
where it should fetch the packages to be installed. This image is most
useful if you have a local mirror of CentOS packages.

CentOS-7-x86_64-Everything-1804.iso
This image contains the complete set of packages for CentOS Linux 7. It can be
used for installing or populating a local mirror. This image needs a 16GB USB
flash drive as it is too large for DVD isos.

CentOS-7-x86_64-LiveGNOME-1804.iso
CentOS-7-x86_64-LiveKDE-1804.iso
These images are Live images of CentOS Linux 7. Depending on the name they use the respective display manager. They are designed for testing purposes and exploring the CentOS Linux 7 environment. They will not modify the content of your hard disk, unless you choose to install CentOS Linux 7 from within the Live environment. Please be advised that you can not change the set of installed packages in this case. This needs to be done within the installed system using 'yum'.

CentOS-7-x86_64-Minimal-1804.iso
The aim of this image is to install a very basic CentOS Linux 7 system, with the minimum of packages needed to have a functional system. Please burn this image onto a CD and boot your computer off it. A preselected set of packages will be installed on your system. Everything else needs to be installed using yum. The set of packages installed by this image is identical to the one installed when choosing the group named "Minimal" from the full DVD image.

Using the installation images
=============================

You can burn these images to a DVD or 'dd' them to a USB flash drive.
After the boot media has been prepared, boot the computer off the boot media. If you do an install to your hard disk using these installation images, please remember to run "yum update" after the installation to update your system to the latest packages.

Remember that in order to be able to partition your disk you will need to run
the GUI installer which in turns needs enough RAM. The same is true for the
network setup step. Please refer to the release notes available at
http://wiki.centos.org/Manuals/ReleaseNotes/CentOS7 for more details about
these aspects.

机翻如下:

此目录中的图像列表
================================
CentOS-7-x86_64-DVD-1804.iso
该DVD映像包含可以使用以下命令安装的所有软件包。
安装程序。这是大多数用户的推荐图像。

CentOS-7-x86_64-NetInstall-1804.iso
这是网络安装和救援映像。安装程序将询问
应该在哪里获取要安装的软件包。此图片是最
如果您具有CentOS软件包的本地镜像,则很有用。

CentOS-7-x86_64-Everything-1804.iso
此映像包含用于CentOS Linux 7的完整软件包集。
用于安装或填充本地镜像。此图片需要16GB USB
闪存驱动器,因为它对于DVD isos而言太大。

CentOS-7-x86_64-LiveGNOME-1804.iso
CentOS-7-x86_64-LiveKDE-1804.iso
这些图像是CentOS Linux 7的实时图像。根据名称,它们使用各自的显示管理器。它们被设计用于测试目的和探索CentOS Linux 7环境。除非您选择从Live环境中安装CentOS Linux 7,否则它们不会修改硬盘的内容。请注意,在这种情况下,您不能更改已安装软件包的集合。这需要在安装的系统中使用'yum'完成。

CentOS-7-x86_64-Minimal-1804.iso
此映像的目的是安装一个非常基本的CentOS Linux 7系统,并使用具有功能性系统所需的最少软件包。请将此映像刻录到CD上,然后从计算机启动计算机。将安装一组预选的软件包。需要使用yum安装所有其他软件包。该映像安装的软件包集与从完整DVD映像中选择名为“最小”的组时安装的软件包相同。

使用安装映像
=============================

您可以将这些图像刻录到DVD或“ dd”到USB闪存驱动器。
准备好启动媒体后,从启动媒体启动计算机。如果使用这些安装映像安装到硬盘,请记住在安装后运行“ yum update”以将系统更新为最新的软件包。

请记住,为了能够对磁盘进行分区,您需要运行
GUI安装程序,而该安装程序又会频繁提供足够的RAM。对于
网络设置步骤。请参阅发布说明,网址为:
http://wiki.centos.org/Manuals/ReleaseNotes/CentOS7了解有关的更多详细信息
这些方面