delphij's Chaos
选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……
intron 因任满卸任,现水木社区的 FreeBSD 版需要一名版主。哪位去申请一下?
Read more...长久不做 SA,所以有些事情变得没有以前那么敏感。昨天终于还是出事了,不过幸亏不是商业系统,如果是的话,我觉得绝对够得上是重大事故。记一笔,留个教训。
简而言之,我自己的一个有邮件服务的域名,在通过 GoDaddy 的系统修改授权域名服务器的时候出了问题。这个问题应该是 GoDaddy 的 bug 导致的,但结果很严重,那个域名的 glue 记录被全部清空了。事后检查 whois 记录看到的状态如此:
Domain ID:D104XXXXXX-LROR
Domain Name:XXXXXXXXXX
Created On:XX-XX-XXXX XX:XX:XX UTC
Last Updated On:07-Jul-2011 XX:XX:XX UTC
Expiration Date:XX-XXX-XXXX XX:XX:XX UTC
Sponsoring Registrar:GoDaddy.com, Inc. (R91-LROR)
Status:CLIENT DELETE PROHIBITED
Status:CLIENT RENEW PROHIBITED
Status:CLIENT TRANSFER PROHIBITED
Status:CLIENT UPDATE PROHIBITED
Registrant ID:CR29XXXXX
Registrant Name:Xin LI
[...]
Tech FAX:
Tech FAX Ext.:
Tech Email:XXXXXXXXXXXXXXXXXXX
__Name Server:Name Server:Name Server:Name Server:Name Server:Name Server:Name Server:Name Server:Name Server:Name Server:Name Server:Name Server:Name Server:__
DNSSEC:Unsigned
对邮件系统来说,发生这种情况的后果是极其严重的。根据 RFC 5321,邮件系统对于停机问题的容忍时间至少是数个小时,然而当域名解析出现问题时,通常系统有理由立即以 4yz 回应来拒绝未进入邮件队列的邮件。所幸的是这个问题持续的时间不算太久,而且这个域名只是一个备用的邮件域名。
Read more...在 /etc/sysctl.conf 中加入:
kern.sched.preempt_thresh=224
然后用 /etc/rc.d/sysctl start 或重启系统令其生效。
系统默认的值是 80,表示只有新优先级 < 80 时才允许抢占;224 表示非空闲线程均可以进行抢占。这样做的结果是系统会产生更多的切换,从而改善响应时间(牺牲吞吐量)。对桌面系统来说,这种设置是很有用的。
Read more...基于 LLVM 的一个 小检查器。如果代码经手人很多,或者经过了大规模的改写,这个工具就很有用了。使用说明 在此。
Read more...在开始创建 git 代码库的时候,应使用 –bare 参数。举例:
git init --bare [repo_path]
或者,如果多人开发的话:
git init --bare --shared [repo_path]
将现有代码库转换为中心式代码库:
cd /path/to/repo
mv .git ../repo.git
cd ../repo.git
git config core.bare true
rm -fr ../repo
注意,已有的克隆需要修改配置以适应新的路径。
UPDATE: 有同学问为什么不用 clone –bare,答案是为了偷懒保留配置的内容,比如 hook 等等,另一方面这样做会导致已有的其他clone失效。
Read more...syslogd 的 -8 参数可以让汉字通过。以下摘自 manual page:
-8 Tells syslogd not to interfere with 8-bit data. Normally syslogd
will replace C1 control characters (ISO 8859 and Unicode
characters) with their "M-x" equivalent. Note, this option does
not change the way syslogd alters control characters (see
iscntrl(3)). They will always be replaced with their "^x" equiv‐
alent.
不过这事有点坑人,为啥默认不 -8 呢?出于安全方面的原因吗?差点就开始改代码了……
Read more...今天 强迫症 朱小瘦同学提到一个非常有意思的问题,一个32bit的无符号整数算术右移32个bit应该得多少?
我们知道算术右移一个bit相当于除2,所以一个32bit无符号整数除以 2^32,理论上,应该得0。
然而事实不是这样。测试显示在 x86 系统上,一个32bit无符号整数算术右移32个bit之后得到的是原数。例如下面这个测试程序:
#include <stdio.h>
int
main(void /* int argc, char **argv */)
{
unsigned int a = 0x5a5a5a5a;
a >>= 32;
printf("%x\n", a);
return 0;
}
不启用任何优化的话,编译出来的程序得到的结果是:
5a5a5a5a
更进一步,我们将上面的测试改写为:
#include <stdio.h>
int
main(void /* int argc, char **argv */)
{
unsigned int a = 0x5a5a5a5a;
int i;
for (i=0; i<33; i++)
printf("%x\n", a >> i);
return 0;
}
2011年6月8日是 Internet Society 倡导的世界 IPv6 日,许多著名的互联网公司都将在这一天测试全面开放 IPv6 访问;中国地区的 IPv6 日网站可以在 这里 找到。
我个人的网站其实从 2007 年 7 月就已经跑在 IPv6 上面了,不过来自 IPv6 网络的访客很少。希望这次活动能够让更多的人知道和了解 IPv6。
Read more...之前用的邮件系统是基于 postfix、Cyrus IMAPd、amavisd-new等软件在2006年搭建的,跑了5年多,作为不折腾会死星人,对这套系统一直有相当多的不满意,举例来说:
Cyrus IMAPd支持 foo+box@domain.tld,也就是如果foo用户的邮箱中存在’box’这个子目录时直接投递到那个子目录很有问题;
Cyrus IMAPd采用的是自己的邮箱格式。支持这种格式的只此一家;我虽然不是Maildir的fans,但Maildir是一种事实标准,而且处理起来工具也要多的多;
amavisd-new和postfix的集成原先是采取双MTA的方式进行的,这种做法会导致至少多一倍的磁盘I/O(好处是在系统过载的时候不影响进信),并且由于多了一个环节有可能引入更多的不确定性【1】;
当然其实更重要的还有:
为了便于备份而采用的 ZFS 快照和远程复制机制,以及,
原先的服务器和我的物理距离太远,为了访问速度必须要做迁移。
新的方案大致如下,有时间慢慢整理howto出来:
现在还差一个队列前会话期间反垃圾的策略服务。之前采用的是 postfix-gps,找了一圈没有找到一个让人感觉靠谱的,所以准备找时间自己拿 twisted 重新写一个然后开源放出来。
【1】这个说法可能是有争议的。我认为以milter方式集成的好处是对方看到的是超时而不是已经将邮件收下,因此出现问题的机会要少一些。
Read more...很久以前我曾经建议过别人使用足够长的一大串英文单词作为密码,现时这样做已经完全不能保障安全了。
Colin Percival最近在 一篇文章 中提到了这样的数据:使用价值 $10k 的 GPU 破解使用MD5的34位英文密码(例如"You will never guess this password")所需要的时间仅为两小时(如果使用专用的硬件,以$1M投资的ASIC可以在一秒之内完成破解)。如果密码长度不够长的话,采用了特殊符号的帮助也不大。足够复杂的8位密码,例如"6,uh3y[a"使用 $10k 的 GPU 破解只需10个小时。
因此,我认为现时应采取的密码策略应该是:
确保每个网站都使用不同的随机密码,这些密码的内容应包括大小写字母、数字__和__特殊符号,且密码不应少于12位。
确保每个网站都是用不同的随机密码尤其重要:因为你可能不知道哪个网站什么时候被人骇掉,即使其密码进行过hash处理,如果很短、不包括大小写字母/数字/特殊符号的,或者选用了不适当的hash算法(如MD5),仍然是会被穷举出来的。
我自己最近十年使用的密码生成器可以在 这里 访问。
Read more...