Heim >Backend-Entwicklung >PHP-Tutorial >Nginx und Tomcat verwenden Chroot- (Jail-)bezogene Konfigurationen
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 #Hier können nur einige eingebettete Shells ausgeführt werden, z. B. pwd, andere Befehle können jedoch nicht verwendet werden, es sei denn, Sie kopieren auch die Binärdateien und zugehörigen abhängigen Dateien Betreten Sie das Chroot-Gefängnis.
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 $D2.2. Erstellen Sie eine Isolationsumgebung, ein Unterverzeichnis unter dem Jail-Stammverzeichnis.
# 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/nginxKopieren Sie, was benötigt wird, und minimieren Sie den Service.
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/etcEinige Ordner hinzufügen:
# 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/nginxSie können es auch zuerst chrooten und dann öffnen:
# 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.localBearbeiten Sie die Nginx-Konfigurationsdatei in Chroot:
# cd /home/nginx/jail/usr/local/nginx/conf/ # vi nginx.confSpeichern und schließen Sie Nginx, testen Sie es und starten Sie es neu :
# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -t # /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -s reloadWenn Sie die Chroot-Umgebung direkt kopieren, erkennt Nginx die Konfigurationsdatei möglicherweise nicht. Führen Sie Folgendes aus:
# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.confund testen Sie dann Nginx und starten Sie es neu.
# strace -f -o /tmp/nginx.strace chroot /nginx /usr/local/nginx/sbin/nginx -tstrace muss möglicherweise installiert werden.
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/jail3.2. Erstellen Sie die Chroot-Gefängnisverzeichnisstruktur.
# 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)Kopieren Sie nur die oben genannten 4 Bibliotheken in lib64 und müssen auch 2 von JVM benötigte Bibliotheken kopieren:
# 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/procNachdem dieser Schritt gemountet ist, können Sie Java unter chroot verwenden. Sie können chroot eingeben und mit dem folgenden Befehl testen:
bash-4.1# /usr/java/jdk1.7.0_67/bin/java -versionÄh. . Voraussetzung ist, dass Sie bereits eine Kopie von Bash und Sh in Chroot erstellt haben. Oder nach all den 3.
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/Nach diesem Schritt kann Java in Chroot funktionieren. Wenn etwas schief geht, verwenden Sie Strace zur Fehlerbehebung.
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 programBeim Ausführen von Tomcat habe ich festgestellt, dass es immer noch ein kleines Problem gibt:
# 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.Gefällt mir Dadurch kann Tomcat normal im Chroot-Container ausgeführt werden.
# cp -p /lib64/librt.so.1 lib64/ # cp /usr/bin/tty usr/bin/ # cp /bin/touch bin/Konfigurieren Sie es so, dass es beim Booten automatisch startet, und hängen Sie es am Ende von rc.local an:
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 startReferenz:
[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.