设置Tomcat chroot Jail

Unix(以及类Unix)操作系统提供了一种功能,允许用户在重新映射的根文件系统中执行进程。chroot命令会把根(/)文件系统映射转换成相对于当前根目录的指定目录,然后在新的根目录下执行指定的命令。已更换根目录的进程及其子进程无法抵达不被新的根目录树所包含的文件系统,保护系统核心层数据,提高了系统的安全性能。

为了要设定Tomcat在chroot Jail中运行,必须:
1、在运行Tomcat的机器上拥有root的权限。
2、使用官方Tomcat二进制发行版。

下面我们开始进行chroot Jail的设置。
1、在文件系统中创建新根目录树(自定义)。

mkdir /opt/chroot

2、创建Tomcat要使用的通用Unix文件系统目录,并授予类似的权限。

cd /opt/chroot

mkdir -p bin etc home lib proc usr dev lib64 tmp

chmod 755 etc dev usr

chmod 1777 tmp

cp -a /etc/hosts etc/hosts

3、将Java JDK或JRE复制到chroot树中

mkdir -p usr/java

cp -a /usr/java/jdk1.6.0_45 usr/java

4、使用ldd命令验证Java运行时所需的库文件,并将它们复制到chroot的/lib或其他的lib目录中(通常是/lib64),然后尝试执行Java,以测试确定找到并正常加载了所有库文件。

ldd /usr/java/jdk1.6.0_45/bin/java

cp -p /lib64/ld-linux-x86-64.so.2 lib64/

cp -p /lib64/libc.so.6 lib64/

cp -p /lib64/libdl.so.2 lib64/

cp -p /lib64/libpthread.so.0 lib64/

ln -s /usr/java/jdk1.6.0_45/jre/lib/amd64/jli/libjli.so libjli.so

还要复制JVM需要的(根据JVM运行的错误信息)一组库文件

cp -p /lib64/libacl.so.1 lib64/

cp -p /lib64/libattr.so.1 lib64/

cp -p /lib64/libcap.so.2 lib64/

cp -p /lib64/libm.so.6 lib64/

cp -p /lib64/libnsl.so.1 lib64/

cp -p /lib64/libpcre.so.1 lib64/

cp -p /lib64/libselinux.so.1 lib64/

cp -p /lib64/libtinfo.so.5 lib64/

5、在chroot下创建具有一组设备的新/dev目录

mkdir -p dev/pts

cp -a /dev/shm ./dev/

CentOS 6.x版本(内核版本:2.6.X):

/dev/MAKEDEV -d ./dev null random urandom zero loop* log console

cp /dev/MAKEDEV ./dev

CentOS 7.x版本(内核版本:3.10.X):

ll /dev/{null,zero,random,urandom,loop*,log,console}

mknod -m 666 ./dev/zero c 1 5

mknod -m 600 ./dev/console c 5 1

mknod -m 660 ./dev/loop-control c 10 237

mknod -m 666 ./dev/null c 1 3

mknod -m 666 ./dev/random c 1 8

mknod -m 666 ./dev/urandom c 1 9

mknod -m 666 ./dev/tty c 5 0

cp -a /dev/log ./dev/

6、创建proc文件系统
CentOS 6.X版本:

mount -t proc proc ./proc

CentOS 7.X版本:

mount -t proc none ./proc/

7、复制必要的/etc文件和库文件,以支持chroot内部的命名解决方案

cp -a /etc/hosts /etc/resolv.conf /etc/nsswitch.conf ./etc/

cp -p /lib64/libnss_dns.so.2 lib64/

cp -p /lib64/libnss_files.so.2 lib64/

cp -p /lib64/libresolv.so.2 lib64/

8、在chroot内部安装一个bash shell,启用命令行shell,运行shell脚本并帮助调试chroot内部的问题

cp /bin/bash ./bin/

ln -s /bin/bash ./bin/sh

cp -p /lib64/libtermcap.so.2 ./lib64/ # CentOS 6.X系统

chroot /opt/chroot /bin/bash # 在chroot内部测试bash

9、在chroot内部测试Java虚拟机是否正常:

chroot /opt/chroot /usr/java/jdk1.6.0_45/bin/java -version l

如果运行失败,说明chroot树内部还未成功创建真实的root目录的某些部分,需要查看错误提示和日志。在CentOS 6.X可使用strace命令输出更多信息:

strace chroot /opt/chroot /usr/java/jdk1.6.0_45/bin/java -version

10、一旦已经让Java运行在chroot内,则可以继续配置让Tomcat运行在chroot内。
配置Tomcat运行环境:

cp /bin/uname ./bin/

cp /usr/bin/dirname ./usr/bin/

cp /usr/bin/tty ./usr/bin/

cp /bin/touch ./bin/

把Tomcat二进制文件解压到chroot目录下:

cp -a /iFinCar_App/apache-tomcat-6.0.18 /opt/chroot/iFinCar_App/apache-tomcat-6.0.18

chroot /opt/chroot /iFinCar_App/apache-tomcat-6.0.18/bin/catalina.sh start

11、Linux的chroot命令不支持用户或组的切换功能,只能用root用户执行,给系统带来了一定的风险。为了解决这个问题,我们将OpenBSD的chroot命令移植到Linux下,并将其重命名为jbchroot,以区别于默认的chroot命令。

gcc -0 jbchroot.c -o jbchroot

cp jbchroot /usr/local/bin/

ls -la which jbchroot

chmod 755 /usr/local/bin/jbchroot

chown root.root /usr/local/bin/jbchroot

jbchroot /opt/chroot -U car -- /iFinCar_App/apache-tomcat-6.0.18/bin/catalina.sh start

jbchroot代码:















tomcat-definitive-guide-2ed-examples/jbchroot.c · master · examples / Tomcat The Definitive Guide 2nd Edition · GitLab






























jbchroot.c



7.41 KB











转载于:https://blog.51cto.com/10248921/2400834

你可能感兴趣的:(设置Tomcat chroot Jail)