>  기사  >  백엔드 개발  >  nginx 및 tomcat은 chroot(jail) 관련 구성을 사용합니다.

nginx 및 tomcat은 chroot(jail) 관련 구성을 사용합니다.

WBOY
WBOY원래의
2016-08-08 09:32:411680검색

이 글은 구성 기록에 중점을 두고 있으며 chroot(jail)의 이점에 대해서는 자세히 설명하지 않습니다.

이 문서는 기본 chroot Jail 구성, nginx용 chroot Jail 구성, Tomcat용 chrootjail 구성의 세 부분으로 나누어져 있습니다.

1. 기본 chroot Jail을 구성합니다.

1.1 chroot Jail의 루트 디렉터리를 생성합니다.

# mkdir /home/chroot/jail

1.2. chroot 감옥에서 실행하려는 명령의 종속 라이브러리를 찾으려면 ldd 명령을 사용하십시오.

# 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)

1.3. chroot 감옥의 루트 디렉터리에 하위 폴더를 만듭니다. chroot에서 실행하려는 항목에 필요한 모든 것을 만듭니다.

# mkdir /home/chroot/jail/bin
# mkdir /home/chroot/jail/lib64

1.4. chroot에서 실행해야 하는 바이너리 파일과 종속 라이브러리를 chroot Jail 디렉터리에 복사합니다.

# 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

1.5. 위의 작업을 완료한 후 chroot에서 볼 수 있습니다.

위 작업은 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 $D
2.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

2.3. $D/dev에 필요한 디바이스를 생성합니다. 이 디바이스는 버퍼여야 합니다.

여기에서 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

2.4 모든 nginx 파일을 감옥에 복사합니다.

# /bin/cp -farv /usr/local/nginx/* $D/usr/local/nginx

2.5. 종속 라이브러리를 감옥에 복사합니다. (2.5, 2.4는 1.4의 과정과 동일합니다.)

# 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

2.7.

nginx가 실행 중이면 먼저 닫으세요.

# killall -9 nginx

chroot에서 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.local
chroot에서 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 reload
chroot 환경을 직접 복사하면 nginx가 구성 파일을 인식하지 못할 수 있습니다.

# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
을 실행한 후 nginx를 테스트하고 다시 시작하세요.
2.8. 환경에 여전히 문제가 있는 경우 strace를 사용하여 오류를 추적합니다. (이 방법은 Tomcat이나 다른 서비스를 구성하는 데에도 사용할 수 있으며 나중에 자세히 설명하지 않습니다.)

# strace -f -o /tmp/nginx.strace chroot /nginx /usr/local/nginx/sbin/nginx -t 
strace를 설치해야 할 수도 있습니다.
명령문을 실행한 후에는 /tmp/nginx.strace 파일에 더 자세한 추적이 있을 것입니다.

환경을 구성하다가 파일에 특정 패키지가 누락된 것을 발견하여 chroot Jail에 추가하고 정상적으로 시작하였습니다.

3. Tomcat은 chroot Jail을 구성합니다.

3.1 chroot Jail 루트 디렉터리를 만듭니다.

# mkdir /home/tomcat/jail
3.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

3.3. java 환경을 설치하고 루트로 설치된 환경을 chroot에 복사합니다.

# mkdir -p usr/java
# cp -a /usr/java/jdk1.7.0_67 usr/java

3.4. 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를 실제 루트 환경과 비슷하게 만들기 위해 몇 가지 작업을 수행해야 합니다.
/dev 및 해당 하위 키 만들기:


# 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

등 아래 3개 파일을 복사하세요. 필요하지 않은 파일은 다시 복사하지 마세요. . 서비스가 최소화됩니다. .

복사해야 하는 명명된 지원이 있는 세 개의 종속 라이브러리가 있습니다.

cp -a /etc/{hosts,resolv.conf,nsswitch.conf} /home/tomcat/jail/etc/ 

그런 다음 /bin/bash 및 /bin/sh를 chroot에 넣습니다. , 참조 1.x. 그 중 sh는 센토스에서 bash의 소프트 연결입니다.

이 단계 후에 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/

Java 실행 환경을 설정한 후 Tomcat 구성을 시작합니다.

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 program
Tomcat을 실행하는 동안 여전히 작은 문제가 있음을 발견했습니다.

# 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.

부팅 시 자동으로 시작되도록 구성하고 rc.local 끝에 추가합니다.
# cp -p /lib64/librt.so.1 lib64/
# cp /usr/bin/tty usr/bin/
# cp /bin/touch bin/

Java 경로, 루트 및 chroot는 일관되어야 합니다.

참조:
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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP QR 코드 생성다음 기사:PHP QR 코드 생성