Instalando Samba en Ubuntu para compartir archivos con Windows
- 0 Comentarios
Samba es una implementación libre del protocolo de archivos compartidos de Microsoft Windows (antiguamente llamado SMB, renombrado recientemente a CIFS) para sistemas de tipo UNIX. De esta forma, es posible que ordenadores con Linux o Mac OS X se vean como servidores o actúen como clientes en redes de Windows. Samba también permite validar usuarios haciendo de Controlador Principal de Dominio (PDC), como miembro de dominio e incluso como un dominio Active Directory para redes basadas en Windows; aparte de ser capaz de servir colas de impresión, directorios compartidos y autenticar con su propio archivo de usuarios.
Entre los sistemas tipo Unix en los que se puede ejecutar Samba, están las distribuciones GNU/Linux, Solaris y las diferentes variantes BSD entre las que podemos encontrar el Mac OS X Server de Apple.
La página oficial de Samba la puedes encontrar aquí.
|
Instalando Samba |
En este tutorial veremos como instalar Samba en un PC con Ubuntu Hardy Heron instalado.
Lo primero es instalar Samba, vamos a Synaptic (Sistema > Administación > Gestor de paquetes Synaptic) y presionamos el botón Buscar, colocamos “samba” y buscamos, luego activamos la casilla de la izquierda del paquete samba y aceptamos los demás paquetes que se deben instalar, finalmente presionamos arriba el ícono Aplicar.
El archivo de configuración de Samba puede ser encontrado en /etc/samba/smb.conf vamos a editar este archivo pero primero realizamos una copia de respaldo:
$ sudo cp -p /etc/samba/smb.conf /etc/samba/smb_2008-06-15.conf
Siempre es bueno realizar una copia de los archivos de configuración que modifiquemos ya que en caso de que cometamos algun error podemos volver a la configuración inicial, además a mi me gusta agregarle la fecha en que realice la copia para tener un registro. Luego procedemos a modificar el archivo:
$ sudo gedit /etc/samba/smb.conf
Nota: Si estas en KDE en cambio de GNOME cambia gedit por kate
En el archivo de configuración cambia donde dice workgroup = WORKGROUP (o escribe el nombre que colocaste en Windows que por defecto GRUPO_TRABAJO) a por ejemplo: workgroup = MIGRUPO
# Change this to the workgroup/NT-domain name your Samba server will part of
workgroup = MIGRUPO
Donde MIGRUPO es el nombre del grupo de trabajo de MS Windows o el nombre de dominio, de donde será parte el servidor Samba. Tienes que configurar el mismo grupo de trabajo en tus computadoras Windows, esto lo puedes hacer en Panel de control > Sistema > Nombre de Equipo > Cambiar Nombre.
Si quieres tambien puedes cambiar la linea donde dice server string esto es simplemente la descripción que verá tu grupo del servidor puedes colocar algo como:
server string = %h Servidor de archivos
%h lo que hace es imprimir el nombre de host de tu servidor.
Guarda los cambios y sigamos.
|
Como crear, editar o eliminar usuarios en Samba |
Los usuarios que queremos que tengan acceso al servidor Samba deben estar creados como usuarios en nuestro servidor linux, podemos crear un grupo samba y agregar a ese grupo todos los usuarios que tendrán acceso al servidor samba:
Para agregar un usuario a linux podemos utilizar el comando:
$ sudo adduser nombre_usuario
El usuario que le asignas con smbpasswd debe ser un usuario valido en linux o en tu Ubuntu. (Exaquo: yo utilicé el mismo usuario que utilizo para ingresar a Ubuntu pero tengo una clave muy diferente en Samba, por lo tanto no creo un nuevo usuario).
Nos pedira la clave que queremos utilizar para ese usuario y algunos datos que son opcionales, luego podemos cambiar sus privilegios.
Supongamos que tenemos un usuarios ya creado llamado “jose” y que lo queremos agregar a los usuarios de Samba, para esto ejecutamos el siguiente comando:
$ sudo smbpasswd -a jose
Nos aparecerá algo como:
sudo smbpasswd -a jose
New SMB password:
Retype new SMB password:
Added user jose
Colocamos la clave que queremos que tenga ese usuario para ingresar al servidor Samba, la clave puede ser distinta a la clave que tiene el usuario para ingresar a Linux.
Vamos a crear un nuevo archivo donde estarán todos los usuarios autorizados para conectarse al Servidor de Samba, para esto ejecutamos:
$ sudo gedit /etc/samba/smbusers
En el nuevo archivo copiamos la siguiente línea:
nombre_en_linux = “Nombre en Windows”
Donde nombre_enlinux es el nombre del usuario que tenemos en linux en este caso “jose” y Nombre en Windows es el nombre del usuario de red en Windows, siempre entre comillas. Tenemos que agregar una nueva línea por cada usuario que creemos para Samba. Como ejemplo tenemos a “jose” en Unbuntu Hardy y “Jjperez” en Windows, entones la línea a agregar será (mayúsculas y minusculas son importantes):
jose = “Jjperez”
Para borrar un usuario ejecutamos:
$ sudo smbpasswd -x nombre_usuario
Ahora que ya tenemos a los usuarios creados procedamos a ver como se compaten archivos y directorios.
|
Compartiendo Archivos con Samba |
Vamos a modificar el archivo de configuración de Samba:
En Debian:
$ nano /etc/samba/smb.conf
En Ubuntu:
$ sudo gedit /etc/samba/smb.conf
Busca la línea que dice:
; security = user
Y la modificamos por:
security = user
username map = /etc/samba/smbusers
Con esto lo que estamos haciendo es diciendole a Samba que vamos a autenticar por usuario y donde está la lista de los usuarios permitidos que fue la que creamos anteriormente.
Para darle acceso a los usuario a sus respectivos directorios home o personales, hacemos lo siguiente:
Buscamos las línea donde dice
;[homes]
; comment = Home Directories;
; browseable = no
; valid users = %S
; writable = no
Y le quitamos el ; para descomentarlos, y en writable cambiamos “no” por “yes” para que el usuario pueda escribir en el directorio.
Siempre que cambiemos la configuración del archivo smb.conf debemos ejecutar el siguiente comando:
$ testparm
Lo que hace este parámetro es verificar que los parámetros del archivo smb.conf estén correctos, luego que nos diga que todo esta bien ejecutamos:
$ /etc/init.d/samba restart
para aplicar los cambios.
Ahora si quieremos compartir un directorio que llamaremos grupo hacemos lo siguiente, primero creamos la carpeta que queremos compartir si ya no la habíamos creado:
$ mkdir /home/grupo
$ chmod 777 /home/grupo
La puedes crear donde quieras. Ahora vamos a modificar el archivo de smb.conf, voy a suponer que ya modificaste la parte de security y agregaste /etc/samba/smbusers a este archivo y que ya sabes como abrirlo para editarlo de ahora en adelante. Agregamos la siguientes lineas al final del archivo:
[Grupo]
comment = Archivos Compartidos
path = /home/grupo
public = yes
writable = yes
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup
Analicemos esta estructura:
- comment simplemente es un comentario de lo que es la carpeta puedes colocar lo que quieras;
- path por supuesto es donde esta la carpeta que queremos compartir,;
- public es si quieres hacer esta carpeta disponible publicamente o no, para cambiarlo simplemente coloca no;
- writable permite definir si se puede escribir en la carpeta o no;
- create mask y directory mask es la mascara con la que se crearan los archivos (es decir que privilegios tendrán los archivos y directorios creados dentro de la carpeta grupo) si quieras que puedan hacer cualquier acción en la carpeta coloca 0777 en ambas;
- force group y force user es para forzar que solo un grupo específico o usuario se pueda conectar a esta carpeta.
Si además queremos que solo un grupo de usuarios pueda accesar a la carpeta agregamos esta línea después de writable:
valid users = nombre_usuario1, nombre_usuario2
Donde puedes agregar los usuarios que quieras que tengan acceso.
Luego de que termines de agregar las carpetas que quieras compartir Guarda el archivo y probamos el archivo smb.conf y reiniciamos el servidor de Samba:
$ testparm
$ /etc/init.d/samba restart
Para entender mejor el tema de los permisos anda a esta entrada.
A continuación veremos varias configuraciones para compartir un directorio. Esto lo copié desde este excelente post.
|
¿Cómo compartir la carpeta de grupo con sólo permisos de lectura (Autenticación=Si)? |
Qué quiere decir Autentificación=Si, cuando crearon un usuario en Samba también ingresaron una contraseña, bueno cuando se encuentren en Windows y quieran ingresar al directorio compartido, antes deben digitar el usuario y su contraseña, a esto se refiere el título.
Los pasos son los siguientes, desde la consola digita:
$ sudo mkdir /home/group
$ sudo chmod 777 /home/group/
$ sudo chmod +t /home/group/
$ sudo gedit /etc/samba/smb.conf
En el archivo smb.conf busca esta línea:
; security = user
Reemplázala con la siguiente línea:
security = user
Busca esta sección:
# This boolean controls whether PAM will be used for password changes
# when requested by an SMB client instead of the program listed in
# ‘passwd program’. The default is ‘no’.
; pam password change = no
…
Añade la siguiente línea debajo:
username map = /etc/samba/smbusers
Añade las siguientes líneas al final del fichero:
[Group]
comment = Group Folder
path = /home/group
public = yes
writable = no
valid users = your_system_username1, your_system_username2
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup
Guarda el fichero editado y luego desde la consola digita lo siguiente para reiniciar Samba:
$ sudo testparm
$ sudo /etc/init.d/samba restart
|
¿Cómo compartir la carpeta de grupo con permisos de escritura/lectura (Autenticación=Si)? |
Los pasos son los siguientes, desde la consola digita:
$ sudo mkdir /home/group
$ sudo chmod 777 /home/group/
$ sudo chmod +t /home/group/
$ sudo gedit /etc/samba/smb.conf
En el archivo smb.conf busca esta línea:
; security = user
Sustitúyela con la siguiente línea:
security = user
Busca esta sección:
# This boolean controls whether PAM will be used for password changes
# when requested by an SMB client instead of the program listed in
# ‘passwd program’. The default is ‘no’.
; pam password change = no
…
Añade la siguiente línea debajo:
username map = /etc/samba/smbusers
Añade las siguientes líneas al final del fichero
[Group]
comment = Group Folder
path = /home/group
public = yes
writable = yes
valid users = your_system_username1, your_system_username2
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup
Yo utilizo este tipo de directorio compartido y las líneas que ingreso al fichero smb.conf son:
[Compartir]
path = /home/jose/Compartir
read only = no
valid users = jose
create mask = 0700
directory mask = 0700
force user = jose
force group = jose
- La opción “read only = no” para poder escribir, es lo mismo que “writeable = yes”
- El único usuario válido es “jose” (valid users);
- El dueño y grupo son “jose” (force user y force group); y
- Todos los directorios y archivos que serán creados dentro de la carpeta Compartir (directory mask y create mask) tendran el permiso de lectura, escritura y ejecución solamente para el dueño (por ello el 7 de los 0700) y grupo y otros usuarios no tienen ningún tipo de permiso (por ello el 00 de 0700).
Guarda el fichero editado y digita lo siguiente para testear y luego reiniciar Samba:
$ sudo testparm
$ sudo /etc/init.d/samba restart
|
¿Cómo compartir una carpeta publica con solo permisos de lectura (Autenticación=Si)? |
Los pasos son los siguientes, desde la consola digita:
$ sudo mkdir /home/public
$ sudo chmod 777 /home/public/
$ sudo chmod +t /home/public/
$ sudo gedit /etc/samba/smb.conf
En el archivo smb.conf busca esta línea:
; security = user
…
Sustitúyela con la siguiente línea:
security = user
Busca esta sección:
…
# This boolean controls whether PAM will be used for password changes
# when requested by an SMB client instead of the program listed in
# ‘passwd program’. The default is ‘no’.
; pam password change = no
…
Añade la siguiente línea debajo:
username map = /etc/samba/smbusers
Añade las siguientes líneas al final del fichero:
[public]
comment = Public Folder
path = /home/public
public = yes
writable = no
create mask = 0777
directory mask = 0777
force user = nobody
force group = nogroup
Guarda el fichero editado y digita lo siguiente para testear y luego reiniciar Samba:
$ sudo testparm
$ sudo /etc/init.d/samba restart
|
¿Cómo compartir una carpeta publica con permisos de escritura/lectura (Autenticación=Si)? |
Los pasos son los siguientes, desde la consola digita:
$ sudo mkdir /home/public
$ sudo chmod 777 /home/public/
$ sudo chmod +t /home/public/
$ sudo gedit /etc/samba/smb.conf
En el archivo smb.conf busca esta línea:
; security = user
Sustitúyela con la siguiente línea
security = user
Busca esta sección:
…
# This boolean controls whether PAM will be used for password changes
# when requested by an SMB client instead of the program listed in
# ‘passwd program’. The default is ‘no’.
; pam password change = no
…
Añade la siguiente línea debajo:
username map = /etc/samba/smbusers
Añade las siguientes líneas al final del fichero:
[public]
comment = Public Folder
path = /home/public
public = yes
writable = yes
create mask = 0777
directory mask = 0777
force user = nobody
force group = nogroup
Guarda el fichero editado y digita lo siguiente para testear y luego reiniciar Samba:
$ sudo testparm
$ sudo /etc/init.d/samba restart
|
¿Cómo compartir una carpeta publica con solo permisos de lectura (Autenticación=No)? |
Los pasos son los siguientes, desde la consola digita:
$ sudo mkdir /home/public
$ sudo chmod 777 /home/public/
$ sudo chmod +t /home/public/
$ sudo gedit /etc/samba/smb.conf
En el archivo smb.conf busca esta línea:
; security = user
…
Sustitúyela con la siguiente línea:
security = share
Añade las siguientes líneas al final del fichero
public]
comment = Public Folder
path = /home/public
public = yes
writable = no
create mask = 0777
directory mask = 0777
force user = nobody
force group = nogroup
Guarda el fichero editado y digita lo siguiente para testear y luego reiniciar Samba:
$ sudo testparm
$ sudo /etc/init.d/samba restart
|
¿Cómo compartir una carpeta publica con permisos de escritura/lectura (Autenticación=No)? |
Los pasos son los siguientes, desde la consola digita:
$ sudo mkdir /home/public
$ sudo chmod 777 /home/public/
$ sudo chmod +t /home/public/
$ sudo gedit /etc/samba/smb.conf
En el archivo smb.conf busca esta línea:
; security = user
Sustitúyela con la siguiente línea:
security = share
Añade las siguientes líneas al final del fichero
[public]
comment = Public Folder
path = /home/public
public = yes
writable = yes
create mask = 0777
directory mask = 0777
force user = nobody
force group = nogroup
Guarda el fichero editado y digita lo siguiente para testear y luego reiniciar Samba:
$ sudo testparm
$ sudo /etc/init.d/samba restart
|
Parámetros para Compartir directorios a través de Samba. |
Para los directorios o volúmenes que se irán a compartir, en el mismo fichero de configuración encontrará distintos ejemplos para distintas situaciones particulares. En general, puede utilizar el siguiente ejemplo que funcionará para la mayoría:
[Lo_que_sea] comment = Comentario que se le ocurra path = /cualquier/ruta/que/desee/compartir |
El volumen puede utilizar cualquiera de las siguientes opciones:
| Opción | Descripción |
|---|---|
guest ok |
Define si ser permitirá el acceso como usuario invitado. El valor puede ser Yes o No. |
public |
Es un equivalente del parámetro guest ok, es decir define si ser permitirá el acceso como usuario invitado. El valor puede ser Yes o No. |
browseable |
Define si se permitirá mostrar este recurso en las listas de recursos compartidos. El valor puede ser Yes o No. |
writable |
Define si ser permitirá la escritura. Es el parámetro contrario de 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 |
Define que usuarios o grupos pueden acceder al recurso compartido. Los valores pueden ser nombres de usuarios separados por comas o bien nombres de grupo antecedidos por una @. Ejemplo: fulano, mengano, @administradores |
write list |
Define que usuarios o grupos pueden acceder con permiso de escritura. Los valores pueden ser nombres de usuarios separados por comas o bien nombres de grupo antecedidos por una @. Ejemplo: fulano, mengano, @administradores |
admin users |
Define que usuarios o grupos pueden acceder con permisos administrativos para el recurso. Es decir, podrán acceder hacia el recurso realizando todas las operaciones como super-usuarios. Los valores pueden ser nombres de usuarios separados por comas o bien nombres de grupo antecedidos por una @. Ejemplo: fulano, mengano, @administradores |
directory mask |
Es lo mismo que directory mode. Define que permiso en el sistema tendrán los subdirectorios creados dentro del recurso. Ejemplos: 1777 |
create mask |
Define que permiso en el sistema tendrán los nuevos ficheros creados dentro del recurso. Ejemplo: 0644 |
En el siguiente ejemplo se compartirá a través de Samba el recurso denominado ftp, el cual está localizado en el directorio /home/ftp/pub del disco duro. Se permitirá el acceso a cualquiera pero será un recurso de solo lectura salvo para los usuarios administrador y fulano. Todo directorio nuevo que sea creado en su interior tendrá permiso 755 y todo fichero que sea puesto en su interior tendrá permiso 644.
[ftp] comment = Directorio del servidor FTP
path = /home/ftp/pub
guest ok = Yes
read only = Yes
write list = usuario_01, administrador
directory mask = 0755
create mask = 0644
Luego de que termines de agregar las carpetas que quieras compartir Guarda el archivo y probamos el archivo smb.conf y reiniciamos el servidor de Samba:
$ testparm
$ sudo /etc/init.d/samba restart
Y eso es todo, ya puedes ir a tu PC Windows o a VMware (con tu Windows Virtual) y buscar en tu grupo de trabajo las carpetas compartidas de Linux en Samba y además agregar la impresora.
El manual oficial de Samba lo pueden conseguir aquí.
El siguiente post lo copié desde aquí.
Saludos