Bienvenido(a) a Alcance Libre 27/09/2023, 11:14
Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.
SMB (acrónimo de Server Message Block) es un protocolo, del Nivel de Presentación del modelo OSI de TCP/IP, creado en 1985 por IBM. Algunas veces es referido también como CIFS (Acrónimo de Common Internet File System, http://samba.org/cifs/) tras ser renombrado por Microsoft en 1998. Entre otras cosas, Microsoft añadió al protocolo soporte para enlaces simbólicos y duros así como también soporte para archivos de gran tamaño. Por mera coincidencia, ésto ocurrió por la misma época en que Sun Microsystems hizo el lanzamiento de WebNFS (una versión extendida de NFS, http://www.sun.com/software/webnfs/overview.xml).
SMB fue originalmente diseñado para trabajar a través del protocolo NetBIOS, el cual a su vez trabaja sobre NetBEUI (acrónimo de NetBIOS Extended User Interface, que se traduce como Interfaz de Usuario Extendida de NetBIOS), IPX/SPX (acrónimo de Internet Packet Exchange/Sequenced Packet Exchange, que se traduce como Intercambio de paquetes inter-red/Intercambio de paquetes secuenciales) o NBT, aunque también puede trabajar directamente sobre TCP/IP.
SAMBA es un conjunto de programas originalmente creados por Andrew Tridgell y actualmente mantenidos por The SAMBA Team, bajo la Licencia Publica General GNU y que implementan en sistemas basados sobre UNIX™ el protocolo SMB. Sirve como reemplazo total para Windows™ NT, Warp™, NFS™ o servidores Netware™.
Necesitará tener instalados los siguientes paquetes:
Si utiliza CentOS, Fedora™ o Red Hat™ Enterprise Linux, sólo ejecute:
yum -y install samba samba-client samba-common |
En CentOS 6 y Red Hat™ Enterprise Linux 6 se instalará Samba 3.6.9.
En CentOS 5 y Red Hat™ Enterprise Linux 5 se instalará Samba 3.0.33, sin embargo hay opción a utilizar en su lugar Samba 3.6.6 instalando los paquetes samba3x, samba3x-client y samba3x-common.
yum remove samba samba-client samba-common |
Como servidor es necesario abrir los puertos 137/udp, 138/udp, 139/tcp y 445/tcp.
Como cliente es necesario abrir los puertos 137/udp y 138/udp.
Asumiendo que la red de área local está detrás de la zona home, ejecute lo siguiente para abrir los puertos requeridos:
|
Ejecute lo siguiente para añadir de manera permanente la regla correspondiente:
|
Si utiliza la zona internal, simplemente reemplace home por internal en las reglas descritas arriba.
Ejecute lo siguiente:
|
Ejecute lo siguiente para guardar los cambios:
service iptables save |
O bien edite el archivo /etc/sysconfig/iptables:
vi /etc/sysconfig/iptables |
Y añada el siguiente contenido:
|
Reinicie el servicio para aplicar los cambios:
service iptables restart |
Edite el archivo /etc/shorewall/rules:
vi /etc/shorewall/rules |
Añada las siguientes reglas para permitir el acceso desde cualquier zona del muro cortafuegos:
#ACTION SOURCE DEST PROTO DEST SOURCE
# PORT PORT(S)1
ACCEPT all fw udp 137,138
ACCEPT all fw tcp 139,445 |
Si se tienen varias zonas en el muro cortafuegos y sólo se desea permitir el acceso desde la zona correspondiente a red de área local, añada las siguientes reglas:
#ACTION SOURCE DEST PROTO DEST SOURCE
# PORT PORT(S)1
ACCEPT loc fw udp 137,138
ACCEPT loc fw tcp 139,445 |
Ejecute lo siguiente para aplicar los cambios:
service shorewall restart |
Para efectos de los objetivos de este documento, por favor ejecute la siguiente línea:
|
A continuación la explicación de para qué sirven estas políticas y otras más.
Ejecute lo siguiente para permitir compartir todos los recursos en modo de sólo lectura:
|
Ejecute lo siguiente para permitir compartir todos los recursos en modo de lectura y escritura:
|
Para cualquiera de las dos políticas anteriores: los archivos y directorios a compartir requieren el contexto samba_share_t. Ejemplo:
|
Ejecute semanage con fcontext como argumento, la opción -a, la opción -t con samba_share_t como argumento y el directorio o archivo de destino como último argumento para establecer este contexto como el predeterminado para éste:
|
Lo anterior permitirá establecer los contextos establecidos como los predeterminados para cada directorio o archivo definido. Es decir se restaurarán estos mimos contextos al ejecutar restorecon sobre estos archivos o directorios. Puede aplicarse también con cualquier otro contexto de SELinux.
Ejecute lo siguiente sólo si se requiere permitir la escritura como usuario anónimo:
setsebool -P allow_smbd_anon_write=1 |
Lo anterior requiere que los archivos y directorios involucrados tengan el contexto public_content_rw_t. Ejemplo:
mkdir -p /srv/samba/publico |
Ejecute semanage con fcontext como argumento, la opción -a, la opción -t con public_content_rw_t como argumento y el directorio o archivo de destino como último argumento para establecer este contexto como el predeterminado para éste:
|
Ejecute lo siguiente para permitir compartir a través de Samba los directorios de inicio de los usuarios del anfitrión local:
|
Ejecute lo siguiente para permitir utilizar los directorios de inicio de un servidor Samba remoto como los directorios de inicio del anfitrión local:
|
Ejecute lo siguiente a fin de que SELinux permita al servicio smb crear nuevos directorios de inicio para los usuarios a través de PAM —una operación común en Controladores Primarios de Dominio—:
|
Ejecute lo siguiente para permitir el funcionamiento como Controlador Primario de Dominio (PDC, Primary Domain Controler):
setsebool -P samba_domain_controller=1 |
Ejecute lo siguiente para permitir el funcionamiento como un organizador de mapa de puertos (portmappper):
setsebool -P samba_portmapper=1 |
Ejecute lo siguiente para permitir la ejecución sin confinamiento de programas dentro del directorio /var/lib/samba/scripts:
setsebool -P samba_run_unconfined=1 |
Asigne una contraseña al usuario root. Ésta puede ser distinta a la utilizada en el sistema.
smbpasswd -a root |
Las cuentas de usuario que se utilizarán para acceder hacia Samba pueden prescindir de acceso al intérprete de mandatos. Se puede definir /sbin/nologin o /bin/false como intérprete de mandatos para la cuenta de usuario involucrada.
useradd -s /sbin/nologin usuario smbpasswd -a usuario |
Es opcional —pero innecesario— asignar contraseña con passwd, por lo cual las cuentas correspondientes estarían inactivas para el resto de los servicios.
El archivo /etc/samba/lmhosts (lmhosts es acrónimo de LAN Manager hosts) se utiliza de modo similar al archivo /etc/hosts, pero se utiliza específicamente para resolver los nombres NetBIOS. Debe resolver al menos el nombre del anfitrión local.
Edite el archivo /etc/samba/lmhosts:
vi /etc/samba/lmhosts |
Encontrará el siguiente contenido:
127.0.0.1 localhost |
El nombre NetBIOS debe tener un máximo de doce caracteres alfanuméricos. Normalmente se define el nombre corto del servidor asociado a la dirección IP utilizada para acceder a la red de área local. La separación de campos se hace con un tabulador. Ejemplo:
127.0.0.1 localhost
192.168.70.1 servidor |
Opcionalmente se pueden añadir los nombres y direcciones IP de cada uno de los anfitriones de la red local. Ejemplo:
127.0.0.1 localhost 192.168.70.1 servidor 192.168.70.2 joel 192.168.70.3 blanca 192.168.70.4 joelalejandro 192.168.70.5 sergioarmando 192.168.70.6 reneisaac 192.168.70.7 finanzas 192.168.70.8 direccion |
Edite el archivo /etc/samba/smb.conf con cualquier editor de texto simple.
vi /etc/samba/smb.conf |
Dentro de este archivo, encontrará información que será de utilidad y que está comentada con almohadillas (símbolo #) y varios ejemplos comentados con punto y coma (símbolo ;), siendo estos últimos los que se pueden tomar como referencia para configurar.
Se utiliza para establecer el grupo de trabajo. El valor puede estar indistintamente en mayúsculas o minúsculas y debe tener una longitud del nombre debe ser de hasta 12 caracteres. Ejemplo:
workgroup = MIGRUPO |
Permite establecer arbitrariamente un nombre de anfitrión distinto al detectado automáticamente. Este nombre de anfitrión deberá corresponder con el establecido en el archivo /etc/samba/lmhosts. El valor puede estar indistintamente en mayúsculas o minúsculas y debe tener una longitud del nombre debe ser de hasta 12 caracteres. Ejemplo:
netbios name = servidor |
Es de carácter informativo para los usuarios de la red de área local. Permite definir una descripción breve acerca del servidor.
server string = Servidor Samba %v en %L |
Permite establecer seguridad adicional estableciendo la lista de control de acceso de anfitriones. En ésta se pueden definir direcciones IP individuales o bloques de direcciones IP que tendrán permiso de acceso hacia el servidor.
Si la red consiste en las anfitriones con dirección IP que van desde 192.168.70.1 hasta 192.168.70.254, el rango de direcciones IP que se definirá en hosts allow será «192.168.70.», de modo tal que sólo se permitirá el acceso dichas máquinas. En el siguiente ejemplo se definen las redes 192.168.70.0/24 y 192.168.37.0/24, especificando los tres primeros octetos de la dirección IP de red, así como cualquier dirección IP de la red 127.0.0.0/8 (retorno del sistema o loopback), siendo necesario definir sólo el primer octeto de dicho segmento:
hosts allow = 127., 192.168.70., 192.168.37. |
De modo predeterminado está ausente de la configuración. Puede añadirla después de la opción mencionada arriba. Define el orden a través del cual se tratará de resolver los nombres NETBIOS. Si utiliza el siguiente ejemplo, se establece que primero se intentará resolver los nombres NETBIOS con la información del archivo /etc/samba/lmhosts, luego el archivo /etc/hosts, luego a través de consultas en el servidor WINS y, si todo lo anterior falla, a través de la dirección IP de difusión de la red local.
name resolve order = lmhosts hosts wins bcast |
Si se va a utilizar un servidor WINS en otro servidor o se está configurando el sistema sólo como cliente SMB, se pueden agilizar las comunicaciones con el resto de los equipos de la red local estableciendo wins como la primera opción para resolución de nombres NETBIOS:
name resolve order = wins lmhosts hosts bcast |
![]() |
|||||
Los administradores de archivos de los distintos escritorios de Linux requieren que esté presente esta última configuración en el archivo /etc/samba/smb.conf del anfitrión desde el cual se ejecute y que además se especifique wins en el orden de resolución de nombres del archivo /etc/nsswitch.conf del anfitrión desde el cual se ejecute. De otro modo Nautilus mostrará invariablemente un error cada vez que se intente conectar a cualquier servidor de red utilizando un nombre NETBIOS. Guarde el archivo /etc/samba/smb.conf, regrese al intérprete de mandatos y edite el archivo /etc/nsswitch.conf:
En CentOS 6 y Red Hat™ Enterprise Linux 6, alrededor de la línea 38, localice lo siguiente:
Añada wins después de dns:
En versiones recientes de Fedora™, openSUSE™ o Ubuntu™ encontrará lo siguiente alrededor de la línea 63:
Añada wins después de dns:
|
Permite establecer qué interfaces de red del anfitrión local utilizar. Samba rechazará todas las conexiones provenientes desde cualquier otra interfaz o dirección IP sin definir. Ésto es útil cuando Samba se ejecuta en un servidor que sirve además de puerta de enlace para la red local, impidiendo se establezcan conexiones hacia este servicio desde Internet o bien fuera del bloque o segmento de direcciones de la red local.
Los valores aceptados para esta opción consisten una lista separada por comas o espacios, con los nombres de las interfaces (lo, eth0, eth1, etc.) y direcciones IP utilizada en una interfaz en particular, con la máscara de sub-red en formato CIDR (Classless Inter-Domain Routing), es decir, expresada en bits. Ejemplo:
interfaces = lo, eth1, 192.168.70.254/25 |
Sólo se utiliza cuando hay más de un grupo de trabajo en la red de área local. Esta opción se encarga de que el servidor Samba se anuncie a si mismo de forma periódica hacia uno o más grupos de trabajo específicos. Se utiliza cuando se necesita que el servidor Samba aparezca en otros grupos de trabajo existentes en la red de área local. El grupo de trabajo de destino puede estar en donde sea, mientras exista una ruta y sea posible la difusión exitosa de paquetes.
Los valores que pueden ser utilizados son direcciones IP de difusión (broadcast) de la red utilizada (es decir la última dirección IP del segmento de red) y/o nombres de grupos de trabajo. En el siguiente ejemplo se define que el servidor Samba se anuncie a través de las direcciones IP de difusión 192.168.70.127 (que corresponde a la dirección IP de difusión de la red 192.168.70.0/25) y 192.168.2.255 (que corresponde a la dirección IP de difusión de la red 192.168.2.0/24), hacia los grupos de trabajo DOMINIO1 y DOMINIO2 que corresponden a estas redes.
remote announce = 192.168.70.127/DOMINIO1, 192.168.2.255/DOMINIO2 |
Para iniciar los servicios nmb y smb por primera vez, ejecute:
systemctl start nmb |
Si realiza algún cambio en la configuración de la opción netbios name, es necesario reiniciar el servicio nmb, el cual es el encargado de proveer el servidor de nombres para los clientes a través de NetBIOS sobre IP.
systemctl restart nmb |
Si va a aplicar algún cambio en cualquier otra opción de la configuración, como son los recursos compartidos, sólo es necesario reiniciar el servicio smb:
systemctl restart smb |
Para que los servicios nmb y smb inicien automáticamente junto con el sistema, ejecute lo siguiente:
systemctl enable nmb |
Para iniciar los servicios nmb y smb por primera vez, ejecute:
service nmb start |
Si realiza algún cambio en la configuración de la opción netbios name, es necesario reiniciar el servicio nmb, el cual es el encargado de proveer el servidor de nombres para los clientes a través de NetBIOS sobre IP.
service nmb restart |
Si va a aplicar algún cambio en cualquier otra opción de la configuración, como son los recursos compartidos, sólo es necesario reiniciar el servicio smb:
service smb restart |
Para que los servicios nmb y smb inicien automáticamente junto con el sistema, ejecute lo siguiente:
chkconfig nmb on |
Las impresoras se comparten de modo predeterminado y sólo hay que realizar algunos ajustes. Si se desea que se pueda acceder hacia la impresora como usuario invitado sin contraseña, añada public = Yes — lo mimso queguest ok = Yes— en la sección de impresoras.
Edite el archivo /etc/samba/smb.conf:
vi /etc/samba/smb.conf |
Localice la sección de impresoras y añada public = Yes a la configuración:
[printers]
comment = El comentario que guste.
path = /var/spool/samba
printable = Yes
browseable = No
writable = no
printable = yes
public = Yes |
Para aplicar los cambios, reinicie el servicio smb:
service smb restart |
Para la administración de las colas de impresión, anteriormente se hacía utilizando la opción printer admin, definiendo una lista de usuarios o grupos. Actualmente se hace de manera similar a cómo se hace en en Windows, utilizando políticas, ejecute:
net -S servidor -U root rpc rights grant fulano SePrintOperatorPrivilege |
En el mismo archivo de configuración de Samba encontrará distintos ejemplos para distintas situaciones particulares. Lo siguiente corresponde a un ejemplo básico:
[lo_que_sea] comment = Comentario que se le ocurra path = /cualquier/ruta/que/desee/compartir |
Procure que los nombres de los recursos a compartir tengan un máximo de 12 caracteres, utilizando sólo caracteres alfanuméricos de la tabla de caracteres ASCII.
El volumen puede utilizar cualquiera de las siguientes opciones:
guest ok
Yes
o No
.public
Yes
o No
.browseable
Yes
o No
.writable
read only
. El valor puede ser Yes
o No
. Ejemplos: «writable = Yes»
es lo mismo que «read only = No»
. Obviamente «writable = No»
es lo mismo que «read only = Yes»
valid users
fulano, mengano, @administradores
write list
fulano, mengano, @administradores
admin users
fulano, mengano, @administradores
directory mask
directory mode
. Define qué permiso en el sistema tendrán los subdirectorios creados dentro del recurso. Ejemplos: 1777
<create mask
0644
En el siguiente ejemplo se compartirá a través de Samba el recurso denominado ejemplo, el cual está localizado en el directorio /srv/samba/ejemplo de la unidad de almacenamiento. Se permitirá el acceso a cualquiera, pero será un recurso de sólo lectura excepto para los usuarios administrador y fulano, quienes tendrán privilegios de lectura y escritura. Todo nuevo directorio que sea creado en su interior tendrá permiso 755 (drwxr-xr-x) y todo archivo que sea puesto en su interior tendrá permisos 644 (-rw-r--r--).
Genere el nuevo directorio /srv/samba/ejemplo ejecutando lo siguiente:
mkdir -p /srv/samba/ejemplo |
Cambie el contexto de SELinux a fin de que este directorio sea considerado como contenido Samba.
chcon -t samba_share_t /srv/samba/ejemplo |
Ejecute lo siguiente para hacer permanente el contexto:
|
Cambie asigne las listas de control de acceso con permisos de lectura, escritura y acceso a los usuarios fulano y zutano:
setfacl -m u:fulano:rwX,u:zutano:rwX /srv/samba/ejemplo |
Edite el archivo /etc/samba/smb.conf:
vi /etc/samba/smb.conf |
Al final del archivo añada el siguiente contenido:
[ejemplo] comment = Recurso de ejemplo path = /srv/samba/ejemplo guest ok = Yes read only = Yes write list = fulano, zutano directory mask = 0755 create mask = 0644 |
Guarde los cambios y salga del editor de texto.
Reinicie el servicio smb para aplicar los cambios:
service smb restart |
Ejecute smbclient con //localhost/ejemplo como argumento y la opción -U (mayúscula) con fulano como argumento. Se solicitará ingresar la contraseña del usuario fulano.
smbclient //locahost/ejemplo -U fulano |
Pulse CTRL-D o ejecute exit para salir del intérprete de smbclient.
Es poco conveniente que los usuarios puedan acceder, notando la presencia de archivos ocultos (archivos de configuración, por lo general), es decir archivos cuyo nombre comienza con un punto, como es el caso del directorio de inicio del usuario en el servidor Samba (.bashrc, .bash_profile, .bash_history, etc.). Puede utilizarse la opción hide dot files, con el valor Yes, para mantenerlos ocultos.
hide dot files = Yes |
Esta opción es útil para complementar la configuración de los directorios personales de los usuarios.
Edite el archivo /etc/samba/smb.conf:
vi /etc/samba/smb.conf |
Localice la configuración correspondiente a los directorios de inicio de los usuarios y añada la opción hide dot files con el valor Yes, como se muestra a continuación:
[homes]
comment = Home Directories
browseable = no
writable = yes
hide dot files = Yes |
Para aplicar los cambios, reinicie el servicio smb:
service smb restart |
Este procedimiento se realiza en estaciones de trabajo Linux que requieren acceder hacia volúmenes SMB.
Abra una terminal como root en el equipo cliente y genere un nuevo directorio denominado /mnt/ejemplo:
mkdir /mnt/ejemplo |
Ejecute mount con la opción -t con el valor cifs, la opción -o para especificar con username el nombre de usuario a utilizar, la ruta del recurso compartido en el servidor Samba y el punto de montaje a utilizar:
mount -t cifs -o username=fulano //servidor/ejemplo /mnt/ejemplo |
Lo anterior solicitará se ingrese la contraseña del usuario utilizado en el servidor Samba especificado.
Para hacer permanente lo anterior, utilice un editor de texto para crear el archivo /etc/credentials:
vi /etc/credentials |
Añada el siguiente contenido, especificando el nombre de usuario y contraseña que serán utilizados específicamente con el recurso compartido involucrado:
username=fulano |
Cambie los permisos de acceso del archivo, de modo que sólo el usuario root pueda ver y modificar el contenido de éste:
chmod 600 /etc/credentials |
Edite el archivo /etc/fstab:
vi /etc/fstab |
Añada el siguiente contenido, especificando con las opciones uid y gid los números de UID y GID del usuario y grupo del anfitrión local que utilizarán el recurso. De modo predeterminado, este recurso será montado automáticamente con el siguiente reinicio de sistema.
|
Utilice las opciones noauto y user si se prefiere que el recurso sea montado manualmente por un usuario del anfitrión local:
|
Indudablemente el método más práctico y también el más sencillo para utilizar y hacer pruebas de diagnóstico utilizando smbclient. Éste permite acceder hacía cualquier servidor Samba o Windows™, de modo similar a como se hace con ftp en el intérprete de mandatos.
Para acceder al cualquier recurso CIFS/SMB, determine primero qué volúmenes o recursos compartidos hay. Ejecute smbclient del siguiente modo:
smbclient -U usuario -L servidor |
Lo anterior devolverá una salida similar la siguiente:
Domain=[MI-DOMINIO] OS=[Unix] Server=[Samba 3.6.9-151.el6]
Sharename Type Comment
--------- ---- -------
homes Disk Home Directories
netlogon Disk Network Logon Service
ejemplo Disk ejemplo
IPC$ IPC IPC Service (Servidor Samba 3.5.4-68.el6_0.2 en mi-servidor)
ADMIN$ IPC IPC Service (Servidor Samba 3.5.4-68.el6_0.2 en mi-servidor)
epl5900 Printer Created by system-config-printer 1.2.x
hp2550bw Printer Created by system-config-printer 1.2.x
Anonymous login successful
Domain=[MI-DOMINIO] OS=[Unix] Server=[Samba 3.6.9-151.el6]
Server Comment
--------- -------
mi-servidor Servidor Samba 3.6.9-151.el6 en mi-servidor
Workgroup Master
--------- -------
MI-DOMINIO MI-SERVIDOR |
La siguiente corresponde a la sintaxis básica para poder acceder hacia los recursos compartidos a través de CIFS/SMB:
smbclient //alguna_maquina/recurso -U usuario |
Ejemplo:
smbclient //SERVIDOR/EJEMPLO -U fulano |
Lo anterior solicitará la contraseña del usuario fulano.
smbclient //SERVIDOR/EJEMPLO -U fulano |
Pueden utilizarse casi las mismas funciones del intérprete de ftp —como serían get, mget, put, del, etc.
Las principales interfaces de escritorio para Linux —MATE, Cinnamon, Unity, GNOME, KDE, Xfce— incluyen soporte de cliente CIFS/SMB para sus administradores de archivos. Los URI deben utilizar el formato smb://servidor/recurso. Ejemplo:
Se requiere que exista un servidor WINS en la red local, se tenga establecida la opción name resolve order en el archivo /etc/samba/smb.conf y que la opción hosts del archivo /etc/nsswitch.conf incluya wins.
Desde Windows deberá ser posible acceder sin problemas hacia cualquier servidor Samba, como si fuese hacia cualquier otro sistema con Windows.
Última Edición: 20/09/2016, 11:21| Hits: 329,130