Dieser Artikel konzentriert sich auf Konfigurationsdatensätze und die Vorteile von Chroot (Gefängnis) werden nicht im Detail beschrieben.
Dieser Artikel ist in drei Teile unterteilt: Konfiguration des einfachen Chroot-Jails, Konfiguration des Chroot-Jails für Nginx und Konfiguration des Chroot-Jails für Tomcat.
1. Konfigurieren Sie ein einfaches Chroot-Gefängnis
1.1. Erstellen Sie ein Verzeichnis als Stammverzeichnis des Chroot-Gefängnisses.
# 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
Die oben genannten Vorgänge können nur Bash unter Chroot ausführen, andere Vorgänge sind nicht möglich. Daher kann der Befehl ls im folgenden Beispiel nicht gefunden werden
# chroot /home/chroot/jail bash-4.1# pwd / bash-4.1# ls bash: ls: command not found bash-4.1# exit exit #
1.6. Wenn beim Starten eines bestimmten Dienstes immer ein Fehler auftritt, können Sie den Fehler mit strace überprüfen. Es wird am Ende der Nginx-Konfiguration hinzugefügt.
2.nginx-Konfigurations-Chroot-Gefängnis
Die Installationsmethode von Nginx wird weggelassen, nämlich das Herunterladen von tar.gz, das Entpacken, Konfigurieren, make, make install . . .
Diese Konfiguration gilt für das 64-Bit-System CentOS6.x.
2.1 Geben Sie das Chroot-Verzeichnis an, das das in 1.1 erwähnte Stammverzeichnis ist.
Um die Namenskonvention zu vereinheitlichen, wird die folgende Verzeichnisstruktur erstellt:
# D=/home/nginx/jail # mkdir -p $D
# 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
Verwenden Sie hier den Befehl mknod, um Cache-Dateien zu erstellen:
# /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 ins Gefängnis kopieren.
Das nixCraft-Tutorial weist ausdrücklich auf diese hin, die verwendet werden sollten, wenn Nginx ausgeführt wird.
# 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
Wenn Nginx läuft, schließen Sie es zuerst:
# 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 /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
# cd /home/nginx/jail/usr/local/nginx/conf/ # vi nginx.conf
# /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
# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# strace -f -o /tmp/nginx.strace chroot /nginx /usr/local/nginx/sbin/nginx -t
Als ich die Umgebung konfigurierte, stellte ich fest, dass ein bestimmtes Paket in der Datei fehlte. Ich fügte es dem Chroot-Gefängnis hinzu und startete normal.
3. Chroot-Gefängnis für Tomcat konfigurieren
3.1.
# mkdir /home/tomcat/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)
# cp -p /lib64/libm.so.6 lib64/ # cp -p /lib64/libnsl.so.1 lib64/
Erstellen Sie /dev und seine Unterschlüssel:
# 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/
# mkdir -p /home/tomcat/jail/proc # mount -t proc proc /home/tomcat/jail/proc
bash-4.1# /usr/java/jdk1.7.0_67/bin/java -version
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/
Sie müssen die beiden Binärdateien uname und dirname sowie die abhängigen Bibliotheken kopieren. Die Methode ist die gleiche wie 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
# cp /bin/uname bin/ # mkdir usr/bin # cp /usr/bin/dirname usr/bin
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 Konfigurieren und Verwenden von Chroot-Jails Kapitel 3 Implementieren des Oracle Linux-Sicherheitshandbuchs für Version 6
[2] Linux nginx: Chroot (Jail) Setup von NIXCRAFT
[3] Tomcat: The Definitive Guide: The Definitive Guide von Jason Brittain, Ian F. Darwin
Das Obige stellt die relevante Konfiguration von Nginx und Tomcat mit Chroot (Gefängnis) vor, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.