Diferencia entre revisiones de «Samba»
Línea 306: | Línea 306: | ||
Se pueden copiar en alguna carpeta compartida o instalarlos en samba. | Se pueden copiar en alguna carpeta compartida o instalarlos en samba. | ||
Lo recomendable es instalarlos: | |||
$ cupsaddsmb -v -H localhost -U root | |||
Ahora Windows tendrá disponibles los drivers al agregar la impresora. | |||
=== Problema y solución con las impresoras samba y cups en ubuntu 12.04 === | === Problema y solución con las impresoras samba y cups en ubuntu 12.04 === |
Revisión del 17:07 30 nov 2012
Es relativamente sencillo compartir recursos entre sistemas Linux con NFS. Incluso usar OpenLDAP para autentificar usuarios en la red no resulta excesivamente complejo. Pero Windows no es directamente compatible con los protocolos NFS o CUPS. Tampoco puede usar directamente un servidor LDAP para autentificar. Necesita estar en un Dominio a su medida. De la misma manera, Linux no puede pertenecer a un dominio Windows.
Samba permite crear redes mixtas. Un Linux puede ser cliente o servidor de Windows. Incluso se puede usar Samba para comunicar dos Linux. Al principio, Samba se implementó mediante ingeniería inversa, ya que los protocolos de Windows no estaban publicados.
Usos de Samba
Samba puede ser útil cuando:
- No se quiere paga por un servidor Windows
- Las licencias de cada cliente para acceder a un servidor Windows son demasiado caras.
- Hacer una transición de Windows a Linux y viceversa.
- Compartir impresoras entre los dos sistemas.
- Para una red con clientes mixtos.
- Para integrar un método de autentificación común para clientes de todo tipo.
Samba Permite:
- Compartir partes de un sistemas de ficheros (carpetas)
- Control de acceso a recursos.
- Shared
- User
- Compartir impresoras
- Servidor de resolución de nombres NetBios (WINS)
Historia de Samba
Andrew Tridgell, creador del algoritmo de rsync, comenzó el desarrollo de smbserver en 1991. Más adelante se llamó Samba por problemas de marcas registradas. Para obtener el nombre buscó una palabra en el diccionario de Linux que tuviera las letras SMB:
$ grep -i '^s.*m.*b' /usr/share/dict/words salmonberry samba sawtimber scramble ....
Recientemente, Microsoft ha revelado parte de sus protocolos para mejorar Samba, ya que es interesante para ellos que funcione correctamente la integración entre los dos sistemas. Noticia
Protocolos implementados por Samba
- NetBios over TCP/IP
- SMB (Actualmente CIFS)
- DCE/RPC o MSRPC (RPC de Windows)
- WINS. Aunque ha quedado relegado por DNS, se puede seguir usando.
- NT Domain suite of protocols:
- NT Domain Logons
- Secure Account Manager (SAM) database
- Local Security Authority (LSA) service
- NT-style printing service (SPOOLSS)
- Active Directory Logon Kerberos (Kerberos y LDAP)
- Compartició de impresoras.
Netbios
Protocolo de nivel de sesión del modelo OSI. Se trata de una especificación de interfaz de acceso a recursos de red para máquinas independiente del hardware.
Nació en 1984 de la mano de IBM com una API para diseñar aplicaciones de red.
Netbios proporciona:
- Resolución de nombres.
- Servicios de sesión para comunicaciones orientadas a conexión.
- Servicio de datagramas para las no orientadas a conexión.
SMB/CIFS
Server Message Block. Protocolo de nivel de aplicación utilizado para compartir ficheros, impresoras y otros recursos. SMB se puede comparar con NFS, su diferencia fundamental es que SMB proporciona autenticación. Fue creado por IBM y modificado numerosas veces por Windows. Utilitza NetBios para funcionar.
En 1996, Microsoft lo renombró CIFS y con Vista ha vuelto a cambiar de nombre. Con Windows 7 se llama SMB 2.1
SMB es un protocolo de alto nivel que puede implementarse sobre diversos protocolos, entre ellos el TCP/IP. Samba utiliza la versión que usa NetBios sobre TCP/IP.
Revisaremos el funcionamiento interno del protocolo SMB. - Supongamos que un sistema cliente quiere acceder a una carpeta compartida que exporta el servidor (en modo user). Se produciría el siguiente intercambio de mensajes entre ellos:
- Petición: Sesión NetBIOS. Quiere establecer una sesión fiable para subsiguientes mensajes entre los ordenadores cliente y servidor. El cliente conoce el nombre NetBIOS del servidor, el nombre NetBIOS del cliente es parte del mensaje, de modo que ambos saben quién es el otro.
- Respuesta: Sesión NetBIOS. El servidor envía un mensaje de reconocimiento aceptando la conexión.
- Petición: Dialecto SMB. El cliente envía una lista con los dialectos o variantes de SMB que soporta.
- Respuesta: Dialecto SMB. El servidor contesta con el dialecto que prefiere para la comunicación subsiguiente.
- Petición: Inicio de sesión. El cliente envía las credenciales de usuario (usuario, dominio, contraseña) con las que este desea conectarse al servidor.
- Respuesta: Inicio de sesión. El servidor autentifica las credenciales de usuario. Si las credenciales son buenas, el servidor tiene ya un SID válido que le permite, ante todo, comprobar si el usuario tiene el derecho de conectar al servidor. En caso afirmativo, se acepta la conexión y el servidor construye un identificador numérico particular para esta conexión (denominado User ID o UID). Los UIDs pueden ser reutilizados durante la vida del sistema, pero son únicos para todas las conexiones simultáneas que mantiene el servidor en un momento dado, de manera que identifican unívocamente una conexión (aceptada). Todos los mensajes posteriores del cliente deben contener este identificador para ser aceptados por el servidor.
- Petición: Conexión a un recurso concreto. El cliente envía un mensaje que contiene una cadena que identifica el recurso al que desea acceder (por ejemplo, \ \ pc01 \ impresora o \ \ pc01 \ carpeta).
- Respuesta: Conexión a un recurso concreto. Si el recurso solicitado por el cliente existe y el SID tiene suficientes permisos, el servidor construye un identificador denominado Tree ID o TID, que será utilizado por el cliente par
Niveles de seguridad en SMB/CIFS
- Share-level: Protección a nivel de recurso compartido. Cada recurso puede tener una contraseña. No hay usuarios.
- User Level: Protección con usuarios. Primero se autentifica y luego se le indica qué recursos puede obtener con ese usuario.
Tipos de servidor Samba
Estos son los tipos de servidores windows:
- Primary domain controller (PDC). De este tipo solo puede haber uno por dominio.
- Backup domain controller (BDC) Sirver para hacer una copia de seguridad o para dar más rendimiento.
- Domain member server (DMS). Un servidor de otros servicios en un dominio con PDC
Samba, por su parte, tiene 3 tipos de configuraciones como servidor:
- Standalone Server (Seguridad share)
- Domain member server.
- Domain controller server
- Primary Domain Controller (PDC)
- Backups domain Controller (BDC)
- Active directory domain server (ADS)
Si ejecutamos testparm, podemos ver el rol de nuestro servidor.
Samba provee de mayor flexibilidad en este sentido. Samba añade 4 subniveles a la seguridad a nivel de usuario.
- Share: Cada recurso compartido utiliza una contraseña. Todo el que sepa esta contraseña puede acceder al recurso. Cada recurso tiene su palabra de paso independientemente del usuario. Pero en sistemas Linux se debe acceder como usuario. Por eso, el propio Samba genera un usuario para cada conexión y asigna permisos a ese usuario para ese recurso si acierta la contraseña. security=share
- User: Cada recurso compartido del grupo de trabajo está configurado para permitir el acceso a un grupo específico de usuarios. En cada conexión inicial a un servidor Samba autentica al usuario. Esta es la opción por defecto. El cliente se autentifica a nivel de sesión enviando usuario y contraseña. El servidor se basa en el usuario y la máquina. Si la sesión se acepta, el cliente no debe introducir de nuevo la contraseña. security=user.
- Server: El sistema es idéntico al anterior pero se utiliza otro servidor para obtener la información de los usuarios (LDAP por ejemplo)
- Domain: Samba se convierte en miembro de un dominio de Windows NT y utiliza un PDC (Primary Domain Controller) para implementar la autenticación. Una vez autenticado el usuario mantiene un token con la información del usuario a partir de la cual poder determinar a qué recursos tiene acceso.
Instalar Samba
En Debian/Ubuntu:
$ sudo apt-get install samba
La configuración la podemos encontrar en /etc/samba/smb.conf Se puede ver información en man smb.conf
Se recomienda hacer una copia de seguridad antes de tocar nada:
$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
Hay dos programas que se ejecutan en Samba:
- smbd Se encarga de ofrecer los servicios de acceso a ficheros, impresoras y autenticación de usuarios.
- nmbd Se encarga de solucionar los nombres de windows, incluye el anuncio del grupo de trabajo, peticiones de resolución de nombres, gestión de la lista de ordenadores y anuncio de recursos compartidos.
Adicionalmente, Samba proporciona diversas utilidades:
- smbclient: Permite a un usuario de un sistema Unix conectarse a recursos SMB.
- swat Permite configurar Samba con un navegador web.
- smbfs Sistema de ficheros SMB para linux, similar a NFS.
- winbind: Integra un servidor Samba a un dominio windows sin necesitar de crear usuarios Unix en el servidor Samba y simplificando la tarea de administración.
Control de Samba
$ sudo service smbd restart
$ testparm # Sirve para ver la configuración actual
Para crear usuarios:
$ sudo smbpasswd -a rickgrimes
Borrar:
$ sudo smbpasswd -d rickgrimes
Una de las primeras cosas que hay que hacer es añadir root a Samba:
$ sudo smbpasswd -a
Crear usuarios sólo para Windows:
$ useradd -s /sbin/nologin usuario-windows $ smbpasswd -a usuario-windows
Otros comandos:
$ smbstatus # muestra el estado del servidor. $ smbstatus -u rickgrimes
$ smbstatus -S # información de recursos compartidos. $ smbstatus -p # otras informaciones
pdbedit
Esta herramienta sirve al administrador para gestionar la política de cuentas.
smb.conf
smb.conf está dividido en secciones:
[ global ]
Afecta a toda la configuración del servidor.
[global] workgroup = ASO # el nombre del dominio server string = Samba Version %v netbios name = es-servidor-1 wins support = yes # En caso de que no tengamos disponible un DNS #=========== INFORMACION DE RED ============ interfaces = lo eth1 # nuestra red y las de los clientes hosts allow = 127. 10.0.0. #============= LOGIN ====================== log file = /var/log/samba/%m.log # ficheros de log max log size = 50 #============== DOMINIO ================== domain master = yes domain logons = yes local master = yes os level = 33 preferred master = yes security = user passdb backend = tdbsam logon path = \\%N\%U\profile #logon path = \\%L\Profiles\%u logon drive = H: logon home = \\%N\%U #logon home = \\%L\%U\.9xprofile logon script = logon.cmd
La parte que define al dominio dice que: Es controlador de dominio, sirve para autentificar, tiene un niver 33 de importancia para ser el controlador, tiene seguridad de usuario y la base de datos local es de tipo Samba. Por último da información acerca de dónde están los perfiles de usuario.
#========== USUARIOS ===================== add user script = /usr/sbin/useradd "%u" -m -g users add group script = /usr/sbin/groupadd "%g" add machine script = sudo /usr/sbin/useradd -N -g machines -c Machine -d /var/lib/samba -s /bin/false %u delete user script = /usr/sbin/userdel "%u" delete user from group script = /usr/sbin/userdel "%u" "%g" delete group script = /usr/sbin/groupdel "%g"
Aquí indica los scripts que usa Samba para crear los usuarios, ya que se tienen que corresponder con un usuario real del sistema.
Otros recursos
[homes] comment = Directorios personales browseable = no read only = no create mask = 0700 directory mask = 0700 valid users = %S
Este primero sirve para guardar los directorios de usuarios.
[netlogon] comment = Network Logon Service path = /srv/samba/netlogon guest ok = yes read only = yes share modes = no [profiles] path = /var/lib/samba/profiles browseable = no guest ok = yes readonly = no [tmp] comment = Ficheros temporales path = /tmp public = yes writable = yes printable = no
netlogon es necesario para clientes Windows, es donde ser guardar el script logon.cmd. Profiles sirve para los perfiles de usuarios. Se pueden compartir, a partir de ahí todo tipo de carpetas e impresoras.
- Guest ok: Se permite el acceso anónimo. Yes o No.
- Public: Equivalente a la anterior.
- Browseable: El recurso se muestra en la lista de recursos compartidos. Yes o No.
- Writable: Se permite la escritura. Puede ser Yes o No.
- Read only: El valor puede ser Yes o No.
- Valid users: ¿Qué usuarios o grupos pueden acceder al recurso compartido. Se pueden especificar múltiples usuarios separados por comas o nombres de grupo (con la arroba @ delante). Ejemplo: fulanito, Menganito, @ administradores.
- Write list: Define qué usuarios pueden acceder con permisos de escritura. Misma sintaxis que el anterior.
- Admin users: Define qué usuarios pueden acceder con permisos de administración (superusuarios) del recurso compartido. Misma sintaxis que el anterior.
- Directory mask: Define qué permisos tendrán los subdirectorios del recurso compartido. Ejemplo 1777.
- Create mask: Define qué permisos tendrán los ficheros creados al recurso compartido. Ejemplo 1777.
Usuarios administradores
Además de los usuarios normales, es necesario crear un usuario administrador que pueda hacer modificaciones en los equipos Windows añadidos al dominio. Un usuario administrador de Windows es un usuario del grupo "Domain admins".
Lo primero que hay que hacer es crear un grupo en Linux equivalente al Domain Admins y otro al de usuarios normales.
$ sudo groupadd ntadmin $ sudo groupadd ntuser
Luego se asocia el grupo de Linux al de Dominio mediante la orden net:
$ sudo net groupmap add ntgroup=”Domain Admins” unixgroup=ntadmin rid=512 type=d comment=”Administradores” $ sudo net groupmap add ntgroup=”Domain Users” unixgroup=ntuser rid=513 type=d comment=”Usuarios”
A continuación, se agrega el usuario al grupo ntadmin:
$ sudo useradd -g ntadmin usuario # En caso de que no exista el usuario o: $ sudo usermod -g ntadmin usuario $ sudo pdbedit -r -G 512 -u usuario # En caso de que exista ya.
Impresoras en Samba
Las impresoras en Samba se pueden configurar de la manera tradicional o con CUPS. Hacerlo con CUPS proporciona las ventajas de un servidor de impresión avanzado.
Para configurar Samba con CUPS hay que modificar las siguientes líneas:
[global] load printers = yes printing = cups # Esto le dice que utilice CUPS printcap name = cups # printcap es un fichero con una lista de impresoras. # Para CUPS es obsoleto, pero Samba lo necesita. [printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = yes writable = no printable = yes printer admin = root, @ntadmins, @smbprintadm
Luego se va a Windows y se añade siendo administrador.
Los drivers de CUPS-PDF para Windows
$ wget http://ftp.easysw.com/pub/cups/windows/cups-windows-6.0-source.tar.bz2 $ tar -xjvf cups-windows-6.0-source.tar.bz2 || cd cups-windows-6.0 $ sudo make install
Los drivers se instalan en /usr/share/cups/drivers/
Se pueden copiar en alguna carpeta compartida o instalarlos en samba.
Lo recomendable es instalarlos:
$ cupsaddsmb -v -H localhost -U root
Ahora Windows tendrá disponibles los drivers al agregar la impresora.
Problema y solución con las impresoras samba y cups en ubuntu 12.04
Aunque configuremos perfectamente samba y cups, en ubuntu server 12.04 falla al declarar el nombre de las impresoras. Por eso Windows no es capaz de instalarla y dice que el nombre no está bien escrito.
Posible solución:
- Comando a usar: rpcclient
- Se tiene que establecer el nombre de la impresora
- Teclear en la terminal del servidor el siguiente comando:
> rpcclient localhost
- Pedirá la clave del usuario samba que administra las impresoras,
- Se puede verificar el nombre de la impresora con el comando:
> enumprinters
- Por ejemplo si el nombre de la impresora compartida es PDF
- Hay que cambiar el nombre de la impresora con el comando:
> setprintername PDF PDF