domingo, 17 de enero de 2016

Compartir recursos Linux con Samba

COMPARTIR RECURSOS CON LINUX


Instalamos samba
$ sudo apt-get install samba smbfs

Hacemos una copia del fichero de configuracion de samba
$ sudo cp -p /etc/samba/smb.conf /etc/samba/smb.conf.ori

Editamos el fichero de configuracion
$ sudo vi /etc/samba/smb.conf
...
workgroup = MIGRUPO
server string = %h servidor de archivos (Samba, Ubuntu)
...

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:
$ adduser nombre_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 usuario ya creado llamado jc y que lo queremos agregar a los usuarios de Samba, para esto ejecutamos el siguiente comando:
$ sudo smbpasswd -a jc

Nos aparecerá algo como:
$ smbpasswd -a jc
New SMB password:
Retype new SMB password:
Added user jc
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 vi /etc/samba/smbusers

En el nuevo archivo copiamos la siguiente línea:
nombre_enlinux = "Nombre en Windows"
Donde nombre_enlinux es el nombre del usuario que tenemos en linux en este caso jc y Nombre en Windows es el nombre del usuario de red en Windows. Tenemos que agregar una nueva línea por cada usuario que creemos para Samba.

Para editar un usuario ejecutamos:
$ smbpasswd -a nombre_usuario

Para borrar un usuario ejecutamos:
$ smbpasswd -x nombre_usuario

Ahora que ya tenemos a los usuarios creados vamos a ver como se compaten archivos y directorios. Vamos a modificar el archivo de configuración de Samba.
$ sudo vi /etc/samba/smb.conf
...
#Buscamos esta linea
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 autentificar 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, buscamos en el mismos fichero smb.conf las siguientes líneas
...
[homes]
comment = Home Directories;
browseable = no
valid users = %S
writable = no
...
Y las dejamos de la siguiente forma
...
[homes]
comment = Home Directories
browseable = no
valid users = %S
#cambiamos en writable no por yes para que el usuario pueda escribir en el directorio
writable = yes
...
Si lo dejamos todo comentado no aparece el directorio home de cada usuario en los recursos compartidos.

Siempre que cambiemos la configuración del archivo smb.conf debemos ejecutar el comando testparm. Lo que hace testparm es verificar que los parámetros del archivo smb.conf estén correctos.
$ sudo testparm

Cuando nos diga que todo esta bien tenemos que reiniciar el servicio de Samba para aplicar los cambios.
$ /etc/init.d/samba restart

El siguiente ejemplo sirve para compartir un directorio

[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ónDescripción
guest okDefine si ser permitirá el acceso como usuario invitado. El valor puede ser Yes o No.
publicEs 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.
browseableDefine si se permitirá mostrar este recurso en las listas de recursos compartidos. El valor puede ser Yes o No.
writableDefine 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 usersDefine 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 listDefine 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 usersDefine que usuarios o grupos pueden acceder con permisos administrativos para el recurso.br>
         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 maskEs lo mismo que directory mode. Define que permiso en el sistema tendrán los subdirectorios creados dentro del recurso.
Ejemplos: 1777
create maskDefine 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
$ sudo vi /etc/samba/smb.conf
...
[ftp]
comment = Directorio del servidor FTP
path = /home/ftp/pub
guest ok = Yes
read only = Yes
write list = usuario_01, administrador
#siempre que se cree un directorio tiene los permisos de control total al propietario y lectura y ejecucion al resto (rwx)
directory mask = 0755
#siempre que se cree un fichero tiene los permisos lectura y escritura al propietario y lectura a los usuarios del grupo del propietario y lectura al resto de los usuarios
create mask = 0644
...
Un ejempo real
...
[panama]
comment = 07117 Proyecto Panama
path = /media/datos/proyecto_panama
#puede entrar todo el mundo como invitado
guest ok = Yes
browseable = Yes
#solo lectura
read only = Yes
#usuarios que pueden escribir
write list = jcgutierrez,dvielba
#usuarios administradores del recurso
admin users = jcgutierrez,dvielba
directory mask=0755
create mask=0644

[aplicaciones]
comment = Aplicaciones Blom
path = /media/datos/aplicaciones
#no puede entrar todo el mundo
guest ok = No
browseable = Yes
read only = Yes
#usuarios que pueden entrar en el recurso
valid users = jcgutierrez, dvielba, lgarcia
#usuarios que pueden escribir en el recurso
write list = jcgutierrez, dvielba
#usuarios administradores del recurso
admin users = jcgutierrez, dvielba
directory mask=0755
create mask=0644
...

Una vez que terminemos de editar el fichero smb.conf, lo guardamos, lo probamos con testparm y reiniciamos el servidor Samba.
$ sudo testparm
$ sudo /etc/init.d/samba restart

Para compartir una impresora en Samba es muy sencillo, buscamos estas dos líneas en el archivo /etc/samba/smb.conf
...
# printing = cups
# printcap name = cups
...

Y las descomentamos
...
printing = cups
printcap name = cups
...

Guardamos el archivo, comprobamos los parámetros de smb.conf con el comando testparm y reiniciaos el servidor de Samba
$ sudo testparm
$ sudo /etc/init.d/samba restart
Y eso es todo, ya podemos ir a nuestro Windows y buscarmos en nuestro grupo de trabajo las carpetas compartidas de Linux en Samba y además agregar la impresora.
Esto es un documento de internet que parece que esta bien
Samba es un servicio por el cual mediante el uso del protocolo SMB es posible compartir ficheros entre sistemas Windows/Linux/Unix sin problema alguno. A continuación vamos a explicar como realizar la instalación para nuestro Ubuntu 7.10. Para empezar abriremos un terminal y teclearemos los siguientes comandos:

$ sudo apt-get install libcupsys2 samba samba-common

Una vez terminado, procederemos a la edición del fichero smb.conf, el fichero de configuración de Samba. Para ello teclearemos lo siguiente:

$ sudo gedit /etc/samba/smb.conf

Esto nos abrirá el editor de textos con el contenido de smb.conf. Buscaremos una sección nombrada como “Global Security“. Quitaremos el caracter “;” que esta al principio de la linea:
security = user

Quedando así:

security = user

Permitiendo de este modo, que los usuarios de tu sistema tengan acceso también a Samba.
Ahora guardamos el fichero y lo cerramos, volviendo nuevamente al terminal, dónde realizaremos el reinicio de los servicios de samba del siguiente modo:

$ sudo /etc/init.d/samba restart

Terminado esto, es necesario crear ciertas carpetas, para que estas sean usadas como puntos accesibles para todos los usuarios desde cualquier sistema. Para ello teclearemos lo siguiente:

$ sudo mkdir /home/shares
$ sudo mkdir /home/shares/allusers
$ sudo chmod -R root:users /home/shares/allusers
$ sudo chown -R ug+rwx,o+rx-w /home/shares/allusers

Tras esto editaremos nuevamente el fichero de configuración de samba:

$ sudo gedit /etc/samba/smb.conf

Nos situaremos al final del archivo y añadiremos las siguientes lineas:

[allusers]
comment = All Users
path = /home/shares/allusers
valid users = @users
force group = users
create mask = 0660
directory mask = 0771
writable = yes

Para habilitar la lectura/escritura a los usuarios para las carpetas /home/user sera necesario además incluir las siguientes lineas al final del fichero:

[homes]
comment = Home Directories
browseable = no
valid users = %S
writable = yes
create mask = 0700
directory mask = 0700

Nuevamente reiniciaremos Samba tecleando:

$ sudo /etc/init.d/samba restart

Ahora es el momento de agregar usuarios, en este caso, agregaremos el usuario “cristiansan”.

$ sudo useradd cristiansan -m -g users

Ahora estableceremos la contraseña para el usuario, para ello nos valdremos del comando “passwd”

$ sudo passwd cristiansan

Se nos solicitara que escribamos una nueva contraseña. Tras ello, es necesario añadir el usuario a la BD de samba para permitir el acceso del mismo, para ello teclearemos:

$ sudo smbpasswd -a cristiansan

Se nos solicitara la contraseña del usuario. Una vez terminado, ya solo es necesario usar tu cliente Samba para validarte con el usuario “cristiansan” sobre el servidor Samba, para almacenar y compartir ficheros.
©jc_2008

Instalación y configuración de SWAT


swat sirve para configurar samba a traves de un navegador
Para instalarlo
$sudo apt-get install swat

swat lo que nos va a hacer es cambiar la configuracion del fichero smb.conf automaticamente. Al instalarse el programa SWAT sobreescribe el archivo de configuración de Samba, eliminado los comentarios, entre otras cosas. Nos sale una pantalla que nos avisa de este hecho, y recomienda no utilizar SWAT en aquellos casos en los que se tenga muy personalizado el archivo de configuración de Samba.
Tenemos que tener activado el puerto que usa swat en el fichero services
$sudo vi /etc/services
...
swat 901/tcp # SWAT para samba
..

Tras la instalación de SWAT, se ha de activar en el archivo de configuración de inetd
$sudo /usr/sbin/update-inetd --verbose --enable swat
Ahora se hace que el superservidor inetd relea su configuración, quedando el servicio SWAT disponible en el sistema
$sudo /usr/bin/killall --verbose -HUP inetd
Con este comando vemos que swat esta a la espera de peticiones
$/bin/netstat -puta | /bin/grep swat
Para ejecutar SWAT desde el superservidor xinetd se ha de crear la configuración para este servicio en dicho superservidor. Esto se realiza creando un nuevo archivo denominado swat bajo el directorio /etc/xinetd.d, cuyo contenido sea
$sudo vi /etc/xinetd.d
service swat
{
disable = no #Variable que controla si el servicio está o no activo. Si su valor es igual a “yes”, el servicio estará deshabilitado, si es “no”, estará habilitado.
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/swat
# server_args = -a #Esta línea, en caso de estar descomentada, está destinada al paso de parámetros para el servidor swat. La opción “-a” deshabilitaría la autentificación, permitiendo a cualquier persona modificar la configuración de Samba. ¡Tenga cuidado con su uso!
}

Ahora hacemos que el superservidor xinetd relea la configuración
$sudo /etc/init.d/xinetd reload
Una vez ejecutado el comando anterior, el superservidor xinetd pasaría a gestionar las conexiones a Samba, y lo vemos con el siguiente comando
$sudo /bin/netstat -puta | /bin/grep swat
Para conectar con swat lo podemos hacer desde un navegador a traves del puerto 901. Nos pedira un usuario
http://localhost:901 #o la direccion ip de la maquina.
©jc_2008

Montar unidad smb de windows


$apt-get install smbfs
Montamos el disco
$smbmount //sanergy/geoservices /geoservices -o username=administrador,workgroup=val.blom.lan
$sudo smbmount //mdatos03/501725 /mnt/mdatos03 -o username=jcgutierrez,workgroup=blom
Para mas informacion, http://personales.upv.es/~resteban/sambaupv/node9.html

SBMOUNTEl programa smbmount y su complementario smbumount son unas geniales herramientas que, con la ayuda del módulo smbfs o el sistema de ficheros smbfs, permite montar discos compartidos dentro de la jerarquía de ficheros de Linux. No es necesario ser ningún usuario privilegiado para hacerlo. Su sintaxis no es muy complicada:
smbmount //cacharro/servicio /dir/para/montar -o opciones
Donde opciones es una combinación de algunas de las siguientes opciones separadas por comas:
username= nombre de usuario SMB
password= contraseña SMB
netbiosname= nombre NetBIOS origen
uid= mount uid o nombre usuario

gid= mount gid o grupo usuario
port= número puerto remoto SMB
fmask= umask archivos
dmask= umask directorios

debug= nivel de `debug'
ip= nombre host o dir. IP destino
workgroup= dominio/grupo NetBios destino

sockopt= opciones socket TCP
scope= NetBIOS scope
guest invitado, sin contraseña
ro montar solo-lectura

rw montar lectura-escritura

En mi caso, pruebo con lo siguiente:

$smbmount //castor/resteban ~/mnt -o ip=castor.cc.upv.es,username=resteban,workgroup=upvnet

El comando contrario es

$ smbumount /dir/para/montar

Por cierto, es posible conectarse con SMB a cualquier máquina de Internet que comparta sus recursos. Solo es cuestión de usar el nombre remoto (de una palabra) de la máquina, y la dirección IP o un nombre asociado a un servidor de nombres...
©jc_2008

ANEXO: algo rapido


En primer lugar, y antes que nada, debemos tener instalado el servidor Samba. Para ello, y evitando posibles complicaciones derivadas de una mala instalación o configuración, optamos por usar el gestor de paquetes Synaptic. Aquí buscaremos "samba", seleccionamos, aceptamos sus dependencias y lo instalamos.

Una vez instalado, y sabiendo qué carpeta vamos a compartir, debemos agregar su información en el archivo de configuración de samba. Para ello, desde terminal, introducimos:

$sudo gedit /etc/samba/smb.conf

Y en el archivo de configuración, al final de éste, añadiremos la siguiente información:

...
[carpeta_a_compartir]
path = /ruta_completa/carpeta_a_compartir
available = yes
browsable = yes
public = yes
writable = no
...
Para este caso, la información dada permite conocer la ruta a la carpeta, si estará activa, visible, pública y si tiene permisos para ser modificada (en este caso no). No obstante, y sobre el significado de éstos y otros parámetros (incluidos discos, impresoras y demás recursos).

Por último, y tras salvar los cambios, debemos reiniciar el servidor samba, mediante la orden:

$sudo /etc/inid.d/samba restart

Finalmente, voy a explicar un concepto que en muchas ocasiones puede llevar a confusión si no se tiene una idea muy clara de cómo funciona la compartición de archivos, el término de usuario y su relación. En un sistema (ordenador), podemos crear cuentas de usuario, que disponen de espacios propios y visibles únicamente por sus dueños (es decir, estos usuarios). Esto en windows sucede, y mucho más respetado, en linux. Pues bien, el acceso de forma remota (desde otro equipo) a las carpetas existentes en el equipo local, puede llevarse a cabo si éstas se declaran como carpetas compartidas. ¿Quién puede entonces acceder a ellas? Depende de los privilegios que se le hayan dado, pero, en caso de que se restringa su acceso a ciertos usuarios, éstos deben tener una cuenta en el equipo local, es decir, deben haber sido registrados por algún administrador del sistema. Este aspecto, en samba, puede definirse mediante una línea (write list = usuario_fulano @grupo_mengano), y que en la anterior página también viene señalado.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.