Configuración de SAMBA en Linux

SAMBA es un servicio de Linux que se utiliza para compartir recursos de Linux en servidores Windows. Por ejemplo, un filesystem o una impresora.

Con el protocolo CIFS podemos compartir un filesystem SAMBA en otro servidor Linux (como si fuera un NFS). Es importante no compartir por NFS y SAMBA el mismo FS, ya que la interacción de ambos protocolos al mismo tiempo podría corromper datos.

Como norma general, el fichero de configuración de SAMBA se encuentra en /etc/samba/smb.conf, del cuál, podemos destacar las siguientes directivas:

  • workgroup: Es el nombre del grupo de trabajo de los servidores Windows que van a interactuar con los recursos SAMBA.
  • Permisos de acceso a nivel de IP: Podemos permitir el acceso a un recurso SAMBA a una determinada IP o red. Lo haremos con la directiva allow: hosts allow = 192.168.1. localhost.
  • Permisos de acceso a nivel de usuario: Podemos restringir los usuarios que van a poder acceder al recurso SAMBA: valid users = usuario1, usuario2
  • Compartir recursos: 

[nombre para el recurso compartido] comment = Mi directorio compartido
path = /directorio del sistema UNIX
browseable = yes → El recurso es visible
writable = yes → El recurso tiene permisos de escritura create mask = 0777
directory mask = 0777

Ejemplo de configuración de un servidor Samba

# grep -v «#» smb.conf |grep -v ^\; |grep -v ^$
[global]
client lanman auth = yes
client ntlmv2 auth = no
rpc_server:netlogon=disabled
workgroup = cpd1.intranet.gencat.cat
server string = Samba Server Version %v
username map = /etc/samba/smbusers
smb passwd file = /etc/smbpasswd
encrypt passwords = Yes
guest account = nobody
map to guest = Bad User
log file = /var/log/samba/log.%m
max log size = 50
security = user
passdb backend = tdbsam
load printers = yes
cups options = raw
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
[T07V5_pro]
comment = FS /serveis/dades/PRO/NAS07/T07V5 – srvsmb0
hosts allow = 10.48.16.11 10.48.16.12 10.48.16.15
path = /serveis/dades/PRO/NAS07/T07V5
guest ok = yes
guest only = yes
browseable = yes
writable = yes
; read only = yes
public = yes
create mask = 0775
directory mask = 0775
#

En este caso es un Linux RedHat 6. Una vez configurado el fichero smb.conf, arranco el servicio con service smb start.

Si instalamos cifs-utils, podremos montar el filesystem SAMBA en otro servidor Linux. Ejemplo:

  Cómo obtener el driver de la tarjeta de red en RedHat 6

# grep -i cifs /etc/fstab |grep -v «#»
//srvsmb0/T07V5_pre /serveis/dadessmb cifs guest,uid=52801,noperm,iocharset=utf8,codepage=unicode,unicode 0 0
# df -hP /serveis/dadessmb
Filesystem Size Used Avail Use% Mounted on
//srvsmb0/T07V5_pre 9.9G 5.5G 4.0G 59% /serveis/dadessmb
#

Compartir un filesystem con el usuario invitado guest

  • En la sección [global] añadimos las siguientes directivas:
[global]

workgroup = WORKGROUP
security = user
username map = /etc/samba/smbusers
smb passwd file = /etc/smbpasswd
encrypt passwords = Yes

guest account = smbuser
map to guest = Bad User
  • Creamos el usuario smbuser en el sistema, ya que hemos elegido esta cuenta para este ejemplo, tal y como se puede observar.
  • El el fichero smbusers configuramos el usuario invitado:
[[email protected] samba]# cat smbusers.rpmsave
# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
smbuser = guest pcguest smbguest
[[email protected] samba]#

He añadido el «nobody» porque es la cuenta de invitado por defecto en el sistema.

  • Configuramos un recurso que vamos a compartir con Samba:
[CASOS_ESPECIALES]
        comment = FS /CASOS_ESPECIALES
        path = /CASOS_ESPECIALES
        create mask = 0755
        directory mask = 0775
        guest ok = yes
        guest only = yes
        browseable = yes
        writable = yes
        public = yes
        hosts allow = 10.48.0.247 10.49.0.247 30.32.0.53 30.32.48.82 30.32.0.80 30.32.0.83
  • Montamos el FS por cifs para comprobar que el acceso al recurso compartido no pide contraseña:
[[email protected] ~]# mount -t cifs -o username=guest,password="" //30.32.0.15/CASOS_ESPECIALES /david
[[email protected] ~]# df -hP /david
Filesystem                     Size  Used Avail Use% Mounted on
//30.32.0.15/CASOS_ESPECIALES  985G   72M  935G   1% /david
[[email protected] ~]#

Se puede probar cualquier usuario invitado que hayamos configurado.

Línea de comandos de SAMBA

  • smbclient -L hostMuestra los recursos compartidos en el servidor host. Ejemplo:

# smbclient -L 30.34.9.25 -U tomcat
Enter tomcat’s password:
Domain=[GENCAT.ECS.HP.COM] OS=[Unix] Server=[Samba 3.6.9-168.el6_5]

Sharename Type Comment
——— —- ——-
IPC$ IPC IPC Service (Samba Server Version 3.6.9-168.el6_5)
dades Disk FS /serveis/dades – lprenax0
tomcat Disk Home Directories
Domain=[GENCAT.ECS.HP.COM] OS=[Unix] Server=[Samba 3.6.9-168.el6_5]

Server Comment
——— ——-

Workgroup Master
——— ——-
#

  • smbmount //servidor_samba/nombre_recurso /mnt/samba: Monta un filesystem por SAMBA.
  Tutorial de Kibana - Instalación y configuración

smbmount //host/nombredelrecurso /mnt/samba -o username=<usuario>

Con smbumount lo desmontaremos.

  • nmblookup host: Nos muestra la IP del servidor host.
  • nbtscan: Escanea la red en busca de recursos SAMBA compartidos.
  • smbstatus: Muestra el estado de SAMBA. Quién hay conectado a los recursos.

Autentificación de un usuario en un recurso SAMBA

La opción más sencilla es crear un usuario en el sistema operativo Linux y darle una contraseña “Samba”. Por ejemplo, si queremos que sea el usuario “tomcat” el que pueda autentificarse le asignaremos una contraseña de Samba:

smbpasswd -a tomcat

Cuando compartamos el recurso, por ejemplo, el filesystem /serveis/dades, añadiremos la directiva:

valid users = tomcat

También podemos dar acceso a un grupo de usuarios:

valid users = @tomcatgrp

Consultar la base de datos de SAMBA

# pdbedit -L -v

Unix username: tomcat
NT username:
Account Flags: [U ]
User SID: S-1-5-21-626409855-111919127-1373880083-1000
Primary Group SID: S-1-5-21-626409855-111919127-1373880083-513
Full Name: Usuario aplicacion Tomcat
Home Directory: \lprenax0\tomcat
HomeDir Drive:
Logon Script:
Profile Path: \lprenax0\tomcat\profile
Domain: LPRENAX0
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Wed, 06 Feb 2036 16:06:39 CET
Kickoff time: Wed, 06 Feb 2036 16:06:39 CET
Password last set: Wed, 28 May 2014 14:09:17 CEST
Password can change: Wed, 28 May 2014 14:09:17 CEST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
#

Montaje de un filesystem con CIFS

Un filesystem que está compartido con Samba no puede compartirse con NFS al mismo tiempo debido a que hay dos protocolos diferentes actuando sobre el mismo sistema de archivo y podría producirse una corrupción de datos. Por eso, a veces, es necesario montar en Linux un filesystem que se está compartiendo con Samba. Esto se hace con CIFS.

  tuned-adm: Configuración de Perfiles de Rendimiento en Linux

Para montar el filesystem por samba desde la maquina cliente, ejecutaremos el siguiente comando:

Nueva sintaxis – A partir de cifs-utils-6.0

editranpre: Es el nombre que le hemos dado al recurso compartido desde el servidor de Samba.

mount -t cifs //lipexet0/editranpre /serveis/editran-pre -o username=gciadm,password=gciadm

El fichero /etc/fstab quedaría configurado así:

[[email protected] ~]# tail -1 /etc/fstab
//lipexet0/editranpre   /serveis/editran-pre    cifs    username=gciadm,password=gciadm 0 0
[[email protected] ~]#

Sintaxis antigua

[[email protected] ~]# umount /mnt/samba
[[email protected] ~]# mount -t cifs  -o username=guest,defaults,uid=8402895 //10.49.0.13/AQUARIUS /mnt/samba
Password for [email protected]//10.49.0.13/AQUARIUS:
[[email protected] ~]# touch /mnt/samba/kk
[[email protected] ~]# ll /mnt/samba/
total 0
-rw-r--r--. 1 hpddpers 52801 0 Jan 24 14:36 kk
drwx------. 2 hpddpers root  0 Jan 22 14:35 lost+found
[[email protected] ~]#

Como vemos, hemos podido escribir sin problemas un fichero como usuario invitado.

Si hemos protegido el recurso Samba para que sólo se pueda acceder con un usuario y contraseña concretos, podemos montar el filesystem de la siguiente manera:

mount -t cifs  -o username=sftpAquarius,defaults,uid=8402895 //10.49.0.13/AQUARIUS /mnt/samba

Problemas encontrados

Denied connection from X.X.X.X

Desde Windows 2016 no era posible conectarse al servidor de Samba versión samba4-4.2.10-12 en RedHat 6.9. El error que daba era:

[2019/01/28 11:01:44.745739,  0] ../source3/lib/access.c:338(allow_access)
  Denied connection from 10.49.64.14 (10.49.64.14)

Solución:

En el fichero de configuración de Samba, he sustituido el nombre del host permitido por su IP, a pesar de que el ping y el nslookup podrían resolver la IP apuntando al nombre. Detalles de la línea sustituida:

Antigua:

hosts allow = waqtwit01 waqtwit02 10.49.0.47 10.49.0.224

Nueva:

hosts allow = 10.49.64.14 10.49.64.15 10.49.0.47 10.49.0.224

WARNING: using NFS syntax for mounting CIFS shares is deprecated and will be removed in cifs-utils-6.0. Please migrate to UNC syntax.

Este error da cuando intentamos montar un filesystem por CIFS utilizando la sintaxis antigua que empleábamos para montar filesystems por NFS. A partir de cifs-utils-6.0, hay que montar los filesystems apuntando al nombre del recurso compartido de Samba.

Repito el ejemplo que ponía en un punto anterior de este artículo:

[[email protected] ~]# mount -t cifs //lipexet0/editranpre /serveis/editran-pre -o username=gciadm,password=gciadm

Te puede interesar

Compárteme

Contenido Relacionado

Deja un comentario