Dateitransfer im heterogenen Netzwerk

Via HTTP / Webserver

Linux kann dank der meist vorinstallierten Python-Distribution ganz einfach als Webserver agieren. Einen höheren, nicht privilegierten Port (hier: 8000) kann sogar ein einfacher Benutzer öffnen.

In einer Konsole bringt er zuerst mit ip -4 addr seine IP-Adresse in Erfahrung, welche die Clients später für den Zugriff benötigen.

Dann wechselt er in den freizugebenden Ordner, z.B. ‚Downloads‘. Nun kann er bereits den HTTP-Server starten:

user@linux:~$ cd ~/Downloads
user@linux:~$ python -m http.server
Serving HTTP on 0.0.0.0 port 8000 ...

Beendet wird das Servieren später mit der Tastenkombination STRG + C.

Unter Python 2 lautete die Kommandozeile etwas anders: python -m SimpleHTTPServer

Die Clients können auf die freigegebenen Dateien dann einzeln via üblichen Webbrowser (Internet Explorer, Firefox, Chromium) zugreifen, z.B. so:

http://10.44.30.220:8000

Via FTP / File Transfer

Der Linux Secure Shell Server ‚sshd‘ beherrscht u.a. grundlegendes FTP. Je nach Distribution muss er nachinstalliert werden. Ob er schon läuft, ermittelt man mit:

user@linux:~$ ps -C sshd
PID TTY          TIME CMD
636 ?        00:00:00 sshd
16615 ?        00:00:00 sshd
16617 ?        00:00:00 sshd
user@linux:~$

Ist dies nicht der Fall, kann er unter Debian/Ubuntu/Mint ganz einfach mittels apt install openssh-server nachinstalliert werden. Dazu benötigt man natürlich Superuser-Rechte.

Der Zugriff kann dann von Windows aus z.B. mit ‚winscp.exe‘ erfolgen, herunterzuladen über https://winscp.net/eng/download.php.

Die Konfiguration einer Verbindung kann dann z.B. so aussehen:

  • SFTP

  • Hostname: 10.44.30.220

  • Portnummer: 22

  • Benutzername: tux

  • Passwort: ***

Wenn Windows nicht als Client, sondern als Server agieren soll, bieten sich einfache, portable Apps an. Siehe dazu auch:

Via SMB / Windows

Wenn aus Komfortgründen die Windows-typische Freigabetechnologie auf Basis des Server Message Block Protocols benutzt werden soll, kann Linux relativ einfach als Server fungieren. Die Installation ist auf debianartigen Systemen schnell erledigt:

root@linux:~# apt-get install samba

Im Folgenden betrachten wir drei Varianten, wie dieser Server mit minimalen Aufwand konfiguriert werden kann:

  • Read only Homes (es muss nur ein Passwort vergeben werden)

  • Neues Share (es wird die Konfiguration erweitert)

  • Neue Config (wir starten mit einer Allround-Konfiguration)

Read only Homes

In dieser wahrscheinlich einfachsten Variante kann der Zugriff auf die Unix-Heimatverzeichnisse z.B. unter Debian leider nur read-only erfolgen. Voraussetzung ist lediglich, dass einem vorhandenen Unix-Account ein Samba-Account samt Passwort zugeordnet wird. Dies erledigen wir als Superuser für ‚tux‘ ganz einfach mit smbpasswd -a tux (mit pdbedit -L lässt man sich diese Konten auflisten):

root@linux:~# pdbedit -L
root@linux:~#
root@linux:~# grep ^tux /etc/passwd
tux:x:1000:1000::/home/tux:/bin/bash
root@linux:~#
root@linux:~# smbpasswd -a tux
New SMB password:
Retype new SMB password:
Added user tux.
root@linux:~#
root@linux:~# pdbedit -L
tux:1000:
root@linux:~#

Der Zugriff von Windows aus gestaltet sich dann z.B. so (Als Share-Name wird dabei der Benutzername verwendet):

WIN + R:  \\10.44.30.220\tux

HINWEIS: Damit ist wie gesagt nur lesender Zugriff möglich. Wer es sich aber zutraut, braucht lediglich in der Datei /etc/samba/smb.conf unterhalb von [homes] den Schalter read only = yes auf ‚no‘ zu setzen. Falls man sich von Windows aus bereits read-only verbunden hatte, kann die Sitzung dort mit WIN + R:  cmd.exe und der Zeile net use /delete * sauber beendet werden.

Neues Share

In dieser zweiten Variante wird eine neue Freigabe für Jedermann hinzugefügt. Voraussetzung für anonymen Zugriff ist allerdings, dass der Gast-Account freigeschaltet ist. Dies überprüfen wir erst einmal:

root@linux:~# testparm -s -v | grep 'map to guest'
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Processing section "[free4all]"
Loaded services file OK.
Server role: ROLE_STANDALONE

    map to guest = Bad User
root@linux:~#

Wir sehen, dass er hier aktiviert ist („Bad User“). Taucht aber map to guest = Never auf, ist er deaktiviert.

In diesem Falle können wir loslegen und einen kleinen Abschnitt an die Konfigurationsdatei anhängen, wobei man anstelle des etwas sperrigen Here-Documents - der eigentliche Text steht zwischen den beiden Marken namens „EOF“ - natürlich auch den Lieblingseditor dazu nehmen kann:

root@linux:~# cp /etc/samba/smb.conf /etc/samba/smb.conf_orig
root@linux:~# cat >> /etc/samba/smb.conf <<EOF
[free4all]
    path = /srv/free
    public = yes
    writeable = yes
    force group = nogroup
    create mask = 770
    directory mask = 770
EOF
root@linux:~#
root@linux:~# mkdir -m 777 /srv/free
root@linux:~#

Der clientseitige Zugriff von Windows aus gestaltet sich dann beispielsweise so:

WIN + R:  \\10.44.30.220

Neue Config

Als dritte Variante binden wir eine eigene, neue Konfigurationsdatei ein, die mehr Übersicht bringt und auch gleich die Heimatverzeichisse der Linux-User schreibfähig freigibt.

Dazu wechseln wir ins Verzeichnis ‚/etc/samba‘, benennen die ‚smb.conf‘ um und starten mit einer eingenen, neuen Konfigurationsdatei, wobei diese Datei wieder mit Hilfe eines Here-Documents erstellt wird:

root@linux:~# cd /etc/samba/
root@linux:/etc/samba#
root@linux:/etc/samba# mv smb.conf smb.conf.orig
root@linux:/etc/samba#
root@linux:/etc/samba# cat > smb.conf <<EOF
[global]
   workgroup = myLAN
   map to guest = Bad User

[homes]
   comment = Home Directories
   valid users = %S
   create mask = 0700
   directory mask = 0700
   browseable = No
   writeable = yes

[free4all]
   path = /srv/free
   public = yes
   writeable = yes
   force group = nogroup
   create mask = 770
   directory mask = 770
EOF
root@linux:/etc/samba#
root@linux:/etc/samba# mkdir -m 777 /srv/free
root@linux:/etc/samba#

Da wir hier eine ganz neue Konfigurationsdatei implementiert haben, starten wir die beiden Daemons neu:

root@linux:/etc/samba# systemctl restart nmbd
root@linux:/etc/samba# systemctl restart smbd

Nun kann der Zugriff wahlweise aus folgende Art geschehen:

  1. Mit Hilfe des Unix-Benutzeraccounts, wofür wir noch die Kommandozeile smbpasswd -a <BENUTZER> ausführen müssen:

    WIN + R:  \\Sambaserver\Benutzername
    
  2. Mittels dem Share-Namen „free4all“, wobei hier auch anonyme Benutzer schreiben können:

    WIN + R:  \\Sambaserver\free4all
    

Andere Clients als Windows müssen nicht außen vor bleiben: unter Linux unterstützen viele Dateimanager das SMB-Protokoll nativ, unter Android ist der Dateimanager ‚Ghost Commander‘ mittels Samba Plugin dazu in der Lage.

Via Netcat

Man nimmt dazu einen freien Port, der über 1024 liegt, damit kann dies auch ein Benutzer tun. HINWEIS: OpenSUSE setzt die von OpenBSD stammende netcat-Variante ein, daher ist dort ‚-p‘ wegzulassen, also einfach ‚nc -l 1234 > file‘ zu schreiben.

  1. Der Server geht auf Empfang und wartet auf eingehende Daten (listening-Modus, hier auf Debian Linux):

user@linux1:~# nc -l -p 1234 > /tmp/hosts-from-remote.txt
  1. Der Client sendet eine Datei:

user@linux2:~# cat /etc/hosts | nc -w 0 10.44.30.220 1234

Nachdem die Datei übetragen wurde, beendet sich auf beiden Seiten die Sitzung. Auf dem Server kann nun die empfangene Datei mittels cat /tmp/hosts-from-remote.txt betrachtet werden.

Leider beherrscht Netcat keine Verschlüsselung, bei Bedarf sollte man daher auf Cryptcat ausweichen.

Via Peer2Peer / Sync

Insbesondere wenn mobile Geräte mit eingebunden werden sollen, machen sich P2P- bzw. einfache Cloud-Lösungen gut. Siehe hierzu folgende Auswahl: