Wie mounte ich eine CIFS-Freigabe?


64

Ich benutze Ubuntu 11.10 und versuche einen Freenas-Server zu mounten. Ich habe den Server eingestellt, um in CIFS und NFS ohne Glück zu teilen .

Ich habe versucht smbmount //192.168.1.### /mnt/

Ich bin nicht neu in Ubuntu, aber ich bin nicht in der Nähe eines Hauptbenutzers, daher würde ich eine GUI-Option vorziehen, falls verfügbar.

Wie montiere ich eine CIFS- Freigabe in 11.10?

Antworten:


88

Es gibt pyNeighborhood , eine Benutzeroberfläche zum Mounten von Samba-Freigaben, die im Software-Center zum Herunterladen zur Verfügung steht.

Es ist ein guter Artikel befindet sich hier , wie es einzurichten und zu nutzen.

Installieren Sie zuerst cifs utils

sudo apt-get install cifs-utils

Alternativ lautet der grundlegende Terminalbefehl:

mount -t cifs -o username=USERNAME,password=PASSWD //192.168.1.88/shares /mnt/share

Wenn Sie Ihr Reittier in Nautilus sehen möchten, sollten Sie zuerst einen Unterordner in / media / USERNAME / erstellen, zum Beispiel:

mkdir /media/paul/cifsShare

Außerdem könnte das Kennwort beispielsweise im Befehl mount weggelassen werden (dies demonstriert auch den Datei- / Ordnermodus):

sudo mount -t cifs //nas-server/cifsShare /media/paul/cifsShare -o username=paulOnNAS,iocharset=utf8,file_mode=0777,dir_mode=0777,soft,user,noperm

In diesem Fall werden Sie zum Zeitpunkt des Einbindens nach dem Passwort (eigentlich nach 2 Passwörtern) gefragt.

Lesen Sie hier die Samba-Dokumentation durch und richten Sie sie richtig ein, um sie beim Start zu laden.


2
Gibt es eine Möglichkeit, die Samba-Freigabe zu mounten, ohne 1) das Kennwort fest zu codieren und 2) root zu sein?
McExchange

1
@mcExchange root wird benötigt und Sie können smb Anmeldeinformationsdatei verwenden, um Ihre Anmeldeinformationen zu schützen
adampski

4
auch sicherstellen , dass Sie cifs-utilsinstalliert haben : sudo apt-get install cifs-utils. Für weitere Informationen ist dieses Ubuntu-Hilfedokument großartig.
Marco Pashkov

1
pyNeighborhood gibt mir einen Segmentierungsfehler, wenn ich über SSH in Ubuntu 14.04
Pavel Niedoba

1
@MarcoPashkov cifs-utilshat mich wachgerüttelt . Nichts davon würde anders funktionieren. Dies sollte direkt in die Antwort aufgenommen werden.
Rubynorails

13

Es ist wie in map7 gesagt, aber wenn Sie Root-Berechtigungen nicht jedes Mal verwenden möchten, wenn Sie eine Datei auf dem Laufwerk ändern, müssen Sie sie in einen Benutzerordner laden und sicherstellen, dass gid und uid auf Ihren Benutzernamen eingestellt sind .

Der Befehl setzt sie:

mount -t cifs -o username=USERNAME,password=PASSWD,uid=$USER,gid=$USER //192.168.1.88/shares ~/mnt/share

Beachten Sie, dass der mntOrdner in ~/mnt/shareanstelle von erstellt wurde /mnt/share.

Sie können auch password = PASSWD weglassen, wenn Sie dazu aufgefordert werden möchten, anstatt es im Befehl zu haben, der möglicherweise im Verlauf Ihrer Shell gespeichert ist:

mount -t cifs -o username=USERNAME,uid=$USER,gid=$USER //192.168.1.88/shares ~/mnt/share

1
Geben Sie eine vollständigere Antwort mit einigen Beispielen und ich stimme zu :)
Sturm

5

1) Meine Samba-Freigabe zeigt in Caja (dem Ubuntu 16.04 „Explorer“) als

smb://thinkpad/ddrive/

Dies ist ein guter Lithmus-Test, es gibt keine Verbindungs- / Pfadprobleme.

( Warnung : Wenn Sie von caja nach Kennwort-Anmeldeinformationen von Ihrem Windows-Computer gefragt werden, möchten Sie möglicherweise Domain von WORKGROUP auf den Namen des Computers, dh 'thinkpad', umstellen. Dann sollten die wirklich lokalen Anmeldeinformationen Ihres Laufwerks ausreichen.)

2) Wenn das funktioniert, kommt hier der Befehl:

sudo mount -t cifs -o username=frank //thinkpad/ddrive /mnt/ddrive
  • Stellen Sie zuvor sicher, dass / mnt / ddrive als leeres Verzeichnis vorhanden ist.
  • Sie können auch ein ,password=supersecretdirektes (kein Leerzeichen) nach dem Benutzernamen = hinzufügen , aber Sie können auch auf die Aufforderung warten, wenn Sie den Befehl eingeben.

2
Ich habe ein wenig gebraucht, um herauszufinden, wo ich den Pfad smb: // .... in Nemo / Linux Mint 18 eingeben kann, aber eigentlich ist es ganz einfach: Wenn das Eingabefeld für den Pfad nicht sichtbar ist, aktivieren Sie es im Ansicht-Menü.
Pedi T.

3

Ich bin mit der Behauptung nicht einverstanden, dass root immer notwendig ist, um cifs-Verbindungen herzustellen. Es ist wahr, es wird immer für CLI smbmount benötigt, aber ein Dateimanager wie nautilus kann eine cifs-Freigabe mounten und es ist nicht erforderlich, root zu sein.

Ich benutze Gnome nicht, aber ich habe immer noch Nautilus installiert. Führen Sie dies in einem Terminal aus, um zu verhindern, dass es versucht, den Desktop zu übernehmen

$ nautilus --no-desktop &

In Ubuntu 16.04 befindet sich im linken Baummenü unten "Mit Server verbinden". Klicken Sie darauf, der Vorschlag lautet "smb: //foo.example.com". smb ist ein altes Wort für "cifs", und wenn Sie Ihren Server einsetzen und anfangs mit smb: // teilen, funktioniert die Verbindung! Ich verspreche es. Wenn Ihre Freigabe eine benannte Sache ist, wird sie nach einem Schrägstrich "smb: //foo.example.com/myshare" benötigt.

Ich habe andere Dateimanager auf die gleiche Weise verwendet. Das Protokoll muss "smb: //" sein.


3
  1. Sie können all diese Details in / etc / fstab ablegen, damit Sie Verzeichnisse beim Systemstart bereitstellen können. Wenn Windows oder SMB-Server auf IP-Adresse 192.168.1.1 ist

    /etc/fstab
    //192.168.1.1/SharedFolder/    /mnt/linux_smb   cifs    username=winuser,password=TopSecret   0    0
    
  2. Erstelle ein Verzeichnis als Linux Mount Point

    mkdir /mnt/linux_smb
    chmod 755  /mnt/linux_smb
    
  3. Zum ersten Mal manuell einhängen

    mount -a
    
  4. Eventuelle Fehler können durch gefunden werden

    dmesg | tail 
    

3
  1. Es gibt ein bestimmtes Problem, das möglicherweise und sehr frustrierend zu lösen ist, wenn Versionen von CIF / SMB zwischen Linux und Windows nicht kompatibel sind. In diesem Fall können Sie in der fstab-Zeile nur eine kleine Änderung vornehmen und "vers = 2.1" hinzufügen.

    Wenn sich der Windows- oder SMB-Server unter der IP-Adresse 192.168.1.1 befindet

    /etc/fstab
    
    //192.168.1.1/SharedFolder/   /mnt/linux_smb   cifs   vers=2.1,username=winuser,password=TopSecret   0    0
    
  2. Die Schritte 2, 3 und 4 bleiben die gleichen wie in der vorherigen Antwort.


1

Ich habe ein kleines Skript zusammengestellt (es ist allerdings für Fedora gedacht), um das CIFS-Dateisystem von der Kommandozeile aus zu mounten und eine Testdatei zu erstellen / löschen. Kann von Nutzen sein:

#!/bin/bash
# Passes https://www.shellcheck.net/

set -o nounset

# See 
#   https://wiki.samba.org/index.php/Mounting_samba_shares_from_a_unix_client
#   https://access.redhat.com/solutions/448263
# and also
#   https://serverfault.com/questions/309429/mount-cifs-credentials-file-has-special-character

# One needs to run "yum install cifs-utils" to have the kernel module, man page
# and other stuff.

rpm --query cifs-utils > /dev/null

if [[ $? != 0 ]]; then
   echo "Package cifs-utils is not installed -- exiting" >&2
   exit 1
else 
   ver=$(rpm --query cifs-utils)
   echo "Package $ver exists ... good!" >&2
fi

# Where to find credentials? Use the "credential file" approach, which
# we call "authfile". Example content (w/o the leading #) below.
# Make sure there are no spaces around '=' (this is different than
# for "smbclient" which can deal with spaces around '='.)
# ----8<------8<----------------
# username=prisoner
# password=KAR120C
# domain=VILLAGE
# ----8<------8<----------------
# Trailing empty lines will lead to (harmless) error messages
# "Credential formatted incorrectly: (null)"

authfile='/etc/smb.passwd' # Make sure read permissions are restricted!!

# Server to contact.
# In the UNC path, we will use DNS name instead of the (more correct?)
# NetBIOS name.
# mount.cifs manpage says: "To mount using the cifs client, a tcp name
# (rather than netbios name) must be specified for the server."

server_dns=thedome.example.com

# The name of the connecting client, just to be sure (probably useless)

client_nbs=$(hostname --short | tr '[:lower:]' '[:upper]')

if [[ -z $client_nbs ]]; then
  client_nbs=UNKNOWN
fi

# Connect to a certain service (which is a fileservice)
# and then switch to the given directory.
# Instead of appending $directory to form the complete UNC
# (Uniform Naming Convention) path, one could also use the option 
# "prefixpath".
# If there is no need to mount a subdirectory of the service,
# the UNC would just be unc="//$server_dns/$service_name"

service_name='information'
directory='PERSONALDATA'

unc="//$server_dns/$service_name/$directory"

# Finally, we will mount the CIFS filesystem here (the
# permissions on that node are not directly of interest)

mntpoint=/mnt/portal

if [[ ! -d "$mntpoint" ]]; then
   mkdir "$mntpoint"
   if [[ $? != 0 ]]; then
      echo "Could not create mountpoint '$mntpoint' -- exiting" >&2
      exit 1
   fi
fi

# Only this user will be able to access the mounted CIFS filesystem

user=number6
group=number6

# Try to mount this so that only user "number6" can access it

mount -t cifs \
   "$unc" \
   "$mntpoint" \
   --read-write \
   --verbose \
   -o "credentials=$authfile,uid=$user,gid=$group,netbiosname=$client_nbs,file_mode=0660,dir_mode=0770"

res=$?

if [[ $res != 0 ]]; then
   echo "Mount failed!" >&2
   echo "Return code $res; more info may be in kernel log or daemon log" >&2
   echo "Try 'journalctl SYSLOG_FACILITY=0' or 'journalctl SYSLOG_FACILITY=3'" >&2
   echo "...exiting" >&2
   exit 1
fi

# Check permissions on the mount point

stat=$(stat --format="group=%G user=%U access=%A" "$mntpoint")
soll="group=$group user=$user access=drwxrwx---"

if [[ $stat != "$soll" ]]; then
   echo "Incorrect permissions on root of '$mntpoint'" >&2
   echo "Expected: $soll" >&2
   echo "Obtained: $stat" >&2
   echo "...exiting" >&2
   umount "$mntpoint"
   exit 1
fi

# CD to the mountpoint to be sure

cd "$mntpoint"

if [[ $? != 0 ]]; then
  echo "Could not cd to '$mntpoint'" >&2
  exit 1
fi

# CD to directory TEST which must exist (change as appropriate)

newcd="$mntpoint/TEST"

if [[ ! -d "$newcd" ]]; then
   echo "Directory '$newcd' not found - can't test!" >&2
   echo "...exiting" >&2
   exit 1
fi

cd "$newcd"

if [[ $? != 0 ]]; then
  echo "Could not cd to '$newcd'" >&2
  exit 1
fi

# Create a file and check the permissions

testfile=$(mktemp --tmpdir="$newcd")

if [[ $? != 0 ]]; then
   echo "Could not create temporary file in '$newcd'" >&2
   exit 1
fi

stat=$(stat --format="group=%G user=%U access=%A" "$testfile")
soll="group=$group user=$user access=-rw-rw----"

if [[ $stat != "$soll" ]]; then
   echo "Incorrect permissions on temporary file '$testfile'" >&2
   echo "Expected: $soll" >&2
   echo "Obtained: $stat" >&2
   echo "...exiting" >&2
   exit 1
fi

/bin/rm "$testfile"

echo "Mounted '$unc' on '$mntpoint'" >&2

1

Wie die verschiedenen Montagemethoden funktionieren, ist erschöpft, aber es gibt etwas, das Sie vielleicht in Betracht ziehen sollten

Wenn Sie Ihre Anmeldeinformationen nicht direkt in / etc / fstab eingeben möchten, können Sie stattdessen eine Mount-Option verwenden: credentials = / your / path / here / .credentials

Dies sollte Benutzername = Benutzername Passwort = mspassword enthalten

Speichern Sie die Datei und beenden Sie Ihren Auswahleditor.

Berechtigungen sollten auf chmod 600 geändert werden

Wenn Sie ein verschlüsseltes Basisverzeichnis haben und möchten, dass Ihr Mount beim Booten aktiv ist, müssen Sie sicherstellen, dass sich die Datei außerhalb Ihres Basisverzeichnisses befindet. in / etc / oder / media / könnte ein passender und leicht einprägsamer Ort sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.