Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Sonntag
18
Mai 2014
Klaus Moser
Klaus Moser

Samba installieren und einrichten

Samba stellt das SMB Protokoll für die Freigabe von Laufwerken und Verzeichnissen insbesondere für Windows Umgebungen zur Verfügung. Aber auch Linux kann auf diese Freigaben zugreifen. Für meine Standard-Freigaben werde ich Samba nutzen.

Installation

Einrichtet ist samba schnell. Um die Pakete zu installieren folgenden Befehl ausführen:

sudo apt-get install samba

Konfiguration

Jetzt folgt noch die Konfiguration, welche in der Datei /etc/samba/smb.conf vorgenommen wird. Für eine ausführliche Beschreibung einfach mal den folgenden Befehl ausführen:

man smb.conf

Die Konfiguration erfolgt über das Editieren einer Text-Datei. Wer lieber eine grafische Oberfläche zur Konfiguration mag, der kann  z.B. system-config-samba benutzen.

 sudo system-config-samba 

Grundsätzlich sind einige wenige Einstellungen zu tätigen, damit die Freigabe von Verzeichnissen funktioniert.

Grundeinstellungen

Wichtig ist z.B. die Arbeitsgruppe festzulegen innerhalb der der Server zu sehen sein soll. Diese muss bei allen Rechnern in der Arbeitsgruppe die Selbe sein.

workgroup = MYHOME

Verzeichnis freigeben

Um ein Verzeichnis freizugeben reicht folgender Eintrag:

[public]
   comment = Daten
   path = /media/public
   browseable = yes
   read only = no
   guest ok = no

Rechtevergabe

Für die Berechtigungen eines Samba Shares stehen folgende Optionen zur Verfügung:

create mask = 0660
force create mode = 0660
security mask = 000
force security mode = 660
directory mask = 0770
force directory mode = 0770
directory security mask = 000
force directory security mode = 0770
force group = private
force user = maxmuster

Das Zusammenspiel der einzelnen Optionen ist nicht ganz trivial. Verstanden habe ich das noch nicht so ganz. Werde den Beitrag aktualisieren, wenn ich es geschnallt habe.

Zum prüfen der Konfiguration führt man folgenden Befehl aus:

testparm

Falls testparm den folgenden Fehler meldet:

rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)

Kann man das Limit gleichzeitig geöffneter Dateien mit

ulimit -n 16384

erhöhen. Um sich das aktuelle Limit anzeigen zu lassen führt man folgenden Befehl aus:

ulimit -n

Um dieses Limit dauerhaft einzurichten muss die Datei /etc/security/limits.conf um eine weitere Zeile erweitert werden.

nano /etc/security/limits.conf

Folgende zusätzliche Zeile einfügen:

* - nofile 16384

Wie sich die Zeile zusammensetzt erfährt man mit

man limits.conf

Benutzerauthentifikation

Solange wir für die Authentifikation kein LDAP verwenden, haben wir bisher noch keinen Zugriff auf die freigegebenen Verzeichnisse. Da Samba seine Benutzer separat verwaltet, müssen wir noch die entsprechenden Benutzer anlegen. Das geht mit

sudo smbpasswd -a <username>

Oder

sudo pdbedit -a -u myusername

Das muss für jeden Benutzer gemacht werden.

Um sich alle Benutzer anzeigen zu lassen, kann man folgenden Befehl verwenden:

sudo pdbedit -L -v

Automatische Benutzersynchronisierung

Alternativ kann man auch das Paket  libpam-smbpass installieren, welches die Benutzer aus pam und samba synchronisiert.

In Ubuntu 14.04 verursacht dieses Paket aktuell leider noch einen Fehler

no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory

Für die Synchronisation muss in der Datei /etc/pam.d/samba folgende Zeile angefügt werden:

@include common-password

In der Datei /etc/samba/smb.conf muss noch folgendes stehen:

# If you are using encrypted passwords, Samba will need to know what
# password database type you are using.
passdb backend = tdbsam

obey pam restrictions = yes

# This boolean parameter controls whether Samba attempts to sync
# the Unix password with the SMB password when the encrypted SMB
# password in the passdb is changed.
unix password sync = yes

# For Unix password sync to work on a Debian GNU/Linux system,
# the following parameters must be set (thanks to Ian Kahan
# <kahan@informatik.tu-muenchen.de> for sending the correct chat
# script for the passwd program # in Debian Sarge).
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .

# This boolean controls whether PAM will be used for password changes
# when requested by an SMB client instead of the program listed in
# 'passwd program'. The default is 'no'.
pam password change = yes

Netzwerk-Papierkorb

Ein Feature, das mich schon oft vor Datenverlust bewahrt hat ist der Netzwerk-Papierkorb, der in Samba ab Version 3 zur Verfügung steht. Dabei werden beim Löschen von Dateien diese nicht direkt endgültig gelöscht, sondern in einen konfigurierbaren Ordner verschoben.

Um den Netzwerk-Papierkorb zu aktivieren muss man die [global] Sektion um folgende Einträge erweitern:

# Papierkorb einrichten
vfs object = recycle

# Verzeichnisrechte
recycle:directory_mode = 0770

# Pfad zum Papierkorb
recycle:repository = /media/data/Papierkorb

# Pfadangaben beibehalten
recycle:keeptree = yes

# Zeitstempel beim Verschieben setzen
recycle:touch = yes

# Gleichnamige Dateien nicht überschreiben
recycle:versions = yes

# Keine Größenbeschränkung
recycle:maxsize = 0'

# Sofort zu löschende Dateien
recycle:exclude = *.tmp,*.temp,~$*,*.$$$,Thumbs.db

# Auszuschließende Verzeichnisse
#recycle:exclude_dir = /

Löscht man jetzt eine Datei, wird diese nach /media/data/Papierkorb verschoben. Gibt man diesen noch als Share frei, hat man einen wunderbaren Mülleiner auf dem Samba Server.

Damit die Dateien im Papierkorb auch für die entsprechenden Papierkorb Benutzer verwaltbar sind legt man eine Gruppe recycler an und weist dieser die Benutzer zu die den Mülleimer pflegen dürfen.

Jetzt setzt man die Verzeichnisrechte so, dass neue Dateien und Verzeichnisse im Papierkorbverzeichnis automatisch die recycler Gruppe bekommen und somit alle Benutzer der Gruppe recycler Zugriff auf die Dateien im Papierkorb bekommen.

sudo chmod g+s /media/data/Papierkorb

Das geht natürlich nur für Umgebungen, mit wenigen Benutzer. Bei komplexen Umgebungen würde man eine Konfiguration bevorzugen die allen Benutzern gerecht wir und deren Rechte schützt. Aber für zu Hause ist das gut so.

Wenn man den Papierkorb als Share freigibt, muss man auf dem Share den Papierkorb deaktivieren. Dazu einfach folgende Option an die Konfiguration des Shares "Papierkorb" anfügen:

[Papierkorb]
...
# Papierkorb deaktivieren
vfs objects =

Damit kann ich auf dem Share "Papierkorb" Dateien und Verzeichnisse ganz normal löschen.

Alternativ kann man auch einen relativen Pfad als Papierkorb angeben. Dann hat man für jedes Share einen separaten Papierkorb:

recycle:repository = .recycler

Man könnte auch einen Papierkorb pro Benutzer einrichten:

recycle:repository = /media/data/Papierkorb/%U

Egal welche Variante  man bevorzugt, der Papierkorb lohnt sich auf jeden Fall, da eine Datei schnell mal aus Versehen gelöscht ist. Und die Datei von einem Backupmedium wiederherzustellen dauert oft länger als diese schnell aus dem Papierkorb zu fischen.

Änderungen anwenden

Um die Einstellungen anzuwenden, müssen die Dienste von samba neu gestartet werden.

sudo service smbd restart
sudo service nbmd restart
Samstag
17
Mai 2014
Klaus Moser
Klaus Moser

Ubuntu - Fixe IP-Adresse

Es gibt Rechner deren IP-Adresse man nicht dynamisch zuweisen lassen kann. In meinem Fall ist das die neue NAS auf die einige Port-Weiterleitungen erfolgen sollen.

In meiner Fritzbox habe ich leider keine Möglichkeit gefunden dem DHCP Server zu sagen, dass er einer bestimmten MAC-Adresse immer eine bestimmte IP-Adresse zuweisen soll. Daher muss ich die IP-Adresse direkt auf der NAS festzurren.

Die Einstellungen für die Netzwerkinterfaces sind in der Datei /etc/network/interfaces zu finden.

Standardmäßig wird das Loopback Interface und die primäre Netzwerkkarte definiert sein. die primäre Netzwerkkarte wird so konfiguriert sein, dass sie ihre IP-Adresse via DHCP bezieht:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

Möchte man eth0 jetzt manuell konfigurieren, kommentiert man die Zeile iface eth0 ... aus und fügt zusätzlich folgendes ein:

# Beim Bootvorgang automatisch starten
iface eth0 inet static
  address 192.168.0.123
  netmask 255.255.255.0
  gateway 192.168.0.1
  dns-nameservers 192.168.0.1 192.168.0.2
  dns-search meinedomain.int

Jetzt wird eth0 mit der Ip-Adresse 192.168.0.123 und der Netzmaske 255.255.255.0 konfiguriert. Als Gateway wird die192.168.0.1 verwendet und die DNS Server sind die 192.168.0.1 und 192.168.0.2. Die Suchdomain ist meinedomain.int.

Die dns-* Einstellungen hat man früher manuell in die Datei /etc/resolv.conf eintragen müssen. Seit dem es das Paket resolvconf gibt, kann/muss man das über die Schnittstellenkonfiguration mit angeben.

Sie auch Wiki auf ubuntuusers.de.

Samstag
17
Mai 2014
Klaus Moser
Klaus Moser

Ubuntu - LVM einrichten

Für die neue Datensenke hab ich mich entschlossen LVM einzusetzen. LVM steht für Logical Volume Management und bietet ein flexibleres Handling von Partitionen als die traditionelle Variante der Partitionierung. Nicht das ich das unbedingt bräuchte, aber damit umgehen zu können kann ja nicht schaden. Wer weiß wann man es mal braucht :-)

Ein großer Vorteil von LVM ist, dass man viele Operationen im laufenden Betrieb machen kann ohne das System offline nehmen zu müssen. Ich habe gelesen, dass es sogar möglich ist  während des laufenden Betriebs seine Root-Partition auf eine andere Festplatte umziehen und das ohne den Rechner dafür auch nur eine Minute vom Netz nehmen zu müssen.

LVM bietet auch die Möglichkeit Partitionen auf beliebige Festplatten auszudehnen, ähnlich wie bei einem Raid 0. Natürlich gilt dabei auch das gleiche Risiko des Datenverlustes wie bei einem Raid 0 wenn eine der Logical Volumes ein Problem hat. Hat man also ein Logical Volume das über mehrere Festplatten geht immer auf die Datensicherung achten.

Ein richtig Interessantes Feature sind die Snapshots. Damit ist es möglich den Zustand eines Logischen Volumes zu einem bestimmten Zeitpunkt zu speichern und ggf. wiederherzustellen und das ebenfalls im laufenden Betrieb. Das ist zum Einspielen von Updates oder dist-upgrades natürlich Gold wert.

Grundlagen

Grundsätzlich gibt es drei Begriffe, die man kennen und verstehen sollte.

Volume Group

Eine Volume Group ist ein Verbund von physikalischen oder logischen Datenträgern.

Physical Volumes

Unter Physical Volumes versteht man Datenträger wie Festplatten, die Platz bieten um Logical Volumes aufzunehmen.

Logical Volumes

Ein Logical Volume entspricht einer Partition. Diese enthält ein Dateisystem und kann sich über mehrere Physical Volumes erstrecken.

Einrichtung

Die Ubuntu Server Installations CD bietet dem Anwender von vornherein an das System auf eimem LVM zu installieren.

Möchte man weitere Volumes anlegen muss man diese entsprechend vorbereiten. Für diejenigen die mit der Kommandozeile nicht so versiert sind und die die einfach nur zu faul zum tippen sind :-) gibt es eine GUI für die Konfiguration des LVMs:

sudo apt-get install system-config-lvm
sudo system-config-lvm

Im folgenden werden die Schritte auf der Kommandozeile beschrieben:

Physical Volume anlegen

Zuerst muss man die Festplatte vorbereiten. Dazu legt man eine Partition auf der Festplatte an und markiert diese als lvm. In gparted geht das über Rechtsklick -> Markierungen bearbeiten -> lvm und in fdisk setzt man den type auf 8e.

Ist die Partition angelegt muss man diese initialisieren um als Physical Volume verwendet werden zu können. Dies geschieht mit:

sudo pvcreate /dev/sdb1

Damit wird der LVM Header auf die Partition geschrieben, der diese Platte als Physical Volume identifiziert.

Volume Group anlegen

Im Normalfall hat man im einem Rechner nur eine Volume-Group. Das macht Sinn, wenn man nur eine Platte oder ein Festplattenverbund wie ein Raid5 verwendet. Ich verwende einzelne Festplatten und werde daher die Volume Groups in System und Daten unterteilen.

sudo vgcreate data /dev/sdb1

Das erzeugt eine Volume Group mit dem Namen data und beinhaltet genau ein Phyiscal Volume /dev/sdb1.

Logical Volume anlegen

Im Normalfall würde man hergehen und die Festplatten mit größtmöglichen Partitionen versehen. Bei Verwendung eines Festplattenverbunds wie eines Raid5 muss man das nicht. Da die Manipulation an den Partitionen so einfach ist, kann man auch erst mal so viel Partitionieren wie man denkt dass man braucht und den Rest unpartitioniert lassen. Den freien Platz kann man dann entsprechend so vergeben wie sich das System entwickelt.

Da ich in meinem Fall nicht so viele Partitionen habe und Daten und System getrennt habe werde ich allen Platz vollständig verwenden.

sudo lvcreate -n data_1 -l 100%FREE data

Der Parameter -n legt den Namen des Logical Volumes fest und der Parameter -l kann benutzt werden, wenn man eine prozentuale Angabe verwenden möchte, wie hier 100% der noch freien Kapazität in der Volume Group. Alternativ kann man mit dem Parameter -L auch eine Partitionsgröße in kB/MB/GB/TB/PB/EB angeben.

Wieviel Platz in einer Volume Group vorhanden ist lässt sich herausfinden mit:

sudo vgdisplay

Die Blockdevices für die so angelegten Logical Volumes findet man unter /dev/data/data_1 als auch unter /dev/mapper/data-data_1

Informationen zu den Physical Volumes sowie zu den Logical Volumes kann man ähnlich wie bei vgdisplay abrufen. Die Befehle dafür lauten pvdisplay und lvdisplay.

Änderungen an Volume Groups

Im Laufe der Zeit wird immer irgendwo der Speicherplatz knapp. Um darauf reagieren zu können gibt es im folgenden ein paar Erklärungen wie man welche Änderungen an den Volume Groups durchführen kann.

Größe einer Partition ändern

Geht der Platz auf einem Logical Volume zur Neige, und hat man noch Platz in der Volume Group kann man das Volume erweitern mit:

sudo lvextend -L 150G data/data_1

Das erweitert das Logical Volume data_1 aus der Volume Group data auf 150 GB. Damit ist aber nur das Logical Volume vergrößert muss noch das Dateisystem vergrößert werden. Das macht man bei ext3 und ext4 so:

umount /dev/data/data_1
e2fsck -f /dev/data/data_1
sudo resize2fs /dev/data/data_1
mount /dev/data/data_1

Lässt man den fscheck weg geht das auch ohne die Partition aushängen zu müssen.

Analog kann man auch eine Partition verkleinern. Dazu muss erst das Dateisystem und dann das Logical Volume verkleinert werden. Beim verkleinern des Dateisystems die Größe in Blöcken (Bei Ubuntu 14.04 4096 Bytes) angeben. Um also auf 10 GB zu verkleinern 10000000000 Bytes / 4096 Bytes = 2441406.

umount /dev/data/data_1
e2fsck -f /dev/data/data_1
resize2fs /dev/data/data1 2441406
lvreduce -L10G /dev/data/data_1
mount /dev/data/data_1

Damit wird die Partition auf 10 GB verkleinert. Um die Blockgröße der Partition herauszufinden kann man folgenden Befehl verwenden:

sudo dumpe2fs -h /dev/data/data_1 | grep -i "block size"

Leider geht das nicht ohne Unterbrechung des Systems, da man für e2fsck die Partition aushängen muss. Bei der Root Partition muss man das mit einer Live CD machen.

Partitionen verschieben

Noch ein tolles Feature ist das Verschieben von Partitionen. Sollte die Festplatte einmal nicht mehr ausreichen und soll gegen eine größere ersetzt werden, kann man die Partition auf die neue Partition verschieben, ohne das man das System offline nehmen muss. Um das Logical Volume data_1 von /dev/sdb1 zu entfernen und auf /dev/sdc1 zu verschieben benutzt man den Befehl:

sudo pvmove -b -n data_1 /dev/sdb1 /dev/sdc1

Lässt man die Zielangabe /dev/sdc1 weg, werden die normalen Verteilungsstrategien verwendet um die Partitionen an einen anderen freien Speicher zu verschieben. Lässt man den Parameter -n data_1 weg, werden alle Logical Volumes auf /dev/sdb1 verschoben. Der Parameter -b lässt den Vorgang im Hintergrund ablaufen. Den Fortschritt kann man bei Ausführung im Hintergrund mit dem Befehl lvs anzeigen lassen.

Volume Group erweitern

Gibt es innerhalb der Volume-Group keinen freien Speicher mehr, auf dem Logical Volumes angelegt oder vergrößert werden können, muss man eine neue Partition auf einem Physikalischen Datenträger wie z.B. einer Festplatte der Volume Group hinzufügen.

pvcreate /dev/sdc1
vgextend data /dev/sdc1

Um die Volume Group zu verkleinern und eine bestimmte Partition aus der Gruppe zu entfernen muss man diese Partition zuerst leeren. Dazu muss in der Volume Group natürlich genügend freier Speicher vorhanden sein.

sudo pvmove /dev/sdb1

Ist die Partition leer, kann man diese aus der Volume Group entfernen

vgreduce data /dev/sdb1

Snapshots

Wenn ich das richtig verstanden habe erzeugt man für einen Snapshot eines Logical Volumes ein weiteres Logical Volume auf das alle Daten des Ausgangs-Volumes geschrieben werden, bevor diese verändert werden. Ausserdem verhält sich der Snapshot Volume wie ein Klon des Ausgangs-Volumes. Damit hat man auf dem Snapshot Volume sozusagen eine Sicherungskopie des Ausgangs-Volumes.

Das Snapshot-Volume belegt anfangs keinen Speicher, aber je mehr Daten geändert werden um so größer wird das Volume. Läuft das Snapshot-Volume voll ist dieser Snapshot defekt und kann nicht mehr verwendet werden. Man hat dann nur noch das modifizierte Ausgangs-Volume.

Um ein Snapshot Volume mit dem Namen snap vom dem Logical Volume root in der Volume Group system zu erstellen führt man folgendes aus:

sudo lvcreate -s -n snap -l 100%FREE system/root

Das Snapshot Volume snap verfügt jetzt über den gesamten noch freien Speicherplatz. Hat man noch viel freien Speicher kann man auch statt -l 100%FREE mit -L 5G eine 5 GB große Partition erzeugen. Das sollte dann ausreichen um als Sicherung zu dienen wenn man Pakete oder ggf. das ganze System aktualisieren muss.

Man kann die Partition auch mounten um ggf. zu schauen wie das Dateisystem vorher ausgehen hat

sudo mount /dev/sytem/snap /mnt/

Möchte man das Logical Volume snap wieder entfernen:

sudo lvremove /dev/system/snap

Sollte man feststellen, dass z.B. das Upgrade fehlgeschlagen ist oder das System in einen nicht funktionsfähigen Zustand versetzt wird kann man das Upgrade wieder rückgängig machen mit:

sudo lvconvert --merge system/snap

Wenn das Volume system/snap in Verwendung ist, wie es bei einem Snapshot des root Laufwerks der Fall ist muss man das System neu starten, da der Prozess startet, sobald die Volumes das nächste mal aktiviert werden.

Blog

Kmoser's Tech-Blog