Serviço Samba agosto/2015 Instalação e configuração do server e client Samba. 1 Histórico O nome Samba vem de SMB, Server Message Block, que é um protocolo frequentemente usado para compartilhamento de arquivos e impressoras em rede. Mas SMB também pode ser usado para comunicação entre processos 1, para comunicar processos em diferentes sistemas. SMB apareceu no início do IBM-PC, por volta de 1982/3, quando a IBM desenvolveu um sistema para comunicação em pequenas LANs. Esse sistema incluiu o que foi chamado de NetBIOS 2. Modernamente, SMB é conhecido por CIFS, The Common Internet File System Access Protocol. A Microsoft define CIFS como um dialeto do SMB. 2 NetBIOS NetBIOS é um padrão para a transmissão de dados entre computadores em rede, que permite comunicação entre aplicações clientes e servidoras. NetBIOS provê três serviços básicos: serviço de nomes: localiza 3 nomes na rede; serviço de sessão: provê conexão entre dois computadores; serviço de datagrama: provê um canal de comunicação não orientado à conexão entre computadores. Porém, NetBIOS é apenas um padrão para encontrar recursos e transmitir bits de dados pela rede. Então, é necessário um protocolo de alto nível 4 para dar uso real ao NetBIOS, e SMB é o protocolo que envia comandos e dados pela LAN. SMB sobre NetBIOS usa as portas UDP 137 [serviço de nomes] e 138 [serviço de datagrama], ou porta TCP 139 [serviço de sessão]. A partir do Windows 2000, vem incluído SMB sem NetBIOS na porta TCP 445, e esse suporte é chamado de Direct Host. 1 IPC: Inter Process Communication. 2 Network Basic Input Ouput System. Posteriormente, do NetBIOS foi separado o software de interface do protocolo de comunicação em rede, daí vem o NetBEUI (NetBIOS Extended User Interface). 3 Localiza via broadcast na LAN, por isso é bastante lento e ineficiente. 4 Alto nível: pois trabalha no topo do NetBIOS. Serviço Samba www.jairo.pro.br 1/12
3 Samba Samba é uma aplicação client-server que implementa o protocolo SMB. O Samba é composto de duas partes: cliente e servidor, e foram desenvolvidas na intenção de garantir a comunicação e compartilhamento de recursos em rede entre sistemas das famílias Windows e Unix. Se a rede for composta apenas por membros da família Windows [ou somente Unix], não existe problemas nessa comunicação, pois cada família tem nativamente seus próprios protocolos. Por exemplo, no Windows tem SMB/CIFS e no Unix tem NFS 5, entre outros. Mas para resolver o problema de redes mistas Windows x Unix se faz necessário o Samba. Por exemplo, uma máquina Windows, nativamente, não tem porquê implementar também o suporte a sistema de arquivos NFS. Então a solução para esse problema, por mais paradoxal que possa parecer, é implementar no Unix um serviço e uma aplicação cliente que usem os mesmos protocolos SMB/CIFS e, dessa forma, garantir a comunicação em rede entre famílias Windows e Unix. Isto soa como o Unix "se disfarçar" de Windows para conseguir comunicação. E com esse "disfarce", agora o cliente Windows acredita que o servidor Samba é outra máquina Windows de onde possa buscar recursos compartilhados em rede. 4 Samba server O serviço Samba pode ser disponibilizado em qualquer Unix e, uma vez configurado, permite ao cliente Windows buscar recursos neste Unix, sendo que para o Windows fica a impressão de que esse recurso está sendo disponibilizado numa máquina Windows. Samba server [compartilhamento] Windows acessa o Compartilhamento [client] Como o serviço Samba é usado basicamente para comunicação em rede entre Windows e Unix, para podermos configurar apropriadamente o serviço Samba precisamos primeiramente ter em vista o que seja a organização da rede Windows. Quanto à organização, a rede Windows pode ser dividida basicamente em duas: workgroup e domain. No caso do workgroup, trata-se de uma organização lógica apenas de visualização e agrupamento de computadores que vem desde o Windows 3.11. A principal característica do workgroup é que cada máquina é uma unidade administrativa com suas próprias contas de usuários, senhas, etc, e por isso essa organização é um esquema 5 NFS: Network File System. Serviço Samba www.jairo.pro.br 2/12
ineficiente do ponto de vista administrativo para redes médias ou grandes. Já o domain é um agrupamento lógico de servidores e estações de trabalho que compartilham informações comuns de segurança, contas de usuários e senhas. Dentro do domínio 6, o administrador cria uma conta de acesso para o usuário que poderá então efetuar "logon" a partir de qualquer estação que participe desse domínio. A organização da rede Windows do qual o Samba participe tem impacto na autenticação do usuário, onde hora é local [workgroup], hora é no AD [domain]. Uma vez definido em qual organização de rede Windows irá trabalhar o serviço Samba, podemos passar à configuração. 5 Samba client O Samba client é uma aplicação para acessar, por exemplo, o recurso compartilhado pelo Windows. Também pode ser usado para acessar o recurso compartilhado pelo Samba server, num Unix. Samba client: acessa o recurso compartilhado Compartilhamento [num Windows] Compartilhamento [num Unix] 6 Instalação do Samba A instalação do Samba será standalone, e não inetd. Para descobrir se o serviço Samba está instalado, procurar pelo seu script de inicialização em /etc/init.d: shell# ls /etc/init.d grep smb /etc/init.d/smb NOTA: No Ubuntu, o script de inicialização é "/etc/init.d/smbd". Se não houver saída no comando acima é indicativo de que o serviço Samba não está instalado. Nesse caso, instalar com o comando yum: 6 Desde o Windows 2000, o controlador de domínio é o AD [Active Directory]. Serviço Samba www.jairo.pro.br 3/12
shell# yum install samba samba-client Se fosse uma distribuição Linux baseada no Debian [por exemplo, Ubuntu], o comando para instalar seria apt-get: shell# apt-get install samba samba-common smbclient Após instalado, verificar se existem os seguintes arquivos: shell# file /etc/init.d/smb /etc/init.d/smb: Bourne shell script text executable shell# file /usr/sbin/smbd /usr/sbin/smbd: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped shell# file /usr/sbin/nmbd /usr/sbin/nmbd: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped shell# file /etc/samba /etc/apache2: directory shell# file /etc/samba/smb.conf /etc/samba/smb.conf: ASCII English text onde: /etc/init.d/smb é o script de inicialização do serviço Samba (Ubuntu: /etc/init.d/smbd); /usr/sbin/smbd é o executável do processo daemon que provê serviço SMB/CIFS; /usr/sbin/nmbd é o executável do processo daemon que provê serviço NetBIOS name server [serviço de nomes]; /etc/samba é o diretório de configuração do serviço Samba; /etc/samba/smb.conf é o arquivo de configuração do serviço Samba. 7 Configuração do serviço Primeiro vamos apenas olhar as configurações de instalação do serviço. Para isso, entrar no diretório /etc/samba: Serviço Samba www.jairo.pro.br 4/12
shell# cd /etc/samba shell# ls O arquivo de configuração do serviço é "smb.conf". shell# more smb.conf Nesse arquivo, uma configuração importante no Global Settings é workgroup, cujo default já está para workgroup = WORKGROUP. Outra configuração é log file, que define o arquivo de logs desse serviço. Em Share Definitions, já existem alguns compartilhamentos prontos, como [homes] e [printers]. O compartilhamento homes é para o usuário Unix acessar a sua home a partir do Windows. Printers é para usar o servidor de impressão no Unix. Normalmente e erradamente algumas aplicações como o apt-get instalam e já iniciam o processo daemon, isso sem configurar o serviço. Por isso, após a instalação é necessário verificar se existe o processo daemon rodando: shell# ps -ef grep smbd root 4568 1 0 16:02? 00:00:00 /usr/sbin/smbd -D root 4570 4568 0 16:02? 00:00:00 /usr/sbin/smbd -D portanto, se houver saída no comando indica que o processo está rodando e deve ser parado esse serviço. Reparar também que o processo daemon [nesse caso] é o de PID 4568, e os demais são processos filhos à espera de clientes. shell# /etc/init.d/smb stop Parando o samba: [ OK ] NOTA: No Ubuntu, o comando é "/etc/init.d/smbd stop". Agora, o comando ps -ef grep smbd não deverá mostrar o daemon rodando. Antes de iniciar o serviço Samba, verificar quais portas TCP estão abertas. Para isso, é necessário a aplicação nmap para fazer um scan de portas. E se esta aplicação não estiver instalada, fazer a instalação: shell# yum install nmap Num Ubuntu, o comando seria "apt-get install nmap". Serviço Samba www.jairo.pro.br 5/12
Agora, é só fazer o scan de portas: shell# nmap localhost Starting Nmap 4.76 ( http://nmap.org ) at 2010-09-26 16:09 BRT Interesting ports on localhost (127.0.0.1): Not shown: 999 closed ports PORT STATE SERVICE 631/tcp open ipp Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds que mostra apenas a porta 631 [servidor de impressão] aberta. Antes de iniciar o serviço Samba, vamos criar um compartilhamento chamado TEMP, que compartilha o diretório local /tmp. Para isso, é necessário configurar o arquivo smb.conf e incluir em Share Definitions o seguinte conteúdo: ========== arquivo /etc/samba/smb.conf ======================================= [TEMP] comment = "Compartilhamento do /tmp" read only = no browseable = yes path = /tmp ======================================================================= onde: TEMP é o nome do compartilhamento; comment é um comentário [é a mensagem que será vista na barra de título da janela no Windows]; read only = no é para permitir escrita no /tmp; path é o caminho para o diretório físico que está sendo compartilhado no Unix; Agora, então, recarregar o serviço Samba: shell# /etc/init.d/smb reload Iniciando o samba: [ OK ] No Ubuntu, o comando seria "/etc/init.d/smbd reload". De um modo geral, ao invés do script de inicialização também poderia ser usado o comando "service smbd reload". Serviço Samba www.jairo.pro.br 6/12
Depois disso, o scan de portas vai mostrar que as portas 139 e 445 também estão abertas: shell# nmap localhost Starting Nmap 4.76 ( http://nmap.org ) at 2010-09-26 16:07 BRT Interesting ports on localhost (127.0.0.1): Not shown: 997 closed ports PORT STATE SERVICE 139/tcp open netbios-ssn 445/tcp open microsoft-ds 631/tcp open ipp Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds O comando ps agora mostra que o daemon smbd está rodando [conforme acima]. Além disso, também está rodando o daemon nmbd: shell# ps -ef grep nmbd root 4578 4541 0 16:02 pts/3 00:00:00 /usr/sbin/nmbd Para checar as configurações do Samba server, usar o comando testparm: shell# testparm Load smb config files from /etc/samba/smb.conf rlimit_max: rlimit_max (1024) below minimum Windows limit (16384) Processing section "[homes]" Processing section "[printers]" Processing section "[TEMP]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions... Precisa adicionar o usuário aluno ao serviço Samba, com senha. Para isso, o primeiro passo é criar o usuário no sistema, caso ainda não exista. Se o usuário aluno ainda não existisse, o comando para criá-lo seria: shell# useradd -m -s /bin/bash aluno onde: Serviço Samba www.jairo.pro.br 7/12
-m é a opção para criar a home do usuário; -s é a opção para escolha do shell do usuário, no caso foi escolhido /bin/bash. Uma vez que exista o usuário no sistema, basta adicioná-lo ao serviço Samba com o comando smbpasswd: shell# smbpasswd -a aluno New SMB password: Retype new SMB password: Added user aluno. onde: -a é a opção para adicionar o usuário ao serviço. Se o usuário já existisse, o comando smbpasswd sem a opção "-a" seria usado para alterar a senha do usuário no serviço. Para saber quais usuários estão cadastrados no serviço Samba, usar o comando pdbedit: shell# pdbedit -L -v Os arquivos onde ficam os usuários Samba e suas senhas são /var/lib/samba/private/passdb.tdb e /var/lib/samba/private/secrets.tdb. 8 Testar o acesso ao compartilhamento Para testar o acesso, usar o Windows: ir para Iniciar -> Executar e comandar: \\192.168.1.10\TEMP onde 192.168.1.10 é o IP do Samba server. O Windows deverá acessar o compartilhamento numa nova janela. Copie algum conteúdo para esse compartilhamento, volte para o Samba server e observe que esse conteúdo foi escrito no diretório /tmp: shell# ls -l /tmp Repetir o teste de acesso, porém agora acessando a máquina do colega: \\192.168.1.XX\TEMP Serviço Samba www.jairo.pro.br 8/12
onde 192.168.1.XX é o IP do Samba server do colega. 9 Samba client O Samba client permite ao cliente Unix buscar recursos compartilhados no Windows ou no serviço Samba. Samba client é um conjunto de executáveis clientes do serviço Samba, mas que também podem acessar recursos compartilhados no Windows. Vamos aprender dois casos: 1 - uma interface de acesso semelhante ao cliente FTP, que é a aplicação smbclient, onde as instruções de transferência de arquivos são passadas na linha de comando; 2 - uma ferramenta que permite ao cliente Unix montar localmente o recurso compartilhado pelo serviço Samba [ou Windows], chamado smbmount. No caso 1, usar o comando smbclient para acessar o compartilhamento TEMP criado no item 7, acima: shell# smbclient -L //192.168.1.10 -U aluno Enter aluno's password: que vai mostrar os compartilhamentos possíveis para o usuário aluno. Para acessar o compartilhamento TEMP com o usuário aluno, comandar: shell# smbclient //192.168.1.10/TEMP -U aluno Enter aluno's password: Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.4.7-0.50] smb: \> Convém notar que o prompt da aplicação smbclient é semelhante a do client FTP. Para saber quais comandos podem ser passados pelo smbclient, comandar: Serviço Samba www.jairo.pro.br 9/12
Smb: \>?? allinfo altname archive blocksize cancel case_sensitive cd chmod chown close del dir du echo exit get getfacl hardlink help history iosize lcd link lock lowercase ls l mask md mget mkdir more mput newer open posix posix_encrypt posix_open posix_mkdir posix_rmdir posix_unlink print prompt put pwd q queue quit rd recurse reget rename reput rm rmdir showacls setmode stat symlink tar tarmode translate unlock volume vuid wdel logon listconnect showconnect..! smb: \> NOTA: Se estivéssemos usando organização da rede domain e não autenticação local [workgroup], o comando seria smbclient //192.168.1.10/TEMP -U domain\\aluno, onde o nome desse domínio é "domain". Para acessar a home do usuário aluno, reconfigurar o Samba server e descomentar o compartilhamento homes: ========== arquivo /etc/samba/smb.conf ======================================= [homes] comment = "Home Directories" browseable = yes writable = yes valid users = %S ======================================================================= Esse compartilhamento também exige que o usuário tenha home e esteja criado no Samba. Depois, é só reiniciar o serviço Samba e testar o acesso com smbclient: shell# smbclient //192.168.1.10/aluno -U aluno Enter aluno's password: Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.4.7-0.50] smb: \> Foi necessário informar o usuário com a opção -U pois quem está dando o comando é root e não aluno. Serviço Samba www.jairo.pro.br 10/12
Para testar com o Windows: ir para Iniciar -> Executar e comandar: \\192.168.1.10\aluno onde 192.168.1.10 é o IP do Samba server. O caso 2 envolve montar localmente o recurso compartilhado pelo serviço Samba [ou Windows]. Nesse caso, o cliente é chamado smbmount, e serve para montar esse recurso remoto num ponto de montagem local. A montagem do recurso compartilhado pelo Samba server ou Windows via "smbmount" é útil ao usuário cliente usando determinada estação de trabalho que tenha um ambiente gráfico num Unix, pois é caracterísitca de usuário desktop (isto é, estação de trabalho) entender apenas de ícones e botões no ambiente gráfico e, pensando assim, é muito mais fácil ensinar esse usuário a usar o "clique-clique" do mouse ao invés da linha de comando. De fato, um usuário típico consegue pelo menos empurrar a seta do mouse de uma janela para outra e clicar. Pensando nessa característica do usuário é que foi criada a montagem Samba, ela permite acessar o recurso compartilhado remotamente pelo servidor Samba ou Windows simplesmente "clicando" numa determinada pasta local onde foi previamente montado o recurso compartilhado. Funciona de forma semelhante ao "smbclient" e muda apenas no acesso: ao invés de uma interface de texto semelhante ao acesso FTP temos agora uma pasta onde foi previamente montado o recurso remoto compartilhado, "clicando" nessa pasta acessa o recurso remoto. Para montar o sistema de arquivo precisa instalar também o pacote smbfs. Normalmente, no CentOS esse pacote já é instalado junto com samba-client. No Debian (ou Ubuntu), precisa instalar com o comando: shell# apt-get install smbfs Depois disso, criar um ponto de montagem: shell# mkdir /mnt/samba shell# df -h Por fim, montar o recurso compartilhado pelo Samba server [ou Windows] no ponto de montagem /mnt/samba: shell# mount -t cifs //192.168.1.10/aluno /mnt/samba -o username=aluno,password=uninove Serviço Samba www.jairo.pro.br 11/12
Depois, verificar a montagem com o comando df: shell# df -h Sist. Arq. Tam Usad Disp Uso% Montado em /dev/sda2 40G 5,1G 33G 14% / //192.168.1.10/aluno 20G 2,6G 17G 15% /mnt/samba shell# ls /mnt/samba Para escrever na home de aluno remota, basta escrever no diretório /mnt/samba: shell# echo "teste" > /mnt/samba/teste.txt NOTA: Ao invés do comando "mount -t cifs" poderia ser usado: smbmount //192.168.1.10/aluno /mnt/samba -o username=aluno,password=uninove Para desmontar o recurso, comandar umount /mnt/samba. Em relação ao exemplo acima, num caso mais realista o próprio processo do "logon" do usuário na máquina Unix já poderia disparar um script que fizesse a montagem da home do usuário, com isso o usuário poderia ter uma home não local, ou seja, independente da estação de trabalho que ele estivesse logado acessaria sempre a mesma home. Esse recurso, oferecer a home sempre no mesmo servidor de arquivos, independente de qual estação o usuário usou para efetuar logon é muito útil em vários casos, especialmente para a estação de trabalho diskless 7. Repare que com o "mount -f cifs" é possível usar uma estação diskless e mesmo assim ofertar neste acesso a home do usuário, mesmo que essa home esteja, por exemplo, num servidor de arquivo NT. 7 Diskless: isto é, sem disco ou dispositivo de armazenamento de dados. Serviço Samba www.jairo.pro.br 12/12