在chroot下跑tomcat

我承认我代码写的很烂,为了可以放心大胆的继续开发后续功能,所以我急着要把tomcat扔到一个较为安全的环境中。

首先,第一点是要把用户权限降下来。不要让tomcat在80/443这样的特权端口上监听,而是8080/8443这样的。然后通过iptables做转发(如果数据量不大或者用xinet也可)

然后我创建了一个目录,/export/tomcatroot,作为chroot的根目录。然后下载tomcat,解压缩。然后下载jre,解压缩。然后创建一个lib目录,放动态链接库。

root@snnn:/export/tomcatroot# ls
apache-tomcat-7.0.4 apache-tomcat-7.0.4.tar.gz jre jre22.bin lib

为了检查是否缺少动态链接库,需要有ldd。为了能使用ldd,必须把/lib/ld-linux.so.2复制到/export/tomcatroot/lib下,并且把static版本的bash放到/export/tomcatroot或它的某个子目录下。还有我发现还需要cat这个命令。

root@snnn:/export/tomcatroot# cp /bin/cat bin

java需要的so没几个。

# ls lib
ld-linux.so.2 libc.so.6 libdl.so.2 libm.so.6 libnsl.so.1 libpthread.so.0

然后我发现JAVA还是起不来。/jre/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory。经查,原因是没有挂/proc,因为java启动的时候是从/proc/self/exe读取自己的位置。于是干脆把/dev和/proc都mount了。

root@snnn:/export/tomcatroot# mkdir proc dev
root@snnn:/export/tomcatroot# mount -o bind /proc /export/tomcatroot/proc
root@snnn:/export/tomcatroot# mount -o bind /dev /export/tomcatroot/dev

procfs和chroot之间的关系是一个很有意思的问题。我现在还没弄清楚,等我有空再查查文档。

为了能执行startup.sh,bash是必须的。

root@snnn:/export/tomcatroot# mkdir bin/
root@snnn:/export/tomcatroot# cp /bin/bash-static bin/sh

结果还是失败了……

root@snnn:/export/tomcatroot# ./startup.sh
/apache-tomcat-7.0.4/bin/startup.sh: line 27: uname: command not found
/apache-tomcat-7.0.4/bin/startup.sh: line 46: dirname: command not found

除了这两个,还需要touch,tty,然后就是处理tomcat-native了。我是这样装的,

# ./configure --with-apr=/usr/bin/apr-config --prefix=/

# make DESTDIR=/export/tomcatroot/ install

把库安装到了tomcatroot的/lib下,然后用ldd找libtcnative-1.so.0.1.20的依赖,复制过去。

最后就是修改conf下的配置,因为chroot更改了目录,所以我的ssl证书文件的路径需要修改。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥