Aula 5 – Prova 201 – Sistemas de Compartilhamento de Arquivos

Fui comprar minha Linux Magazine de todo mês e me deparei com uma boa surpresa! A coluna de tutoriais do Luciano Siqueira agora esta trazendo aulas sobre LPIC-2! Realmente muito legal para quem está estudando para mais esse nível, assim como eu! Já li a aula e digo que está bem simples e objetiva. Assim como fiz, o tema da primeira aula é “Kernel Linux”. Recomendo para quem quer se aprofundar um pouco mais nesse mundo que me fascina mais a cada dia. Para acesso de assinante da revista, pode-se utilizar esse link.

Mas como não vim para ficar aqui fazendo propaganda de revista, vamos para mais uma aula e mais conteúdo! Realmente tenho demorado entre uma aula e outra, porém, como já tenho explicado e nem adianta falar novamente, eu estava meio atarefado! 😛 Hoje vamos falar dos sistemas mais utilizados no mundo livre para o compartilhamento de arquivos. Os objetivos deste post são:

  • Configurar um servidor Samba
  • Configurar um servidor NFS

Objetivo 1: Configurando um Servidor Samba

O nome Samba pode trazer uma certa impressão errônea em nós brasileiros que esse seria um software genuinamento brasileiro. Porém, isso não é verdade. Samba foi criado por Andrew Tridgell em 1992. O software possui esse nome pois o desenvolvedor original gostaria de utilizar um nome que contivesse o nome do protocolo que ele implementa, no caso o SMB (Server Message Block). Abriu o dicionário e encontrou essa palavra aleatoriamente! 🙂

O Samba implementa SMB/CIFS em sistemas Unix-like. SMB é mais comumente designado como o conjunto de protocolos necessários para interação em uma rede Microsoft Windows, incluindo serviço de impressão, autenticação, compartilhamento de arquivos, resolução de nomes, etc.

A última grande versão do Samba é a 3.0, que inclui características como Kerberos 5 e integração com LDAP, suporte total a Unicode, relacionamento de confiança com PDCs Microsoft Windows e suporte a ACLs do Windows NT. Devido a tantas funcionalidades do Samba, vamos nos ater apenas às configurações requeridas para o exame LPIC-2.

  • Configuração do Samba para que atue como um PDC e manipule informações de logins de clientes Microsoft Windows;
  • Configuração do Samba para servir diretórios e impressoras para clientes Microsoft Windows;
  • Acesso a recursos compartilhados por um servidor Microsoft Windows em um cliente Linux.

Arquivos do Samba

O Samba possui diversos arquivos, sejam eles binários ou texto puro, para a realização da configuração e execução do serviço. Segue uma descrição breve sobre cada um deles.

  • /etc/samba/smb.conf – Arquivo de configuração principal do Samba.
  • /usr/bin/smbpasswd – Cria ou modifica usuários Windows.
  • /usr/bin/testparm – Checa a sintaxe do arquivo /etc/samba/smb.conf.
  • /usr/bin/smbstatus – Lista informações sobre conexões e arquivos abertos.
  • /usr/sbin/smbd – Servidor Samba. Responde por solicitações de autenticação e acesso a compartilhamentos.
  • /usr/sbin/nmbd – Servidor de nomes NetBIOS.
  • /usr/bin/smbmount – Monta um compartilhamento Windows no Linux.

Os arquivos acima normalmente vêm distribuídos em pacotes separados de acordo com a finalidade do usuário. Em duas distribuições que tenho mais afinidade (Fedora e Ubuntu), eles são separados como descrito abaixo.

  • samba-client ou smbclient – necessários para permitir acesso de clientes Linux a recursos Microsoft Windows.
  • samba-server ou samba – necessário para prover recursos de servidor Windows.
  • samba-common – necessário tanto para servidores como clientes Linux.

Configuração Básica do Samba

A configuração do Samba é bem simples! Sendo ela totalmente realizada no arquivo texto /etc/samba/smb.conf. Comentários são definidos por linhas iniciadas com o símbolo do hash ou por pontos-e-vírgulas. Assim como outros softwares em ambiente Linux, os parâmetros podem ter efeito global ou específico. Os parâmetros globais deverão ser colocados exclusivamente na seção global e os demais parâmetros específicos nas seções dos outros compartilhamentos.

A seção global define configurações que se aplicam para o próprio servidor Samba e os demais compartilhamentos. A identificação dessa seção é realizada através da marcação [global] contida no arquivo de configuração. Vamos a um exemplo de seção global.

[global]
netbios name = localdomain
workgroup = wordpress
server string = Servidor Samba
security = user

Vamos agora ao significado de cada linha.

  • [global] – indicação de onde se inicia a seção global. Uso obrigatório.
  • netbios name – nome NetBIOS para o servidor.
  • workgroup – nome do grupo de trabalho NetBIOS do servidor. Pode-se colocar aqui também o domínio ao qual o servidor pertence.
  • server string – é uma descrição que é enviada aos clientes.
  • security – como será realizada a autenticação dos usuários do servidor. Os valores possíveis são: share, user e domain. share faz com que a autenticação se baseie em um usuário e senha para cada compartilhamento. Ou seja, uma chave de autenticação compartilhada com quem quiser acessar o recurso. O segundo valor, user, é o padrão para o Samba 3.0. Ele autenticará de acordo com login e senha do usuário que desejar acessar o recurso. Ou seja, cada usuário irá utilizar seus dados pessoais para se autenticar. O último valor, domain, prevê que o Samba será um PDC da rede que irá autenticar os usuários.

As opções apresentadas não correspondem a todas as possíveis. Uma lista completa com o significado de cada opção pode ser obtida através do comando “man smb.conf”. Além disso, ferramentas como o testparm, presente no mesmo pacote do Samba, podem realizar uma análise do arquivo de configuração para a detecção de possíveis erros de sintaxe. Vamos ver como é realizado o processo de autenticação de uma estação Microsoft Windows no Samba

smbpasswd

Sintaxe:

smbpasswd [opções]

Até antes do Windows 95OSR2, o login e senha dos usuários eram enviados em texto puro até o servidor de autenticação. Depois, devido obviamente a questões de segurança, foi adotado o uso de criptografia nesses dados para que eles possam trafegar na rede. É utilizada pelo Windows criptografia chamada one-way, que indica que o dado uma vez criptografado não poderá ser descriptografado. O Linux utiliza o mesmo conceito para autenticação no sistema, utilizando os arquivos /etc/passwd e /etc/shadow. Porém, o método de criptografia utilizado por ambos os sistemas é diferente. O que significa que não é possível autenticar diretamente uma máquina Windows nos arquivos padrão do Linux. Para tanto, é necessário que os dados sejam então transformados para o método criptográfico utilizado pela Microsoft. Isso é feito utilizando a ferramenta smbpasswd.

Exemplos de uso:

smbpasswd -a thigu

smbpasswd -x thigu

smbpasswd -a -m comp-thigu

O primeiro exemplo irá exportar a conta do usuário “thigu” para que seja utilizável através do Samba. O usuário “thigu” já existe em /etc/passwd. O segundo exemplo irá excluir o usuário “thigu” da base de dados do Samba. O terceiro exemplo irá criar uma conta Samba para que a máquina “comp-thigu” possa se autenticar no domínio Samba, caso o mesmo esteja atuando como um PDC. A conta “comp-thigu$” com o cifrão após o nome precisa anteriormente estar criada. As informações geradas dos usuários são gravadas por padrão em /etc/samba/smbpasswd. Se o arquivo não existir, ele é criado no momento da adição do primeiro usuário. Segue abaixo um exemplo de conteúdo do arquivo /etc/samba/smbpasswd.

thigu:49171:02D093CE93078E8FAAD3B435B51404EE:CAF13C4F321B608B27FD75D2549BA53C:[U ]:LCT-46A149D9:

Se compararmos com a entrada do usuário em /etc/shadow vamos perceber que os valores são totalmente diferentes, apesar da senha ser a mesma.

thigu:ffdHECqf2hTwM:13714:0:99999:7:::

Configurando o Samba para Atuar como PDC

Para definir o Samba como um controlador de domínio é necessário adicionar a opção “domain logons = yes” na seção global do arquivo smb.conf. As vantagens do uso de domínios para gerência de um ambiente de rede local são bem conhecidas, mas para citar as principais, integração do recurso de autenticação, controle sobre os logins com simples administração.

Para antigas versões do Windows, ingressar no domínio era uma configuração apenas local da estação. Porém, em versões mais recentes do Windows, para que a máquina seja parte do domínio, ela precisa ser primeiramente cadastrada no controlador de domínio. Para tanto, é necessário criar uma conta utilizando a ferramenta smbpasswd, assim como foi demonstrado anteriormente. Essa conta especial não precisa possuir uma senha.

Quando o Samba for configurado como um controlador do domínio, pode ser necessário criar um compartilhamento chamado netlogon. O compartilhamento netlogon é padrão em controladores de domínio Windows, pois nele ficarão localizados os scripts a serem executados pelos clientes durante o processo de logon e a política de segurança.

Vamos a um exemplo prático de uso.

[netlogon]
comment = Servico de logon
path = /var/samba/netlogon
guest ok = Yes
browseable = No

Todo compartilhamento no Samba deve iniciar com um nome entre colchetes, como sendo o nome visível para acesso de usuários remotos. A segunda linha possui a chave comment que tem o intuito de criar uma descrição do volume. A terceira linha, path, tem o significado de indicar o caminho para o local que será compartilhado pelo Samba. A próxima entrada, guest ok, caso seja assinada como “yes”, ou “1”, irá possibilitar que usuários não-autenticados acessem recursos do servidor. A última linha, browseable, estando com a indicação “no” ou “0” indica que esse compartilhamento não será exibido explicitamente.

A configuração acima do compartilhamento netlogon deve ser acompanhada da opção global logon script indicando o nome do arquivo que será executado dentro do compartilhamento indicado no path do netlogon. Veja o exemplo abaixo.

logon script = start.bat

No exemplo, o script /var/samba/netlogon/start.bat será executado durante o login dos usuários no controlador de domínio.

Configurando o Samba para Compartilhar Diretórios

Talvez essa seja a funcionalidade do Samba mais difundida entre a comunidade: compartilhamento de arquivos na rede. Um compartilhamento é definido em seu arquivo de configuração com um conjunto de parâmetros iniciados pelo nome do compartilhamento entre dois colchetes. Vamos a um exemplo de compartilhamento.

[homes]
path = /home
comment = Diretorio Pessoal
browseable = no
write list = @admin
valid users = %S
writable = no
create mask = 0600
directory mask = 0700

E eis o significado de cada uma das linhas:

  • [homes] – identificação do compartilhamento pelos clientes. Deve ser um nome único.
  • path – diretório do sistema que será compartilhado. Caso não seja especificado, o padrão será a pasta pessoal do usuário.
  • comment – assim como no compartilhamento padrão netlogon, o comment tem o objetivo informar o usuário sobre o compartilhamento.
  • browseable – esse controle indica se o compartilhamento será visível através de uma busca no servidor.
  • write list – indica que apenas usuários do grupo “admin” terão acesso de escrita ao compartilhamento.
  • valid users – por padrão, o compartilhamento é disponibilizado para acesso de qualquer usuário no servidor. Com essa opção, apenas os usuários indicados terão acesso a esse compartilhamento. A variável “%S” terá o valor do usuário que tentar acesso ao compartilhamento.
  • writable – por padrão, o compartilhamento é disponibilizado para acesso somente leitura. Isso pode ser modificado com o argumento “yes” ou “1” nessa opção.
  • create mask – definição da máscara para a criação de novos arquivos. Deve-se informar o valor octadecimal das permissões desejadas. No exemplo, os arquivos serão criados com permissão de escrita e leitura apenas para o dono.
  • directory mask – o mesmo significado que a opção anterior, porém, aplicado a diretórios.

O Samba possui por padrão um compartilhamento chamado printers que serve para compartilhar as impressoras instaladas no servidor com os clientes da rede. As opções apresentadas até então podem ser aplicadas sem maiores problemas. A única específica para esse compartilhamento será a chave printable.

Clientes Samba

Até o momento, consideramos que apenas o lado do servidor será um ambiente Linux. Porém, existe a possibilidade dos clientes também serem do mesmo sistema operacional. Todas os serviços oferecidos para estações Windows também são disponíveis para estações Linux, como acesso a compartilhamentos e resolução de nomes em servidores WINS.

smbmount

Sintaxe:

smbmount [opções] servidor diretório-local

O acesso a um compartilhamento do Samba pode ser realizado com o uso da ferramenta smbmount, que possui sintaxe semelhante ao comando mount.

Exemplos de uso:

smbmount -o username=usuario,password=senha //servidor-samba/compartilhamento /mnt/compartilhamento

smbmount //servidor-samba/compartilhamento /mnt/compartilhamento -o username=fulano

O primeiro exemplo irá realizar a montagem local do diretório remoto “compartilhamento” do servidor “servidor-samba”, passando os dados de login através das opções username e password. O segundo exemplo faz o mesmo que o primeiro, porém, não fornece a senha de acesso, que deverá, então, ser fornecida de maneira interativa.

nmblookup

Sintaxe:

nmblookup [opções] [nome]

A ferramenta nmblookup é utilizada para a resolução de nomes WINS por estações Linux.

Exemplos de uso:

querying comp-thigu on 10.10.10.255
10.10.10.10 comp-thigu<00>

O exemplo acima envia um broadcast para todas as redes que o sistema esteja conectado até que em alguma delas haja uma resposta pela resolução do nome NetBIOS “comp-thigu”.

Objetivo 2: Configurando um Servidor NFS

Não só de Samba vive o mundo! 😛 Apesar do trocadilho infame, a importância do NFS vem de antes mesmo do Samba. NFS, desenvolvido pela Sun Microsystems, é o acrônimo de Network File System, ou em português bem dito, Sistema de Arquivo de Rede. Ou seja, o que é um ext3 para um disco rígido, é o NFS para vários discos em rede! NFS funciona como uma camada de abstração adicional, estando sob os sistemas de arquivos das várias máquinas, de maneira que seja possível que alguns trechos do disco virtual esteja acima de um ext3 enquanto em outro trecho acima de um ReiserFS.

O NFS é composto de diversos daemons que cooperam entre si. São eles:

  • portmap – deverá estar em execução para poder assim tratar as requisições RPC que forem solicitadas. Maiores informações sobre o PortMapper aqui.
  • nfsd ou rpc.nfsd – manipula o serviço de acesso a arquivos.
  • statd ou rpc.statd – gerencia o isolamento de recursos.
  • lockd ou rpc.lockd – faz o mesmo que o anterior.
  • rpquotad ou rpc.rpquotad – gerencia quotas.
  • mountd ou rpc.mountd – checa requisições de montagem.

Exportando Diretórios no NFS

Para tornar possível a clientes acessarem algum diretório através do NFS, é necessário realizar a criação de um registro no arquivo /etc/exports referente a esse diretório. Cada linha do arquivo representa um diretório exportado. E cada linha segue o padrão abaixo.

/diretorio [máquina](opções)

Para melhor compreender a configuração do arquivo, vamos criar uma entrada de testes. Vamos, em nosso exemplo, exportar o diretório /home para acesso remoto. A entrada a seguir poderia nos servir.

/home 10.10.10.0/24(rw)

No exemplo, o diretório /home está compartilhado com todos da rede 10.10.10.10 com máscara 255.255.255.0 e acesso leitura-escrita. Outro exemplo abaixo.

/home 10.10.10.4(ro,root_squash)

Na entrada acima, apenas o computador de endereço IP 10.10.10.4 poderá ter acesso. Esse acesso será apenas leitura e devido à opção root_squash, caso o cliente acesse com UID igual a zero, ou seja, root, seu UID será mapeado para outro usuário do sistema, normalmente “nfsnobody”. Último exemplo:

/home 10.10.10.2 (rw)

Reparem nesse exemplo! Inicialmente poderá nos fazer crer que o computador 10.10.10.2 teria acesso leitura-escrita sob o diretório /home. Porém, existe um espaço em branco após o endereço IP. Qual a importância disso? Simplesmente é como se houvesse um asterisco onde não há uma definição de qual o host. Ou seja, o exemplo acima é igual ao de baixo.

/home 10.10.10.2(ro) *(rw)

Podemos especificar mais de um modo de acesso ao mesmo diretório incluindo espaços entre os registros, como acima. A opção de modo somente leitura foi adicionada porque é a padrão, caso não seja especificado outro modo.

Qualquer alteração que houver no arquivo torna necessário reexportá-lo. Ao contrário do que ocorre normalmente em outros serviços Linux, o NFS não precisa ser reiniciado para que as alterações entrem em vigor, porém deve-se utilizar a ferramenta exportfs.

exportfs

Sintaxe:

exportfs [opções]

A ferramenta exportfs irá manter a tabela de sistemas de arquivos exportados pelo NFS. Deve ser utilizada sempre que alguma alteração no arquivo /etc/exports for realizada.

Exemplos de uso:

exportfs -a

exportfs -u *:/home

exportfs -r

O primeiro exemplo irá exportar todas as novas entradas criadas no arquivo. Repare que se houver alterações nas entradas já existentes, elas não serão efetivadas com essa opção. O segundo exemplo irá excluir a entrada na tabela do NFS a entrada referente ao /home compartilhado para todos. O último exemplo irá reexportar todas as entradas, inclusive aquelas que já existiam. Sendo assim, essa opção deve ser utilizada quando realizar alteração em algum registro já criado.

Devido a natureza da maneira como é realizada a exportação do sistema de arquivos, é aconselhável restringir os hosts de acesso para apenas realmente necessários. Quando o acesso for seletivo, é possível criar uma camada adicional de segurança com ferramentas como o TCP Wrappers ou mesmo IPtables.

Cliente NFS

Vimos como lidar com a configuração do servidor NFS, agora vamos tratar de como os clientes irão usufruir dos serviços. Para tanto utilizaremos as ferramentas mount, nfsstat, showmount e rpcinfo.

Para que o cliente utilize o NFS, é necessário que tanto o servidor como o cliente tenham o portmap instalado e iniciado. Além disso, outros serviços, como o rpc.stad e rpc.lockd devem também estar em execução. Na verdade, os clientes podem funcionar como servidores NFS na rede também.

Assim como os clientes Samba, para que seja possível obter acesso ao diretório remoto, é necessário montá-lo. Para tanto, utilizamos o velho e bem conhecido utilitário mount. O mount será utilizado de maneira semelhante quando for montar volumes locais. Vamos ao exemplo abaixo.

# mount -t ext3 /dev/sda2 /mnt/sda2

Reparem que a opção “t” surgiu para indicar o tipo de sistema de arquivos que desejamos. Logo após isso, temos que indicar o arquivo de blocos associado ao dispositivo. Por último, o diretório local que dará acesso ao conteúdo do dispositivo.

Para o uso do NFS, iremos apenas modificar o tipo de sistema de arquivos (nfs) e indicar em que computador remoto devemos localizar o sistema de arquivos remoto. Vejam o exemplo abaixo.

# mount -t nfs servidor:/home /mnt/home

No exemplo, montamos o diretório exportado /home disponibilizado pelo servidor para acesso local em /mnt/home.

Para a montagem podemos utilizar ainda algumas opções especiais. Vejam a tabela abaixo.

Opções de Montagem Descrição
fg (padrão) e bg fg – Todas as tentativas de montagens são realizadas no foreground.bg – A primeira montagem é realizada no foreground, sendo que as próximas são realizadas no background.
hard (padrão) e soft hard – Ao ocorrer uma falha de acesso ao servidor NFS durante o acesso a arquivos, o processo será retomado do
ponto onde se iniciou os problemas.soft – É definido um timeout utilizando a opção timeo=tempo para acesso ao servidor NFS.
Caso ocorra um timeout, poderá ocorrer a perda de dados.
nointr (padrão) e intr nointr – Não permite que sejam enviados sinais ao processo do NFS.intr – Permite que sejam enviados sinais ao processo do NFS.
ro Somente leitura.
rw Leitura e Escrita.
nolock Desabilita o trancamento do local de montagem. Não inicia o processo rpc.lockd.
rsize Quantidade de bytes lidos por vez. O valor padrão é 1024 bytes.
wsize Quantidade de bytes escritos por vez. O valor padrão é 1024 bytes.

Com as opções de montagem podemos criar montagens personalizadas. Vejam o exemplo abaixo.

# mount -o rsize=8192,wsize=8192,hard,intr servidor:/home /mnt/home

Outras ferramentas, como o nfsstat, têm o propósito de informar estatísticas do servidor ou cliente NFS. Esse comando exibe o número de vezes que cada processo RPC foi realizado. Pode ser interessante para a criação de gráficos ou resolução de problemas. Experimentem digitar o exemplo abaixo.

$ nfsstat

A ferramenta showmount é utilizada para visualizarmos quais diretórios estão exportados em um servidor NFS. Vamos a um exemplo de uso.

$ showmount -a 10.10.10.10

O exemplo acima irá mostrar todos os pontos de montagens disponíveis com o nível de acesso de cada um deles do computador de endereço 10.10.10.10.

Por último, a ferramenta rpcinfo. Essa ferramenta foi comentada em um post anterior a esse.

Concluindo

Bem, é isso aí pessoal! Conteúdo não falta! 😛 Realmente é muita coisa para estudar e talvez nem dê tempo de estudar tudo em todos os detalhes. Aconselho a galera que esteja estudando para a certificação cair de cara em simulados! Experiência própria, pois quando fui fazer a LPIC-1 percebi que os simulados realmente são uma mão na roda!

Encontrei um sítio web muito legal com todo o conteúdo para estudo (em inglês) disponível aos visitantes. Acesse essa maravilha aqui.

Vou fazer o possível para publicar mais aulas antes de minha prova 201, que já está marcada para o dia 31 de Julho. Ou seja, terça-feira da semana que vem! Mas agora estou um pouco mais tranqüilo quanto ao meu emprego, então posso usufrir o tempo extra escrevendo para o blog!

Dúvidas, críticas e sugestões são muito bem-vindas!

Até a próxima galera! 🙂

5 comentários sobre “Aula 5 – Prova 201 – Sistemas de Compartilhamento de Arquivos

  1. Marcio disse:

    Meu Caro, esse estudo está muito bom, continue assim que irá logo para o nível 3 da LPI! Também estarei lá dia 31 de Julho para fazer a minha prova LPI 201. Aconselho a todos que estão nesta caminha rumo a certificação bastente estudos e desejo uma boa sorte! 🙂

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *