delphij's Chaos
选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……
许多操作系统会默认系统时钟(主板通过电池驱动的)是UTC,Windows上并不是这样。多系统并存时这会带来一些困扰。
在 64-位 Windows 10 系统中,以管理员身份运行:
reg add “HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation” /v RealTimeIsUniversal /d 1 /t REG_QWORD /f
即可让 Windows 也把系统时钟当作 UTC 而不是本地时间了。
Read more...加州光照充足,在换了油电混合车并安装了空调以后,我目前每年的用电量大约是每年6000 kWh(此前每年的用电量大约是2400 kWh)。随着加州电价的逐年提高,安装太阳能发电终于不再是一件不经济的事情了。
根据贵厂的 Project Sunroof 估计,我家屋顶每年的可用光照时间大约是 1903 小时,其中有 1357 平方英尺(大约126平方米)的面积可以用来安装太阳能板。经过和数家(马老板的 Tesla 即原 SolarCity、 Costco 合作的 SunRun,以及同事推荐的 SunWork)太阳能板安装公司的询价,最终选择了采用 10 块太阳能板、微型逆变器(microinverter)的方案。其中, SunWork 是一家致力于推广太阳能发电的 501(c)(3) 非盈利机构(他们要求客户在12个月内的电费低于 $100;对于使用了电车的用户,这些用户在购买电车之前的12个月内应满足此条件),因此报价比其他供应商低了 1/3 左右。
Read more...有个疑似 OCD 患者最近抽风升级了一下 MySQL 数据库,然后发现 blog 里面全都变成了乱码。
那乱码的模式一看就是把 utf8 直接扔进了 latin1 的数据库,一看 SHOW CREATE TABLE mt_entry 发现果然如此。
略有些慌神,看了 MySQL 文档发现用 ALTER TABLE 的 CONVERT TO 硬来有点不太行好,遂想到可以试试看 mysqldump,于是做了:
当作 latin1(不然会再按 utf8 编码一次):
mysqldump mt_delphij --default-character-set=latin1 -r utf8.dump
把里面的 CHARSET=latin1 替换为 CHARSET=utf8:
sed -e s,CHARSET=latin1,CHARSET=utf8,g < utf8.dump > utf8.dump.edited
删掉其中的 SET NAMES latin1。
然后重新导入:
mysql -uroot -p --default-character-set=utf8 mt_delphij
mysql> SET names utf8;
mysql> SOURCE utf8.dump.edited;
还好没用到 zfs rollback。
Read more...razor 同学对于 Xcode ghost 的事情的评价是:这也太不注意卫生了。个人深以为然。
技术细节、影响等等,已经有很多大牛写过很好的文章来介绍。但是我想问的是,这事完了吗?在我看来远远没有,根据有关厂商的介绍,想要装上这个下了马的 Xcode,首先得从 App Store 以外的渠道去下载,其次还得允许运行来自 ‘Anywhere’ 的应用程序,或者开发人员习惯于绕过系统的数字签名检查。
我看到的至少有这么两个问题:1. 开发人员常态化地使用并忽略未经签名的工具(非常不重视卫生,我认为这个事情基本上和一个厨师在上班时间去上厕所,回来工作之前不洗手是一样的性质)。2. 具有这种态度的开发人员同时拥有发布权限(管理者玩忽职守)。
我认为基本上这次出现问题的 iOS 应用开发者都应该进行特别标记,并改进其发布流程之后才允许继续发布新的应用程序。自然,每一个直接导致问题的开发者都是负有责任的,但允许这样问题出现,并在事后用公关稿文过饰非的企业及其管理者更有责任。这种攻击已经持续了数月,到底有多少不同的版本受到影响?也许只有 Apple 能够提供相关数据了。
当然,对于手机应用安全厂商来说,也许这是一次难得的商机,因为 iOS 设备用户和 Apple 之间的信任被这种攻击直接打破了。事实上,国内某前越狱团队已经制作了一款采用企业证书的扫描程序(我并不怀疑该团队提供这样的程序是出于好意,但出于谨慎,个人建议不要使用,因为我们并不知道该团队手中是否拥有更多提权漏洞,或者后续版本是否会做一些其他事情)。
对于最终用户而言,我认为现在应该做的是立即删除非必要的全部应用程序,特别是那些存疑或已经知道出现过问题,而在其公关稿中淡化问题,而没有提出对前面两个问题解决方案的开发者开发的软件,并在确认手机中没有问题应用之后重新设置全部密码。
Read more...今天的一个偶然的发现。FreeBSD clang version 3.6.1 (tags/RELEASE_361/final 237755) 20150525。clang 3.8 2015/07/20 的版本同样有此问题。
之前, FreeBSD 上 strndup(3) 的实现是这样的:
char *
strndup(const char *str, size_t n)
{
size_t len;
char *copy;
len = strnlen(str, n);
if ((copy = malloc(len + 1)) == NULL)
return (NULL);
memcpy(copy, str, len);
copy[len] = '\0';
return (copy);
}
而 OpenBSD 上的实现,则是这样的:
char *
strndup(const char *str, size_t maxlen)
{
char *copy;
size_t len;
len = strnlen(str, maxlen);
copy = malloc(len + 1);
if (copy != NULL) {
(void)memcpy(copy, str, len);
copy[len] = '\0';
}
return copy;
}
今天搞了一个 大新闻。如果你用BIND并且今天之前没打过补丁的话,请读到这里为止,立即去补吧。
我觉得还是得提高知识水平。做 freebsd-update 补丁的时候,赫然发现修改的文件中有一个不认识的:
world|base|/usr/bin/slogin|f|0|0|0555|0|3d4103fa290ca0dcd32fc1f9775e860a4bbf4af7e2be80e835217cd560cb100e|
当时就慌了!我明明没改啥库啊?ldd看一下:
/usr/bin/slogin:
libprivatessh.so.5 => /usr/lib/libprivatessh.so.5 (0x800849000)
libgssapi.so.10 => /usr/lib/libgssapi.so.10 (0x800ada000)
libcrypto.so.7 => /lib/libcrypto.so.7 (0x800ce3000)
libc.so.7 => /lib/libc.so.7 (0x8010da000)
libprivateldns.so.5 => /usr/lib/libprivateldns.so.5 (0x801482000)
libcrypt.so.5 => /lib/libcrypt.so.5 (0x8016de000)
libz.so.6 => /lib/libz.so.6 (0x8018fe000)
还用了 Kerberos,等等,ssh?man slogin出来一个SSH的manpage,一个字没提slogin的事情。
ls -li一看才恍然大悟:
4574 -r-xr-xr-x 2 root wheel 179000 Jul 19 00:19 /usr/bin/slogin
4574 -r-xr-xr-x 2 root wheel 179000 Jul 19 00:19 /usr/bin/ssh
原来是马甲……
Read more...phk 老大如此 吐槽:
One week until the leap-second. If you haven’t tested your IT-system already, it is too late now. Good luck if you’re in California or Japan.
背景
关于时间,A core 几年前写过一个 时间是什么? 的系列: 序言 续一 续二 续三。
为了兼顾天文观测获得的时间 UT1 (更符合普通人的需要)和由铯-133原子震荡获得的时间 TAI (更稳定),将两者综合一下就获得了协调世界时 UTC。UTC 和 UT1 之间的差距永远保持在 1 秒以内。UTC 中的一秒和 TAI 相同,但 UTC 和 UT1 保持最多一秒的差距,这是通过 IERS 在 UTC 事件中人为插入或减少闰秒这样的人为调整来实现的。从1972年这套系统投入运营到今天为止,总共插入了35个闰秒(2015年6月30日还将再插入一个闰秒)。
闰秒只在每年的6月30日和12月31日的UTC时间 23:59:59 之后插入,表示为当天的 23:59:60。
Read more...作为十几年的 tcsh 拥趸,我最近改信了 zsh。
基于 Robby Russell 的 Oh My ZSH 搞了一套自己的 Oh My ZSH,可以用 ZSH_THEME=“delphij” 来启用我的配置,其外观、行为大致与我之前的 csh 配置相同。
经过PGP签名的tag版本可以在 这里 找到(请自行使用安全的方法获得我的PGP公钥)。
安装方法(假定当前shell是zsh或sh或bash):
$ ZSH=~/.oh-my-zsh
$ git clone --depth=1 --branch=delphij-20150522 https://github.com/delphij/oh-my-zsh.git $ZSH
$ cd $ZSH
$ git tag --verify delphij-20150522
# 以上复制一份tag过的 Oh My ZSH 并验证其签名。
# 如果有之前的.zshrc请自行备份。
$ cp $ZSH/templates/zshrc.zsh-template ~/.zshrc
$ sed -i '' -e "/^export ZSH=/ c\\
export ZSH=$ZSH
" ~/.zshrc
$ sed -i '' -e "/export PATH=/ c\\
export PATH=\"$PATH\"
" ~/.zshrc
# 以上使用模板覆盖.zshrc并复制已有的PATH配置。
chsh -s `which zsh`
# 将shell改为zsh
需要注意的是,由于 zsh 并非系统自带的 shell,因此保留一个非 zsh 的 root 账户会是个好主意。
Read more...许久不碰反垃圾邮件的事情了,一来前段时间垃圾邮件确实也没有那么多,加上spamassassin确实相当有效,二来也是因为犯懒。
不过,最近几天垃圾邮件明显比平时多了许多,所以决定坐下来仔细处理一下。
OpenBSD 的 spamd 是一个反垃圾邮件陷阱软件,它的主要功能是灰名单(SMTP协议要求客户端在一段时间之内重试投递),但又有一个个人很喜欢的特性:以极慢的速度回应发送垃圾邮件的服务器(默认配置为1秒一个字符,最高可以到10秒一个字符)。对发送垃圾邮件的人来说,这样做会显著地降低他们发出垃圾邮件的能力。
结构上,spamd 会修改服务器上的防火墙的转发规则中的地址,简而言之,是维持一份动态的白名单(由通过了灰名单测试的IP形成),所有不符合白名单的IP都转到 spamd 处理。如果符合白名单,则直接正常转到MTA去处理。
简单记一笔配置。
由于我的机器内存够用,所以将 spamd 配置为最大拖住1024个连接。灰名单最短等待期设置为 1 分钟,灰名单过期时间设置为 4 小时;白名单过期时间设置为 36 天。
选择的黑名单是uatraps和nixspam,各自用本地白名单做补。此外,本地另设一黑名单。
启动spamd服务并更新pf规则。接下来用:
grep 'Passed CLEAN {AcceptedInbound}' maillog* | \
cut -f3 -d[ | cut -f1 -d] | grep -v : | sort | uniq -c | \
sort -n | awk '{ if ($1 > 20) print $2; }' | sort -n | \
xargs spamdb -a
来将过去几天的 Amavisd 认为没问题的地址加入本地白名单。
Read more...我有一心得和大家分享一下,话说三个人一起坐一电梯上,其中一个一直跳一直跳,一个蹲在角上一直祈祷,一个满地打滚手脚抽搐,最后都到了十二楼,若干年以后有人问为什么您能到楼上啊?第一个人说,我坚持不懈的努力,和大自然对抗,力竭也不放弃,最终达到了这个巅峰,第二个人说,我真诚而且坚持,我坚持自己的信仰从未忘记初心,第三个人说,我反直觉反传统反对一切,于是创造了完全不可思议的结果。我看很多商业书籍就这感觉,你们几位不聊聊电梯这事到底几个意思?
Read more...