이 글은 구성 기록에 중점을 두고 있으며 chroot(jail)의 이점에 대해서는 자세히 설명하지 않습니다.
이 문서는 기본 chroot Jail 구성, nginx용 chroot Jail 구성, Tomcat용 chrootjail 구성의 세 부분으로 나누어져 있습니다.
1. 기본 chroot Jail을 구성합니다.
1.1 chroot Jail의 루트 디렉터리를 생성합니다.
# mkdir /home/chroot/jail
# ldd /bin/bash linux-vdso.so.1 => (0x00007fff56fcc000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003ad1200000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003abe600000) libc.so.6 => /lib64/libc.so.6 (0x0000003abe200000) /lib64/ld-linux-x86-64.so.2 (0x0000003abde00000)
# mkdir /home/chroot/jail/bin # mkdir /home/chroot/jail/lib64
# cp /bin/bash /home/chroot/jail/bin # cp /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} \ /home/chroot/jail/lib64
위 작업은 chroot에서만 bash를 실행할 수 있으며 다른 작업은 불가능합니다. 따라서 다음 예의 ls 명령을 찾을 수 없습니다
# chroot /home/chroot/jail bash-4.1# pwd / bash-4.1# ls bash: ls: command not found bash-4.1# exit exit #여기서는 pwd와 같은 일부 내장 쉘만 실행할 수 있지만 다른 명령은 해당 바이너리 파일 및 관련 종속 파일도 복사하지 않으면 사용할 수 없습니다 라이브러리 chroot 감옥에 들어가십시오.
1.6. 특정 서비스를 시작할 때 항상 오류가 발생하는 경우 strace를 사용하여 오류를 확인할 수 있습니다. nginx 구성이 끝나면 추가됩니다.
2.nginx 구성 chrootjail
nginx 설치 방법은 생략하고 tar.gz를 다운로드하고 unzip, 구성, 만들다, 설치하다 . . .
이 구성은 CentOS6.x 64비트 시스템용입니다.
2.1.1.1에서 언급한 루트 디렉터리인 chroot 디렉터리를 지정합니다.
명명 규칙을 통일하기 위해 다음과 같은 디렉터리 구조가 만들어집니다.
# D=/home/nginx/jail # mkdir -p $D2.2 Jail 루트 디렉터리 아래에 격리 환경을 만듭니다.
# mkdir -p $D/etc # mkdir -p $D/dev # mkdir -p $D/var # mkdir -p $D/usr # mkdir -p $D/usr/local/nginx # mkdir -p $D/tmp # chmod 1777 $D/tmp # mkdir -p $D/var/tmp # chmod 1777 $D/var/tmp # mkdir -p $D/lib64
여기에서 mknod 명령을 사용하여 캐시 파일을 만듭니다.
# /bin/mknod -m 0666 $D/dev/null c 1 3 # /bin/mknod -m 0666 $D/dev/random c 1 8 # /bin/mknod -m 0444 $D/dev/urandom c 1 9
# /bin/cp -farv /usr/local/nginx/* $D/usr/local/nginx
# ldd /usr/local/nginx/sbin/nginx필요한 내용을 복사하여 서비스를 최소화합니다.
2.6. /etc를 감옥에 복사합니다.
nixCraft 튜토리얼에서는 nginx가 실행될 때 사용해야 하는 이러한 사항을 구체적으로 지적합니다.
# cp -fv /etc/{group,prelink.cache,services,adjtime,shells,gshadow,shadow,hosts.deny,localtime,nsswitch.conf,nscd.conf,prelink.conf,protocols,hosts,passwd,ld.so.cache,ld.so.conf,resolv.conf,host.conf} $D/etc폴더 추가:
# cp -avr /etc/{ld.so.conf.d,prelink.conf.d} $D/etc
nginx가 실행 중이면 먼저 닫으세요.
# killall -9 nginx
# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -t # /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx먼저 chroot한 다음 열 수도 있습니다.
# chroot /home/nginx/jail bash-4.1# /usr/local/nginx/sbin/nginx -t bash-4.1# /usr/local/nginx/sbin/nginx
# echo '/usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx' >> /etc/rc.localchroot에서 nginx 구성 파일 편집:
# cd /home/nginx/jail/usr/local/nginx/conf/ # vi nginx.conf저장하고 닫고, 테스트하고 nginx를 다시 시작 :
# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -t # /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -s reloadchroot 환경을 직접 복사하면 nginx가 구성 파일을 인식하지 못할 수 있습니다.
# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf을 실행한 후 nginx를 테스트하고 다시 시작하세요.
# strace -f -o /tmp/nginx.strace chroot /nginx /usr/local/nginx/sbin/nginx -tstrace를 설치해야 할 수도 있습니다.
환경을 구성하다가 파일에 특정 패키지가 누락된 것을 발견하여 chroot Jail에 추가하고 정상적으로 시작하였습니다.
3. Tomcat은 chroot Jail을 구성합니다.
3.1 chroot Jail 루트 디렉터리를 만듭니다.
# mkdir /home/tomcat/jail3.2.chroot Jail 디렉토리 구조를 생성합니다.
# cd /home/tomcat/jail # mkdir -p lib lib64 etc tmp dev usr # chmod 755 etc dev usr # chmod 1777 tmp
# cp -a /etc/hosts etc/hosts
# mkdir -p usr/java # cp -a /usr/java/jdk1.7.0_67 usr/java
# ldd /usr/java/jdk1.7.0_67/bin/java linux-vdso.so.1 => (0x00007fff532d1000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc36c8f2000) libjli.so => /usr/java/jdk1.7.0_67/bin/../lib/amd64/jli/libjli.so (0x00007fc36c6da000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fc36c4d6000) libc.so.6 => /lib64/libc.so.6 (0x00007fc36c142000) /lib64/ld-linux-x86-64.so.2 (0x00007fc36cb17000)lib64에서 위의 4개 라이브러리만 복사하고 JVM에 필요한 라이브러리 2개도 복사해야 합니다. 🎜>
# cp -p /lib64/libm.so.6 lib64/ # cp -p /lib64/libnsl.so.1 lib64/3.5. JVM을 실행하기 전에 chroot를 실제 루트 환경과 비슷하게 만들기 위해 몇 가지 작업을 수행해야 합니다.
# cd /home/tomcat/jail # mkdir -p /home/tomcat/jail/dev/pts # /dev/MAKEDEV -d /home/tomcat/jail/dev null random urandom zero loop* log console # cp /dev/MAKEDEV /home/tomcat/jail/dev # cp -a /dev/shm /home/tomcat/jail/dev/3.6 /proc를 마운트합니다.
이 단계가 마운트되면 chroot에서 java를 사용할 수 있습니다. chroot를 입력하고 다음 명령으로 테스트할 수 있습니다.
# mkdir -p /home/tomcat/jail/proc # mount -t proc proc /home/tomcat/jail/proc
어. . 전제는 chroot에 bash와 sh의 복사본을 이미 만들었다는 것입니다. 아니면 3을 모두 마친 후에.
bash-4.1# /usr/java/jdk1.7.0_67/bin/java -version
복사해야 하는 명명된 지원이 있는 세 개의 종속 라이브러리가 있습니다.
cp -a /etc/{hosts,resolv.conf,nsswitch.conf} /home/tomcat/jail/etc/
이 단계 후에 Java는 chroot에서 작동할 수 있습니다. 문제가 발생하면 strace를 사용하여 문제를 해결하세요.
cp -p /lib64/libresolv.so.2 lib64/ cp -p /lib64/libnss_dns.so.2 lib64/ cp -p /lib64/libnss_files.so.2 lib64/
3.8.tomcat 설치 구성.
Tomcat은 일반적으로 설치할 필요가 없습니다. 압축 해제 패키지를 다운로드하여 chroot Jail 디렉토리에 압축을 풉니다.
Jail 루트 디렉토리에 직접 압축했습니다.
실행을 시도하면 다음과 같은 결과가 나타납니다.
두 개의 바이너리 파일 uname과 dirname과 종속 라이브러리를 복사해야 합니다. 방법은 bash와 동일합니다.bash-4.1# /apache-tomcat-7.0.57/bin/catalina.sh start /apache-tomcat-7.0.57/bin/catalina.sh: line 102: uname: command not found /apache-tomcat-7.0.57/bin/catalina.sh: line 122: dirname: command not found Cannot find //bin/setclasspath.sh This file is needed to run this programTomcat을 실행하는 동안 여전히 작은 문제가 있음을 발견했습니다.
# cp /bin/uname bin/ # mkdir usr/bin # cp /usr/bin/dirname usr/bin다음 몇 가지를 추가하세요.
좋아요 이를 통해 Tomcat은 chroot 컨테이너에서 정상적으로 실행될 수 있습니다.
bash-4.1# /apache-tomcat-7.0.57/bin/catalina.sh start /apache-tomcat-7.0.57/bin/catalina.sh: line 203: tty: command not found Using CATALINA_BASE: /apache-tomcat-7.0.57 Using CATALINA_HOME: /apache-tomcat-7.0.57 Using CATALINA_TMPDIR: /apache-tomcat-7.0.57/temp Using JRE_HOME: /usr/java/jdk1.7.0_67 Using CLASSPATH: /apache-tomcat-7.0.57/bin/bootstrap.jar:/apache-tomcat-7.0.57/bin/tomcat-juli.jar /apache-tomcat-7.0.57/bin/catalina.sh: line 368: touch: command not found Tomcat started.
# cp -p /lib64/librt.so.1 lib64/ # cp /usr/bin/tty usr/bin/ # cp /bin/touch bin/
export JAVA_HOME=/usr/local/java/jdk1.7.0_25 export JRE_HOME=$JAVA_HOME/jre mount -t proc proc /home/tomcat/jail/proc &>/dev/null /usr/sbin/chroot /home/tomcat/jail /usr/tomcat/bin/catalina.sh start
[1] 3.13 Chroot Jail 구성 및 사용 3장 릴리스 6용 Oracle Linux 보안 가이드 구현 [2] Linux nginx: Chroot(Jail) 설정 작성자: NIXCRAFT [3] Tomcat: 최종 가이드: 최종 가이드 작성자: Jason Brittain, Ian F. Darwin
위 내용은 관련 내용을 포함하여 chroot(jail)를 사용한 nginx와 tomcat의 관련 구성을 소개하고 있어 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.