Xunta de Galicia


Powered by MediaWiki

Servidor de ficheiros (SAMBA)

As redes locais teñen como finalidade primeira a posta en común de recursos para os usuarios. O almacenamento compartido de arquivos é a máxima expresión deste emprego, e así foi dende os primeiros tempos da microinformática de xestión para pequenas e medianas organizacións. Neste nicho de actividade, os sistemas operativos de escritorio producidos por Microsoft cumpriron un papel determinante no espallamento das tecnoloxías da información ao longo dos anos 90 do século pasado. E dende moi cedo a comunidade de desenvolvemento de software libre tentou artellar alternativas libres aos servizos fornecidos con software privativo. Así xurdiu o Samba, como traballo en curso para pór en marcha un conxunto de servidores que imitaran a funcionalidade dos servidores de dominio de Windows, producindo unha aplicación dos protocolos SMB/CIFS. Ao cubrir tanto ficheiros compartidos, como autenticación de usuarios e usuarias, como xestión de impresoras de rede, Samba conseguiu cotas de estabilidade e niveis de funcionalidade e integración maiores que os da fonte que tentaba emular.

Licenza

Samba distribúese baixo os termos dunha licenza GNU GPL versión 3.0.

Resumo sobre a comunidade de desenvolvemento

O proxecto naceu en 1992, e vai pola versión 3.2.2, do 19 de agosto de 2008. A súa comunidade de desenvolvemento é moi activa, esta formada por máis de 30 persoas espalladas polo mundo adiante. Para o seu financiamento, aceptan doazóns por medio da Software Freedom Conservancy, unha entidade sen ánimo de lucro dedicada ao mantemento dos custos de infraestrutura e os derivados da mobilidade dos membros do equipo de desenvolvemento.

Instalación de Samba

A instalación básica do servidor é ben sinxela: só temos que empregar a nosa ferramenta preferida de xestión de paquetes para instalar o chamado “Samba”. Se gustamos da liña de ordes, apt-get install; se, pola contra, somos máis dados aos aplicativos gráficos de escritorio, entón Synaptic. Tamén pode ser interesante, e útil, instalar dous aplicativos accesorios: “smbfs” e “smbclient”. O primeiro deles hanos permitir montar unidades compartidas polo protocolo SMB/CIFS coma se fosen xerarquías de directorios locais, e o segundo contén algunhas utilidades de diagnóstico necesarias.

Unha vez instalado teremos o servidor activo, pero aínda queda un longo percorrido ata unha configuración estábel e utilizábel.

O mesmo que pasa cos demais servizos do sistema, chamados “daemons”, pódense parar, iniciar ou reiniciar empregando os script administrativos que atopamos dentro do directorio /etc/init.d/. Para Samba, as ordes de parada, inicio e reinicio serían:


/etc/init.d/samba stop
/etc/init.d/samba start
/etc/init.d/samba restart

Configuración de Samba

Cos servizos de rede, e os seus servidores imos atopar moitas e moi variadas fontes de información, guías, titoriais, arquivos de exemplo, etc. Temos que ter sempre presente que a documentación oficial dos desenvolvedores ten que ser a nosa fonte canónica de información sobre cada paquete de software. Por moito que empreguemos manuais e outros textos para nos achegar á posta en marcha dos servizos, temos que ter a man a documentación oficial. No caso de samba, atópase na web do proxecto, samba.org.

Samba1.png
Ilustración 1: Sitio web do proxecto Samba

Tamén hai unha fonte de información que hai que ter presente nos máis dos casos, que é a que nos ven coa nosa distribución. É habitual que a persoa responsábel de preparar os paquetes dun programa para unha distribución en particular recolla a documentación básica para o traballo de posta en marcha do software. Para os sistemas baseados en Debian, esa información atópase baixo a ruta /usr/share/doc/(nome de paquete), o que falando de samba sería /usr/share/doc/samba/. Tamén é común, sobre todo nos servizos que teñen unha certa cantidade de documentación, que exista un paquete específico que a contén. Por exemplo, falando de Samba, temos o paquete “samba-doc”, que integra os textos precisos para ter unha visión xeral e detallada das funcionalidades e opcións dispoñibles no samba.

Entrando xa na configuración do servidor, toda ela reside nun ficheiro de texto, como pasa co resto das configuracións dos programas nos sistemas GNU/Linux. Este arquivo pódese editar con calquera editor de textos que non interfira co formato do documento, como vi, ou nano se traballamos dende a liña de ordes, ou o “Editor de textos” que podemos atopar no menú Aplicacións-> Accesorios. É recomendábel, antes de meterlle man a calquera arquivo de configuración, facer unha copia del, para evitar desastres e perdas de tempo e traballo. O lugar no que se atopan os ficheiros de configuración está sempre dentro do directorio /etc/, normalmente nun subcartafol co nome do programa ao que se refire. No caso de Samba, o arquivo en cuestión é /etc/samba/smb.conf.

Na primeira ollada ao arquivo de configuración de Samba, atopamos que a información esta separada en seccións, delimitadas por etiquetas pechadas entre corchetes (“[ ]“), e dentro de cada unha delas os parámetros están separados do seu valor polo signo igual “=”. Sempre ten que haber unha sección “global”, na que se define o comportamento do servidor á marxe dos recursos compartidos que contén, e unha serie de outras seccións que definen cada unha delas un recurso compartido, sexa espazo en disco ou sexa unha impresora. As liñas de comentarios, comezan por punto e coma.

Os cambios que fagamos neste ficheiro non se aplican no servizo xa activo. Teremos que facer un reinicio do servizo para que os cambios se apliquen. Antes de pór en marcha os cambio podemos, e debemos, validar a sintaxe empregando o comando testparm. É moi recomendábel facer esta sinxela comprobación antes de pór en produción os cambios, para evitar sustos.

testparm /etc/samba/smb.conf


Unha configuración sinxela de Samba, para un servidor que pon a dispór da rede un cartafol compartido no que os usuarios e usuarias non identificados poden ler, sería:

# Opcións Xerais

[global]
workgroup = MEUGRUPO
netbios name = SERVIDOR1
security = share

[compartido]
comment = Data
path = /opt
read only = Yes
guest ok = Yes


Como vemos, ten dúas seccións, “global”, e “compartido”. A primeira determina o comportamento do servidor, e a segunda define o noso espazo compartido na rede. “Workgroup” e “Netbios Name” indican os nomes do grupo de traballo (ou dominio) e do servidor dentro da rede, respectivamente. A etiqueta “Security” fixa o modelo de seguridade e validación de persoas usuarias, neste caso, compartir, o paradigma máis aberto dos posibles. Dentro da segunda sección o campo “Path” amosa o directorio que samba vai compartir. As dúas últimas etiquetas, “Read only” e “Guest ok” delimitan o comportamento das persoas usuarias, e a súa validación: neste caso os usuarios e usuarias só poden ler, pero non escribir, e poden acceder como persoas convidadas, sen se identificar.

Unha vez escrita esta configuración no ficheiro etc/samba/smb.conf, teriámoslle que pasar o testparm, e despois da súa resposta sen erros, xa poderíamos reiniciar o servizo. A saída sen erros de testparm debe ser semellante a esta:

Load smb config files from /etc/samba/smb.conf 
Processing section "[compartido]" 
Loaded services file OK. 
Server role: ROLE_STANDALONE 
Press enter to see a dump of your service definitions 

[global] 
workgroup = MEUGRUPO 
netbios name = SERVIDOR1 
security = SHARE 

[compartido] 
comment = Data 
path = /opt 
guest ok = Yes


Para comprobar que o Samba está a responder como debera, podémoslle pedir unha lista de recursos compartidos lanzando este comando dende a propia máquina onde está instalado o servidor. De quixermos facer a mesma comprobación dende outro computador, teríamos que substituír o enderezo “localhost” pola IP do servidor samba:

smbclient -L localhost

A resposta deberá ser semellante a:

Domain=[OMEUGRUPO] OS=[Unix] Server=[Samba 3.0.28a] 

Sharename Type Comment
--------- ---- ------- 
compartido Disk Data 
IPC$ IPC IPC Service (Samba 3.0.28a) 
Domain=[OMEUGRUPO] OS=[Unix] Server=[Samba 3.0.28a] 

Server Comment 
--------- ------- 
SERVIDOR1 Samba 3.0.28a 

Workgroup Master 
--------- ------- 
OMEUGRUPO 


Dende máquinas Windows, abrindo o explorador de ficheiros, no apartado de rede local, debéramos poder ver o grupo de traballo “OMEUGRUPO”, e dentro del o servidor “SERVIDOR1”, que debe conter un directorio chamado “COMPARTIDO”. Os contidos dese directorio serán os mesmos que os do directorio /opt do servidor.

Algunhas pistas para traballar con saúde

Servizos, parada e arranque

A configuración do Samba ten aínda moito que facer, e moitas posibilidades e casos de aplicación específicos. Pero neste punto imos achegarnos a unha pequena guía a recursos que poden facer a vida do administrador novo un chisco máis doada.

Xa vimos que para reiniciar o servizo empregábamos o restart de /etc/init.d/samba:

/etc/init.d/samba restart

Tanto o reinicio, como a parada como o arranque de servizos pódese facer empregando os scripts de /etc/init.d, como co xestor de servizos invoke-rc.d seguido do nome de servizo e a orde que lle queiramos dar. Para reiniciar o proceso, podemos facer tamén:

invoke-rc.d samba restart

Para estarmos seguros de ter o servizo activo podemos comprobar se os seus daemons están correndo, empregando o mandato ps:

ps -A |grep mbd

co que deberamos obter unha lista de procesos como:

5478 ? 00:00:00 nmbd 
5498 ? 00:00:00 smbd
5635 ? 00:00:00 smbd

Un xestor web: SWAT

Para os usuarios que gustan da xestión web dos servizos, existe un amplo abano de opcións. Para administrar Samba vamos a empregar SWAT, que non precisa de servidor web e fainos visibles case tódalas opcións de configuración do noso servidor Samba dunha forma sinxela. Instalámolo co paquete “swat”, ben dende Synaptic, ou ben dende a liña de ordes:

apt-get install swat

Despois de instalado, temos que reiniciar o servizo inetd, que é o que se encarga de agardar por intentos de acceso:

invoke-rc.d openbsd-inetd restart

E xa poderemos abrir o navegador web para entrar no SWAT. Temos que empregar o enderezo http://localhost:901/, se tentamos acceder dende a propia máquina na que está o servizo. Se o queremos facer dende outro computador, e o servidor ten, por exemplo, a IP 192.168.1.116, o que teríamos que pór no navegador seria: http://192.168.1.116:901/. O SWAT pediranos usuario e contrasinal para entrar: empregamos root, e o seu contrasinal.

Samba2.jpg
Ilustración 2: Interface de configuración do Samba, chamado SWAT

Cada unha das iconas da cabeceira lévanos a unha páxina diferente. En case todas elas temos unha primeira escolla para poder ver a configuración básica, ou avanzada. Para os nosos propósitos iniciais coa configuración básica temos abondo. Cunha ollada á configuración avanzada habemos ver a gran cantidade de opcións que cobre SWAT.

As máis importantes son: GLOBALS, SHARES e PRINTERS. Na primeira aparecen os parámetros que tiñamos no smb.conf dentro da sección “Globals”. Na segunda, os espazos compartidos que teñamos no servidor, e na terceira as impresoras. Cando aplicamos cambios, dándolle ao botón “Commit Changes” o SWAT vai sobrescribir o smb.conf, e vamos perder calquera información que tiveramos nel, como anotacións, liñas comentadas, etc. Ademais diso, e de facer unha versión optimizada del, tamén lle escribe ao smb.conf na cabeceira tres liñas de identificación, que nos informan da IP de orixe do navegador que fixo os cambios, e a data.

Se entramos na sección “SHARE”, teremos que escoller un dos recursos compartidos para ver a súa configuración. Farémolo no despregable que está á dereita do botón “Choose Share”. Unha vez escollido, facemos clic neste botón. Como vemos, as opcións que se nos presentan son moitas máis das que puxemos no smb.conf. Unhas están en branco, pero outras teñen valores predeterminados no sistema.

Samba3.png
Ilustración 3: Sección SHARE no Samba

Podemos crear novos recursos compartidos pulsando no botón “Create Share” despois de escribir o nome no cadro de texto que ten ao lado.

Diagnósticos: rede, cabos, pings e smbclient

Traballar con cartafoles compartidos entre un servidor e diversos computadores nunha rede local pódenos levar a moi diversos erros e problemas, e estes a abondosas dores de cabeza. Para enfrontarnos con eles temos que ter moi claro en todo momento que é o que non funciona, e que é o que vai ben. O que se propón de seguido é unha pequena guía para diagnósticos en rede local.

Os elementos que imos verificar son de dous tipos: físicos e lóxicos. Entre os físicos temos o cabo de rede, a electrónica de comunicacións e os propios computadores. Entre os lóxicos estarían as configuracións de rede, os camiños e os servizos activos.

Dando por suposto que temos o servidor Samba activo, e xa fixemos as mínimas verificacións antes descritas empregando smbclient, o seguinte sería asegurarnos de que o porto no que escoita Samba está aberto. Empregamos nmap<ref name="ftn3">Pode ser que nmap non este instalado no noso sistema. Para instalalo, o paquete chámase “nmap”.</ref> para iso:

nmap localhost

A resposta tería que ser semellante a esta:

Interesting ports on localhost (127.0.0.1): 
Not shown: 1709 closed ports 
PORT STATE SERVICE 
139/tcp open netbios-ssn 
445/tcp open microsoft-ds 
901/tcp open samba-swat 

Vemos o porto 139, que corresponde cun dos empregados nos protocolos SMB/CIFS. Se non temos ese porto aberto, teremos que botar unha ollada aos ficheiros de rexistro do sistema, aos “logs”. O principal ficheiro de rexistro do sistema chámase “syslog”, e atópase xunto con todos os demais en /var/log, outro directorio que temos que ter sempre moi presente. Para ver as últimas liñas deste arquivo, e seguilas a medida que son escritas empregamos tail:

tail -f /var/log/syslog

As entradas en syslog teñen unha estrutura uniforme: primeiro a data e hora do evento, despois o nome da máquina, seguido do servizo que fai a anotación, e o texto do apuntamento. E dende outro terminal facemos un reinicio do servidor Samba:

invoke-rc.d samba restart

Cando fagamos este reinicio, habemos ver que o syslog vai avanzando, deixando referencia do peche do servizo, e do intento posterior de volver a activalo. Seguramente nesas liñas habemos atopar algún aviso de erro. Para saír do tail -f, facemos Ctrl+C.

De seguido, precisamos coñecer o enderezo IP de cada un dos computadores da rede, para ter a seguridade de que non hai enderezos repetidos, e poder facer probas de visibilidade entre eles. En máquinas GNU/Linux temos o comando ifconfig, que nos da toda a información sobre os interfaces de rede. Nas Windows, temos o comando ipconfig, que nos da o enderezo IP. Tendo as direccións IP xa podemos comezar a facer ping entre elas. Por exemplo, se o noso servidor ten a IP 192.168.1.1, dende calquera outra máquina debera ser posible facer:

ping 192.168.1.1 

E obter unha resposta como:

PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.51 ms 
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.523 ms 
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.595 ms 
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.543 ms 
64 bytes from 192.168.1.1: icmp_seq=5 ttl=64 time=0.520 ms 
(...)
--- 192.168.1.1 ping statistics --- 
18 packets transmitted, 18 received, 0% packet loss, time 16999ms 
rtt min/avg/max/mdev = 0.520/0.659/2.517/0.451 ms 


Deixamos o ping por 20 ou 30 segundos, e cortamos con Ctrl+C. Analizando a saída de ping podemos obter abondosa información sobre redes locais, e remotas. O primeiro que temos que ver é o resumo: onde di “packet loss”. Se non é do 0%, e que estamos a perder paquetes. Síntoma de que temos problemas cos cabos, ou coa electrónica. Habería que probar a cambiar o cabo, reiniciar a electrónica de rede e, posiblemente, ver de substituír esta, en caso de que en tódolos equipos conectados á mesma, a resposta sexa semellante. A batería de probas deberá comezar pola comprobación de cada cabo, empregando como mínimo un verificador de continuidade de cada fío para asegurarnos de que os cabos non son fonte de erros. A continuación, empregando os cabos xa verificados, podemos comezar coa validación da electrónica, e as tarxetas de rede de cada máquina, xa dende o sistema operativo

Ping manda un paquete cada segundo, e a resposta nunha rede local ten que chegar de volta en menos dun ms (milisegundo). Facendo probas de eco con redes remotas podemos saber o “lonxe” que están de nós. Se facemos ping a diversos hosts en Internet poderemos observar que os tempos de resposta son diferentes.

O traballo de diagnose de rede ten que ser metódico e a fondo. Calquera elemento pode introducir distorsións no conxunto que dea lugar a perturbacións aleatorias. Unha tarxeta de rede avariada, un cabo mal rematado, ou dobrado, un switch demasiado quente... Pódese atopar unha batería de probas a fondo na documentación de Samba. Entre elas, as máquinas Windows poden empregar o comando net: para ver os recursos compartidos dun servidor:

net view servidor

Seguridade en Samba

Podemos habilitar seguridade por hosts, por interfaces e por usuarios e usuarias. Para cada un dos procedementos de limitación de acceso, empregamos unha serie de parámetros do smb.conf, na parte de configuración xeral. En caso de que quixeramos que o noso servidor fose visíbel dende a rede local 192.168.0.0/24, e non dende o “resto do mundo”, teríamos que incluír estas dúas liñas:

hosts allow 192.168.0.0/24
hosts deny 0.0.0.0/0


De calquera xeito, a medida básica de seguridade que todo sistema debe observar pasa pola actualización de paquetes, empregando as ferramentas que a propia distribución fornece. No caso de Debian e Ubuntu, é necesario facer cunha certa frecuencia apt-get upgrade, para ter as correccións de seguridade á última, e non expor no nosos sistema vulnerabilidades coñecidas que poden ser vía de entrada de visitantes non desexados, e comprometer a integridade dos datos que custodiamos.

Licenza desta guía

Esta guía forma parte da documentación de apoio para a capacitación TIC en SwL e foi elaborada pola empresa TEGNIX para o Centro de Referencia e Servizos de Software Libre de Galiza – Mancomún. Distribúese baixo as condicións dunha Licenza Creative Commons: Recoñecemento-CompartirIgual 3.0