Im ersten Schritt haben wir unser System für Jails vorbereitet und die Basisjail angelegt. Jetzt erstellen wir unsere erste Jail, passen diese an und werden diese starten und stoppen.
- Bevor wir aber nun die erste Jail erstellen, müssen wir verhindern, dass andere Dienste auf die IP der neuen Jail hören. Da wir über ein frisch aufgesetztes System verfügen, müssen wir jetzt lediglich den syslog-Dienst (syslogd) binden. Das machen wir über folgende Einträge in der '/etc/rc.conf':
syslogd_flags="-s -s"
- Jetzt erstellen wir die erste Jail, in der wir später den Mailserver installieren. Achte bitte darauf "mail" durch einen Namen deiner Wahl zu ersetzen und ebenso die IP-Adresse an die, die du im ersten Schritt als Alias vergeben hast.
# ezjail-admin create mail 10.0.0.1
Die Jails werden standardmäßig im Verzeichnis '/usr/jails/' angelegt. Daher liegen die Konfigurationsdateien auch im entsprechenden Unterverzeichnis. - Jetzt wird erstmal gemeckert, dass noch verschiedene Dienste auf allen Ports und IPs lauschen, also auch auf der der Jail. Das liegt noch an unserem syslog-Dämon, aber ist für den Moment nicht so schlimm. Als nächstes müssen wir die Datei '/usr/jails/<JAILNAME>/etc/resolv.conf' anlegen. Diese kannst du entweder in einem Flavour anlegen, sodass du bspw. unterscheidest zwischen Online-Jails und Offline-Jails, oder du bindest sie in deine Basisjail ein. Schreibe einfach folgendes in diese Datei:
nameserver
Hinweis: Welchen Nameserver du hier einträgst hängt davon ab, wo der Server steht. Wenn er Teil deines privaten Netzwerkes zuhause ist, dann ist das in der Regel die IP deines Routers. Steht der Server irgendwann in einem Rechenzentrum, dann kann das der Nameserver von deinem Serviceprovider sein, oder, das gilt sowohl für den Rechenzentrumsbetrieb als auch den Betrieb des Servers zuhause, es ist dein eigener Nameserver, der bspw. in einer anderen Jail läuft. - In der Datei '/usr/jails/<JAILNAME>/etc/rc.conf' tragen wir nun noch als Gateway die IP des Hostsystems ein:
defaultrouter=""
Zudem würde ich den SSH-Dienst starten, da wir so die einzelnen Jails meiner Meinung nach leichter administrieren können. Warum, das siehst du gleich. Wir tragen also in die rc.conf ein:
sshd_enable="YES"
Alternativ kannst du aber auch sshd_enable auf "NO" setzen, dann kannst du den SSH-Server nicht starten. Dennoch kannst du vom Hostsystem aus auf der Shell arbeiten. Das machst du einfach über folgenden Befehl (die JID kriegst du über den Befehl 'jls'):
# jexec su - Wir dürfen jetzt nicht vergessen den SSH-Dienst zu konfigurieren. Das machen wir in der Datei '/usr/jails/<JAILNAME>/etc/ssh/sshd_config'. Hierbei ist darauf zu achten, dass wir die IP an unsere neue interne IP binden, in meinem Fall die 10.0.0.1 und den Port ändern, auf den, den wir im Kapitel "pf: Gateway für Jails" in unserer Konfiguration angegeben haben. Wie man das macht entnimmst du bitte auch diesem Kapitel.
- So, bevor wir jetzt unsere erste Jail starten, müssen wir in der 'rc.conf' des Hostsystems angeben, dass bzw. ob alle Jails beim Systemstart gestartet werden sollen. Das bewirkt folgender Eintrag in der rc.conf:
ezjail_enable="YES"
Willst du nur einzelne Jails starten, dann trage das bspw. in die Datei '/etc/rc.local' ein:/usr/local/etc/rc.d/ezjail.sh start
- Jetzt ist es soweit, alles ist konfiguriert. Wir starten also unsere Jail mit folgendem Befehl:
# /usr/local/etc/rc.d/ezjail.sh start - Jetzt ist die Jail gestartet. Wenn du start durch stop ersetzt, wir die Jail wieder beendet. Entsprechend wirkt sich ein restart aus. Ob es funktioniert hat, kannst du über die Konsoleneingabe
# jls
prüfen. Jetzt werden dir alle Jails aufgelistet, die gerade laufen. Wenn du übrigens den Jailnamen hinter 'start', 'stop' bzw. 'restart' weg lässt, werden alle Jails angesprochen die du angelegt hast. Die Ausgabe gibt dir an erster Stelle auch eine ID für jede Jail an. Die brauchen wir, wenn wir Befehle in der Jail ausführen wollen, ohne bspw. per SSH an dieser angemeldet zu sein. - Wir haben zwar SSH gestartet, allerdings haben wir ja noch keinen Benutzer, der sich überhaupt per SSH anmelden kann. Denn beachte: Was für das Hostsystem gilt, gilt nicht automatisch für die Jails. Das betrifft Programme, das betrifft also auch die Benutzerdatenbank. Wir legen also jetzt einen Benutzer an:
# jexec adduser
Das weitere Prozedere will ich dir jetzt nicht erklären, das ergibt sich aus den Dialogen. Aber schau dir bitte die Syntax an. steht für die ID der Jail, die dir 'jls' ausgibt. Adduser ist in diesem Fall der Befehl bzw. das Programm. Das kann man also auch für andere Programme nutzen. - Ich habe in meinen Jails einen Link zur Uhrzeit des Hostsystems gelegt. Dadurch muss ich mich nicht darum kümmern, dass die Uhrzeit der Jails mit der des Host übereinstimmt. Das machst du wie folgt:
# ln -s /etc/localtime /jails/newjail/etc/localtime - Jetzt bearbeiten wir noch die Datei '/etc/mail/aliases' und fügen folgende Zeile ein, damit Mails an den User "root" an unsere Mail-Adresse weitergeleitet werden:
root: [email protected]
Jetzt führen wir im Verzeichnis '/etc/mail/aliases" noch den Befehl
# newaliases
aus und starten sendmail neu:
# /etc/rc.d/sendmail stop
# /etc/rc.d/sendmail start
Einen Kommentar hinzufügen
Hallo,
Das kannst du prinzipiell machen wie du willst. Es kommt drauf an was du mit syslogd vor hast.
Aber beides funktioniert natürlich.
Grüsse,
Benedikt
Hallo,
wieso bindest Du syslogd nicht einfach an das Interface des Hostsystems, anstatt alle Netzwerk-Sockets zu schließen?
syslogd_flags="-b 10.0.01"
Das Problem mit der Zeitzone hatte ich auch. Versuch mal:
cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime
cp /etc/localtime /jails/flavours/<jailname>/etc/
Gruss, Mario
Das mit der Zeitzone habe ich nicht gesondert überprüft, da ich meine Systemzeiten immer per NTP synchronisiere.
Das Verknüpfen sehe ich nicht als Problem. Zum einen reichen Leserechte aus => kein Problem. Des weiteren basiert EZJAILS auf einer ganzen reihe von Systemlinks. Dadurch wird der Speicherplatzkonsum reduziert. Ich sehe daher kein Problem darin, "localtime" zu verlinken.
Grüsse,
Benedikt
der Symbol Link auf /etc/localtime bewirkt bei mir, dass er die Zeitzone nicht mitnimmt. Er wendet dann UTC anstatt CET an. Hast Du das mal bei dir überprüft??
Davon mal abgesehen:
Stellt das nicht ein erhöhtes Sicherheitsrisko dar, wenn man Dateien des Host Systems mit dem Chroot der Jails verknüpft?
Ja, das ist richtig. Kannst du weglassen.
Werde das beheben. Danke für den Hinweis.
Gruß,
Benedikt
Aus der Manpage zu syslogd (FreeBSD 6.2):
The -a options are ignored if the -s option is also specified.
Die zweite Zeile unter Punkt 1 müßte man also weglassen können, oder?
Danke für den Hinweis. Das habe ich nachträglich ergänzt (das mit dem Gateway).
Welche Punkte funktionieren denn nicht? Darfst mir gerne eine E-Mail schicken.
Vielen Dank für deine Hilfe,
Benedikt
villeicht könntest du auch sagen was für einen gateway du bei punkt 3 eingibts und wie?
Insgesammt ist das Tutorial ziemlich gut allerdings hatte ich schon einige Punkte die nicht funktionierten welche ich dann erst über google lösen musste (ich setzte das system auf einem macbook per vmware auf).
Insgesammt aber ein dickes lob (bis jetzt)