ubuntuusers.de

ubuntuusers.deWikiSamba Client cifs

Samba Client cifs

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/service.png Dieser Artikel betrifft das Einbinden von Freigaben mit dem virtuellen Dateisystem "cifs-vfs" in das lokale Dateisystem des Client. Es empfiehlt sich, sich vorher mit den Besonderheiten des dabei verwendeten Protokolls CIFS vertraut zu machen.

Als Netzwerk-Dateisystem auf dem Client ersetzt cifs-vfs {en} das früher verwendete Dateisystem smbfs {en}, das nicht weiter gewartet wird.

Mit dem virtuellen Dateisystem cifs-vfs lassen sich Freigaben auch systemweit einbinden (im Gegensatz z.B. zum "GVFS"). Weil die Netzwerk-Manager NetworkManager und Wicd erst nach der Anmeldung des jeweiligen Benutzers aktiviert werden, kann es in diesem Fall von Vorteil sein, die Netzwerk-Schnittstelle nicht über einen der Netzwerk-Manager, sondern mit einem Eintrag in der Datei /etc/network/interfaces einzurichten.

In vielen Fällen bietet auch das GVFS eine einfachere Alternative zum cifs-vfs (siehe dazu gvfs-mount).

Installation

Um cifs-vfs verwenden zu können, muss folgendes Paket installiert[1] werden:

  • Ab Ubuntu 10.10:

    • cifs-utils (main)

    Wiki/Vorlagen/Installbutton/button.png mit apturl

    Paketliste zum Kopieren:

    sudo apt-get install cifs-utils 

    sudo aptitude install cifs-utils 

  • Bis einschließlich Ubuntu 10.04 LTS:

    • smbfs (main)

    Wiki/Vorlagen/Installbutton/button.png mit apturl

    Paketliste zum Kopieren:

    sudo apt-get install smbfs 

    sudo aptitude install smbfs 

Als Übergangslösung wurde bis einschließlich Ubuntu 12.04 LTS alternativ zum Paket cifs-utils auch noch das Paket smbfs angeboten. Das Paket smbfs enthält zusätzlich zu den Routinen des Pakets cifs-utils noch die für die Syntax von smbfs nötigen Wrapper. Man kann damit also wahlweise die Syntax von cifs oder auch die veraltete Syntax von smbfs verwenden.

Hinweis:

Ab Ubuntu 12.10 ist das Paket smbfs nicht mehr in den Paketquellen vorhanden.

Nutzung

mount.cifs

Das Einbinden mittels cifs-vfs geschieht durch einen Aufruf von mount.cifs. Dieser erfolgt indirekt über den Befehl mount mit der Option -t cifs oder über einen Eintrag in der Datei /etc/fstab (s.u.). Das Aushängen geschieht mittels umount.

Hinweis:

Bis einschließlich Ubuntu 10.04 konnte der Befehl mount.cifs auch direkt aufgerufen werden; zum Aushängen stand dann der Befehl umount.cifs zur Verfügung. Ab Ubuntu 10.10 sollte der Aufruf grundsätzlich nur indirekt erfolgen, ausgehängt wird ausschließlich mit umount.

Im Folgenden wird zwischen "systemweitem" und "persönlichem" Einbinden unterschieden:

  • Systemweites Einbinden: Um Freigaben mittels mount.cifs bzw. mount -t cifs systemweit einzubinden, werden Root-Rechte benötigt.

  • Persönliches Einbinden: Um Freigaben auch ohne Root-Rechte persönlich einbinden und wieder aushängen zu können, muss für mount.cifs und ggf. für umount.cifs das SUID-Bit gesetzt sein.

  • Ab Ubuntu 10.10 ist das SUID-Bit für /sbin/mount.cifs standardmäßig gesetzt. Dies ist kein Sicherheitsrisiko, weil mount.cifs trotzdem nur dann ohne Root-Rechte aufgerufen werden kann, wenn dies durch einen entsprechenden Eintrag in /etc/fstab ermöglicht wird. Der Befehl umount.cifs existiert nicht mehr.

  • Bis Ubuntu 10.04 können mount.cifs und umount.cifs bei gesetztem SUID-Bit auch ohne Eintrag in /etc/fstab von jedermann ausgeführt werden! Da dies ein Sicherheitsrisiko sein kann, ist das SUID-Bit für diese Routinen in Ubuntu 10.04 nicht mehr standardmäßig gesetzt. Man muss dafür in einem Terminal folgende Befehlszeilen eingeben:

    sudo chmod +s /sbin/mount.cifs
    sudo chmod +s /sbin/umount.cifs 

    Es kann sein, dass bei Updates von cifs-utils oder smbfs das SUID-Bit zurückgesetzt wird und es deshalb danach neu zu setzen ist.

    Achtung!

    Der Einsatz des SUID-Bit ist eine mögliche Sicherheitslücke und sollte nur mit Bedacht verwendet werden.

Mountpunkt erstellen

Um eine Freigabe einzubinden, muss zunächst ein Mountpunkt erstellt werden. Dieser kann im Prinzip an jeder beliebigen Stelle im Dateiverzeichnis gewählt werden. Üblich ist jedoch folgendes Vorgehen:

  • Systemweites Einbinden: Der Mountpunkt muss Eigentum von Root sein. Soll die Freigabe dauerhaft gemountet werden, eignet sich ein leerer Ordner im Verzeichnis /media. Möchte man die Freigabe nur vorübergehend einbinden, empfiehlt sich ein leerer Ordner in /mnt. Beispiel:

    sudo mkdir /media/austausch 
  • Persönliches Einbinden: Der Mountpunkt muss Eigentum des jeweiligen Benutzers sein. Es empfiehlt sich ein leerer Ordner in dessen Heimverzeichnis. Beispiel:

    mkdir ~/Daten 

Weitere Informationen finden sich auch in den Artikeln mount und Datenverwaltung.

Server ansprechen

mount.cifs führt selbst keinen Rundspruch ("Broadcast") zur Namensauflösung durch. Deshalb werden üblicherweise die Server über ihre IP-Adresse angesprochen.

Möchte man zur besseren Übersichtlichkeit trotzdem lieber Namen ("Netbios-Namen") verwenden, müssen diese auf dem Client in der Datei /etc/samba/lmhosts (nötigenfalls anlegen) oder auch in /etc/hosts eingetragen sein. Beispiel:

192.168.1.100 Ubuntu-Desktop

Dies ist jedoch nur bei Servern mit einer festen IP-Adresse sinnvoll, über DHCP bezogene Adressen können sich ändern. Für Samba-Server (nicht Windows-Server) im gleichen Subnetz kann man die Auflösung des Servernamens Avahi überlassen. Hierfür ist der Servername mit dem Zusatz .local zu versehen. Ansonsten ist eine definierte Auflösung des Rechnernamens nur möglich, wenn winbind installiert ist. In der Datei /etc/nsswitch.conf muss dann in der Zeile hosts das Schlüsselwort wins hinzugefügt werden.

Eine einfache Alternative ist auch die Verwendung eines grafischen Tools.

Eintrag in /etc/fstab

Grundstruktur

Um Freigaben mit Root-Rechten [4] temporär systemweit einzubinden, ist ein Eintrag in der Datei /etc/fstab nicht nötig. Möchte man Freigaben jedoch dauerhaft (fest oder statisch) oder ohne Root-Rechte persönlich einbinden, dann lässt sich seit Ubuntu 10.10 ein Eintrag nicht mehr vermeiden. Die Datei /etc/fstab muss in einem Editor [3] mit Root-Rechten [4] bearbeitet werden.

Derartige Einträge in fstab haben folgende Grundstruktur, die jeweils noch durch zusätzliche Optionen ergänzt werden müssen:

# Allgemein:
//<Server>/<Freigabe> <Mountpunkt> cifs <Liste der Optionen>  0  0
# Beispiel:
//192.168.1.100/Tausch /media/austausch cifs auto  0 0

Optionen

Bei den Einträgen in fstab können nur diejenigen Optionen verwendet werden, die für mount.cifs gültig sind. Man findet diese auf SourceForge {de} oder mittels man mount.cifs. Sie stimmen nur zum Teil mit den im Artikel mount beschriebenen, für andere Dateisysteme gültigen Optionen überein.

Hier werden nur die am häufigsten benötigten Optionen aufgeführt:

  • auto und noauto: Die Option auto ist standardmäßig voreingestellt. Sie bewirkt, dass die Freigabe beim Abarbeiten der Datei fstab beim Systemstart automatisch eingebunden wird, falls das Netzwerk bereits zur Verfügung steht (ist z.B. bei WLAN nicht unbedingt der Fall). Trägt man statt dessen die Option noauto ein, wird das Einbinden nur vorbereitet. Es muss dann zu einem späteren Zeitpunkt von Hand oder über ein Skript vorgenommen werden.

  • user und users: Mit diesen Optionen darf im Prinzip jeder Benutzer die Freigabe einbinden. Bei users darf jeder die Freigabe wieder aushängen, bei user nur derjenige, der sie eingehängt hat. Eine Besonderheit von cifs ist jedoch, dass grundsätzlich nur der Eigentümer des Mountpunkts die Freigabe einhängen kann. Sollen mehrere Benutzer die gleiche Freigabe einhängen dürfen, so muss für jeden ein eigener Mountpunkt und ein eigener Eintrag in fstab erstellt werden.

  • Benutzer und Passwort: Auf manche Freigaben kann nur mittels Benutzername und Passwort zugegriffen werden. Sollen solche Freigaben automatisch eingebunden werden oder möchte man Benutzername und Passwort beim Einbinden nicht interaktiv angeben, muss bei den Optionen ein entsprechender Eintrag erfolgen:

    • Direkte Eingabe im Klartext: Man kann Benutzername und Passwort direkt als Optionen eingeben

      # Beispiel:
      //192.168.1.100/Tausch /media/austausch cifs user=otto,passwd=geheim  0 0

      Befindet sich die Freigabe in einer Windowsdomäne, muss beim Benutzernamen der Domänenname mit angegeben werden. Diese Methode ist sehr unsicher und kann allenfalls zu Versuchszwecken empfohlen werden.

    • Eingabe über eine Authentifikationsdatei. Besser ist es, eine Authentifikationsdatei zu verwenden, die über die Option credentials ausgelesen wird. Zunächst erstellt man eine Textdatei z.B. mit dem Namen .smbcredentials im eigenen Homeverzeichnis und trägt folgenden Inhalt ein:

      username=<benutzer>
      password=<passwort>

      Damit die Datei nur vom Besitzer eingesehen werden kann, setzt man die Rechte entsprechend

      chmod 600 ~/.smbcredentials 

      Der Eintrag in fstab lautet dann

      # Beispiel:
      //192.168.1.100/Tausch /media/austausch cifs credentials=/home/otto/.smbcredentials  0 0
      # in fstab muss immer der komplette Pfad angegeben werden!


      Hinweis:

      Mit einer Live-CD oder durch Erlangen von Root-Rechten kann immer noch jeder diese Datei lesen. Über die Verwendung des verschlüsselten Private-Verzeichnisses kann auch dies verhindert werden. Allerdings kann dann nur der Benutzer selbst die Freigabe einbinden.

    • Wird keine Authentifikationsdatei (credentials) und kein Benutzername angegeben, gilt der jeweils eingeloggte Benutzer. Das Passwort wird dann beim Einbinden interaktiv erfragt. Dies unterbleibt, wenn man die Option guest oder ein leeres Passwort einträgt.

      # Beispiel ohne Passwort (sinnvoll z.B. für USB Speicher ohne Passwort an einer Fritzbox)
      //192.168.178.1/Backup /media/Backup cifs password=  0 0
  • Simulierte Dateirechte: Die Simulation von Dateirechten mit den Optionen uid, gid, dir_mode und file_mode ist nur dann von Bedeutung, wenn die cifs-UNIX-Erweiterungen nicht aktiv sind. Sie wird weiter unten erklärt.

  • Zeichensatz: Früher war es noch nötig, für Sonderzeichen in Datei- und Ordnernamen den verwendeten Zeichensatz anzugeben, z.B. iocharset=utf8. Dieser Zeichensatz ist inzwischen Standard, sodass man auf diese Option üblicherweise verzichten kann.

Temporäres Einbinden

"Temporäres Einbinden" bedeutet, dass danach die Freigaben nur für die betreffende Sitzung zur Verfügung stehen und nicht beim Systemstart oder beim Einloggen des Benutzers automatisch wieder eingebunden werden.

  • Systemweit werden Freigaben mit Root-Rechten eingebunden.

    • Falls ein Eintrag in fstab mit der Option noauto vorhanden ist, genügt die Befehlszeile
      Allgemein:

      sudo mount <Mountpunkt> 

      Beispiel:

      sudo mount /media/austausch 
    • Ist kein Eintrag in fstab vorhanden, müssen alle Eingaben – mit etwas anderer Syntax – in die Befehlszeile übernommen werden:
      Allgemein:

      sudo mount -t cifs -o <Optionen> //<Server>/Freigabe <Mountpunkt> 

      Beispiel:

      sudo mount -t cifs -o credentials=~/.smbcredentials //192.168.1.100/Tausch /media/austausch 

      Näheres zur Syntax siehe mount.

  • Persönlich bindet man Freigaben ohne Root-Rechte ein. Für /sbin/mount.cifs muss das SUID-Bit gesetzt sein (s.o.).

    • Ab Ubuntu 10.10 muss ein Eintrag in fstab mit der Option user bzw. users und einem Mountpunkt bestehen, der Eigentum des einbindenden Benutzers ist, also z.B.:

      # Beispiel:
      //192.168.1.100/Daten /home/otto/Daten cifs noauto,users,credentials=/home/otto/.smbcredentials  0 0
      # in fstab muss immer der komplette Pfad angegeben werden!

      Dann genügt zum Einbinden die Befehlszeile:
      Allgemein:

      mount <Mountpunkt> 

      Beispiel:

      mount ~/Daten 
    • Bis Ubuntu 10.04 benötigt man keinen Eintrag in fstab, wenn man folgende Syntax verwendet:
      Beispiel:

      mount.cifs //192.168.1.100/Daten ~/Daten -o credentials=~/.smbcredentials 

Festes Einbinden

"Festes" oder "Statisches Einbinden" bedeutet, dass die betreffenden Freigaben nach jedem Systemstart oder nach dem Einloggen des jeweiligen Benutzers automatisch wieder zur Verfügung stehen. Eine andere Bezeichnung ist auch "Automount".

Systemweites Automount

Im günstigsten Falle werden die Freigaben bereits beim Systemstart automatisch eingebunden, wenn man beim Eintrag in fstab die Option noauto vermeidet (also die Standard-Einstellung auto verwendet) und einen Mountpunkt wählt, der Besitz von root ist. Bedingung ist allerdings, dass die Netzwerk-Verbindung bereits beim Abarbeiten von fstab zur Verfügung steht, was keineswegs immer der Fall sein muss.

Handelt es sich nur um eine einfache Verzögerung beim Aufbau der Netzwerk-Verbindung, kann man mit sleep arbeiten. Dies geschieht beispielsweise, indem man in die Datei /etc/rc.local folgende Zeilen einfügt:

sleep 20
mount -a
exit 0
# die Zeile exit 0 ist schon vorhanden

Die Zahl 20 kann man dann schrittweise verringern, bis die Verzögerung gerade noch ausreicht. Bei dem Befehl mount -a werden diejenigen Freigaben, bei denen die Option noauto eingetragen ist, nicht mit gemountet.

Es ist aber auch möglich, dass die Netzwerk-Verbindung erst bei oder nach dem Einloggen des jeweiligen Benutzers hergestellt wird (z.B. bei einem WPA-verschlüsselten WLAN). Dann führt auch dies nicht zum Ziel. Wie ein systemweiter Automount über ein "Post-Connection-Script" trotzdem gelingen kann, ist auf den Wiki-Seiten der Netzwerk-Manager NetworkManager und Wicd bzw. auf der Seite interfaces beschrieben.

Persönliches Automount

Freigaben lassen sich am einfachsten über einen Eintrag in "Startprogramme" (GNOME: "System -> Einstellungen -> Startprogramme", KDE: "Systemeinstellungen -> Erweitert -> Autostart", XFCE: "Einstellungen -> Alle Einstellungen -> Autostarted apps"; Einzelheiten siehe hier) persönlich fest einbinden.

Hierzu erstellt man für jede der betreffenden Freigaben einen Eintrag in fstab mit den Optionen noauto und users sowie einem Mountpunkt, dessen Eigentümer der betreffende Benutzer ist. Dann öffnet man einen Editor [3] und erstellt ein kleines Skript (ausführbare Textdatei) folgender Art:

#! /bin/sh
#
mount <Mountpunkt1>
mount <Mountpunkt2>
...

Für <Mountpunkt1> usw. können (im Gegensatz zu fstab) auch die relativen (verkürzten) Pfade der Mountpunkte eingetragen werden.

Man muss dann nur noch das Skript in Nautilus über rechte Maustaste -> "Eigenschaften -> Zugriffsrechte" oder mittels

sudo chmod +x <Skript> 

ausführbar machen und den Pfad zum Skript als Startprogramm eintragen.

Hinweis:

Benötigt man keine der speziellen Optionen, die nur mit cifs-vfs zur Verfügung stehen, können Freigaben auch mittels gvfs-mount ohne Eintrag in fstab persönlich fest eingebunden werden. Besonders einfach geht dies mit dem graphischen Tool Gigolo.

Automount erst beim Zugriff

Eine Möglichkeit, Freigaben nicht schon beim Systemstart oder beim Einloggen, sondern erst beim Zugriff automatisch einzubinden und sie auch automatisch wieder auszuhängen, wenn über längere Zeit kein Zugriff erfolgt, bietet das Tool Autofs.

Besitz- und Zugriffsrechte

Für die Besitz- und Zugriffsrechte zeigt cifs-vfs ein unterschiedliches Verhalten, je nachdem, ob die cifs-UNIX-Erweiterungen aktiv sind oder nicht.

Die UNIX-Erweiterungen sind standardmäßig aktiv, wenn die Freigaben sich auf einem Linux-Server mit Samba ab Version 2.2.4 befinden, aber nicht, wenn diese sich auf einem Windows-Server befinden.

Übertragung der Rechte mit CIFS-UNIX-Erweiterungen

Sind die CIFS-UNIX-Erweiterungen aktiv (auf dem Samba-Server: unix extensions = yes, Standard), so werden die echten Besitz- und Zugriffsrechte zwischen Server und Client übertragen. Ändert man auf dem Client mittels chmod oder chown oder über den Eigenschaften-Dialog der GUI die Rechte, ist die Änderung ebenso auch auf dem Server und auf allen anderen Clients wirksam, die auf die Freigabe zugreifen.

Die Angaben in der Datei /etc/samba/smb.conf auf dem Server legen dabei den Rahmen fest, in dem Zugriffsrechte auf dem Client Gültigkeit haben. Ist z.B. eine Freigabe in smb.conf nur zum Lesen freigegeben, können für sie von keinem Client aus Schreibrechte festgelegt werden. Ist sie aber in smb.conf auch für Schreibzugriffe freigegeben, kann sie von jedem Client aus mittels chmod für "nur lesen" eingeschränkt werden. Ebenso können Freigaben, die auf dem Server den Status "nur lesen" haben, aber in smb.conf mit Schreibrechten eingetragen sind, vom Client aus mit Schreibrechten versehen werden.

Die UNIX-Erweiterungen haben Vorrang vor anderen Angaben für Besitz- und Zugriffsrechte. Sollten im Eintrag in /etc/fstab oder in der Mount-Befehlszeile solche Angaben vorhanden sein, so werden diese bei aktiven UNIX-Erweiterungen ignoriert.

Hinweis:

Da die Synchronisation der Rechte über die Übertragung von uid, gid, dir_mode und file_mode erfolgt, funktioniert sie nur dann richtig, wenn die zugreifenden Benutzer auf dem Server und dem Client die gleiche Benutzerkennung (UID) und Gruppenkennung (GID) haben. Diese müssen nötigenfalls noch angepasst werden.

Da eine Veränderung der Benutzer- und Gruppenkennung weitreichende Folgen haben kann, lässt sich diese nicht einfach vom GNOME-Menü aus durchführen, sondern man muss dazu im Terminal den Befehl usermod verwenden. Siehe hierzu auch man usermod.

Hinweis:

Befinden sich die Freigaben auf dem Samba-Server in einem FAT- oder NTFS-Dateisystem, so wird die Funktionalität der CIFS-UNIX-Erweiterungen durch diese Dateisysteme eingeschränkt.

Simulation von Rechten ohne CIFS-UNIX-Erweiterungen

Wenn der Server ein Windows-Rechner ist oder wenn auf einem Samba-Server in /etc/samba/smb.conf im Teil [global] die Zeile unix extensions = no eingetragen ist , werden die UNIX-Erweiterungen nicht unterstützt. Dann bindet mount.cifs auf dem Client normalerweise alle Freigaben als Besitz desjenigen Benutzers ein, der sie gemountet hat, und überträgt eventuell vorhandene Schreibrechte nur auf diesen. Da das Einbinden in der Regel mit Root-Rechten (mittels sudo oder über /etc/fstab) erfolgt, hat dann also nur Root Schreibrechte.

Durch zusätzliche Angaben von uid, gid, file_mode und dir_mode können beim Mounten auf dem Client andere Besitz- und Zugriffsrechte festgelegt werden (siehe dazu auch Benutzer und Gruppen). Im fstab-Eintrag sieht dies dann so aus:

# Allgemein
//<server-IP>/<freigabe> <mountpunkt> cifs credentials=</pfad/zu/.smbcredentials>,uid=<uid>,gid=<gid>,file_mode=<mode>,dir_mode=<mode>  0 0
# Beispiel
//192.168.1.100/Tausch /media/austausch cifs credentials=/home/otto/.smbcredentials,uid=1000,gid=1000,file_mode=0644,dir_mode=0755  0 0

Wird ohne Eintrag in fstab gemountet, ist der Mount-Befehl so zu verändern:
Allgemein:

sudo mount -t cifs -o username=<benutzer>,password=<passwort>,uid=<uid>,gid=<gid>,file_mode=<mode>,dir_mode=<mode> //<server-IP>/<freigabe> <mountpunkt> 

Beispiel:

sudo mount -t cifs -o username=otto,password=geheim,uid=1000,gid=1000,file_mode=0660,dir_mode=0770 //192.168.1.100/Tausch /media/austausch 

Werden zu file_mode und dir_mode keine Angaben gemacht, so gelten die Standard-Werte file_mode=0644 und dir_mode=0755 (Siehe hierzu auch Rechte sowie chmod). Bei fehlenden Angaben gilt für uid und gid der Wert 0 (Root).

Die so festgelegten Besitz- und Zugriffsrechte werden aber nur auf dem Client simuliert und nicht wirklich auf den Server übertragen. Werden auf dem Client Zugriffsrechte geändert oder in freigegebenen Ordnern Dateien mit anderen Besitzern angelegt, so gelten diese Änderungen nur auf dem Client und nur bis zum Aushängen (umount) der Freigabe. Beim Neustart des Client oder beim erneuten Einbinden der Freigabe gelten dann wieder die beim Einbinden (mount oder Eintrag in /etc/fstab) festgelegten Rechte.

SMB2 Support

Um die Vorteile des ab Samba 3.6 unterstützten Protokolls SMB2 zu nutzen, kann man dies mit entsprechende Option einstellen.

sudo mount -t cifs -o vers=2.0,username=otto,password=geheim //192.168.1.100/Tausch /media/austausch 

Grafische Tools

Es gibt auch grafische Tools ("Frontends"), die Browsen (mit Namensauflösung) und Einbinden ins Dateisystem miteinander verbinden. Das Tool PyNeighborhood und das KDE-Programm Smb4K verwenden cifs-vfs. Sie erlauben es deshalb, verschiedene Optionen einzustellen. Das äußerlich ähnlich aufgebaute Tool Gigolo arbeitet hingegen nicht mit cifs-vfs, sondern mit GVFS.

Einzelheiten zur Installation und Anwendung finden sich auf den Wiki-Seiten dieser Programme.

Weitere Einzelheiten

Zeitstempel

Sind die CIFS-UNIX-Erweiterungen aktiv, dann wird beim Kopieren oder Verschieben von Ordnern und Dateien der Zeitstempel (Datum, Uhrzeit) genau so übertragen, wie wenn sich Ursprung und Ziel im gleichen Dateisystem befinden würden. Andernfalls wird der Zeitstempel nur dann übertragen, wenn die Besitzer auf dem Server und dem Client übereinstimmen; sonst gelten die kopierten Dateien als neu angelegt.

Umlaute und Sonderzeichen

Werden in Datei- und Ordnernamen innerhalb der Freigaben Umlaute und Zeichen wie ß, é usw. nicht richtig dargestellt, so ist der falsche Zeichensatz eingestellt. Die Optionen iocharset=utf8 behebt dies und bewirkt, dass beim Schreiben von neuen Dateien auch richtige Umlaute erzeugt werden. Die Angabe einer Codepage ist nicht mehr notwendig; ein entsprechender Eintrag wird von mount.cifs ignoriert. In neueren Samba-Versionen ist als Zeichensatz UTF-8 meist voreingestellt, sodass sich die Option iocharset=utf8 erübrigt.

Wenn die CIFS-UNIX-Erweiterungen aktiv sind, dürfen in Dateinamen alle auch sonst in Linux zulässigen Zeichen verwendet werden. Sonst sind – wie auch in smbfs – nur diejenigen Zeichen zulässig, die auch in Windows für Dateinamen erlaubt sind.

CIFS-UNIX-Erweiterungen am Server deaktivieren

Um die CIFS-UNIX-Erweiterungen vom Server aus zu deaktivieren, trägt man dort in der Datei /etc/samba/smb.conf im Teil [global] folgende Zeile ein:

unix extensions = no

Dies gilt dann generell für alle Freigaben dieses Servers.

CIFS-UNIX-Erweiterungen am Client deaktivieren

Auf dem Client kann man hingegen auch für einzelne Freigaben festlegen, dass die CIFS-UNIX-Erweiterungen nicht berücksichtigt und statt dessen die Rechte gemäß den Optionen uid, gid, file_mode und dir_mode simuliert werden. Hierzu gibt man einfach bei den Mount-Optionen bzw. bei den Optionen im fstab-Eintrag noch zusätzlich die Option nounix an.

Möchte man die Unterstützung der CIFS-UNIX-Erweiterungen für einen einzelnen Client generell deaktivieren, dann kann man auf dem Client in einem Terminal mit Root-Rechten folgenden Befehl eingeben:

sudo -i
echo 0 > /proc/fs/cifs/LinuxExtensionsEnabled
exit 

Dies geht allerdings erst, nachdem das Kernelmodul cifs geladen oder eine Freigabe mit cifs-vfs eingehängt wurde, und gilt dann nur bis zum Neustart.

Problembehebung

Starten und Beenden

Shutdown und Reboot

Falls beim Herunterfahren ("shutdown") und beim Neustart ("reboot") des Client noch Freigaben eingehängt sind, bekommt man vom cifs-vfs unter Unständen Fehlermeldungen der folgenden Art, die zu erheblichen Verzögerung führen:

CIFS VFS: server not responding. No response for cmd 50 ...

Dies tritt vor allem bei systemweit eingebundenen Freigaben aus einem verschlüsselten WLAN auf, wenn die Verbindung zu diesem mit einem der Netzwerk-Manager Network-Manager oder Wicd hergestellt wurde, und ist in einem Problem der Start-Reihenfolge beim Boot-Vorgang begründet.

Nach einiger Wartezeit wird der Vorgang trotzdem fortgesetzt. Es kann daher nicht allgemein empfohlen werden, das Problem dadurch zu lösen, dass man das cifs-vfs früher aushängt, etwa indem man in /etc/rc0.d und /etc/rc6.d die Priorität des Links zur Datei /etc/init.d/umountnfs (in üblicherweise S31) verändert. Die möglichen Datenverluste wiegen schwerer als die Verlängerung der Wartezeit.

Das Problem lässt sich dadurch umgehen, dass man entweder die systemweit eingebundenen Freigaben vor dem Herunterfahren manuell aushängt oder die Freigaben nur persönlich einbindet. Wurden die Freigaben mit der Option users eingehängt, dann eignet sich zum Aushängen auch folgendes Skript, für das man auch einen Starter anlegen kann:

#! /bin/sh
# Samba-Freigaben aushängen
#
umount -f <Mountpunkt1>
umount -f <Mountpunkt2>
...

Das Skript muss ausführbar gemacht werden und kann z.B. unter /usr/local/smb-umount.sh abgelegt werden.

Das folgende unter /etc/init/smb-umount.conf mit Root-Rechten anzulegende Skript führt dazu, dass die Freigaben automatisch bereits vor dem Abarbeiten der rc-Scripte ausgehängt werden:

description "unmount the smb-connection"

start on starting rc
task
exec /usr/local/smb-umount.sh

Man muss in diesem Fall jedoch selbst darauf achten, dass zu diesem Zeitpunkt keine Programme mehr laufen, die auf die Freigabe schreiben, da diese erst später automatisch beendet würden und es so zu Datenverlusten kommen könnte.

Stellt man Verbindung zum Netzwerk ohne Netzwerk-Manager durch einen Eintrag in /etc/network/interfaces her, tritt das Problem üblicherweise gar nicht auf.

Einträge in /etc/fstab werden beim Systemstart nicht eingebunden

Einträge in /etc/fstab) sollten beim Systemstart automatisch eingebunden werden (wenn nicht noauto eingetragen ist). Bei Freigaben mit cifs-vfs funktioniert dies manchmal nicht. Der Grund ist, dass die Netzwerk-Verbindung und das Dateisystem noch nicht vollständig aktiviert sind, wenn fstab abgearbeitet wird.

In diesem Fall lassen sich die Freigaben mit

sudo mount -a 

von einem Terminal aus nachträglich einbinden. Wie man dies automatisieren kann, ist bereits oben beschrieben.

Sonstige Probleme

CIFS-UNIX-Erweiterungen und ältere Samba-Versionen

Versucht man, Freigaben mit aktivierten UNIX-Erweiterungen auf Clients mit älteren Samba-Versionen mittels cifs-vfs einzuhängen, kann es zu Fehlern kommen. Auch beim Zugriff mit neueren Samba-Versionen auf Server mit älteren Versionen (z.B. ein NAS) kann es sein, dass Datei-Attribute falsch interpretiert und Ordner nicht als solche erkannt werden (mount error 20 = Not a directory). Man sollte dann entweder auf dem Server oder auf dem Client die UNIX-Erweiterungen deaktivieren (siehe oben).

DFS und ältere Samba-Versionen

Seit Ubuntu 8.10 (Samba Version 3.2.3) kommt es gelegentlich zu Problemen mit der Unterstützung von DFS bei Verbindungen zu Servern mit älteren Samba-Versionen (vorwiegend bei NAS-Systemen). Dabei werden die gleichen Fehlermeldungen ausgegeben wie bei Fehlern durch UNIX-Extensions. Hier hilft meistens die Option nodfs im Mount-Befehl oder im fstab-Eintrag.

Probleme mit Bytebereich-Sperrung

Neuere Samba-Versionen unterstützen die Bytebereich-Sperrung {de} (Byte-Range Lock). Einige Programme (z.B. OpenOffice.org, TrueCrypt) kommen damit nicht zurecht und können deshalb auf gemountete Samba-Freigaben trotz korrekter Berechtigungen nicht schreiben. Abhilfe schafft hier die Mount-Option nobrl.

Grundsätzlich können Symbolische Verknüpfungen ("symlinks") auf dem Server über Samba freigegeben werden. Bei entsprechender Konfiguration des Samba-Servers wird ihnen dann dort gefolgt, wenn sie vom Client aus aufgerufen werden. Da jedoch Symlinks in Verbindung mit den cifs-UNIX-Extensions ein Sicherheitsrisiko darstellen können, ist diese Möglichkeit bei neueren Samba-Versionen standardmäßig deaktiviert.

Möchte man, dass beim Aufruf vom Client aus auch Verknüpfungen gefolgt wird, muss man auf dem Server entweder die Symlinks durch den Befehl mount --bind (siehe mount) bzw. einen entsprechenden Eintrag in fstab ersetzen oder aber in smb.conf die UNIX-Extensions mit dem Eintrag unix extensions = no deaktivieren und im Teil [global] noch folgende Zeilen einfügen:

follow symlinks= yes 
wide links= yes

Probleme beim Versand größerer Datenmengen

Beim Versand größerer Datenmengen können auf manchen Systemen ähnliche Fehlermeldungen wie auch oben beschrieben auftreten. Durch ein Deaktivieren des sog. "Opportunistic Locking" kann dies behoben werden. Dazu muss in der Datei /proc/fs/cifs/OplockEnabled der Wert von '1' auf '0' geändert werden. Da die Datei beim Start von cifs geschrieben wird, muss sie bei jedem Systemstart geändert werden. Dies wird durch ein Einfügen folgender Zeilen

modprobe cifs
echo 0 > /proc/fs/cifs/OplockEnabled

# die Zeile exit 0 ist schon vorhanden
exit 0

in /etc/rc.local erreicht.

Statische Freigaben

Sollen die Freigaben statisch eingebunden werden, so dürfen sie erst spät gemountet werden (wie oben). In der fstab muss ein noauto eingefügt werden und und vor dem exit 0 in /etc/rc.local müssen diese Zeilen

sleep 20
mount -a

eingefügt werden.

mount error(13): Permission denied

Mit Ubuntu 13.04 wurde die Authentifizierung in Samba/cifs aktualisiert (Details) {en}. Standardmäßig wird nun dafür nur noch die stärkere Verschlüsselung NTLMSSP/NTLMv2 benützt. Möchte man ab Ubuntu 13.04 eine Samba- oder Windows-Freigabe eines Servers mounten, der diese Verschlüsselung noch nicht unterstützt, bekommt man beim Versuch des Mountens ein "mount error(13): Permission denied" oder auch "mount error(5): Input/output error". Das betrifft z.B. ältere FritzBoxen oder NAS Geräte. Abhilfe bringt es, eine "einfachere/ältere" Verschlüsselung zu nutzen und diese explitit beim Mounten als Option anzugeben: sec=ntlmv2 (oder häufig sec=ntlm, ggf. auch sec=lanman). Alle sec=... Optionen liefert wie üblich man mount.cifs.

Verwandte Seiten

Diese Revision wurde am 20. Dezember 2014 19:29 von Max-Ulrich Farber erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, Windows, Server, Freigaben, cifs