Translate

lunes, abril 13, 2015

Montando una carpeta compartida con samba en RHEL 6.4

Servidor Samba

Para permitir a los equipos Windows acceder al equipo Linux instalaremos el servidor Samba (paquete samba). Durante la instalación nos hará varias preguntas para configurar el archivo /etc/samba/smb.conf, aunque después lo revisaremos:
  • Grupo de trabajo: el mismo que en las máquinas Windows.
  • Contraseñas cifradas: Sí.
  • ¿Utilizar DHCP para configurar WINS? No (si no vamos a usar DHCP).
  • ¿Ejecutar Samba como demonio o como esclavo de inetd? Demonio.
  • ¿Crear la base de datos de contraseñas? Sí (creará el archivo de contraseñas cifradas /var/lib/samba/passdb.tdb).
Una vez terminada la instalación, tendremos los dos demonios de Samba funcionando:
  • nmbd: actúa como un servidor de nombres Windows, comunicando el nombre de nuestra máquina a las máquinas Windows de la red local e informándoles de cuáles son nuestros recursos compartidos. También maneja la resolución de nombres de NetBIOS (obtener una equivalencia entre la direccion IP de la LAN y el nombre de la máquina), comunicándose para ello con un servidor WINS presente en la red.
  • smbd: acepta las peticiones de archivos e impresoras desde las máquinas Windows. Se encarga de compartir los recursos (archivos e impresoras) y del control del acceso a los recursos, gestionando los permisos de los clientes.
Para acceder a Samba crearemos un usuario específico, samba, que será el único que tendrá acceso a los recursos compartidos y que deberán usarán todos los ordenadores que accedan a los mismos. Como no queremos que el usuario samba pueda acceder a otros servicios del sistema le impediremos hacer login, creándolo con el comando:
# useradd -s /bin/false usuario
Después lo añadiremos a la lista de usuarios de Samba, que se encuentra en el archivo /etc/samba/smbpasswd, ejecutando el comando:
# smbpasswd -a usuario


A fin de que SELinux permita al servicio smb compartir todos los recursos en modo de solo lectura, utilice el siguiente mandato:

setsebool -P samba_export_all_rw 1


Configuración del servidor Samba

Para configurar el servidor Samba editaremos el archivo /etc/samba/smb.conf.
  • Comprobaremos el grupo de trabajo: workgroup = aytoba
  • La directiva server string establece la descripción del ordenador que se verá en la red. Por defecto es: server string = %h server (Samba %v)
    donde %h es el nombre del equipo y %v la versión de Samba.
  • Comprobaremos que las contraseñas se encriptan, verificando la línea: encrypt passwords = true
  • La directiva guest account estará comentada: ; guest account = nobody
    Si la descomentamos permitiremos que dejar el nombre de usuario y contraseña en blanco equivalga a entrar como el usuario guest (Invitado, sin contraseña). Autorizar el acceso guest es permitir a cualquier usuario de una máquina del grupo de trabajo acceder a Samba, y la integración en un grupo de trabajo no es un metodo fiable de validación. Cualquier usuario de una máquina Windows puede cambiar su grupo de trabajo tantas veces como desee sin que ningun mecanismo de autentificación se lo impida. Dejaremos la línea comentada para esto no ocurra.
  • Podemos establecer un cierto nivel de seguridad especificando qué rango de direcciones IP podrán acceder al servidor Samba, añadiendo la directiva hosts allow. Por ejemplo, para permitir el acceso sólo desde una red local haremos (atención al punto final): hosts allow = 192.168.1. 127.
  • Permitiremos el acceso sólo al usuario samba (si se crean más habrá que añadirlos aquí): valid users = samba
  • Para compartir las carpetas personales de los usuarios haremos (si no queremos compartir las carpetas personales de los usuarios comentaremos con un ";" todas estas líneas): [homes]
    comment = Home Directories
    browseable = yes
    writable = yes
    create mask = 0777
    directory mask = 0777
    • [homes]: indica bajo qué etiqueta veremos esos directorios en los equipos Windows.
    • writable = yes/no: permite escribir en el directorio.
    • browseable = yes/no: permite al navegar por los recursos compartidos.
    • create mask y directory mask: establecen los permisos de los archivos y directorios que se creen a 777, (u=rwx g=rwx o=rwx), para que puedan ser leídos, modificados o ejecutados por cualquier usuario.
  • Si queremos compartir otros directorios, como por ejemplo:
    - /var/www, permisos de lectura y escritura, etiqueta en Windows web.
    - /home/jcarlos/deb, permisos de lectura, etiqueta en Windows debian.
    añadiremos las líneas:[web]
    comment = directorio de la web
    path = /var/www
    writable = yes
    browseable = yes
    guest ok = no
    create mask = 0777
    directory mask = 0777

    [debian]
    comment = repositorio paquetes deb
    path = /home/jcarlos/deb
    read only = yes
    browseable = yes
    guest ok = no
    • path indica el directorio compartido.
    • read only = yes/no establece el directorio como de sólo lectura.
    • guest ok = yes/no permite el usuario invitado.
Si tenemos problemas para acceder al directorio compartido o para modificar, borrar o crear archivos revisaremos los permisos del usuario samba y el propietario de la carpeta compartida y su contenido.
  • Si no tenemos impresoras para compartir conectadas al servidor Linux comentaremos con un ";" todas las líneas de la sección [printers].
  • Podemos habilitar nuestro servidor Samba para que actúe de servidor de nombres WINS y se encargue de traducir los nombres NetBIOS a IPs. Para ello, agregaremos las siguientes líneas a /etc/samba/smb.conf: wins support = yes
    domain master = yes
Reiniciaremos los demonios de Samba con:
# /etc/init.d/smb restart
y probaremos a acceder a los directorios e impresoras compartidas desde un ordenador Windows de la red, desde Entorno de red.
NOTA IMP: si no logramos ver las carpta pq windows nos dice que no tiene permisos de red hay que dar permisos de lectura y ejecución sobre las carpetas que queremos ver (chmos 755 /carpera a ver en red/)


Montar unidades remotas windows con usuario y contraseña:


mount -t cifs -o username=USRWINDOS,password=passusrwin //IPSRVWINDOWS/carpeta_win_compartida /opt/directorio_linux

Comandos de Samba

Algunos comandos útiles de Samba son:
  • para ver quién está conectado: # smbstatus
  • para ver la IP del equipo host de la red: # nmblookup host
Para añadir unidades remotas en redhat 6 SAMBA para un usuario no root:


chmod u+s /sbin/mount.cifs --> para decirle acifs que monte unidades como usuario no root


añadir en /etc/fstab :
//IPSRVWINDOWS/carpeta_win_compartida /opt/directorio_linux cifs rw,noauto,user,sync,credentials=/home/jboss/.jbosscred,uid=jboss,gid=jboss



en el fichero /home/jboss/.jbosscred:
 cat .jbosscred
username=USRWINDOS
password=passusrwin
domain=dominio_windows


Para hacer que en el arranque del S.O se monten automáticamente:
#vim /etc/init.d/montar_unidades
# This is the init script for starting up
# chkconfig: 345 91 10


mount /opt/directorio_linux


#chmod 755 /etc/init.d/montar_unidades
#chkconfig montar_unidades on


Para compartir cualquier carpeta (como logs de jboss) en red es necesario aplicar los siguientes comandos de SElinux (sobre todo permitir lectura en las carpetas de linux para samba)

SELinux y el servicio smb.

A fin de que SELinux permita al servicio smb funcionar como Controlador Primario de Dominio (PDC, Primary Domain Controler), utilice el siguiente mandato:


setsebool -P samba_domain_controller 1
A fin de que SELinux permita al servicio smb compartir los directorios de inicio de los usuarios locales del sistema, utilice el siguiente mandato:


setsebool -P samba_enable_home_dirs 1
Para definir que un directorio será compartido a través del servicio smb, como por ejemplo /var/samba/publico, y que se debe considerar como contenido tipo Samba, se utiliza el siguiente mandato:


chcon -t samba_share_t /var/samba/publico
Cada nuevo directorio que vaya a ser compartido a través de Samba, debe ser configurado como acaba de describirse antes de ser configurado en el fichero /etc/samba/smb.conf.
A fin de que SELinux permita al servicio smb compartir todos los recursos en modo de solo lectura, utilice el siguiente mandato:


setsebool -P samba_export_all_ro 1
A fin de que SELinux permita al servicio smb compartir todos los recursos en modo de lectura y escritura, utilice el siguiente mandato:
setsebool -P samba_export_all_rw 1

Desactivar SELinux

SELinux puede ser muy útil para evitar los zero-days, pero puede resultar pesado cuando se usa software propio (o nos tenemos que salir de lo estandard con el de la distribución), por lo que se tiene que crear la política adecuada.
Si aún no tenemos la política creada, podemos deshabilitar SELinux. Ésto se hace mediante el fichero /etc/selinux/config, cambiando SELINUX=enforcing por disabled:
editado: Tal como se indica en los comentarios, posteriormente de editar el fichero hace falta reiniciar para deshabilitar SELinux o usar setenforce:
# setenforce 0

No hay comentarios: