Friday, August 9, 2019

NAS mit Samba: Verzeichnis im Netzwerk freigeben

Ein Verzeichnis mit dem Windows AD und SMB/CIFS Dateiserver für UNIX über das Netzwerk freigeben und Benutzern sowie Gästen Lese- und Schreibzugriff gewähren.

Dieses Setup für ein NAS mit Samba erlaubt neben Benutzern, auch Gästen Lese- und Schreibzugriff. So kann jeder auf das Netzlaufwerk zugreifen! Durch das Stiky-Bit ist jedoch sichergestellt, das niemand die Dateien eines anderen löschen oder überschreiben kann.

Verzeichnis anlegen und Samba konfigurieren

Das Verzeichnis für das NAS legt man am besten unterhalb von /srv an. Dieses Verzeichnis enthält betriebsspezifische Daten, die vom System bereitgestellt werden und folgt dem FHS.

mkdir -p /srv/nas     # neues Verzeichnis erstellen
chmod a+rwXt /srv/nas # Dateirechte und StickyBit setzen

Im Verzeichnis /srv/nas können nun alle Benutzer unter ihrer UID Dateien erstellen, ändern und löschen. Die Dateien anderer Benutzer können nur geöffnet, nicht aber geändert oder gelöscht werden. Will man dies erlauben, muss man mit Benutzergruppen (GID) arbeiten.

Um das Verzeichnis freizugeben, muss die Konfiguration smb.conf(5) um folgende Sektion erweitert werden:

cat <<! >>/etc/samba/smb.conf
[NAS]
	comment=NAS
	path=/srv/nas
	public = yes
	writeable = yes
	guest ok = yes
	guest account = nobody
	create mask = 0665
	directory mask = 0775
!

Mit testparm(1) kann die Konfigurationsdatei auf Syntaktische Korrektheit überprüft werden.

testparm

Benutzern den Zugriff erlauben

Damit Benutzer unter ihrer ID Dateien im NAS und auch im Benutzerverzeichnis ablegen können, muss für jeden ein Passwort in der Benutzerdatenbank von Samba einrichten sein. Ohne Passwort können Benutzer weder lesend noch schreibend auf ihr Benutzerverzeichnis zugreifen. Linux und Samba verwenden unterschiedliche Passwörter.

Zum Erstellen des Passworts in der Samba-Benutzerdatenbank smbpasswd(5) kann entweder pdbedit(8) oder smbpasswd(8) verwendet werden.

Hinweis: Will man $HOME nicht freigeben, empfiehlt es sich die Sektion [homes] in der smb.conf(5) auszukommentieren.

Passwort anlegen

Das Passwort für einen Benutzer wird mit

smbpasswd -a <username>

angelegt.

Wird *smbpasswd(8)* ohne Parameter aufgerufen, kann das Passwort des aktuellen Benutzers geändert werden.

Das anlegen des Passwords kann für neue Benutzerkonten auch während der Einrichtung passieren. Dazu legt man die Datei /usr/local/sbin/adduser.local an. Wenn die Datei existiert, wird sie nach der Einrichtung des Benutzerkontos ausgeführt, um lokale Einstellungen vorzunehmen.

cat <<! >/usr/local/sbin/adduser.local
#!/bin/sh
# An adduser.local werden die folgenden Argumente übergeben:
# Benutzername, UID, GID und Home-Verzeichnis.

user="$1"
uid="$2"
gid="$3"
home="$4"

smbpasswd -a "$user" # add new users to the local smbpasswd(5) file

# Make sure that the script will "exit 0"
exit 0
!
chmod -x /usr/local/sbin/adduser.local

Passwort entfernen

Um ein Benutzerkonto beim entfernen auch aus der Samba-Benutzerdatenbank auszutragen, kann die */usr/local/sbin/deluser.local* analog zu *adduser.local* angelegt werden.

cat <<! >/usr/local/sbin/deluser.local 
#!/bin/sh
# An deluser.local werden die folgenden Argumente übergeben:
# Benutzername, UID, GID und Home-Verzeichnis.

user="$1"
uid="$2"
gid="$3"
home="$4"

smbpasswd -x "$user" # delete user from the local smbpasswd(5) file

# Make sure that the script will "exit 0"
exit 0
!
chmod -x /usr/local/sbin/deluser.local

Zur Verwaltung der Samba-Benutzerdatenbank bietet sich *pdbedit(8)* an. Damit kann u.a. abgefragt werden, für welche Benutzer in der Samba-Benutzerdatenbank ein Passwort vergeben wurde.

pdbedit -L

Netzlaufwerke einbinden

Unter Linux (GNOME), Microsoft Windows usw. sollte das NAS als Netzwerkfreigabe gefunden werden.

Für einen Datentransfer über Samba, wird eine Pfadangabe bzw. URI der folgenden Form benutzt:

smb://{hostname|ip}/NAS

Mailingliste abonnieren

Um Ankündigungen, wie z.B. Benachrichtigungen über neue Versionen und Bugs zu erfahren, sollte man zusätzlich die Samba Mailingliste abonnieren. Die Adresse ist unter https://lists.samba.org zu finden und es sollte mindestens samba-announce abonniert werden.

NAS mit SFTP

Ist SSH bzw. das Paket openssh-sftp-server installiert, kann auch via SSH auf das Benutzerverzeichnis zugegriffen werden. Und viele Dateimanager unterstützen das SSH-Protokoll SFTP.

Für einen Datentransfer über SSH an einem entfernten Rechner, benutzt man eine URI der Form:

sftp://[username@]{hostname|IP}[:port]/path/to/share

Alternativ können statt des Authority-Teil, auch die Aliasnamen aus ssh_config(5) verwendet werden.

Tuesday, March 26, 2019

Webentwicklung/Webdesign: .htaccess Weiterleitung

Alle Seiten nach example.net weiterleiten:

<ifmodule mod_rewrite.c>
RewriteEngine on
RewriteRule ^.*$ http://example.net/%{REQUEST_URI} [R=301,L]
</ifmodule>

Alle Seiten nach HTTPS umleiten:

# Redirect all requests to HTTPS
<ifmodule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</ifmodule>

Eigene Fehlerseite 404 Dokument not Found:

ErrorDocument 404 http://www.onlinewahn.de/ende.htm

Alternativ können auch alle Seiten nach /index.html umgeleitet werden.

Als Nachtrag wurde in den Kommentaren noch auf den Text When not to use mod_rewrite hingewiesen. Danke!

Saturday, December 9, 2017

Portscan mit Nmap: Hosts/Rechner und offene Ports im Netzwerk finden

Um sich einen Überblick über das Netzwerk zu verschaffen, zu dem man verbunden ist, kann ein Portscan auf das Netzwerk durchführt werden, um verbundene Hosts und angebotene Services/Dienste bzw. offene Ports zu finden. Dazu werden mit dem UNIX-Kommando ip(8), der NetworkNamanger Befehlszeilenschnittstelle nmcli(1) oder Perl die IP-Adressen aller Sub-Netze zu denen man verbunden ist ermittelt und dann mit dem Netzwerk-Analysewerkzeug und Sicherheits-/Portscanner Nmap ein Scan auf diese durchgeführt.

IP-Adressen und verbundenen Netze anzeigen

Unter Linux/GNOME kann der NetworkManager bzw. nmcli(1) verwenden werden,
um sich die Netze anzuzeigen, zu denen man verbunden ist.

export LC_ALL=C # Damit der reguläre Ausdruck unten korrekt ist
lsip () {
>	nmcli -f uuid,device connection show --active 
>	| awk 'NR>1 && $2!="lo" {print $1}' 
>	| xargs nmcli -t connection show 
>	| sed -n -E "/^IP4.ADDRESS[[0-9]+]:/{s///;p}"
> }

Und dann mit z.B. nmap(1) einen Standard Nmap scan ausführen, um sich alle Hosts anzuzeigen, die erreichbar sind (Ping), sowie deren offene Ports.

lsip | xargs nmap -A

Vor einem Ping scan (oder auch Ping sweep) verstecken

Nmap sendet vor dem Portscan einen Ping, um die Erreichbarkeit einer IP-Adresse festzustellen und überspringt Adressen, die darauf keine Antwort senden (Pong).

Damit keine Antwort gesendet wird, müssen folgende Kernel-Parameter gesetzt werden:

cat <<! >>/etc/sysctl.d/00-local.conf
> net.ipv4.icmp_echo_ignore_all=1
> net.ipv4.icmp_echo_ignore_broadcasts=1
> !
sysctl -p # Die sysctl-Einstellungen neuladen

Um den Ping scan zu deaktivieren und alle IP-Adressen zu scannen, nutzt man den Parameter -Pn: nmap -Pn -A <target…>.

Im Localnet können Geräte auch via arp-scan(1) gefunden werden.

Alternativen für die Funktion lsip

In den Kommentaren, wurden noch Alternativen für die Funktion lsip aufgezeigt.

Von mir adaptiert, für Leute die NetworkManager nicht einsetzen:

ip -f inet -br a | awk '$1!="lo" && $2!="DOWN" {print $NF}'

Beide obigen Methoden haben Nachteile: Das ip(8) z.B. bei Point-to-Point-Verbindungen und dem Filtern des Output mit awk/sed usw. und das nmcli(1) bei nicht mit dem NetworkManager verwalteten Interfaces.

Wer das als Gefrickel ansieht, kann sich auch ein Perl-Skript schreiben, das sauber alle Netzwerke auflistet. Die dafür nötigen Module sind über die Paketverwaltung in den Paketen libio-interface-perl und libnet-netmask-perl vorhanden:

#!/usr/bin/env perl

use IO::Interface::Simple;
use Net::Netmask;

for ( IO::Interface::Simple->interfaces ) {

    next if ( !$_->is_running );
    next if ( $_->is_loopback );

    $block = Net::Netmask->new( $_->address, $_->netmask );

    print "$block\n";
}

Um die IP-Adresse statt des Netzes auszugeben, schreib man folgendes Kommando: printf "%s/%s", $_->address, $block->bits;

Zenmap

Zuletzt noch ein Beispiel für den Aufruf von zenmap(1), das grafische Nmap frontend.

zenmap --nmap nmap -A `lsip | sort -u`

Saturday, April 22, 2017

Debian 9 (Stretch): Oracle VM VirtualBox: Gasterweiterungen installieren

Hinweis: Dieser Blogeintrag ist obsolet, denn mittlerweile ist VirtualBox als Backport verfügbar: https://packages.debian.org/stretch-backports/virtualbox

In Debian 9 (Stretch) wird VirtualBox nicht verfügbar sein. Siehe: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=794466.

(Angemerkt sei an dieser Stelle noch, dass in Debian 8 (Jessie) die Unterstützung für VirtualBox schon länger beendet worden ist. Oracle den Support eingestellt und VirtualBox 4 nun den Status EOL hat. Für Jessie befindet sich allerdings VirtualBox 5 in den Backports. Siehe auch: https://www.debian.org/security/2016/dsa-3699 und https://packages.debian.org/jessie-backports/virtualbox.)

Um VirtualBox in Stretch weiter nutzen zu können, muss es direkt von Oracle installiert werden. Es gibt dazu bisweilen zwei Anleitungen: Eine im wiki.debian.org und eine auf www.virtualbox.org. (Alternativ kann man sich, theoretisch, natürlich auch einen Backport aus den Sid-Quellen bauen.)

Ich will diese Anleitungen jetzt nicht im Detail wiederholen und werde nur kurz darauf eingehen, um hier festzuhalten, wie die VirtualBox Gasterweiterungen installiert und aktualisiert werden.

Gasterweiterungen installieren

Die Gasterweiterungen sind Gerätetreiber und Systemanwendungen, die im Gastsystem installiert werden und dieses für bessere Leistung und Benutzerfreundlichkeit optimieren.
Sie werden als ISO-Datei unter dem Name VBoxGuestAdditions.iso bereitgestellt und sind als Download unter http://download.virtualbox.org/virtualbox/ zu finden.

Um die Gasterweiterungen zu installieren, muss die ISO-Datei im Gastsystem als virtuelle CD-ROM eingebunden sein und dort dann die Installation wie folgt aufgerufen werden:

mount /media/cdrom # ggf. beim Hochfahren schon automatisch eingehängt
sh /media/cdrom/VBoxLinuxAdditions.run install

PS: Die linux-headers bzw. kernel-headers müssen installiert sein!

Gasterweiterungen aktualisieren

Die Gasterweiterungen können einfach aktualisiert werden, indem der Installationsvorgang erneut mit einer aktualisierten Version der ISO-Datei durchlaufen wird. Dies ersetzt dann die Gerätetreiber und Systemanwendungen, mit aktualisierten Versionen. Es sollte ein Neustart des Gastsystems nach der Aktualisierung erfolgen.

Gasterweiterungen de-installieren/entfernen

Um die Gasterweiterungen zu de-installieren, ruft man folgendes Kommando auf:

sh /media/cdrom/VBoxLinuxAdditions.run uninstall

Mailingliste abonnieren

Um Ankündigungen, wie z. B. Benachrichtigungen über neue Versionen und Bugs zu erfahren, sollte man zusätzlich die VirtualBox Mailingliste abonnieren. Die Adresse ist unter https://www.virtualbox.org/mailman/listinfo/vbox-announce bzw. https://www.virtualbox.org/mailman/listinfo zu finden.

Thursday, June 30, 2016

Webentwicklung/Webdesign; HTML: Telefonnummern verlinken

Ganz ähnlich wie E-Mail-Adressen mit dem Schema (scheme) mailto angegebenen werden können und der Link i.d.R. den Mail-Client öffnet, um die E-Mail zu verfassen. Können auch Telefonnummern verlinkt werden (siehe RFC 3966).

Dazu muss das Schema tel genutzt werden. Beispiel:

Telefon: <a href="tel:+491631737743">+491631737743</a>

Am Computer weniger sinnvoll/nützlich, trumpft so ein Link am Smartphone allerdings richtig auf!