Kategorien
Linux Proxmox

SCP mit Jailkit in einem unpriviliegierten LXC Container (unter Proxmox)

Langer Titel, kurzer Tip. 

Ausgangslage: Ich habe eine unpriviligierten LXC Container (mit Ubuntu 20.04) unter Proxmox. In diesem läuft ein ISPConfig. Hier kann man den angelegten „Webkunden“ eine SSH-Shell ermöglichen. Zur Auswahl steht dabei unter unterem die Nutzung eines Jail (Jailkit), sofern man das mit installiert hat. 

Wenn man das aktiviert, klappt zwar der SSH Zugriff aber SCP funktioniert nicht. Ursache ist, das in einem unpriv. Container mknod nicht genutzt werden kann. Beim Anlegen des Jail kommt dann in etwa eine solche Fehlermeldung.

root@mytestserver:/var/www/testen.de/dev# jk_init -j /var/www/clients/client1/web1 basicshell editors extendedshell netutils ssh sftp scp groups jk_lsh
mknod: /var/www/clients/client1/web1/dev/urandom: Operation not permitted
Failed to create device /var/www/clients/client1/web1/dev/urandom, this is a know problem with python 2.1
use "ls -l /dev/urandom" to find out the mode, major and minor for the device
use "mknod /var/www/clients/client1/web1/dev/urandom mode major minor" to create the device
use chmod and chown to set the permissions as found by ls -l

Der selbe Fehler für /dev/tty und /dev/null.

Und genau über das fehlende /dev/null stolpert in diesem Fall der SCP. Der Workaround; einfach dies manuell in das User-Jail zu kopieren

cp /dev/null /var/www/clients/client1/web1/dev

Danach klappt es dann auch mit SCP.

Kategorien
Linux Proxmox

Proxy in einem (LXC)-Container setzen


Da ein paar Server in meinem Netz nicht direkt, sondern nur via Reverse-Proxy erreichbar sind haben diese auch keinen direkten Internetzugang. Sie müssen sich also auch Updates etc. via Proxy holen.

Dafür setze ich zum einen APT-Cacher-NG, und zum Anderen einen Squid ein. Apt könnte natürlich auch über den Squid laufen, aber da ja mehrere Server laufen muss ich nicht alle Updates zig mal herunterladen.

Den Proxy für APT setzt man einfach indem man eine Datei erstellt

$ nano /etc/apt/apt.conf.d/00aptproxy

Hier wird nun der Proxy eingetragen

Acquire::http::Proxy "http://aptproxy.domain.de:3142“;
Acquire::https::Proxy "https://aptproxy.domain.de:3142“;

Damit wget z.B. aber auch via Proxy raus geht kann man den „normalen“ Proxy beispielsweise ins Environment setzen. Dies geschieht durch

$ nano /etc/enviroment

und eintragen der Werte

$ nano /etc/environment
http_proxy=http://proxy.domain.de:3128
https_proxy=https://proxy.domain.de:3128
ftp_proxy=ftp://proxy.domain.de
no_proxy=localhost,intranet.domain.de
soap_use_proxy=on

Nun hatte ich das Problem das ein Container das so gesetzte Environment nicht übernimmt, sondern offensichtlich das des Host auf dem er läuft. Da sich Host und Gast aber in unterschiedlichen Netzen befinden kann der Proxy nicht aufgelöst werden.

Deswegen setzt man den Proxy für wget in dessen Config-Datei

$ nano /etc/wgetrc
https_proxy = https://proxy.domain.de:3128/
http_proxy = http://proxy.domain.de:3128/
ftp_proxy = http://proxy.domain.de:3128/