Follow falcon_dark on Twitter
Google

quarta-feira, agosto 30, 2006

Simples tutorial para servidor de aplicações

Eu possuo 4 computadores em casa e sou responsável pela manutenção e bom funcionamento de todos eles. O custo elevado de licenças e a necessidade constante de manutenção da plataforma Windows foram dois fortes argumentos que me levaram a adotar Linux em toda a minha rede doméstica. Eu já usava Linux em meu servidor pessoal e em meu notebook, por preferência pessoal, mas as outras duas máquinas usadas pelo resto dos seres viventes habitantes de meu lar ainda operavam com MS Windows quando dei um ultimato a todos: migrar para Linux ou cuidarem eles próprios de suas máquinas. Em pouco tempo estavam todos habituados e contentes com seus novos Linux Mandriva 2006 e agora dedico aquelas preciosas horas que passava atualizando anti-vírus, detectando e resolvendo problemas de configuração e outras tarefas de pouca glória à ações bem mais úteis.

A vantagem de uma rede Linux é a centralização na administração. Desde o startup de cada máquina você pode configurá-la e administrá-la sem precisar de malabarismos como um programa externo ao estilo VNC ou configurações de serviços de desktop remoto, basta usar o SSH. Como o Linux, diferentemente do Windows, foi projetado desde a base para ser multi-usuário é extremamente fácil integrar diferentes máquinas de uma mesma rede em um sistema de cliente/servidor que funciona muito bem, é rápido, barato e que ainda pode lhe render a economia de alguns reais com upgrades de hardware.

Já descrevi aqui no blog minha rede algumas vezes e contei como uso o sistema de terminais do X para distribuir aplicativos pela rede. Mas é hora de um pequeno tutorial. Em princípio eu usava meu servidor Linux apenas para manter arquivos de todos via compartilhamento de unidades pela rede, mas depois migrei para outro nível de uso. O servidor de arquivos evoluiu e agora funciona como um servidor de aplicações completo que pode armazenar todas as configurações de todos os usuários, todos os seus programas, histórico de navegação na web, e-mail e ainda funciona como um servidor de impressão. Ao ter apenas uma impressora para quatro máquinas economizo com papel e tinta. Ao centralizar todas as configurações eu tenho apenas um ponto da rede para me preocupar com backups e os upgrades de HD, por exemplo, destinam-se sempre à mesma máquina. Isso ocorre de uma forma que duas máquinas tem aqui sistemas completos e uma possui um HD de 6GB enquanto outra apenas 20GB. Se para um usuário que aprecia vídeo, áudio, e planeja usar o computador como seu centro de vida digital 20GB parecem pouco hoje em dia em uma rede com um servidor de aplicações você não precisa ter HD gigantescos em todas as máquinas.

Em comparação com a rede Windows da casa de um amigo meu, onde existem 5 computadores, minha rede é composta de máquinas bem mais econômicas (e baratas) mas provém muito mais funcionalidades, cortesia do Linux. Se em sua rede Windows meu amigo precisa de processadores com 2 GHz, 80GB de HD, e 512MB de memória em cada nó (um nó é um computador em uma rede), aqui o servidor é um velho Pentium III 800MHz com 756MB de RAM. Todas as outras máquinas (exceto meu notebook) são mais modestas e ninguém aqui está pensando em upgrades de hardware por enquanto. Neste pequeno tutorial vou descrever os passos para criar um servidor de arquivos/impressoras/aplicações usando Linux para que você possa montar seu próprio servidor e usar algumas facilidades que o Linux apresenta e que poucos usuários conhecem.

O servidor
Não importa qual distribuição Linux você escolha para seu servidor, um Linux é sempre um Linux. Você conseguirá implementar esse tipo de funcionalidade sem nenhum problema. Apenas opte por uma distro adequada para que você possa ter o menor trabalho com configurações possível. Aqui todos os nós (clientes e servidor) usam Mandriva 2006. A primeira coisa que você deve fazer é compartilhar seus arquivos e impressora. Isso é útil para que os usuários, ao usar aplicações locais em suas estações, possam encontrar suas pastas. Como o Mandriva possui um assistente muito bom para isso no Mandriva Control Center que é praticamente intuitivo vou poupar você da descrição e dos screenshots. Outras distros também possuem muita funcionalidade nessa área, como o Suse e o Ubuntu. Então o melhor conselho que posso dar a você nesse ponto é buscar informações sobre como compartilhar suas unidades de disco na rede para sua distribuição. Qualquer coisa que eu fale nesse sentido pode mais complicar do que esclarecer as coisas.

Um verdadeiro servidor de aplicações deve disponibilizar conexões gráficas via rede, para permitir a execução remota de programas. Vamos descobrir agora como configurar seu X server para aceitar essas conexões. Um excelente material base para isso está no Guia do Hardware onde o Morimoto explica como criar um servidor Xdm. O servidor Xdm é uma aplicação do X server que destina-se a criar um servidor especificamente para aplicações em uma rede de terminais leves. Não é o que queremos, queremos que cada máquina rode sua interface independente (e não a receba do servidor) e apenas receba aplicações separadas do servidor, mas as configurações são praticamente as mesmas. Vamos começar o passo à passo. Lembre-se que a máquina alvo usa Mandriva, e que por isso em sua distro os arquivos podem estar em diretórios diferentes. Você deve efetuar as modificações como root, portanto muito cuidado pois qualquer erro aqui pode corromper seu X server e impedi-lo de iniciar corretamente, faça backups dos arquivos orginias antes de alterá-los.

Abra o arquivo /etc/X11/xdm/xdm-config e busque a linha
DisplayManager.requestPort: 0

Essa linha diz para o servidor só receber conexões da primeira porta, comentando-a você instrui o X a receber requisições de qualquer porta. O comentário é o sinal !, portanto a linha comentada fica:
!DisplayManager.requestPort: 0

Abra o arquivo /etc/X11/xdm/Xaccess e encontre a linha:
# *#any host can get a login window

E retire dela o caracter de comentário #. A linha deve ficar assim:
*#any host can get a login window

Agora qualquer máquina pode conseguir uma janela de login do servidor gráfico. Em seguida encontre, no mesmo arquivo a linha:
# *CHOOSER BROADCAST#any indirect host can get a chooser

E também retire o comentário (#) dela. Depois abra o arquivo /usr/share/config/kdm/kdmrc
e busque pela seção que cuida do Xdm:
[Xdmcp]
Enable=false

E altere a opção para true:
[Xdmcp]
Enable=true

Pode ser necessário modificar o arquivo /etc/kde3/kdm/Xaccess da mesma forma que descrito acima para o arquivo /etc/X11/xdm/Xaccess. Com essas modificações seu servidor está pronto para fornecer interfaces gráficas para outros sistemas da rede. Há considerações de segurança a serem feitas pois você está permitindo que qualquer máquina peça uma tela de login para seu servidor. Só é seguro implementar as configurações aqui descritas se você tiver um firewall protegendo seu servidor da internet e negando acessos às portas do X server de seu servidor. Se for uma máquina conectada diretamente à internet você deve configurar um firewall para só receber conexões pelas portas Xdmcp (padrão: 177) dos ips internos de sua rede!

Se você quiser criar um sistema de terminais gráficos com máquinas leves o tutorial do Morimoto descreve o procedimento e você deve consultá-lo para configurar os clientes. Como eu disse, aqui desejamos que apenas aplicações sejam servidas e não a interface toda.

Depois de conexão do X conforme descrito até aqui você precisará iniciar o servidor novamente. Você não precisa reiniciar o Linux, basta fazer o logoff de sua seção e pedir o restart do servidor gráfico. Agora você irá precisar configurar o acesso SSH de seu servidor. Isso é necessário porque a transmissão de dados entre dois X servers (o do cliente e o do servidor) ocorre sem criptografia nenhuma. São apenas pacotes com texto e comandos para gerenciamento de janelas. O SSH permitirá a criação de um túnel seguro (encriptado) através do qual os dados irão trafegar.

Você deve assegurar-se de que existe um sshd rodando no servidor. Se não houver você deve instalá-lo e configurá-lo para que ele fique rodando o tempo todo ou que seja executado quando necessário. Logado como root em um shell você pode executar:
$ /etc/init.d/sshd start

para iniciar o sshd e verificar se ele encontra-se instalado. Então você deve configurar o ssh para fazer a transmissão de pacotes X server. Para isso edite o arquivo /etc/ssh/sshd_config e verifique a existência da linha:
X11Forwarding yes ou
#X11Forwarding yes ou ainda
#X11Forwarding no
e deixa-a como abaixo:
X11Forwarding yes

Essa linha permite que o sshd transmita aos clientes dados do X server via protocolo seguro. Sem ela você precisará explicitar no comando de login SSH a opção de transmissão de pacotes X, o que nem sempre funciona se sua distribuição trouxer o ssh bem configurado. Portanto dê preferência para executar essas alterações, isso irá facilitar muito nossa vida no futuro. Após fazer essas alterações como root salve o arquivo.

Usando o servidor de aplicações
Agora nosso servidor está configurado para transmitir aplicações para outro Linux ou Windows + Cygwin da rede. Vamos ver como iniciar aplicações a partir dos clientes. Lembre-se que o grande objetivo prático é manter uma instalação bem completa no servidor e instalar apenas um sistema básico nos clientes, diminuindo o uso de espaço em disco pela instalação de diversas cópias de uma mesma aplicação, como o OpenOffice, por exemplo.
Em seu sistema cliente, rodando normalmente com o X server e seu ambiente gráfico preferido inicie uma conexão com o servidor de aplicações. Para isso abra um shell e execute o ssh:
$ ssh 192.136.10.2

colocando o IP do servidor como destino. O sistema requisitará a senha de usuário, que deve ser fornecida adequadamente. Após a conexão basta digitar o nome da aplicação para que ela seja executada. Pronto, de forma rápida e fácil você está usando uma aplicação instalada em uma máquina a partir da outra, com acesso a todos os arquivos que seu usuário de login poderia acessar se estivesse usando o servidor localmente.

É claro que para funcionar você precisa ter o mesmo usuário em ambas as máquinas. Mas pode ser que você queira manter um usuário no servidor específico para isso e não permitir o login de diversos usuários diferentes. Vamos dizer que, não importa qual usuário queira conectar-se, o nome de usuário “comum” seja escolhido para fornecer aplicações para todos. O comando então deve ficar como esse:
$ ssh comum@192.136.10.2

Indicando ao servidor que você quer conectar-se como este usuário em específico. Este esquema de nome@IP funciona para qualquer usuário cadastrado no servidor independente do usuário que você está usando na máquina local.

Facilitando as coisas
Se você tiver um servidor com IP fixo não precisa digitar o número todas as vezes em que quiser conexão. Você pode editar no computador cliente o arquivo /etc/hosts e incluir nele um nome correspondente ao IP do servidor. Basta acrescentar a linha no formato IP nome, como no exemplo abaixo:
127.0.0.1 localhost
192.136.10.2 servidor

Ao salvar o arquivo você poderá efetuar a conexão da seguinte forma:
$ ssh comum@servidor
ou
$ ssh servidor

caso o mesmo nome de usuário esteja criado em ambas máquinas (cliente e servidor). Isso permite que o comando seja digitado bem mais rápido.

Deixando as coisas mais seguras
O SSH usa como padrão a porta 22 e todo mundo sabe disso. Se a sua máquina ou sua rede estão conectadas na internet e seu firewall não estiver bem configurado pode ser que algum cracker use um script para tentar acessar sua máquina via SSH. Por isso como medida de segurança toda máquina que mantém um sshd rodando deve ser configurada para receber as conexões por outra porta que não a padrão do protocolo. Para configurar a porta que seu sshd usará para receber conexões edite novamente o arquivo /etc/ssh/sshd_config e busque pela linha:
Port 22

alterando-a para qualquer outra porta que você queira, exceto aquelas já usadas (como por exemplo a 21 de ftp). Escolha um número bem diferente mas certifique-se de lembrar dele pois você precisará informar ao cliente em qual porta tentar a conexão. Como exemplo vamos configurar o serviço na porta 2325:
Port 2325

Salve o arquivo. Agora o comando para conectar-se ao servidor será:
$ ssh -p 2325 192.136.10.2
ou
$ ssh -p 2325 servidor

A mudança de porta padrão e uma boa configuração de firewall devem ser o bastante para proteger seu servidor de qualquer conexão indesejada. E não esqueça de escolher uma boa senha, coisas como 12345 devem ser evitadas. Uma combinação de letras e números com 8 ou mais dígitos é o bastante e você deve mudar essa senha a cada 3 ou 4 meses, apenas por paranóia ;-)

Usando o servidor de aplicativos de forma útil
A esta altura o servidor de arquivos já deve estar funcionando. Agora você pode utilizar uma única conexão ssh para executar todas as aplicações que desejar. Após iniciar a conexão ssh você terá uma tela semelhante à essa:
[usuario@cliente ~]$ ssh -p 2325 servidor
usuario@servidor's password:

Last login: Wed Aug 30 17:35:26 2006 from 192.136.10.10

[usuario@servidor ~]$

E você pode chamar qualquer programa com o comando adequado, exatamente como faria se estivesse operando diretamente o servidor. Por exemplo:
$ kcalc &

executa a calculadora do KDE. O & ao final do comando serve para iniciar a aplicação e manter o shell livre para novos comandos. Assim com apenas uma conexão ssh você poderá abrir diversos aplicativos e operar vários programas remotos ao mesmo tempo. Note que na barra de título da aplicação gráfica surge ao final do nome do programa <@servidor> indicando que aquele programa é executado de maneira remota consumindo recursos do servidor e não do cliente. Então em lugar de instalar várias vezes o OpenOffice pela rede você pode instalá-lo apenas um uma máquina e usá-lo de qualquer computador como se trabalhasse localmente. Seus arquivos estarão centralizados e suas aplicações também.

Não são todas as aplicações que funcionam bem desta forma, alguns aplicativos podem apresentar um comportamento inadequado, cabe a você verificar se os programas que você mais gosta de usar funcionam da forma esperada. Vale lembrar que esse método de conexão via SSH também serve para tarefas administrativas do sistema e inclusive para matar processos do servidor ou reiniciar partes ou todo o sistema operacional. Aproveite a oportunidade para explorar o potencial de rede do Linux, é uma das grandes vantagens que ele possui sobre outros tipos de sistemas e é muito útil quando se tem mais de um computador sob seu comando.

Em tempo. Caso você tenha um servidor Linux em uma rede Windows é igualmente possível executar aplicativos do servidor em sua interface Windows no desktop. Basta instalar o Cygwin, um conjunto de aplicativos que implementa a API Linux sobre o sistema da Microsoft. Configurando adequadamente o X do Cygwin para iniciar uma interface gráfica com um ambiente você pode, a partir de um shell dentro desse ambiente, executar qualquer aplicações Linux remotamente no servidor usando esses mesmos comandos de SSH, muito mais rápido do que emulação para redes mistas que precisam de aplicações das duas plataformas.

Follow falcon_dark on Twitter
Google
Comments: Postar um comentário



<< Home

This page is powered by Blogger. Isn't yours?