June 2011 Archives

基于 LLVM 的一个 小检查器。如果代码经手人很多,或者经过了大规模的改写,这个工具就很有用了。使用说明 在此

在开始创建 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失效。

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 呢?出于安全方面的原因吗?差点就开始改代码了......

今天 强迫症 朱小瘦同学提到一个非常有意思的问题,一个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;
}

世界IPv6日

| 2 Comments | No TrackBacks

2011年6月8日是 Internet Society 倡导的世界 IPv6 日,许多著名的互联网公司都将在这一天测试全面开放 IPv6 访问;中国地区的 IPv6 日网站可以在 这里 找到。

WORLD IPV6 DAY is 8 June 2011 - The Future is Forever

我个人的网站其实从 2007 年 7 月就已经跑在 IPv6 上面了,不过来自 IPv6 网络的访客很少。希望这次活动能够让更多的人知道和了解 IPv6。

之前用的邮件系统是基于 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出来:

  1. MTA:postfix(未变)
  2. 目录服务:OpenLDAP(未变)
  3. 反垃圾套件:amavisd-milter + amavisd-new
  4. IMAP/POP3服务:dovecot
  5. OS:FreeBSD 8.2-ATWATER-p2
  6. 撤掉了队列前的 SenderID milter,这部分功能已经由 amavisd 实现了,而且事实上现在也很少有人在生产系统中用 SenderID/SPF 来阻止别人冒充自己发邮件。

现在还差一个队列前会话期间反垃圾的策略服务。之前采用的是 postfix-gps,找了一圈没有找到一个让人感觉靠谱的,所以准备找时间自己拿 twisted 重新写一个然后开源放出来。


【1】这个说法可能是有争议的。我认为以milter方式集成的好处是对方看到的是超时而不是已经将邮件收下,因此出现问题的机会要少一些。

很久以前我曾经建议过别人使用足够长的一大串英文单词作为密码,现时这样做已经完全不能保障安全了。

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),仍然是会被穷举出来的。

我自己最近十年使用的密码生成器可以在 这里 访问。

Monthly Archives

Pages

OpenID accepted here Learn more about OpenID
Powered by Movable Type 5.2.3