Come posso montare una condivisione CIFS?


64

Sto usando Ubuntu 11.10 e sto provando a montare un server Freenas. Ho il server impostato per condividere in cifs e nfs senza fortuna.

Ho provato smbmount //192.168.1.### /mnt/

Non sono nuovo su Ubuntu ma non sono vicino a un utente esperto, quindi preferirei un'opzione GUI se disponibile.

Come posso montare una condivisione cifs in 11.10?

Risposte:


88

C'è pyNeighbor che è una guida per il montaggio di condivisioni samba e disponibile nel centro software per il download.

C'è un buon articolo qui su come configurarlo e usarlo.

Prima installa cifs utils

sudo apt-get install cifs-utils

In alternativa, il comando terminale di base è:

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

Se desideri vedere il tuo mount in Nautilus, sarebbe bene creare prima una sottocartella in / media / USERNAME / ad esempio:

mkdir /media/paul/cifsShare

inoltre, la password potrebbe essere inserita nel comando mount per esempio (mostrerà anche le modalità file / cartella):

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 questo caso ti verrà richiesta la password (in realtà per 2 password) nel momento del montaggio.

Leggi qui la documentazione di Samba su come farlo e configurala correttamente per montarla all'avvio, ecc.


2
c'è un modo per montare la condivisione samba senza 1) hard coding della password e 2) dover essere root?
Scambio mc

1
@mcExchange root è necessario ed è possibile utilizzare il file delle credenziali smb per proteggerti
adampski

4
anche assicurarsi di aver cifs-utilsinstallato: sudo apt-get install cifs-utils. Per maggiori informazioni questo documento di aiuto di Ubuntu è fantastico.
Marco Pashkov,

1
pyNeighbor mi dà un errore di segmentazione quando avviato su ssh in Ubuntu 14.04
Pavel Niedoba

1
@MarcoPashkov cifs-utilsè ciò che mi ha fatto andare e venire. Niente di tutto ciò avrebbe funzionato diversamente. Questo dovrebbe essere incluso direttamente nella risposta.
rubynorails

13

È come ha detto map7, ma se non si desidera utilizzare i permessi di root ogni volta che si modifica un file sull'unità, è necessario eseguire il mount in una cartella utente e assicurarsi che gid e uid siano impostati sul proprio nome utente .

Il comando li imposta:

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

Si noti che la mntcartella è stata creata in ~/mnt/shareanziché /mnt/share.

Inoltre puoi lasciare fuori password = PASSWD se vuoi che ti chieda invece di averlo nel comando, che è potenzialmente memorizzato nella cronologia della shell:

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

1
Fai una risposta più completa, con alcuni esempi e voterò :)
tempesta

5

1) La mia condivisione di samba mostra in Caja (Ubuntu 16.04 „explorer“) come

smb://thinkpad/ddrive/

Questo è un buon test al litio, non ci sono problemi di connessione / percorso.

( avvertenza : se caja ti chiede le credenziali della password dal tuo computer Windows, potresti voler cambiare Dominio da WORKGROUP al nome del computer, ad esempio 'thinkpad'. Quindi dovrebbero fare le credenziali di accesso veramente locali del tuo disco.)

2) Se funziona, ecco il comando:

sudo mount -t cifs -o username=frank //thinkpad/ddrive /mnt/ddrive
  • Assicurati prima, / mnt / ddrive esiste come una directory vuota.
  • Inoltre, aggiungi ,password=supersecretdirettamente un (senza spazio) dopo username =, ma puoi anche attendere che ti venga richiesto, quando inserisci il comando.

2
Mi ci è voluto un po 'per capire, dove posso digitare il percorso smb: // .... in Nemo / Linux Mint 18, ma in realtà è abbastanza semplice: se la casella di input del percorso non è visibile, abilitala nel Visualizza il menu.
Pedi T.

3

Non sono d'accordo con l'affermazione che root è sempre necessario per rendere attive le connessioni cifs. È vero, è sempre necessario per CLI smbmount, ma un file manager come nautilus ha la capacità di montare una condivisione cifs e non è necessario essere root.

Non uso Gnome, ma ho ancora installato Nautilus. Eseguilo in un terminale per evitare che provi a prendere il controllo del desktop

$ nautilus --no-desktop &

In Ubuntu 16.04, il menu ad albero sul lato sinistro ha "Connetti al server" in basso. Fare clic su questo, il suggerimento è digitare "smb: //foo.example.com". smb è una vecchia parola per "cifs", e se inserisci il tuo server e condividi con smb: // all'inizio, la connessione funziona! Lo prometto. Se la tua condivisione ha un nome, è richiesta dopo una barra "smb: //foo.example.com/myshare".

Ho usato altri file manager allo stesso modo. Il protocollo deve essere "smb: //".


3
  1. Puoi mettere tutti questi dettagli in / etc / fstab in modo da poter avere le directory montate all'avvio del sistema. Se il server Windows o SMB si trova sull'indirizzo IP 192.168.1.1

    /etc/fstab
    //192.168.1.1/SharedFolder/    /mnt/linux_smb   cifs    username=winuser,password=TopSecret   0    0
    
  2. Crea directory come punto di montaggio linux

    mkdir /mnt/linux_smb
    chmod 755  /mnt/linux_smb
    
  3. Per la prima volta montalo manualmente

    mount -a
    
  4. Eventuali errori possono essere trovati da

    dmesg | tail 
    

3
  1. Esiste un problema specifico possibile e molto frustrante da risolvere quando le versioni di CIF / SMB non sono compatibili tra Linux e Windows. In tal caso, puoi semplicemente creare chnage minori nella riga fstab aggiungendo "vers = 2.1"

    Quindi, se il server Windows o SMB si trova sull'indirizzo IP 192.168.1.1

    /etc/fstab
    
    //192.168.1.1/SharedFolder/   /mnt/linux_smb   cifs   vers=2.1,username=winuser,password=TopSecret   0    0
    
  2. I passaggi 2, 3 e 4 rimangono gli stessi della risposta precedente.


1

Ho messo insieme un piccolo script (è pensato per Fedora) per montare il filesystem CIFS dalla riga di comando e creare / eliminare un file di test. Potrebbe essere di qualche utilità:

#!/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

il modo in cui funzionano i diversi metodi di montaggio è stato esaurito, ma c'è qualcosa che potresti voler considerare

se non vuoi inserire le tue credenziali direttamente in / etc / fstab puoi invece usare un'opzione mount: credentials = / your / path / here / .credentials

questo dovrebbe contenere username = msusername password = mspassword

Salvare il file ed uscire dall'editor scelto.

le autorizzazioni devono essere modificate in chmod 600

se si dispone di una directory home crittografata e si desidera che il mount sia attivo all'avvio, assicurarsi di posizionare il file all'esterno della directory home. in / etc / o / media / potrebbe essere un luogo adatto e facilmente memorabile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.