Nginx und Tomcat verwenden Chroot- (Jail-)bezogene Konfigurationen

WBOY
Freigeben: 2016-08-08 09:32:41
Original
1666 Leute haben es durchsucht

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
Nach dem Login kopieren

1.2. Verwenden Sie den Befehl ldd, um die abhängigen Bibliotheken des Befehls herauszufinden, den Sie im Chroot-Gefängnis ausführen möchten.

# 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)
Nach dem Login kopieren

1.3. Erstellen Sie einen Unterordner im Stammverzeichnis des Chroot-Gefängnisses. Erstellen Sie alles, was Sie für die Dinge benötigen, die Sie unter dem Chroot-Prinzip ausführen möchten.

# mkdir /home/chroot/jail/bin
# mkdir /home/chroot/jail/lib64
Nach dem Login kopieren

1.4. Kopieren Sie die Binärdateien (die unter Chroot ausgeführt werden müssen) und abhängigen Bibliotheken in das Chroot-Gefängnisverzeichnis.

# 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
Nach dem Login kopieren

1.5. Nach Abschluss der oben genannten Vorgänge können Sie es unter chroot anzeigen.

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
#
Nach dem Login kopieren
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 $D
Nach dem Login kopieren
2.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
Nach dem Login kopieren

2.3. Erstellen Sie das erforderliche Gerät in $D/dev, das ein Puffer sein sollte.

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
Nach dem Login kopieren

2.4 Kopieren Sie alle Nginx-Dateien in das Gefängnis.

# /bin/cp -farv /usr/local/nginx/* $D/usr/local/nginx
Nach dem Login kopieren

2.5. Kopieren Sie die abhängigen Bibliotheken in das Gefängnis. (2.5 und 2.4 entsprechen dem Prozess in 1.4)

# ldd /usr/local/nginx/sbin/nginx
Nach dem Login kopieren
Kopieren 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/etc
Nach dem Login kopieren
Einige Ordner hinzufügen:

# cp -avr /etc/{ld.so.conf.d,prelink.conf.d} $D/etc
Nach dem Login kopieren

2.7.

Wenn Nginx läuft, schließen Sie es zuerst:

# killall -9 nginx
Nach dem Login kopieren

Öffnen Sie Nginx in Chroot:
# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx -t
# /usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx
Nach dem Login kopieren
Sie 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
Nach dem Login kopieren

Konfigurieren Sie es so, dass es beim Booten automatisch startet:

# echo '/usr/sbin/chroot /home/nginx/jail /usr/local/nginx/sbin/nginx' >> /etc/rc.local
Nach dem Login kopieren
Bearbeiten Sie die Nginx-Konfigurationsdatei in Chroot:

# cd /home/nginx/jail/usr/local/nginx/conf/
# vi nginx.conf
Nach dem Login kopieren
Speichern 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 reload
Nach dem Login kopieren
Wenn 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.conf
Nach dem Login kopieren
und testen Sie dann Nginx und starten Sie es neu.
2.8. Wenn weiterhin ein Problem mit der Umgebung besteht, verwenden Sie Strace, um den Fehler zu verfolgen. (Diese Methode kann auch zum Konfigurieren von Tomcat oder anderen Diensten verwendet werden und wird später nicht im Detail beschrieben.)

# strace -f -o /tmp/nginx.strace chroot /nginx /usr/local/nginx/sbin/nginx -t 
Nach dem Login kopieren
strace muss möglicherweise installiert werden.
Nach der Ausführung der Anweisung werden einige Spuren in der Datei /tmp/nginx.strace angezeigt.

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
Nach dem Login kopieren
3.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
Nach dem Login kopieren
# cp -a /etc/hosts etc/hosts
Nach dem Login kopieren

3.3. Installieren Sie die Java-Umgebung und kopieren Sie die von Root installierte Umgebung nach chroot.

# mkdir -p usr/java
# cp -a /usr/java/jdk1.7.0_67 usr/java
Nach dem Login kopieren

3.4. Suchen und kopieren Sie Java-abhängige Bibliotheken

# 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)
Nach dem Login kopieren
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/
Nach dem Login kopieren

3.5 Vor dem Ausführen der JVM müssen einige Arbeiten durchgeführt werden, um Chroot einer echten Root-Umgebung ähnlicher zu machen.

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/
Nach dem Login kopieren

3.6.

# mkdir -p /home/tomcat/jail/proc
# mount -t proc proc /home/tomcat/jail/proc
Nach dem Login kopieren
Nachdem 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
Nach dem Login kopieren
Äh. . Voraussetzung ist, dass Sie bereits eine Kopie von Bash und Sh in Chroot erstellt haben. Oder nach all den 3.
Kopieren Sie die drei Dateien unter usw. Versuchen Sie, diejenigen, die nicht benötigt werden, nicht noch einmal zu kopieren. . Dienstleistungen werden minimiert. .

Es gibt drei abhängige Bibliotheken mit benannter Unterstützung, die kopiert werden müssen

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

Dann fügen Sie /bin/bash und /bin/sh in chroot ein , Referenz 1.x. Unter ihnen ist sh eine weiche Verbindung von Bash in Centos.

cp -p /lib64/libresolv.so.2 lib64/
cp -p /lib64/libnss_dns.so.2 lib64/
cp -p /lib64/libnss_files.so.2 lib64/
Nach dem Login kopieren
Nach diesem Schritt kann Java in Chroot funktionieren. Wenn etwas schief geht, verwenden Sie Strace zur Fehlerbehebung.
Nachdem die Java-Laufumgebung eingerichtet ist, beginnen Sie mit der Konfiguration von Tomcat.

3.8.tomcat-Installationskonfiguration.

Tomcat muss im Allgemeinen nicht installiert werden. Es gilt als grün. Laden Sie das Dekomprimierungspaket herunter und dekomprimieren Sie es im Chroot-Gefängnisverzeichnis.

Ich habe es direkt im Jail-Root-Verzeichnis komprimiert.

Versuchen Sie es auszuführen, und die folgenden Ergebnisse werden angezeigt:

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
Nach dem Login kopieren
Beim 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
Nach dem Login kopieren

Fügen Sie diese paar Dinge hinzu:

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.
Nach dem Login kopieren
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/
Nach dem Login kopieren
Konfigurieren Sie es so, dass es beim Booten automatisch startet, und hängen Sie es am Ende von rc.local an:
Beachten Sie, dass der Java-Pfad, Root und Chroot konsistent sein müssen.

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
Nach dem Login kopieren
Referenz:

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage