在 Kali 和 Ubuntu 上安装 Code Blocks

操作环境

Kali 2019.1

操作步骤

添加软件源:

root@kali:~# add-apt-repository ppa:damien-moore/codeblocks-stable

更新软件源:

root@kali:~# sudo apt-get update

安装 Code Blocks:

root@kali:~# sudo apt-get install codeblocks

启动 Code Blocks:

root@kali:~# codeblocks

之后, 可以参考我这篇博文对 Code Blocks 的外观进行优化, 文章地址:
http://zhaokaifeng.com/?p=1590

Kali Linux 忘记系统登录密码后的重置密码操作

前言

如果忘记了系统的登录密码, 最关键的需求就是重置 root 用户的登录密码, 之后使用 root 账户可以修改其他账户的密码. 因此, 本文就介绍一下在不知道 root 用户登录密码的情况下如何重置 root 账户的密码.

操作环境

Kali Linux 2019.1

操作步骤

启动 Kali Linux, 在启动了 GNU GRUB (GNU 引导) 界面时按 e 进入编辑模式.
之后找到如图 1 所示的位置, 把其中的 ro 改成 rw, 并删除 .gz 后面的 quite, 替换成 init=/bin/bash.

图 1
图 1

修改后如图 2 所示:

图 2
图 2

修改完成之后, 使用 Ctrl +X 组合键继续系统的启动进程, 此时是可以无密码直接进系统的, 如图 3:

图 3
图 3

在图 3 中所示的 # 提示符后面输入重置密码的 passwd 命令即可修改 root 用户的密码并使用修改后的密码正常登陆系统.

对使用 Z-BlogPHP 搭建的网站进行安全加固 (上)

前言

Z-BlogPHP 是一款常用的 Web 博客程序, 许多网站都是使用 Z-BlogPHP 搭建的. 今天, 我来结合自己目前所掌握的知识谈谈对使用 Z-BlogPHP 搭建的网站进行安全加固的方法. 希望本文能让更多的网站尽可能地远离安全威胁.

网站加固涉及很多方面, 有 Web 程序的加固, 中间件的加固, 代码运行环境的加固, 还有 Web 服务器的加固等, 本文只讨论对 Web 程序, 也就是 Z-BlogPHP 本身的加固.

操作环境

Z-BlogPHP 版本: Z-BlogPHP 1.5.2 Zero 正式版

加固步骤

保护登录入口

使用 Google 两步验证

两步验证相当于给登录过程加了两把锁, 即使我们网站的登录密码被恶意获取和利用, 攻击者也无法仅仅依靠该密码就成功登录网站后台. 两步验证的实现方式中常用的大致有两种:

  • 手机短信验证码
  • 虚拟 MFA

使用”手机短信验证码”的方式进行验证就是在登录的时候除了要输入用户名和密码之外还会要求输入一个由服务器发来的手机短信. 虚拟 MFA 的作用和手机短信验证码类似, 只不过虚拟 MFA 可以基于时间 (或者计数器) 生成验证码 (每 30 秒自动生成一个 6 位数字), 不需要联网即可运作.

目前可以提供虚拟 MFA 验证的软件有:

  • Authy
    官网: https://authy.com/
    Authy 提供的验证程序几乎覆盖了目前所有主流操作系统, 其支持的平台有 iOS, Android, Windows, macOS 以及 Chrome 浏览器.
  • 1Password
    官网: https://1password.com/
    1Password 是一个密码管理器, 也支持两步验证.
  • Microsoft Authenticator
    官网: https://www.microsoft.com/en-us/account/authenticator
    微软出品的两步验证程序.
  • Google 2-Step Verification
    官网: https://www.google.com/landing/2step
    Google 出品的两步身份验证器.

想要在 Z-BlogPHP 中使用两步验证, 首先需要在 Z-BlogPHP 的应用中心搜索”Google两步验证”找到相关插件, 插件 ID 是”LiangbuLogin”. 下载完成之后, 启用该插件.

下面我在手机上使用 Google 两步验证程序”Google 身份验证器”和 Z-BlogPHP 中的”Google两步验证”插件演示配置并启用两步验证的过程.

首先, 在 Z-BlogPHP 的管理后台中进入”Google两步验证”插件的配置界面并打开手机上的”Google 身份验证器”, 之后的操作过程如图 1 所示:

图 1
图 1

之后, 再登陆 Z-BlogPHP 的后台时会要求输入 Google 两步验证的验证码, 如图 2 所示.

图 2
图 2

如果进行两步验证的设备丢失, 可以在服务上删除如下目录及文件即可取消 Google 两步验证:

XX/zb_users/plugin/LiangbuLogin

另外, 需要注意的是, 如果设备支持的话, 请务必给进行两步验证的程序加上应用锁以尽可能避免未经授权的使用.

修改默认登录地址

Z-BlogPHP 默认的登录地址如下:

https://域名/zb_system/login.php

如果使用默认的登录地址的话, 就是把网站登录入口直接暴露在攻击者面前, 这是一个严重的不安全因素. 下面演示修改默认登录地址的方法.

首先将 zb_system/ 目录下的 login.php 文件修改成一个随机名称, 例如: ajdvirb6zmg9s7k2.php, 之后, 登录地址就变成了:

https://域名/zb_system/ajdvirb6zmg9s7k2.php

下一步, 在当前网站所使用的主题 (一般位于 xx/zb_users/theme/ 目录下) 下面找到 include.php 这个文件, 在其中加入如下 PHP 代码:

#修改默认登录地址
function zpnfewmcbxgsak(){
   global $zbp;
   $sfwidmsahdgv="ssocnf7sbsnxs";
   $dsdsuacskpqba="sdvn2ps3m2n";
   if($_GET[''.$sfwidmsahdgv.''] !== ''.$dsdsuacskpqba.'') {
      Redirect($zbp->host);
      die();
   }
}

之后, 同样在 include.php 这个文件中, 找到 function ActivePlugin_主题 ID(){} 函数, 在其中加入如下 PHP 代码:

Add_Filter_Plugin('Filter_Plugin_Login_Header','zpnfewmcbxgsak');

经过上述操作之后, 登录地址就变成了:

https://域名/zb_system/ajdvirb6zmg9s7k2.php?ssocnf7sbsnxs=sdvn2ps3m2n

上面地址中的任意一个字符不对都将无法打开登录页面.
如果忘记了登录地址, 只需要进入服务器, 找到上面所作的更改并组合成登录地址即可.

需要注意的一点是, Z-BlogPHP 默认会把后台登录地址显示在网站前台, 这个组件一定要去掉.

修改登录页面默认标题和内容

通常情况下, 登录页面都会有一些和登录相关的关键词, 例如”登录”, “用户登录”, “login”, “网站后台”, “用户名”和”密码”等. 如果登录界面被搜索引擎爬取到了, 那么攻击者通过类似”Google hack”这样的方式就有可能获取网站登录后台的地址. 因此, 有必要把登录页面的一些关键词修改成和”登录”以及”网站后台”无关的内容. 修改方法如下:

打开 zb_system/ 目录下的 login.php 文件(如果您按照上面的过程进行了修改, 那么此时, 这个文件的名称应该是 ajdvirb6zmg9s7k2.php, 具体名称以您的修改操作为准.), 进行如下修改:

修改用户名输入框的提示字符, 将:

<dd class="username"><label for="edtUserName"><?php echo $lang['msg']['username'] ?></label><input type="text" id="edtUserName" name="edtUserName" size="20" value="<?php echo GetVars('username', 'COOKIE') ?>" tabindex="1" /></dd>

修改成:

<dd class="username"><label for="edtUserName"><?php echo "hskVex" ?></label><input type="text" id="edtUserName" name="edtUserName" size="20" value="<?php echo GetVars('username', 'COOKIE') ?>" tabindex="1" /></dd>

修改密码输入框的提示字符, 将:

<dd class="password"><label for="edtPassWord"><?php echo $lang['msg']['password'] ?></label><input type="password" id="edtPassWord" name="edtPassWord" size="20" tabindex="2" /></dd>

修改成:

<dd class="password"><label for="edtPassWord"><?php echo "sFhfc" ?></label><input type="password" id="edtPassWord" name="edtPassWord" size="20" tabindex="2" /></dd>

修改页面标题, 将:

<title><?php echo $blogname . '-' . $lang['msg']['login'] ?></title>

修改成:

<title><?php echo "HFxs&3^k" . '-' . "pJ18&qxF" ?></title>

修改登录界面的图片标题和图片说明, 将:

<div class="logo"><img src="image/admin/none.gif" title="<?php echo htmlspecialchars($blogname) ?>" alt="<?php echo htmlspecialchars($blogname) ?>"/></div>

修改成:

<div class="logo"><img src="image/admin/none.gif" title="<?php echo "DshjFac@1A7%" ?>" alt="<?php echo "DsE2vshKw7" ?>"/></div>

修改”保持登录”提示字符, 将:

<dd class="checkbox"><input type="checkbox" name="chkRemember" id="chkRemember"  tabindex="98" /><label for="chkRemember"><?php echo $lang['msg']['stay_signed_in'] ?></label></dd>

修改成:

<dd class="checkbox"><input type="checkbox" name="chkRemember" id="chkRemember"  tabindex="98" /><label for="chkRemember"><?php echo "Qh1A2s$sAv%gC*" ?></label></dd>

修改登录按钮, 将:

<dd class="submit"><input id="btnPost" name="btnPost" type="submit" value="<?php echo $lang['msg']['login'] ?>" class="button" tabindex="99"/></dd>

修改成:

<dd class="submit"><input id="btnPost" name="btnPost" type="submit" value="<?php echo "HCL9" ?>" class="button" tabindex="99"/></dd>

记录访问登录页面的 IP 地址

对于记录 IP 地址这个功能, 我们可以使用第三方的网站统计服务来实现. 我们可以申请一个统计代码, 而且只将这个统计代码放在登录页面, 这样就可以记录到所有访问过登录界面的 IP 地址, 根据这些 IP 地址和登陆时间就可以大致判断网站的登录界面是否已经被攻击者掌握. 但是, 使用第三方服务也就意味着我们的后台登录地址将上传到第三方平台的服务器, 从而增大了后台登录地址可能受到攻击的攻击面, 在这里我们通过一段 PHP 代码实现对访问了登录页面的 IP 地址进行记录的功能.

打开 zb_system/ 目录下的 login.php 文件(如果您按照上面的过程进行了修改, 那么此时, 这个文件的名称应该是 ajdvirb6zmg9s7k2.php, 具体名称以您的修改操作为准.), 添加如下代码:

<?php
$ip = $_SERVER["REMOTE_ADDR"];
$var = "$ip;\n";

file_put_contents('ip.md', $var, FILE_APPEND | LOCK_EX);
?>

上述代码将在当前路径下创建 ip.md 文件并将带有当前访问者 IP 地址的变量 $var 的值以追加的方式 (使用参数 FILE_APPEND 实现内容追加) 写入到 ip.md 文件. 今后, 我们可以通过 ip.md 文件记录的内容获知是否有未授权的 IP 地址打开过登录界面.

使用强登录密码

这一点无需多言, 登录密码至少需要有 16 位, 且必须包括大小写字母, 数字和特殊字符并经常更换.

启用 Z-BlogPHP 自带的安全设置

在 Z-BlogPHP 的管理后台的”网站设置 / 全局设置”中开启”安全增强”并关闭”开发模式”, 如图 3:

图 3
图 3

在安装完必要的插件之后, 在 Z-BlogPHP 的管理后台的”应用中心 / 安全模式”中开启安全模式, Z-BlogPHP 建议我们不要使用可以进行文件管理, 数据库管理, 主题编辑和网站备份的插件, 如图 4:

图 4
图 4

如果要退出安全模式, 需要进入网站的服务器端, 手动删除以下文件:

/zb_users/data/appcentre_security_mode.php

之后, 在网站后台中进入”插件管理”, 停止”应用中心客户端”的运行. 今后只需要每隔特定时间检查一次更新或者在获知有新版本的程序发布时开启”应用中心客户端”进行一下更新即可.

防止恶意上传

由于我使用 Z-BlogPHP 搭建的网站中主要使用的图片是 .webp 格式, 除此之外基本没有上传过其他格式的文件, 因此可以在后台去掉对不常用的文件格式的上传支持. Z-BlogPHP 默认支持的上传格式如下:

jpg|gif|png|jpeg|bmp|psd|wmf|ico|rpm|deb|tar|gz|sit|7z|bz2|zip|rar|xml|xsl|svg|svgz|rtf|doc|docx|ppt|pptx|xls|xlsx|wps|chm|txt|pdf|mp3|mp4|avi|mpg|rm|ra|rmvb|mov|wmv|wma|swf|fla|torrent|apk|zba|gzba

我修改后的支持的上传格式如下 (在管理后台的”网站设置 / 全局设置”中可以进行修改):

webp|jpg|gif|png|jpeg|bmp

总之, 将允许上传的文件格式限制得越少越好.

删除不必要的文件

Z-BlogPHP 的安装程序在 zb_install 目录下, 安装完成后 zb_install 这个目录及其下的所有文件都可以直接删除以减少网站的受攻击面 (该删除操作不会影响网站的正常登陆和访问).

Solve the Problem of ownCloud: ‘No Keychain Service Available’ on Ubuntu 18.04

Operating Environment

Operating system: Ubuntu 18.04.2 LTS
ownCloud client version: 2.4.1

Problem Description

I use ownCloud in Ubuntu and I add one account to it. But whenever I reboot Ubuntu, ownCloud will tell me: “No keychain service available” and I’ll be asked to enter the password once, as show in the figure 1:

Figure 1
Figure 1

Once I enter the password, ownCloud will work properly. But once I restart Ubuntu Linux, that happens again and again. Passwords should be stored, but it didn’t.

Solve the Problem

I found a solution on Github through Bing and that link is HERE. It seems that I am not the only one who has encountered this problem.

The solution is very simple, installing:

sudo apt install libgnome-keyring0

Then, reboot Ubuntu Linux, after you log in to the system, you will be asked to enter a password once, only once, whether you restart Ubuntu or not, you will not be asked to enter ownCloud’s password again unless you exit ownCloud account.

This problem has been solved.

在 Windows 10 上优化 CodeBlocks 外观 (主题 + 字体)

操作环境

操作系统: Windows 10 64 位 中文家庭版
CodeBlocks 版本: Code::Blocks 17.12

操作说明

CodeBlocks 是一款优秀的 IDE, 但是其默认的主题实在是不能满足我对一个代码编译器最基本的需求: 不使用亮色主题.
CodeBlocks 默认的主题是白色的, 如图 1:

图 1
图 1

在写代码时, 编辑器通常都是全屏显示的, 白色的主题看久了眼睛是受不了的. 不过, 好在 CodeBlocks 官网上提供了暗色的主题可供选择, 本文就介绍一下通过 CodeBlocks 官网提供的主题代码更换 CodeBlocks 主题以及修改 CodeBlocks 默认字体的方法.

继续阅读“在 Windows 10 上优化 CodeBlocks 外观 (主题 + 字体)”

在 Debian 7 Linux 中将 PHP 5.4 升级到 PHP 5.6

操作环境

root@IronMan:~# cat /etc/issue
Debian GNU/Linux 7 \n \l

操作步骤

指定软件源, 编辑:

vim /etc/apt/sources.list.d/dotdeb.list

写入如下内容:

deb http://packages.dotdeb.org wheezy-php56 all
deb-src http://packages.dotdeb.org wheezy-php56 all

将上述软件源加入 apt key:

wget http://www.dotdeb.org/dotdeb.gpg -O- | apt-key add -

更新可用包列表:

aptitude update

升级 PHP 版本:

aptitude install php5-cli php5-fpm