Category Archives

44 Articles

为什么 Archlinux 不适合服务器使用

写在前面:我使用 Archlinux 已经快三年了,而且最近两年中它已经是我的主系统,工作、娱乐都是用它完成的, Windows 只是用来刷刷 BIOS ……我个人还是很喜欢 Archlinux 的 KISS 哲学的,软件包时刻跟随上游并且保持原汁原味,滚动更新随时体验新特性,最喜欢的大概还是 Arch User Repository 了吧……说了这么多,其实核心意思只有一个——我不是什么 Archlinux 黑,我个人一直都在用它,只是客观地陈述它绝非“银弹”或什么“最好的发行版”,它有它适合的对象和环境,而这绝不包括“生产服务器”!

Read More

原地在线升级 Windows Server 2012 到 R2

先声明一下——我完全不熟悉 Windows Server ,甚至对 Windows 桌面版也谈不上了解(很少用了现在)。只是自己随便折腾着玩儿的。

不知道 Windows Server 从什么时候开始支持“原地在线升级”了(in-place & online)。就是在待升级的系统中插入安装盘然后运行其中的 exe 进行升级。桌面版的话至少 Windows 7 开始就已经支持了。不过很少有相关的文档说明,我当时在 MSDN 和 TechNet 上翻了很久也没有看到明确说 Server 到底是不是支持这样升级。不过毕竟不是生产环境,而且想过去从 2012 到 2012 R2 的变化应该不大,就抱着试试看的心态玩了一下,而且用的还不是安装盘或者 USB 驱动器,而是直接用虚拟光驱挂载了 ISO ,使用的是远程桌面连接(后来一想还是挺虚的,要是挂了就得跑去机房了),然后一路 next 、重启一次以后就成功升级了!比想象中的顺利很多。安装过程中安装程序明显也发现了我的意图,提示我停掉其他程序并且进行了兼容性检查等等。顺带一提,我怕出事儿就先把 Hyper-V 里头的虚拟机都关掉了。

最后,不建议在生产环境上这么做……且不说有点可怕的“在线升级”了(还是用远程桌面 + 虚拟光驱),就连原地升级在很多正式场合都是不采用的(一些大公司在升级 Windows Server 的时候会考虑 clean install 来尽可能减少问题)。 Anyway ,我也不了解这个做法到底有多大危险性……

Archlinux 中 grub 和 mkinitcpio 的 bug

期末当头,我却被 Archlinux 两个坑爹的 bug 折腾了一晚上。这两个 bug 与启动管理器和内核镜像生成有关,十分严重以至于倘若不幸入坑的话会导致系统无法启动—— grub.cfg 损坏以及 kernel ramdisk 损坏……这两个 bug 都与 Arch 过分激进的更新策略有关,又一次成为了“ Archlinux 不适合生产环境”的有力佐证,以及再次印证了那句话——选择 Arch ,选择折腾。

Read More

Apache mod_rpaf 对于 allow/deny 指令无效

mod_rpaf (Reverse Proxy Add Forward)是 Apache 2.2 及更低版本中一个很有用的第三方模块,主要用于后端 Web Server ,可以将请求的 remote ip 重写为指定的字段(例如 X-Forwarded-For 或者 X-Real-IP )。很多网站目前都采用 nginx + Apache 的组合,这个模块可以使得转发对应用透明,应用按照普通方法即可获取到真实 IP ,不用修改代码来读取指定的 HTTP Header 。更优秀的是,这个模块对日志也是同样有用的—— access/error log 中记录的 IP 地址也会被修改为真实的 IP 。另外这个模块的自定义功能也很强大,可以任意指定使用哪一个 HTTP Header 字段、接受哪些前端转发 IP 等等。

然而正因为其强大,使得用户想当然地认为它在所有地方都有效,不曾想在 Apache 的访问控制(allow/deny 指令)中,该模块无效,访客 IP 仍旧是前端转发服务器的 IP !这个行为没有在文档中明确说明。我因此差点弄出了一个严重的安全问题——为了监控服务器我开启了 server-status ,本想都允许网关服务器访问以便在一个地方统一收集数据,就写了类似 allow from gate 这样的东西,结果 server-status 就一下子“门户大开”,所有人都可以看到了(因为都是经过前端网关代理的)。这个“问题”对 mod_rpaf 而言没有解决方案(除非修改代码)。另一个类似功能的模块 mod_remoteip (Apache 2.4 自带,有 backport 到 2.2 的版本)可以使得 allow/deny 能够使用真实 IP 。

PHP 应用隔离的几种方法

接着上回的话题,关于一个系统管理员能够给一台跑着多个应用的服务器做些什么来提高整体安全性。除了限制一些危险函数以外,很重要的便是尽可能地隔离不同的应用,以免一个瘫痪/被攻影响所有。其实,限制危险函数也是为了更好地实现应用隔离——接下来我们会看到,对于某些应用隔离方法,限制某些函数的调用是必须的。这里,我会大致按照隔离的效果降序给出几种常用方法。需要注意到的是,一般来说隔离效果越好,对性能的损失和其他副作用也越大。

Read More

禁用部分 PHP 函数加强系统安全

绝大多数 PHP 应用都只是单纯的 WEB 程序,很少用得到一些系统调用。一般最多用到一些列目录、读写删文件等。其他 system 、 passthru 等函数使用的最多的地方是 Web Shell 。作为一个运行着众多应用的服务器的运维,没有办法保证每一个程序的绝对安全,所能做的就是在自己的能力范围内尽可能增强系统安全性,通过权限隔离、限制等方法构筑“最后一道防线”。禁用一些一般不会用到的 PHP 函数就很有帮助。我的做法是在全局的 php.ini 中禁用掉这些函数,对于极个别需要其中某些函数的应用,在相应的 Apache VirtualHost/Directory 配置中通过 php_admin_value 来去掉限制。

Read More

MySQL binlog 与 Replication

经常听到有人问:“为什么我的 phpMyAdmin 提示:此 MySQL 服务器正以主服务器运行于复制进程中?明明我没有开启复制模式啊。”

这种情况的原因多半是开启了 binlog ,其实 binlog 也是一种 Replication ,即是把所有的 SQL 操作记录到了一个日志中。 binlog 的用途除了备份以外也可以用作“replay”。

Gitlab 搭建小记

玩儿了这么多年 Linux ,编译、安装、搭建、配置过的软件、项目不计其数,虽然没玩过 LFS 不敢自称大牛,但自认为折腾能力还是不错的。可是这次搭建 Gitlab 给了我一次不大不小的打击。第一次搭建还以失败告终,重来了一次才成功,浪费了不少时间。在此记下一些心得,以给各位提供一些建议。

首先,这不是一篇 Step by Step 的小白指南,而只是一些较为宽泛的笔记,不针对某个特定版本。具体的安装方法还请按照官方文档。其次,即使你是经验丰富的“高手”,我也建议你浏览一下这篇日志,就算只是扫一眼小标题也好,也许将会为你节省不少时间。

Read More

强制启用 Firefox 的硬件加速功能

Firefox 在硬件加速这点上始终落后于 Chrome ,换个说法就是 Mozilla 相对“保守”注重稳定。目前 Firefox 22 已经基本支持了硬件加速功能,包括对于 WebGL 的硬件加速和页面 2D 渲染的加速,与 Chrome 类似,但是其启用条件相对苛刻,只在经过严格测试的软硬件平台上才会启用。尤其是在 Linux 上, Firefox 内置了一份白名单,只有使用私有驱动的 nVidia 显卡时才会启用。不过现在 Linux 最新的开源 AMD 和 Intel 显卡驱动都足够稳定,经许多人测试可以正常启用硬件加速。

Read More

如何启用 Intel 7系列芯片组的深度休眠/快速启动功能

近两年的新 Thinkpad (包括部分 Ideapad )用户也许会注意到,在联想的宣传中有时会看到“30天休眠”、“智能混合休眠”、“快速启动”之类的宣传语,在联想的电源管理软件中也可以看到“启用30天睡眠”这样的设置。不过不少人都不知道这个功能到底是什么意思,开启那项设置似乎也没有任何变化。

其实,联想所说的“30天睡眠”是 Intel 7系列芯片组新引进的功能—— Rapid Start Technology ,缩写 RST ,在Q、H、Z系列芯片组上可以见到。 Intel 有另一项更加广为人知的技术缩写同为 RST ,即 Rapid Storage Technology ,与 SSD 、 RAID 有关。这个 Rapid Start Technology 也与 SSD 有些关系,简单来说就是在 SSD 上开辟一块空间用作休眠,在系统睡眠达到指定时间后,芯片组将自动把内存写入这块区域,并把内存断电,从低耗电睡眠转换为零耗电(不过仍然有自放电效应,一般来说可以支撑一个月)的休眠。“唤醒”时芯片组会自动把那块区域从 SSD 读入内存,再从睡眠状态恢复。

Read More