nginx和tomcat使用chroot(jail)相關配置

來源:互聯網
上載者:User
本文注重配置記錄,chroot(jail)作用好處不再贅述。

本文分三部分講述:配置基本的chroot jail,nginx配置chroot jail,tomcat配置chrootjail。

1.配置基本的chroot jail

1.1.建立一個目錄,作為chroot jail的根目錄。

# mkdir /home/chroot/jail

1.2.使用ldd命令,找出你想在chroot jail中想啟動並執行命令的依賴庫。

# ldd /bin/bashlinux-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 jail根目錄的子檔案夾,你想在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/jailbash-4.1# pwd/bash-4.1# lsbash: ls: command not foundbash-4.1# exitexit#
這裡只能運行一些內嵌的shell,比如pwd,但是其他指令不行,除非你將它的二進位檔案和相關依賴庫也拷進chroot jail中。

1.6.如果啟動某服務總是出錯,可以使用strace來查錯。在nginx配置最後會補充。


2.nginx配置chroot jail

nginx的安裝方式省略,就是下載tar.gz,解壓,configure,make,make install。。。

這裡配置針對CentOS6.x 64位系統。

2.1.指定chroot目錄,也就是1.1.中說的根目錄。

為命名規範統一,都做成以下目錄結構:

# 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檔案到jail中。

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

2.5.拷貝依賴庫到jail中。(2.5與2.4相當於1.4中的過程)

# ldd /usr/local/nginx/sbin/nginx
需要什麼拷什麼,服務最小化。

2.6.拷貝/etc到jail。

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。

如果有正在啟動並執行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 -tbash-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
如果直接copy的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環境,並拷貝root安裝的環境到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/javalinux-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)
只拷貝上述4個lib64中的庫,另外還需要拷貝2個JVM需要的庫:

# cp -p /lib64/libm.so.6 lib64/# cp -p /lib64/libnsl.so.1 lib64/

3.5.在運行JVM之前,還需要做一些工作,使得chroot更像一個真實的root環境。

建立/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。

# mkdir -p /home/tomcat/jail/proc# mount -t proc proc /home/tomcat/jail/proc
這一步掛載完後,在chroot下就可以用java了,可以進入chroot通過以下命令測試:

bash-4.1# /usr/java/jdk1.7.0_67/bin/java -version
額。。前提是你已經將bash,sh在chroot中做了一份。或者這個3.x全部做完後,再此時也闊以噠~

3.7.添加其他需要檔案和依賴庫。

拷貝etc下的三個檔案,不需要的盡量不要拷,還是那句話。。服務最小化。。

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

還有三個命名支援的依賴庫需要拷貝

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

再將/bin/bash 和/bin/sh做到chroot中,參考1.x。其中sh在centos中是bash的一個軟串連。

在這一步後,java在chroot中就可以工作了,再出錯就用strace排錯。

java運行環境搭好後,開始配置tomcat。

3.8.tomcat安裝配置。

tomcat一般不需要安裝,算是綠化的吧,下載解壓包,在chroot jail目錄中解壓即可。

我直接壓縮在了jail根目錄。

嘗試運行,會有如下結果:

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 foundCannot find //bin/setclasspath.shThis file is needed to run this program
需要將uname和dirname兩個二進位檔案和依賴庫copy進來,做法與bash相同。

# cp /bin/uname bin/# mkdir usr/bin# cp /usr/bin/dirname usr/bin

在運行tomcat,發現還有一點小問題:

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 foundUsing CATALINA_BASE:   /apache-tomcat-7.0.57Using CATALINA_HOME:   /apache-tomcat-7.0.57Using CATALINA_TMPDIR: /apache-tomcat-7.0.57/tempUsing JRE_HOME:        /usr/java/jdk1.7.0_67Using 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 foundTomcat started.
再添加這個幾個東西:
# cp -p /lib64/librt.so.1 lib64/# cp /usr/bin/tty usr/bin/# cp /bin/touch bin/

這樣,tomcat在chroot容器中可以正常運行了。

將其配置為開機自啟,在rc.local末尾追加:

export JAVA_HOME=/usr/local/java/jdk1.7.0_25export JRE_HOME=$JAVA_HOME/jremount -t proc proc /home/tomcat/jail/proc &>/dev/null/usr/sbin/chroot /home/tomcat/jail /usr/tomcat/bin/catalina.sh start
注意這個java路徑,root與chroot要一致。

參考文獻:

[1] 3.13 Configuring and Using Chroot Jails Chapter 3 Implementing Oracle Linux Security Guide for Release 6

[2] Linux nginx: Chroot (Jail) Setup By NIXCRAFT

[3] Tomcat: The Definitive Guide: The Definitive Guide By Jason Brittain, Ian F. Darwin

以上就介紹了nginx和tomcat使用chroot(jail)相關配置,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.