En este artículo, aprenda sobre estos conceptos:
- Los protocolos de Server Message Block (SMB) y Common Internet File System (CIFS)
- Dispositivos y beneficios de usar CIFS
- Montando intercambios de CIFS en un cliente de Linux
Este artículo le ayuda a prepararse para el Objetivo 314.1 en el Tema 312 del examen de Especialidad en Entorno Mixto de Linux Professional Institute (302). El objetivo tiene un peso de 3.
Este artículo asume que tiene un conocimiento práctico de las funciones de línea de comandos de Linux y que entiende las bases de la configuración de Samba. Debe estar familiarizado con la estructura general del archivo de configuración smb.conf. También debe entender las bases de cómo Linux monta los sistemas de archivos local y remoto (usando el comando
mount y el archivo /etc/fstab). Estar familiarizado con el comando ftp de modo de texto estándar de Linux es útil pero no necesario.
Antes de proceder con una descripción de cómo usar Linux como un cliente para un servidor de SMB/CIFS, es útil revisar las características de los protocolos para ver cómo se comparan con necesidades de Linux para un sistema de archivos. Esta comparación viene en dos partes: una examinación del protocolo de SMB original y una investigación de las formas en las cuales las extensiones de CIFS más recientes cambian las bases de SMB. Tal vez quiera revisar el artículo de developerWorks sobre LPI Objetivo 310.1, el cual introduce algunos de los componentes básicos detrás de SMB/CIFS (vea Recursos para obtener un enlace).
SMB proporciona varios dispositivos exclusivos desde una perspectiva de redes, incluyendo su propio sistema de nombres para computadores (nombres de Network Basic Input/Output System [NetBIOS]), grupos de trabajo y protocolos de autenticación de usuario. Con el propósito de entender cómo SMB y CIFS trabajan como protocolos para un cliente de intercambio de archivos de Linux, el dispositivo más importante es el conjunto de metadatos que proporciona el protocolo.
Los metadatos son datos asociados con, pero no parte de, un archivo. Ejemplos incluyen la indicación de fecha y hora del archivo, su propietario, sus permisos e incluso su nombre. Sin duda está familiarizado con algunos de los dispositivos comunes de los metadatos de archivo en computadores de Linux, y tal vez esté familiarizado con algunas de las diferencias entre Linux y otros sistemas operativos, tal como Windows. Ya que SMB fue diseñado para DOS, Windows e IBM Operating System/2® (OS/2), comparte muchos de sus dispositivos de metadatos. Lo más importante, SMB carece de soporte para metadatos de UNIX® y Linux tal como la propiedad, los grupos y la mayoría de los permisos. SMB también carece de soporte para enlaces simbólicos y enlaces fijos así como otros tipos de archivos especiales tales como los nodos de dispositivo. SMB proporciona algunos tipos de metadatos que Linux normalmente no entiende, tal como los bits hidden, archive y system . Puede correlacionar un bit Read-only con el bit de permiso Write.
Otro límite de SMB es su límite de tamaño de archivo de 2GiB. Esta limitación obviamente puede representar un problema en el mundo actual de archivos de copia de seguridad o archivos multimedia de múltiples gigabytes, entre otros.
Para trabajar alrededor de estas diferencias de SMB desde las expectativas del sistema de archivos de Linux, los clientes de SMB de Linux deben ignorarlas o proporcionar opciones para "falsificar" los datos. Estas opciones son similares a aquellas usadas al montar sistemas de archivos de NT file system (NTFS) o File Allocation Table (FAT) en Linux. Afortunadamente, CIFS proporciona más y mejores opciones para manejar algunas de estas limitaciones.
También debe estar consciente de los puertos de red que usa SMB. Estos son puertos de User Datagram Protocol (UDP) 137 y 138 (para resolución de nombre y servicios de datagrama) y puerto TCP 139 (para servicios de sesión—en otras palabras, la mayoría de las transferencias de archivos). Necesitará esta información si alguna vez tiene que depurar SMB usando herramientas de diagnóstico de red de bajo nivel.
A mediados de la década de 1990, Microsoft® decidió cambiar el nombre de SMB a CIFS y simultáneamente añadió un nuevo conjunto de dispositivos. Estos dispositivos incluyen soporte para enlaces simbólicos y fijos y tamaños de archivos más grandes. CIFS también soporta el acceso al servidor en el puerto 445 además del puerto anterior, 139.
Las extensiones de otros son al menos tan importantes como las extensiones propias de Microsoft para SBM en CIFS. En particular, un conjunto de dispositivos de CIFS conocido como extensiones de UNIX proporciona soporte para propiedad del archivo, permisos y algunos otros metadatos de estilo UNIX. Si el cliente y el servidor soportan estos dispositivos, puede hacer un uso mucho más efectivo de un servidor de CIFS desde Linux del que pudo hacer un servidor que sólo soporta SMB. Como podría esperar, los sistemas operativos de Windows Server® no soportan estas extensiones, así que sólo son útiles cuando si cliente de Linux se conecta a un servidor de Samba. Este servidor también debe ser configurado con la siguiente opción global:
unix extensions = Yes |
Esta opción estaba establecida en No de forma predeterminada en Samba anterior a la versión 3.0, pero Samba 3.0 conmutó el valor predeterminado a
Yes, así que tal vez no necesite establecer explícitamente la opción.
En algunos aspectos, la forma más simple de acceder a un servidor de SMB/CIFS desde Linux es usar una utilidad de modo de texto conocida como
smbclient. Este programa es similar al programa de cliente ftp clásico, así que si está familiarizado con ftp, no debe tener muchos problemas con smbclient. Si no está familiarizado con
ftp, la idea detrás del programa es iniciar una conexión con el servidor que no involucra el montaje de intercambios en una forma tradicional. En lugar de eso, usted escribe comandos para ver, suprimir, descargar o actualizar archivos.
Para usar smbclient, usted escribe su nombre seguido del nombre de servicio, que toma la forma de //SERVER/SERVICE,
tal como //TANGO/GORDON para acceder al intercambio GORDON en el servidor TANGO. Dependiendo de la configuración del servidor, probablemente se le solicitará una contraseña. Si la ingresa correctamente, podrá escribir diversos comandos para acceder a archivos en el servidor. La Tabla 1 resume algunos de los comandos smbclient más importantes; consulte la página principal de la utilidad para obtener más información sobre comandos más exóticos.
Tabla 1: Comandos smbclient importantes
| Comando | Efecto |
|---|---|
? o
help | Muestra un resumen de comandos |
cd | Se cambia a un nuevo directorio en el servidor |
del | Suprime un archivo |
dir o
ls | Muestra los archivos en el directorio actual (o en uno que usted especifique) |
exit o
quit | Finaliza la sesión |
get | Transfiere un archivo del servidor al cliente |
lcd | Cambia el directorio en funcionamiento en e la computadora local |
md o
mkdir | Crea un directorio en el servidor |
mget | Transfiere múltiples archivos del servidor al cliente |
more | Muestra un archivo remoto usando su pager local |
mput | Transfiere múltiples archivos del cliente al servidor |
put | Transfiere un archivo del cliente al servidor |
rd o
rmdir | Suprime un directorio |
rename | Renombra un archivo en el servidor |
rm | Suprime uno o más archivos en el servidor |
De forma predeterminada, smbclient usa su nombre de usuario actual para conectarse al servidor; sin embargo, puede cambiar su nombre de usuario con la opción -U . De hecho, muchas otras opciones de línea de comandos están disponibles, incluyendo opciones que hacen posible transferir archivos sin ingresar al modo interactivo de
smbclient. Por lo tanto, puede usar smbclient en scripts para realizar transferencias de archivos automatizadas. Consulte la página principal del programa para obtener más detalles sobre este tema.
En uso, una sesión de smbclient es probable que se parezca al Listado 1.
Listado 1. Sesión de smbclient de ejemplo
$ smbclient //TANGO/GORDON/ Enter gordon's password: Domain=[RINGWORLD] OS=[Unix] Server=[Samba 3.4.12] smb: \> cd mystuff smb: \mystuff\> ls . D 0 Mon May 16 19:20:08 2011 .. D 0 Mon May 16 19:18:12 2011 xv-3.10a-1228.1.src.rpm 3441259 Tue May 18 19:09:26 2010 License.txt 27898 Mon May 16 19:17:15 2011 xorg.conf 1210 Fri Jan 21 04:18:13 2011 51198 blocks of size 2097152. 2666 blocks available smb: \mystuff\> get xorg.conf getting file \mystuff\xorg.conf of size 1210 as xorg.conf (9.4 KiloBytes/sec) (average 9.4 KiloBytes/sec) smb: \mystuff\> exit |
Consejo:
smbclient es una excelente herramienta de depuración.
Es simple y le da la habilidad de acceder a su red en una forma distinta a montar un intercambio, lo que puede ser útil si está intentando depurar un problema.
Montando intercambios de SMB/CIFS
Aunque smbclient es una herramienta útil, no le da el mismo tipo de acceso perfecto al servidor al que está acostumbrado en clientes de Windows. Si necesita dicho acceso, debe usar otras herramientas para montar los intercambios de SMB/CIFS. Puede hacer esto con el comando
mount estándar de Linux; o puede editar su archivo /etc/fstab
para montar automáticamente intercambios de SMB/CIFS cuando la computadora se vuelva a cargar.
Montando intercambios temporalmente
Puede montar un intercambio de SMB/CIFS usando el mismo comando
mount que usa para montar volúmenes locales o exportaciones de Network File System (NFS). Puede especificar el tipo de sistema de archivos como
cifs; o, en la mayoría de los casos,
mount se las arregla para usar este controlador con base en la sintaxis del comando. Alternativamente, puede llamar al programa ayudante
mount.cifs directamente. En principio, sólo la especificación de dispositivo es distinta de la del montaje de un sistema de archivos local; por lo tanto, para montar el intercambio GORDON del servidor TANGO, usted puede escribir, como raíz:
# mount //TANGO/GORDON /mnt |
Sin embargo, en la práctica este uso tiene un problema: pasa
root como el nombre de usuario al servidor. Si el servidor no permite que root inicie sesión, el intento de montaje fallará. Puede corregir este problema al usar la opción
-o user=name para pasar un nombre de usuario al servidor:
# mount -o user=gordon //TANGO/GORDON /mnt Password: |
Muchas otras opciones de montaje, pasadas con la opción -o
para mount, están disponibles. La Tabla 2 resume las más útiles de estas opciones. Consulte la página principal de
mount.cifs para obtener información sobre opciones adicionales.
Tabla 2: Opciones importantes de mount.cifs
| Opción | Efecto |
|---|---|
user=name o
username=name
| Especifica el nombre de usuario a ser enviado al servidor. |
password=pass | Especifica la contraseña a ser enviada al servidor. Si la contraseña no es especificada, mount.cifs usa el valor de la variable de entorno PASSWD; si eso no está establecido, el programa solicita la contraseña. |
credentials=filename | Especifica un archivo que contiene el nombre de usuario, la contraseña y, opcionalmente, el nombre del grupo de trabajo. Cada valor aparece en su propia línea, precedido de las series
username=,
password= y
workgroup=, respectivamente. |
uid=UID | Establece el ID de usuario (UID) del usuario que debe poseer los archivos montados del intercambio. |
gid=GID | Similar a la opción uid=UID , pero afecta el ID de grupo (GID) en lugar del UID. |
file_mode=mode | Establece el modo de archivo (permisos), en forma numérica, a ser asignado a los archivos del servidor. |
dir_mode=mode | Similar a file_mode=mode, pero afecta a directorios en lugar de a archivos. |
guest | Evita la solicitud de una contraseña. Esta opción normalmente funciona sólo si el intercambio soporta acceso de invitado. |
hard | Si el servidor se vuelve inaccesible, los procesos que intentan acceder a los archivos en el servidor se colgarán hasta que el servidor retorne. |
soft | Si el servidor se vuelve inaccesible, los procesos que intentan acceder a archivos en el servidor recibirán mensajes de error. Este es el comportamiento predeterminado. |
Las opciones uid, gid,
file_mode y dir_mode normalmente son innecesarias si se conecta a un servidor que soporte las extensiones de UNIX de CIFS. Sin embargo, puede usar estos dispositivos para alterar temporalmente los valores que el servidor proporciona en estos casos. También tome en cuenta que todas estas opciones afectan la forma en que aparecen los archivos en el cliente; los permisos y la propiedad en el servidor no son afectados por estas opciones.
Con el intercambio de SMB/CIFS montado, puede accederlo en la misma forma en que lo haría en un volumen local o en un volumen de NFS. Puede copiar archivos con
cp, suprimir archivos con
rm, editar archivos directamente con editores de texto u otros programas, etc. Tenga en mente, sin embargo, que si el servidor no soporta un dispositivo, tal vez no pueda usarlo. Por ejemplo, no puede usar chmod para cambiar el modo de un archivo a menos que el servidor soporte las extensiones de UNIX. (Una excepción parcial en el caso de chmod es que puede cambiar los permisos de Write; estos están correlacionados, en forma inversa, con el bit Read-only de SMB.)
Cuando haya terminado de usar un intercambio, puede desmontarlo con el comando
umount , justo como si fuera un sistema de archivos local:
# umount /mnt |
Montando intercambios permanentemente
Si desea que una computadora monte un intercambio de SMB/CIFS de forma permanente, puede hacerlo al añadir una entrada a /etc/fstab. Este proceso funciona de forma muy similar a cualquier otra traducción de un comando mount a una entrada de /etc/fstab. Sin embargo, una opción de la Tabla 2
merece una mención especial en este contexto:
credentials. Ya que la mayoría de los servidores de SMB/CIFS usan contraseñas para la autenticación, debe almacenar permanentemente la contraseña si espera que un intercambio sea montado usando /etc/fstab. Almacenar la contraseña directamente en /etc/fstab usando la opción password
es posible, pero no aconsejable; ya que /etc/fstab debe ser elegible para todos los usuarios de la computadora, una contraseña almacenada de esta manera también será legible para todos. Usar credentials le permite almacenar la contraseña en un archivo que es legible sólo para la raíz, mejorando así la seguridad de contraseña.
Una entrada funcional de /etc/password para un intercambio de SMB/CIFS puede parecerse a lo siguiente:
//TANGO/BACKUPS /saveit cifs credentials=/etc/samba/creds.txt 0 0 |
El archivo de credenciales asociado puede verse de la siguiente manera:
username=buuser password=Iw2bUmS[t |
Precaución: Asegúrese de dar al archivo de credenciales los permisos adecuados—normalmente 0600 o 0400 con propiedad para la raíz o para el usuario cuyas credenciales estén almacenadas en el archivo.
Con esta configuración en su lugar, el intercambio //TANGO/BACKUPS debe ser montado automáticamente siempre que vuelva a cargar la computadora o escriba
mount -a. Si este dispositivo no funciona, verifique que el nombre de usuario y la contraseña sean correctos, pruebe con el comando
mount y realice otros procedimientos de resolución de problemas de rutina.
El siguiente artículo en esta serie, "Aprenda Linux, 302 (Entornos mixtos): NetBIOS y WINS", cubre la resolución de nombres usando Windows Internet Name Service (WINS) y la exploración, lo cual permite a los computadores ubicar los intercambios de red en una jerarquía de tipo árbol de computadores e intercambios.
Aprender
- "Aprenda Linux, 302 (Entorno mixto): Conceptos" (developerWorks
febrero de 2011) describe los principios básicos de SMB y de CIFS.
- La Wiki de Samba incluye una página sobre las extensiones de UNIX de CIFS que proporciona detalles técnicos sobre estos dispositivos.
- En el sitio del Programa de LPIC , encuentre objetivos detallados, listas de tareas y preguntas de muestra para los tres niveles de certificación de administración de sistemas Linux de LPI. En particular, observe los objetivos detallados de LPI-302 y las tareas y preguntas de muestra.
- Revise toda la serie de preparación de exámenes LPI en developerWorks para aprender los fundamentos de Linux y prepararse para la certificación de administrador de sistemas con base en los objetivos del examen LPI anteriores a abril de 2009.
-
Exam Preparation Resources for Revised LPIC Exams proporciona una lista
de otros recursos de certificación de formación mantenidos por LPI.
- En la zona Linux de developerWorks, encontrará cientos de artículos "cómo hacer" y tutoriales así como descargas, foros de discusión y una gran cantidad de otros recursos para desarrolladores y administradores de Linux.
- Siga a DeveloperWorks en Twitter o suscríbase a un feed de tweets de Linux en developerWorks.
- Permanezca actualizado(a) con los Eventos técnicos y webcasts de developerWorks enfocados en una variedad de productos IBM y de temas de la industria TI.
- Asista a una sesión informativa gratuita de developerWorks
en vivo para actualizarse rápidamente sobre productos y herramientas IBM y sobre las tendencias de la industria de la TI.
- Vea demostraciones developerWorks on-demand que van desde la instalación de producto y demostraciones de configuración para principiantes hasta funcionalidad avanzada para desarrolladores experimentados.
Comentar
- Participe en la Comunidad My developerWorks.
Conéctese con otros usuarios developerWorks mientras explora los blogs, foros, grupos y wikis dirigidos a desarrolladores.

Roderick W. Smith es un consultor y autor de más de una docena de libros sobre UNIX y Linux, incluyendo The Definitive Guide to Samba 3, Linux in a Windows World, y Linux Professional Institute Certification Study Guide. También es el autor del software de particionamiento GPT fdisk. Actualmente vive en Woonsocket, Rhode Island.