Einleitung
- Ohne Shellzugriff – Ein ordentlich konfigurierter FTP Server samt TLS, also FTPS
- Mit Shellzugriff – Dann aber mit CHROOT Umgebung, SSH und SCP, also SFTP
Ich musste mich wegen Kundenwuenschen der zweiten Option widmen und werde hier eine schnelle Schritt-füer-Schritt Einleitung praesentieren. Chroot steht dabei für “change root”, und ist eine Funktion auf Unix Systemen um das Wurzelverzeichnis zu wechseln. Mit dieser Funktionalität bauen wir uns praktisch ein Mini System innerhalb des Systemes das wirklich nur die Sachen beinhaltet die wir für unsere Aufgabe brauchen und aus dem ein nicht priviligierter Benutzer nicht so einfach ausbrechen kann.
Einrichten der CHROOT Umgebung
| 1. | libpam-chroot | Erweitert unseren Authentifierungsdienst um die chroot Funktionalität |
| 2. | makejail | Eröglicht uns das sehr einfache und schnelle einrichten der chroot |
- Also als erstes mal die Paketquellen auffrischen: apt-get update
- Dann installieren wir die benötigten Pakete: apt-get install libpam-chroot makejail
Nun legen wir direkt mal die Verzeichnisstruktur an die später unsere chroot darstellt. Falls noch kein Benutzer für die chroot Umgebung eingerichtet worden ist sollte man das jetzt nachholen:
| mkdir /mnt/raid/chroot | Das Verzeichnis natürlich den lokalen Gegenbenheiten anpassen |
| mkdir /mnt/raid/chroot/home | Und gleich danach direkt das home Verzeichnis fuer den Benutzer |
| adduser john | Dann den Benutzer anlegen falls noch nicht geschehen |
Jetzt geht es an die Konfiguration:
vi /etc/pam.d/ssh
Hier tragen wir als letzte Zeile
session required pam_chroot.so
ein und laden somit das chroot Modul von Pam für SSH Sessions.
vi /etc/security/chroot.conf
Die Datei erklärt sich von selbst, hier muss man am Ende der Datei einfach den Usernamen gefolgt von dem chroot Verzeichnis eingeben:
john /mnt/raid/chroot
vi /etc/passwd
Hier stellen wir das Homeverzeichnis unseres Users john ein welches er später in der chroot erhält:
john:x:1001:100::/home:/bin/bash
Die Shell lassen wir am besten auf /bin/bash stehen weil ssh eine richtige Shell benötigt, mit /bin/false oder /bin/rbash z. B. verweigert er den Dienst.
Ab sofort bekommt der User john nur noch alles unterhalb des angegebenen chroot Verzeichnisses zu sehen, nur dort befindet sich noch keine lauffähige Umgebung.
Das holen wir mit makejail nach. Makejail ist ein nützliches Programm zum erstellen einer chroot Umgebung da es einem einen Haufen Sachen abholt die man sonst manuell erledigen müsste, wie zum Beispiel das kopieren der libs die man braucht um seine Programme innerhalb einer chroot Umgebung laufen zu lassen.
Makejail benötigt ein Phyton Script als Argument damit es weiss was zu tun ist. Solche Beispieldateien finden wir unter: /usr/share/doc/makejail/examples/
Die Beispieldatei sshd.py bringt bis auf zwei Kleinigkeiten schon alles mit was wir brauchen, also nehmen wir diese als Vorbild und kopieren sie uns in unser Arbeitsverzeichnis z. B. mit cp /usr/share/doc/makejail/examples/sshd.py .
Jetzt können wir diese Datei auf unsere lokalen Gegebenheiten anpassen:
vi sshd.py
Der oberste Eintrag lautet chroot=”/var/chroot/sshd”, das ändern wir auf chroot=”/mnt/raid/chroot” bzw. auf euer chroot Verzeichnis.
Darauf folgend werden unter forceCopy= die Dateien angeben die mit in die chroot Umgebung kopiert werden sollen, alles was hier steht wird demnach für eine funktionierende sshd Umgebung gebraucht. Zusätzlich wollen wir aber auch einen sftp-server haben sowie per scp Befehl drauf kopieren können. Also fügen wir diese beiden Dateien in forceCopy ein. Mit whereis sftp-server bzw. whereis scp finden wir den Pfad zu den Applikationen. Unter Debian sollten es eigentlich /usr/lib/sftp-server und /usr/bin/scp sein. Zum Schluss ändern wir noch optional den users Eintrag auf unseren User ab.
Beispiel Konfiguration:
chroot=”/mnt/raid/chroot”
forceCopy=["/etc/ssh/ssh_host*","/etc/ssh/sshd*","/etc/ssh/moduli",
"/etc/pam.conf","/etc/security/*","/etc/pam.d/ssh","/etc/pam.d/other",
"/etc/hosts","/etc/nsswitch.conf",
"/var/run/sshd","/lib/security/*",
"/etc/shells", "/etc/nologin","/etc/environment","/etc/motd",
"/etc/shadow","/etc/hosts*",
"/bin/*sh", "/lib/libnss*",
"/dev/pt*","/dev/ttyp[0-9]*”, “/usr/lib/sftp-server”, “/usr/bin/scp”]
preserve=["/dev/","/home"]
userFiles=["/etc/passwd","/etc/shadow"]
groupFiles=["/etc/group","/etc/gshadow"]
users=["john"]
groups=["sshd"]
testCommandsInsideJail=["start-stop-daemon --start --quiet --pidfile /var/run/sshd.pid --exec /usr/sbin/sshd"]
testCommandsOutsideJail=["ssh localhost"]
processNames=["sshd"]
Jetzt sind wir bereit makejail laufen zu lassen und ein paar Sekunden später haben wir hoffentlich eine funktionierende chroot Umgebung.
makejail sshd.py
Nun sollte sich unter /mnt/raid/chroot eine lauffähige Umgebung eingerichtet haben die bei meinem System ungefähr 8,4 MB belegt hat. Per ssh john@localhost müsste jetzt auch ein Login auf die chroot funktionieren, hier findet man sich in seinem Homeverzeichnis wieder und man dürte jetzt eigentlich nicht viel damit anfangen können da fast alle Systemprogramme hier nicht existieren.
Ich hoffe ich habe nicht schon wieder eine von unzähligen dummen Linux Howtos verfasst die keiner doppelt und dreifach braucht, falls sich in dieser kleinen Anleitung ein Fehler eingeschlichen hat oder ich was wichtiges vergessen haben sollte dann lasst es mich wissen.
