¿Cómo monto un recurso compartido CIFS?


64

Estoy usando Ubuntu 11.10, y estoy tratando de montar un servidor freenas. Tengo el servidor configurado para compartir en cifs y nfs sin suerte.

Yo he tratado smbmount //192.168.1.### /mnt/

No soy nuevo en Ubuntu, pero no estoy cerca de un usuario avanzado, por lo que preferiría una opción de GUI si está disponible.

¿Cómo monto una participación cifs en 11.10?

Respuestas:


88

Hay pyNeighborhood, que es una interfaz gráfica de usuario para montar recursos compartidos de samba y está disponible en el centro de software para descargar.

Hay un buen artículo que se encuentra aquí sobre cómo configurarlo y usarlo.

Primero instala utilidades cifs

sudo apt-get install cifs-utils

Alternativamente, el comando de terminal básico es:

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

Si desea ver su montaje en Nautilus, sería bueno crear una subcarpeta primero en / media / USERNAME / por ejemplo:

mkdir /media/paul/cifsShare

Además, la contraseña podría omitirse en el comando de montaje, por ejemplo (también demostrará los modos de archivo / carpeta):

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

en este caso se le pedirá la contraseña (en realidad para 2 contraseñas) en el momento de montaje.

Lea aquí la documentación de Samba sobre cómo hacerlo y configúrelo correctamente para montarlo en el arranque, etc.


2
¿hay alguna manera de montar el recurso compartido de samba sin 1) codificar la contraseña y 2) tener que ser root?
mcExchange

1
Se necesita @mcExchange root y puede usar el archivo de credenciales smb para proteger sus credenciales
adampski

44
También asegúrese de que ha cifs-utilsinstalado: sudo apt-get install cifs-utils. Para obtener más información, este documento de ayuda de ubuntu es genial.
Marco Pashkov

1
pyNeighborhood me da un error de segmentación cuando se inicia sobre ssh en ubuntu 14.04
Pavel Niedoba

1
@MarcoPashkov cifs-utilses lo que me puso en marcha. Nada de esto funcionaría de otra manera. Esto debe incluirse directamente en la respuesta.
rubynorails

13

Es como dijo map7, pero si no desea usar permisos de root cada vez que cambia un archivo en la unidad, deberá montarlo en una carpeta de usuario y asegurarse de que el gid y el uid estén configurados con su nombre de usuario .

El comando configurándolos:

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

Tenga en cuenta que la mntcarpeta se creó en ~/mnt/sharelugar de /mnt/share.

También puede omitir la contraseña = PASSWD si desea que le solicite en lugar de que la tenga en el comando, que potencialmente se almacena en el historial de su shell:

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

1
Haga una respuesta más completa, con algunos ejemplos y votaré :)
tormenta el

5

1) Mi recurso compartido de samba se muestra en Caja (el "explorador" de ubuntu 16.04) como

smb://thinkpad/ddrive/

Esta es una buena prueba de Lithmus, no hay problemas de conexión / ruta.

( advertencia : si la caja le pregunta acerca de las credenciales de contraseña de su máquina Windows, es posible que desee cambiar el dominio de WORKGROUP al nombre de la máquina, es decir, 'thinkpad'. Entonces las credenciales de inicio de sesión verdaderamente locales de su unidad deberían funcionar).

2) Si eso funciona, aquí viene el comando:

sudo mount -t cifs -o username=frank //thinkpad/ddrive /mnt/ddrive
  • Asegúrese de antemano, / mnt / ddrive existe como un directorio vacío.
  • También puede agregar ,password=supersecretdirectamente (sin espacio) después de username =, pero también puede esperar a que se le solicite cuando ingrese el comando.

2
Me tomó un tiempo descubrir dónde puedo escribir la ruta smb: // .... en Nemo / Linux Mint 18, pero en realidad es bastante simple: si el cuadro de entrada de ruta no está visible, actívelo en el Ver menú.
Pedi T.

3

No estoy de acuerdo con la afirmación de que la raíz siempre es necesaria para que las conexiones cifs funcionen. Es cierto, siempre es necesario para smbmount CLI, pero un administrador de archivos como nautilus tiene la capacidad de montar un recurso compartido cifs y no es necesario ser root.

No uso Gnome, pero todavía tengo Nautilus instalado. Ejecuta esto en una terminal para evitar que intente hacerse cargo del escritorio

$ nautilus --no-desktop &

En Ubuntu 16.04, el menú del árbol del lado izquierdo tiene "Conectar al servidor" en la parte inferior. Haga clic en eso, la sugerencia es tipo "smb: //foo.example.com". smb es una palabra antigua para "cifs", y si ingresa en su servidor y comparte con smb: // al principio, ¡la conexión funciona! Lo prometo. Si su recurso compartido tiene un nombre, se requiere después de una barra inclinada, "smb: //foo.example.com/myshare".

He usado otros administradores de archivos de la misma manera. El protocolo debe ser "smb: //".


3
  1. Puede poner todos esos detalles en / etc / fstab para que pueda tener los directorios montados en el inicio del sistema. Si Windows o el servidor SMB está en la dirección IP 192.168.1.1

    /etc/fstab
    //192.168.1.1/SharedFolder/    /mnt/linux_smb   cifs    username=winuser,password=TopSecret   0    0
    
  2. Crear directorio como punto de montaje de Linux

    mkdir /mnt/linux_smb
    chmod 755  /mnt/linux_smb
    
  3. Por primera vez monte esto manualmente

    mount -a
    
  4. Errores eventuales pueden ser encontrados por

    dmesg | tail 
    

3
  1. Hay un problema específico posible y muy frustrante de resolver cuando las versiones de CIF / SMB no son compatibles entre Linux y Windows. En ese caso, puede hacer un cambio menor en la línea fstab agregando "vers = 2.1"

    Entonces, si el servidor Windows o SMB está en la dirección 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. Los pasos 2, 3 y 4 siguen siendo los mismos que en la respuesta anterior.


1

Creé un pequeño script (aunque está destinado a Fedora) para montar el sistema de archivos CIFS desde la línea de comandos y crear / eliminar un archivo de prueba. Puede ser de alguna utilidad:

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

cómo se han agotado los diferentes métodos de montaje, pero hay algo que puede considerar

si no desea ingresar sus credenciales directamente en / etc / fstab, puede usar una opción de montaje en su lugar: credentials = / your / path / here / .credentials

esto debe contener username = msusername password = mspassword

Guarde el archivo y salga de su editor de elección.

los permisos deben cambiarse a chmod 600

Si tiene un directorio de inicio cifrado y desea que su montaje esté en el arranque, asegúrese de colocar el archivo fuera de su directorio de inicio. en / etc / o / media / podría ser un lugar adecuado y fácilmente memorable.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.