2009年09月18日

这里评论评论不行,附件附件不行,编辑后台总异常,受够了。

搬到 jackqqiu.spaces.live.com 去了。

要在 Windows Server 2003 上实现虚拟环境,用 Virtual PC 就可以,操作起来很方便。相比之下, Virtual Server 操作比较复杂,没有一个很好的 GUI。但是它有个好处,因为是以一个服务的形式运行的,所以不需要用户登录系统即可在后台启动,而且还可以在服务停止的时候自动暂存虚拟机的状态。简单 地说,用 Virtual Server 可以无人值守重新启动服务器。服务器的自动更新、重启通常在夜间进行,这个功能就显得尤为重要。所以,在 Windows Server 系统上部署虚拟环境,还是应该安装 Virtual Server。

Virtual Server 的控制界面是个 IIS 应用程序,对单个虚拟机的远程控制是通过一种叫做 VMRC 的方式连接的。打开网络服务是一种安全隐患。如果只想充分利用服务器的资源,不需要远程管理,完全可以只在服务器本地进行管理操作,禁止远程访问。下面记 录的是按照这种思路安全地配置 Virtual Server 的方法。

1. 禁用 Windows 防火墙的例外

安装 Virtual Server 的过程基本没有问题,只有一步牵扯到安全性的问题,即开启 Windows 防火墙的例外。出于安全性的考虑,我们禁止这种例外。

勾去在 Windows 防火墙中启用虚拟服务器例外

装好后,确认一下 Windows 防火墙已经启用,并且虚拟服务器的两项例外为禁用状态。

确认 Windows 防火墙已启用        在 Windows 防火墙中禁用虚拟服务器例外

其实有了防火墙已经够安全了。如果要在不启用防火墙的情况下保护虚拟服务器,可以修改服务绑定的地址,使虚拟服务器只能通过本地管理。

2. 绑定 IIS 服务地址

首先是对 IIS 进行地址绑定。在 IIS 管理器中修改 Virtual Server 的地址为 127.0.0.1。于是只有本机才能访问这个服务。

在 IIS 管理器中修改 Virtual Server 的地址

3. 绑定 VMRC 服务地址

下面对 VMRC 绑定地址。先通过管理界面打开 VMRC,然后停止 Virtual Server 服务。然后找到

%ALLUSERSPROFILE%\Application Data\Microsoft\Virtual Server

文件夹,修改其中的 Options.xml,在层次结构中找到

/preferences/settings/remote_control/vmrc

子项目,在 vmrc 下面添加或者修改如下行:

<ip_address type="integer">2130706433</ip_address>

把 VMRC 绑定到 127.0.0.1

这样, Virtual Server 就只在 127.0.0.1 上监听了。

2009年09月05日

这些日子搞了搞 WordPress,确实是一款很好的 blog 系统。安装配置简单,编辑界面优秀,有插件系统。使用方便,速度也还可以,挺适合做 CMS。下面记录的是我在安装配置过程中遇到的一些经验教训。

Windows Live Writer

既然要做 CMS,我认为最拉风的,恐怕要算是 Windows Live Writer 的支持了。有了桌面编辑器的支持真可谓如虎添翼,插图等等操作真是信手拈来,这是任何基于 HTML 的编辑器无法比拟的。

只是在使用过程中,我发现 WLW 上传的图片没有正确地和文章关联起来。尽管 Role Scoper 的 Attachment Utility 可以帮助我们重新建立起文章和图片的关联,但是建起来的关联非常不美观,重新生成了很多附件项目,而原来的未连接的附件项目依然存在。那就有可能在清理附件的时候发生不小心把有连接的附件清除的事故,再说一个附件两个项目看起来也非常不美观。有没有办法让 WLW 上传的附件自动关联上呢?

我在网上搜了一下,找到了答案。

Issue with Live Writer and Attaching Images on 2.8

那里解释说,问题在于 WordPress 2.8 做了一个数据库模式上的变动, signed 变成了 unsigned,所以原来在 xmlrpc.php 里的 -1 都不奏效了,真正在数据库里形成的数据是 0。这个问题会在 2.9 里修正。目前的解决办法是:在 xmlrpc.php 里找到如下行,

$attachments = $wpdb->get_results( "SELECT ID, guid FROM {$wpdb->posts} WHERE post_parent = '-1' AND post_type = 'attachment'" );

把其中的 ‘-1′ 改成 ‘0′。

Role Scoper

CMS 的一个必要条件,是权限控制。 Role Scoper 这个插件就是干这个的。我的做法是这样的:

  1. 创建一个分类 (category) C1,创建一个组 (group) G1
  2. 在 Restrictions/Categories 下面把 C1 配置为受限制的 (restricted)
  3. 在 Roles/Categories 下面把 G1 分配为 C1 的 Post Editor

这样就实现了只有 G1 的用户才能浏览、修改 C1 分类下的帖子,实现了内部资料的目的。

最后,如果要实现对附件的权限管理,还要开启 permalink。这在 Roles/Options 下面有说明。

BUGBUG: WLW 打开文章列表不全

Role Scoper 有个 bug,导致了 Windows Live Writer 选择打开命令时不能浏览到正确的文章。经过几个小时的试验,我发现在 cap-interceptor_rs.php 文件中大约 400 行处 flt_user_has_cap 函数中,有一个对于生成 $listed_ids 的优化处理在 xmlrpc 的情况下会出错。加上一个条件,让它在 xmlrpc 的情况下不生效即可。具体修改如下,其中 defined(’XMLRPC_REQUEST’) 为添加的条件:

if ( defined('XMLRPC_REQUEST') || ! isset($hascap_object_ids[$src_name][$object_type][$capreqs_key]) ) {  ...} else ...

BUGBUG: WLW 不能下载主题

还有一个 bug,导致 Windows Live Writer 不能下载到主题。 Role Scoper 拦截了 default_category 的处理过程,把受限制的 (restricted) 类别作为默认类别了,而默认应该是 uncategorized。这样一来, WLW 写的临时帖子被限制起来,下载不下来了。修正这个问题,只需在 admin/filters-admin_rs.php 文件中大约 720 行处 flt_default_category 函数中,给 $user_terms 做一下排序即可。因为 uncategorized 的序号是 1,只要经过排序,肯定是第一个。

if ( ! $okay_terms ) {  if ( $user_terms ) {    sort($user_terms);    ...  }}

BUGBUG: 原作者离开组之后仍能浏览文章

这个 bug 是这样的,当一个用户从组中退出后,原先由他创建的文章还可以在首页浏览。这个缺陷会造成泄密。修改的方法是,在 defaults_rs.php 文件中大约 468 行处 scoper_core_cap_defs 函数中对 $arr 的定义,把其中的 owner_privilege 全部置为 false。

Avatar

这个插件允许用户自己上传头像,而不必引用 gravatar.com 的资源。

Sidebar Login

这个插件是首页的一个 widget,允许用户在那里登录,而不必记住管理页面的地址。首页登录对 CMS 的可用性至关重要。

主题

WordPress 2.8 的默认主题,日期显示总是有问题。无论用户怎么选择的,都是它自己的时间格式,不符合国际化的要求。我发现 Precious 主题效果很好,很干净。

不过确实要用默认主题的话,改起来也不是很难。

the_date() 是当时的日期, the_time() 是当时的时间。不加参数就是默认的格式。

the_author() 是作者。 the_category(’, ‘) 是类别,不显示层级关系。

例如,要在 single.php 里显示文章的一些编辑信息,代码如下:

<?php printf(__('Author:'));       the_author() ?><br/><?php printf(__('Published on:')); the_date() ?><br/><?php printf(__('Category:'));     the_category(', ') ?><br/><?php$post_ID = get_the_ID();

if ( $last_id = get_post_meta($post_ID, '_edit_last', true) ) {  $last_user = get_userdata($last_id);  printf(__('Last edited by %1$s on %2$s at %3$s'),    wp_specialchars( $last_user->display_name ),    mysql2date(get_option('date_format'), $post->post_modified),    mysql2date(get_option('time_format'), $post->post_modified));  printf('<br/>');}; ?><br/>
2009年06月14日

不知道是不是个bug,无论用 cu(1) 还是 GNU screen 都不能设置 /dev/cuad0 设备的波特率,只有预先用 stty(1) 配置好才可以。

stty < /dev/cuad0 19200screen /dev/cuad0

后来发现,原来是当初装 FreeBSD 的时候在 COM1 上配置了串行输出和控制台,把这些配置复原,腾出 COM1 就可以直接通过下面的命令使用串行通信了。

screen /dev/cuad0 19200
2008年10月31日

wxWidgets compilation with DDK 3790.1830:

LIB:

nmake -f makefile.vc ^  INCLUDE="%crt_inc_path:\*=\i386%;%ProgramFiles%\Microsoft Platform SDK\include" ^  CFLAGS=/Gy CPPFLAGS=/Gy LDFLAGS=/OPT:REF ^  DEBUG_RUNTIME_LIBS=0 UNICODE=1 BUILD=debug SHARED=0

DLL:

  LIB="%crt_lib_path:\*=\i386%;%sdk_lib_path:\*=\i386%" ^  LDFLAGS=bufferoverflowu.lib SHARED=1

2008年10月21日

最早听说WTL(Windows Template Library),好像是上学时候的事儿了。那时正好刚刚认识VC++ Toolkit 2003和windbg,曾经以为有了它们三个,就可以堂堂正正地在Windows下面用M$的免费工具开发程序啦。

但是今天一通研究发现,现实是残酷的。WTL是开放,但是依赖于ATL。ATL可是VC++的组件,Express版里可是没有的。所以WTL在VCExpress中是不能使用的。

仔细看WTL的readme,就会发现,它说支持VCExpress啊,只要使用Platform SDK中的ATL头文件就可以啦。但是实际使用就会发现,SDK中没有atlthunk.lib,会产生连接错误。尽管这个文件在DDK中有,可DDK中又没有WTL需要的richedit支持。这里提到的SDK和DDK都是Windows 2003 SP1的(SDK:5.2.3790.1830.15 Apr05,DDK:3790.1830)。

通过atlthunk.lib查到M$有人说PSDK05中的MFC和ATL是用于移植程序到64位环境上的,不支持用来生成32位的程序。

This library is not shipped with any build of PSDK because PSDK does not support using PSDK’s version of ATL in 32bit builds. [1]

还有一个证据,在Vista和2008的Windows SDK中,MFC和ATL都彻底不见了。我想这里有两层原因,其一,这两样东西本来就是VC的重头戏,不应免费发行,其二,PSDK05中的MFC和ATL都是VC6的改良版,许多代码不是标准的C++写法,跟如今的编译器不兼容,也不应继续发行。

所以,简而言之,WTL只能算是Visual C++正式版的一个正版增值服务。Windows平台上彻底免费的官方开发库只有SDK和DDK。

2008年09月10日

参考 MBSA 的 FAQ. http://technet.microsoft.com/en-us/security/cc184922.aspx

可以先下载用于扫描的数据,

  1. Security update catalog (wsusscn2.cab)
  2. Windows Update Redistribution Catalog (wuredist.cab)
  3. Authorization catalog (muauth.cab)
set MBSACACHE=%USERPROFILE%\Local Settings\Application Data\Microsoft\MBSA\2.1\Cachewget -SN -P "%MBSACACHE%" "http://go.microsoft.com/fwlink/?LinkId=76054"wget -SN -P "%MBSACACHE%" "http://update.microsoft.com/redist/wuredist.cab"wget -SN -P "%MBSACACHE%" "http://download.windowsupdate.com/v7/windowsupdate/redist/standalone/MUAuth.cab"wget -SN -P "%MBSACACHE%" "http://download.windowsupdate.com/WindowsUpdate/redist/standalone/7.0.6000.381/WindowsUpdateAgent30-x86.exe"

如果要扫描其它计算机, 要关掉它们的防火墙, 禁用来宾访问方式, 最后试验管理员远程 net use. 成功后, 用

runas /netonly /user:Administrator cmd

启用网络上的认证. 然后在拥有网络身份的 cmd 窗口中, 运行

path %ProgramFiles%\Microsoft Baseline Security Analyzer 2;%path%mbsacli /target 192.168.2.131

 

2008年09月07日

每天在邮箱里收到计算机状态的报告,这样的管理员太爽了。但是好多应用程序一直只支持简单的 SMTP 发送方式,没有 SMTP 认证功能,更不用提 SSL 和 TLS 了。其实只要用 Windows 提供的 SMTP 服务做一个简易的邮件转发,就可以基本满足要求。

很久很久以前,任何一台互联网上的计算机都能用 SMTP 发送邮件。如今不同了,垃圾邮件让整个互联网都神经过敏。公网上的,尤其是个人和小用户的大部分地址都被黑名单了。所以现在要发邮件,必须用大网站提供的服务。有的服务商开放度比较高,只要认证成功,就可以通过他们的 SMTP 发信了,而且还可以在 MAIL FROM 命令后任意填写。有的服务商就要求 MAIL FROM 必须和认证的用户一致,如 163。有的干脆忽略你填写的任何 MAIL FROM 信息,最后只用认证的用户的信息,如 Gmail。另外,有的服务商强制要求所有的连接都采用 SSL 或者 TLS 加密,有的则仍然支持明文的连接。

要通过这些服务商转发邮件,需要将本地的 SMTP 服务配置为通过 smart host 转发的方式。以前我只是在 FreeBSD 下面用 sendmail 配置成功。这次在 Windows XP Professional 下面用 IIS 也实现了,如果服务器需要 SSL 连接 (ssmtp) 那么还需要 stunnel。

smtpsvc

安装 IIS 的 SMTP 服务,配置出站服务器、允许部分地址中继。参考 M$KB: 308161,“如何配置 SMTP 虚拟服务器”。

注意填好出站服务器的地址、用户名、密码。

不过 smtp 的认证是明文的,所以现在很多服务都强制使用 SSL 或者 TLS,如 Gmail。而 smtpsvc 的 starttls 好像和 Gmail 的兼容性有问题。这种情况下最好用 stunnel 了。

注: Windows 2000 Professional 的 IIS 不能指定出站 SMTP 服务器的端口。解决办法留给读者思考。

stunnel

安装 stunnel 后,修改配置文件 stunnel.conf:

socket = l:TCP_NODELAY=1socket = r:TCP_NODELAY=1client = yes[ssmtp_gmail]accept=4654connect=smtp.gmail.com:465

然后启动 stunnel。最后将 smtpsvc 的出站服务器配置为 [127.0.0.1],端口为 4654。这样 smtpsvc 就可以通过 SSL 通道使用 smtp 协议了。

如果要防止中间人攻击,就得验证服务器的身份,需要添加证书验证机制。在 stunnel.conf 的前面加上:

verify = 2CAfile = certs.pem

同时在 certs.pem 文本文件中添加相应的 CA 证书。如何得到证书呢?

首先,用 openssl 访问远端 smtp 服务器:

openssl s_client -crlf -connect smtp.gmail.com:465

从 Server certificate 一栏中找到 issuer,找到其中 CN (Common Name) 的值,如 Thawte Premium Server CA。这里就找到了 GMail 的证书颁发人了。

下面到 Windows 的证书管理器 (certmgr.msc) 中,从“受信任的根证书颁发机构”中,找到这个证书,导出成 Base64 格式。再把导出的文本如

—–BEGIN CERTIFICATE—–

—–END CERTIFICATE—–

填到 certs.pem 中, stunnel 就能认证这个颁发人认可的网站了。

测试

要手工测试 smtp 服务,参考 M$KB: 286421

2008年07月26日

给支付宝充值的时候,发现中信银行的证书链是不安全的,你还敢继续吗?

我们来看看这个证书链。

Google 一下 CFCA (搜索简体中文网页),找到了这里:

中国金融认证中心
China Financial Certification Authority
网上信息安全守护神
权威 公正 第三方

当看到这样的认证机构主页如此业余的时候,当发现那几句话是从一个 Flash 里蹦出来的时候,我只想骂街了。

再看看他们的证书下载页面,上面有如下文字:

中国金融认证中心数字证书

下载平台 在下载证书前,请您阅读下面的注意事项:

(一)为了保证证书下载过程顺利完成,建议您先下载并安装下面程序MakeCertOCX。

(二)使用Vista或者IE 7.0的用户在证书下载前,请先下载并执行脚本SetSafe.js(点击此处下载,然后选择“打开”-〉“运行”),然后下载证书。如果无法看到“设置成功”对话框,请您修改IE浏览器的安全设置,将本网站设置成“受信任站点”(设置方法)。

(三)为确保安全,参考号、授权码为一次性使用,即在您的证书成功下载后,下载证书所使用的参考号、授权码作废。如果继续使用相同的参考号、授权码下载证书,会出现错误。

(四)为确保安全,参考号和授权码的有效期为14天,即参考号和授权码在其产生之后的14天内有效,超过有效期使用也会出现错误。

(五)如果您是使用 Direct/Client 或者 高级证书 的用户,请您一定不要在此网页上下载证书。你在此网页下载证书不能在Direct/Client中使用。

被如此不专业的机构摆布,为中国网银扼腕。

  1. 玩儿 PKI 游戏,却不跟着人家一起玩儿:
    自立门户,没有上游认证机构。——人穷志不短 !
    根证书不被操作系统认可。——我是流氓我怕谁!
  2. 玩儿 PKI 游戏,却连安全的基本常识都没掌握:
    显眼的地方没有证书指纹,用户无从对照。——你们懂个屁!
  3. 强奸用户不当回事:
    下个证书还要装 OCX。——有D版啊。反正在中国都是这样的。

好了。牢骚就发到这里了。反正我是坚决抵制使用他们认证的网银了。

P.S. 这两天激愤多了点儿,可能是天热了我躁得难受。

2008年07月22日

本来不想写什么的。杀软蓝屏,常见问题,小事一桩。

但是想想去年赛门铁克出事大家闹得那么凶;这次金山蓝屏,

  1. 主流媒体均不予报道;
  2. 百度基本搜不到什么;
  3. Google搜到的只是只言片语;
  4. 金山论坛上关于蓝屏的帖子全部被删;
  5. 金山只有一篇声明

哦,还好金山有一篇声明,要不然用户们可怎么办。这篇声明我是用Google搜到的,使用的关键字是:金山 升级 蓝屏。百度搜不到,确切地说,是只搜到了转载的。

我苦思冥想,只想到了如下原因,允许自由排列组合:

  1. 中国人确实很团结,构造和谐社会;
  2. 金山确实lj,让诺顿小巫见大巫:占有率实在太低了;
  3. 金山确实ws,瞠目结舌;
  4. 另有高人ws。

2008-07-23 09:01:10 +0800 更新:Google上搜到的金山论坛上的帖子是存在的。百度搜到的金山论坛上的帖子被删除。Google搜到的内容今天针对性更集中了。百度搜索基本没变化。主流媒体依然保持缄默。

2008-07-23 14:08:54 +0800 更新:百度搜索终于有金山官方的公告了。