Linux - Programm abschotten

Hallo!

Vorweg - es handelt sich hier um ein Crossposting aus dem debianforum.
debianforum.de • Thema anzeigen - Programm abschotten

Hallo! Ich bastel schon ein paar jährchen mit Linux und hab mir jetzt einen Rootserver gemietet, da ich so meinen kleinen Minecraft Server günstiger betreiben kann.

Und da kommt auch schon das Problem: (Verwende Debian Squeeze 6.0.7) Der Server ist zwar mMn ganz gut gegen Angriffe geschützt, Logs werden täglich gelesen, unnötige Dienste sind deaktiviert usw. Allerdings ist die Serversoftware für Minecraft in Java geschrieben, und da habe ich ernsthaft Sicherheitsbedenken. Deshalb möchte ich diese Softwäre vom Rest des Systems ein wenig "abschotten". Sie läuft schon unter einem eigenen Benutzer, wie könnte ich weiter vorgehen?

Ansatz 1: Dem Benutzer eine limitierte Shell zuweisen und den zugriff auf andere Shells unterbinden. Allerdings: Wie sieht es aus, wenn tatsächlich über die Anwendung eingedrungen wird? Landet der Angreifer dann auch in der Standartshell des Benutzers?

Ansatz 2: Ein chroot-jail erstellen. Würde ich persönlich ungerne tun, da es ein größerer Aufwand ist. Alles muss aktuell gehalten werden und so. Würde deshalb ganz gern den ersten Ansatz verfolgen. Ist das so möglich? Lg Cayton

So. Meine Frage nun, wäre nun das chroot jail wirklich notwendig? Wie leicht ist es daraus zu entkommen? Oder reicht tatsächlich eine restricted Shell, kein Login für root (* in /etc/shadow) und eine vernünftige Konfiguration von sudo?

Dass es keine 100% Sicherheit geben kann ist mir klar, aber ich tue mein möglichstes. Ich denke mein Server ist überdurchschnittlich abgesichert, ich will aber über mögliche Einbruchszenarien bescheid wissen und es dem Cracker ziemlich schwer machen.


Gruß
Cayton
 
Restricted shells sind muell und muehsam zu pflegen.

Am besten du gibts dem User erst gar keine login-shell, somit faellt remote login erstmal flach. Dann gibts du ihm nur normale Userrechte (kommt natuerlich drauf an, was die JRE so braucht).

Jailen wird vermutlich krachen, aber ich wuerds mal probieren. Ansonsten anstaendiges root passwort und ggf. port knocking oder sowas.
 
Danke an euch :D

@mime: Natürlich ist der root-login per ssh verboten und es werden Keyfiles verwendet.
@bitmuncher: Das klingt interessant, werd ich mir genauer ansehen :D
 
Soo der Container steht soweit. Finde die Lösung so ganz cool :D Danke, bitmuncher.

Allerdings noch eine Frage: Ich habe nur eine IPv4 Adresse in meinem Serverpaket. Allerdings habe ich ein /64 IPv6 Subnetz. Kann ich dem Container eine v6-Adresse zuweisen und die nach aussen über eine v4-Adresse routen? Wenn ja, wie?
 
Du kannst dem Container einfach eine LAN-IP geben und diese mittels iptables durch's Host-System routen. Also ein simples Port-Forwarding und ein virtuelles Netzwerk-Interface für's Host, das auch ein LAN-IP bekommt.
 
Danke bitmuncher.

Nur bekomme ich mittlerweile schon Kopfschmerzen, weil ichs ums verrecken nicht hinbekomme die Netzwerkverbindung durchs System zu routen.

Außerdem hab ich grade gelesen, dass die Unterstützung für OpenVZ in Debian 7 raus fällt. Sollte ich dann überhaupt auf diese Möglichkeit setzen?

Gruß,
Cayton
 
Das fällt raus, weil die notwendigen Tools und Kernel für Debian in Zukunft direkt von OpenVZ angeboten werden. Wheezy-Kernel findest du z.B. unter http://download.openvz.org/debian/

Das Routing ist relativ simpel. Zuerst erstellst du im Host-System ein virtuelles Interface mit IP und Netmask passend zur VM. Dann erlaubst du Forwarding im Host-System:

Code:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
iptables -t nat -A POSTROUTING -o <netzwerk-device-zum-internet> -j MASQUERADE

Und zu guter Letzt setzt du das Port-Forwarding:

Code:
# Port freigeben, falls noch nicht geschehen
iptables -A INPUT -m state --state NEW -p <tcp/udp> --dport <portnummer> -j ACCEPT
# forwarding einrichten
iptables -t nat -A PREROUTING -i <netzwerk-device-zum-internet> -p <tcp/udp> --dport <portnummer> -j DNAT --to-destination <ip-des-gast-systems>

Die Werte in den spitzen Klammern müssen natürlich entsprechend ersetzt werden.
 
Geile Sache, es läuft :D Danke bitmuncher. Endlich einer, der einem armen Anfänger nicht nur ein RTFM vor den Kopf knallt.

Wie bekomme ich nun Daten in den Container? Für wget wäre ein Webserver auf dem Host nötig, für FTP ein FTP Server. Für scp und dergleichen ssh. Geht es ohne weitere Software?
 
Bei OpenVZ kannst du auch Daten direkt in das laufende System kopieren, indem du sie einfach in den Ordner packst, in dem das entpackte System für deine VID liegt.
 
Klasse, dieses OpenVZ :D Wird auf jeden Fall weiter genutzt.
Danke nochmal, bitmuncher.

Muss mich nur nochmal mit Netzwerken auseinandersetzen. Das ist mir alles immer noch so ein bisschen schleierhaft, so mit iptables und so.

RAM und CPU zuweisen sollte ich jetzt hinbekommen.

Gruß,
Cayton
 
Zurück
Oben