方便的 chroot 工具──jailkit
这篇文章主要是为自己留个笔记,顺便为受设置 chroot 困扰的同学作个 note,因此就不从头说起了。总之不知道什么是 chroot 的同学和不知道为什么要 chroot 的同学如果对此有兴趣,可以自己找找资料。
一直想给自己的 VPS 弄个 jailed shell,但找到的教程都相当的繁杂,虽然可以理解──相当于另建一个 Shell 环境──但无论如何确实很麻烦。一大堆的文件要拷贝,更大一堆的设置要调整,想想都头大,所以一直没有下手。偶然发现了 jailkit 这个实用工具集后,发现建立一个 jailed shell 是如此的容易。
Jailkit 可以把建立 chroot 环境完全自动化,除了可以轻松的建立 jailed shell 外,还可以建立 jailed mail 或是任意的 jailed 的环境,总之 you name it。
下面以建立一个有最基本命令的 jailed shell 为例说明,下载编译安装就不详细写了,一切按照 routine 来,以下命令全以 root 身份运行:
1、首先我建立一个目录 jail,在此目录下建立 jailed 环境,里面的用户将会受到限制(比如说无法离开该目录)。
mkdir /home/jail
2、然后初始化该目录:
jk_init -v -j /home/jail basicshell editors extendedshell netutils ssh sftp scp
加下划线的部分是预告设定好的,拿 sftp 为例,你可以在 /etc/jailkit/jk_init.ini 中找到相应的部分,大概的样子如下:
[sftp]
comment = ssh secure ftp with Jailkit limited shell
executables = /usr/lib/sftp-server
includesections = netbasics, uidbasics
devices = /dev/urandom, /dev/null
emptydirs = /svr
里面列举了建立一个能够 sftp 环境需要的设置,我们照猫画虎也可以设置一下自己需要的环境。
3、建立一个需要被 jailed 的用户,比如说 lemoned :P,为了好区分,我们可以为所以需要被 jailed 的用户单独划出一个组,名字为 pals (举例),命令如下:
groupadd pals
useradd -g pals -m lemoned
passwd lemoned
4、限制该用户
jk_jailuser -m -j /home/jail lemoned
这一步做完后,/etc/passwd 里面对应 lemoned 的那一行应该类似如下:
lemoned:x:1016:1016::/home/jail/./home/lemoned:/usr/sbin/jk_chrootsh
并且把 /etc/jail/home/etc/passwd 中的相应用户所在的行改成如下形式:
lemoned:x:1016:1016::/home/sharon:/bin/bash
然后,就没有然后了。就是这么简单。有了这个 jailed shell 后,我建议你关闭 ftp 让所有的用户都用 sftp 登陆,安全第一,安全第一。
This is fun…

OS X 下的离线 Blog 撰写/发布软件
在 Windows 下,很多人都用 Windows Live Writer 来离线写 Blog,这东西确实挺方便的,尤其是在没有网络的情况下。我一直以为在 OS X 下没有这种好东西,不过在简单的搜索之后我发现自己错了,OS X 下不仅有离线的 Blog 撰写/发布软件,而且它们也秉承了 OS X 下软件一向的高质量。我试用过两款,Ecto 和 MarsEdit 2,总体上觉得还是 Ecto 用起来比较方便。 除了功能比 MarsEdit 2 强之外,MarsEdit 2 对 Blog 的格式支持不好也是一个很大落败给 Ecto 的原因。

不过唯一的问题是这两款软件都不是免费的,十几二十块虽然不多但还是挺烦人的。不知道有没有即免费又好的呢?
Bazaar 版本控制系统问与答
最近人懒,弄个问答形式可以写的快点,嘿嘿哟。

* 什么是 Bazaar?
Bazaar 是一个小巧灵活但功能并不弱的版本控制系统。
* 什么是版本控制系统?
参见。
* 为什么要用 Bazaar 而不是流行的 Subversion?
Bazaar 对使用环境要求十分宽松,它最重要的区别于 Subversion 的地方在于它不需要使用专用的服务器储存 repository,想想我之前写过的如何架设 Subversion 服务器的麻烦,就知道 Bazaar 的方便了。事实上,Bazaar 并没有严格的 working copy 和 repository 的概念,这点也和 Subversion 等不同。Bazaar 把 working copy 和 repository 同时存放在需要版本控制的目录中 (这个目录被称为 Branch)。因此,在没有网络的情况下,你也可以 commit 你的工作进度,相当方便。
* Bazaar 如何管理 team 项目?
简单,只需要一个可以通过网络访问的普通主机,不需要任何安装设置等 crap 就可以直接通过 ftp/sftp 或是 ssh 协议发布或是更新整个组的项目进度。
* 具体如何使用 Bazaar?
Bazzar 的命令跟 Subversion 类似,只是有时双方的说法不同。大家可以看看下面的例子,括号中的是 Subversion 的命令。
1.建立 Branch
假设我们把一个已有的目录 project 纳入版本控制。
cd project
bzr init (svnadmin create)
bzr add * (svn import URL PATH)
2. 删除一个文件
直接 del/rm filename 就可以,不需要像 Subversion 那样用特殊的命令。
3. commit 进度
bzr commit -m “your message here” (svn commit -m “your message here)
4. 取消对文件的修改
bzr revert filename (svn revert filename)
5. 发布 (publish) Branch 到远程主机
bzr push (svn commit)
6. checkout
bzr branch (svn checkout)
7. 更新 branch
bzr pull (svn update)
如果有一点版本控制系统的基础的话,看看这个 5 minutes guide 后,就可以轻松上手。
* Bazaar 可靠吗?
我知道 Bazaar 没有 Subversion 或是 CVS 出名,但大名鼎鼎的 Ubuntu 的源码就是 Bazaar 来进行版本控制的应该可以说明问题吧。
最后,版本控制系统最适合的是进行纯文本的文件控制,但是其它文件格式也非不可,还是可以方便的回到以前的版本,只是不能用 diff 命令看各个版本之间的异同了。

