Caso você esteja habituado a pesquisar sobre o GNU/Linux, já deve ter notado que existe uma infinidade de possibilidades a ser explorada com o sistema do pinguim. Muito disso se deve às inúmeras distribuições e, também, às aplicações como o servidor Samba.
A que devemos creditar sua tamanha popularidade? A resposta é simples: o Samba é um software executado em servidores, responsável por estabelecer interações com redes constituídas por computadores operados em Windows possibilitando, assim, que todos os seus recursos sejam gerenciados e compartilhados.
Ficou interessado em saber mais sobre o servidor Samba? Neste artigo você terá acesso a mais informações e, de quebra, aprenderá a instalar o programa por meio de um procedimento simples e rápido. Vamos lá?
Qual é a origem do servidor Samba?
De acordo com a história disponibilizada pelo site oficial, no documento Samba: An Introduction, tudo começou a muito tempo, quando as empresas IBM e Sytec, após firmarem uma parceria de co-desenvolvimento, desenvolveram um sistema de rede projeto para construir pequenas redes locais.
Havia naquele sistema um “pedaço de software”, conhecido até hoje como NetBIOS (Network Basic Input Output System), que fornecia uma interface entre os programas e o hardware de rede.
O NetBIOS passou por uma grande evolução, tornando-se capaz de trabalhar com protocolos de alto nível — entre eles o famoso TCP/IP. Mais tarde, depois de o Windows se consolidar no mercado, a Microsoft acrescentou ao protocolo SMB (Service Message Block) um controlador de domínio (Windows NT Domain Control).
Eis que entra em cena Andrew Tridgell
Em meio a todos esses acontecimentos, o australiano Andrew Tridgell montou um espaço em disco para servidor Linux em uma máquina que rodava o sistema operacional DOS. Para isso, Tridgell obteve algum sucesso ao usar seu cliente NFS (Network File System).
No entanto, ainda havia um aplicativo que requeria suporte ao protocolo NetBIOS, algo que não poderia ser obtido com o NFS. Aparentemente não havia solução para o problema… Aparentemente.
Tridgell foi longe com suas ambições, a ponto de escrever um sniffer (um programa que analisa redes) e executar engenharia reversa no protocolo SMB.
O resultado de todo esse trabalho não fora em vão: o servidor UNIX foi reconhecido pelo DOS como um servidor de arquivos Windows. Após disponibilizar o código ao público no ano de 1992, chegando até mesmo a realizar nele algumas melhorias, o projeto foi descontinuado e só voltou à tona dois anos depois.
Na época, Tridgell quis conectar o computador de sua esposa — que rodava uma versão do Windows — ao seu sistema Linux. Devido à falta de opções, ele optou por experimentar o seu antigo código, testemunhando, com certa surpresa, o seu funcionamento.
A partir daí Tridgell se interessou ainda mais pelo assunto, tendo descoberto, com auxílio dos seus contatos de e-mail, que os protocolos SMB e NetBIOS tiveram suas documentações atualizadas, motivando o australiano a retomar o projeto.
Não demorou muito para que novos obstáculos surgissem. Dessa vez, no entanto, o que ameaçou o seu progresso não foi um problema técnico, mas sim legal: uma companhia entrou em contato para reivindicar os direitos sobre o nome do software.
Porém, diferentemente dos problemas anteriores, a solução para este foi simples de encontrar. A fonte foi um dicionário, usado com o propósito de pesquisar uma palavra que tivesse as letras “s”, “m” e “b”, chegando à palavra samba — como o software seria batizado posteriormente.
Enfim, o “final feliz” para qual a história foi conduzida tem rendido novos capítulos até os dias atuais. Hoje o Samba possui milhões de usuários pelo mundo todo e é desenvolvido por uma equipe qualificada liderada por Andrew Tridgell.
Quais são as suas principais funcionalidades?
Dentre tantas funcionalidades presentes no servidor Samba, podemos destacar:
- compartilhamento de arquivos, impressoras, diretórios, entre outros, com máquinas que rodam o Windows;
- controle de acesso e privilégios;
- resolução de nomes (DNS);
- configurações a partir de ambientes remotos.
Vale ressaltar que os recursos do Samba são bastante completos. Não por acaso, muitas corporações que possuem equipes de TI dedicadas usufruem dos recursos do Samba.
Que vantagens o Samba oferece?
Como a principal função do servidor Samba é simular um servidor Windows, mais precisamente as distribuições do Windows Server, inevitavelmente o custo-benefício entra em jogo a favor do Samba.
Levando em consideração os bugs, que são muito menos recorrentes no Samba, a estabilidade e a segurança — visto que o software é instalado em um sistema GNU/Linux —, o sistema da Microsoft fica para trás.
Instalando o servidor Samba em 3 passos!
Neste tópico, você verá que o processo pode ser realizado de maneira simples. Usaremos como exemplo a instalação / configuração do Samba em um servidor Debian, mas que pode se adequar a outras distribuições do GNU/Linux por meio de adaptações.
1. Instale o Samba
Para iniciar a instalação, digite o comando abaixo, caso você tenha dúvidas sobre gerenciamento de pacotes no LINUX veja esse artigo aqui.
# apt-get install samba
Observação: essa etapa depende da distribuição que receberá a instalação, pois os pacotes são específicos para cada uma delas.
2. Crie os diretórios
Tendo em mãos o número de grupos de usuários a serem conectados à rede, comece a criar diretórios usando o comando:
# mkdir /samba
Para criar subdiretórios dedicados a cada departamento da empresa, por exemplo, digite:
# mkdir /samba/vendas
3. Configure o Samba a partir do arquivo “smb.conf”
A configuração do Samba é feita em um arquivo chamado “smb.conf”, localizado no seguinte destino: /etc/samba/smb.conf.
Para modificar o nome do arquivo, digite:
# mv /etc/samba/smb.conf /etc/samba/smb.original.conf
Abra o seu editor de textos (no exemplo está sendo usado o Nano) e digite:
# vim /etc/samba/smb.conf
A configuração do servidor Samba é feita em seções. Cada seção é representada por um nome escrito entre colchetes (exemplo: [global]; [share]) e cada seção possui parâmetros específicos. Iniciaremos a nossa configuração pela seção [global], na qual estabeleceremos as configurações para todo o servidor e compartilhamento. Veja:
[global] server string = Servidor Samba #Nome DNS netbios name = nomedoservidor #Nome NetBIOS workgroup = WORKGROUP #Grupo de trabalho dos clientes Windows security = share #Isso fará com que uma senha Unix seja solicitada somente aos usuários que não possuem permissão para acesso log = /var/logs/samba/samba.log #Para centralizar o log (registro de cada conexão realizada com o servidor)
Observação: a opção “security” também pode ser marcada como: “none” (sem senhas) ou “user” (será solicitada uma senha Unix antes de definir o compartilhamento a ser acessado).
Observação²: na opção “log” é possível aplicar uma variável (a “%m”) correspondente a cada computador que se conecta ao servidor. Com isso, caso você queira criar um log descentralizado, ou seja, um log por máquina conectada, use a seguinte configuração:
/var/logs/samba/%m.log
Feito isso a configuração [global] está concluída. Em seguida, serão configurados os compartilhamentos — você poderá criar vários deles, portanto, simulando uma configuração corporativa, cada compartilhamento corresponderá a um setor da empresa.
[vendas] #Nome do compartilhamento comment: área restrita ao departamento de vendas path: /samba/vendas public: yes #Caso o acesso tenha de ser feito com uso de senha, digite “no” writable = yes #Isso irá permitir alterações no diretório (“yes” ou “no”) #a opção “valid users” não precisa ser configurada no momento
Pronto! Agora que as configurações básicas foram feitas, vamos testá-las. Para isso é necessário reiniciar o servidor Samba:
# etc/init.d/samba restart
Vamos validar as configurações em um computador Windows que esteja inserido no grupo de trabalho e vá em “Executar” (use o atalho Win + R) e digite “\\[server string]” (sem aspas) e dê OK.
O que vai acontecer daqui em diante dependerá de como o parâmetro “security” foi configurado. Caso tenha sido marcado como “none” ou “share”, não será necessário digitar senha — do contrário, posteriormente será preciso configurar as permissões.
Como usar o Windows 7 em rede com servidor Samba
Fazer o Windows 7 o famoso “Seven“ acessar um servidor Samba é muito fácil. A cada lançamento da Microsoft sites e blogs publicam formas de integrar o novo Windows em redes com servidores Samba.
Os desenvolvedores do samba.org estão trabalhando firme no novo lançamento do samba 4, que promete cada vez mais integração com servidores da Microsoft.
Nossa tarefa de hoje é simples, fazer um computador rodando Windows 7 acessar um servidor rodando samba.
Crie um arquivo chamado windows7.reg com o conteúdo abaixo.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters]
“DomainCompatibilityMode”=dword:00000001
“DNSNameResolutionRequired”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
“LmCompatibilityLevel”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters]
“RequireSignOrSeal”=dword:00000000
“RequireStrongKey”=dword:00000000
Execute este arquivo no Windows 7 e pronto, agora voce vai conseguir autenticar no servidor samba.
Lembrando que eu executei esta modificação no registro do Windows 7 Home Premium, ou seja este Windows 7 não vai ingressar ao domínio o servidor samba, mas vai conseguir acessar os compartilhamentos normalmente.
Simples e bem prático. Até a próxima pessoal, quem tiver alguma experiencia com o Windows 7 e domínios Samba pode usar os comentários.
Servidor Samba com troca de senha obrigatória
A necessidade de modificar a senha do usuário do SAMBA no próximo login, surgiu quando resolvi fazer a migração do samba 2 com ldap para o samba 3 com tdbsam.
No post, Gerenciando usuários de um servidor samba com o pdbedit, demonstrei uma solução utilizando o User Manager do Windows, já que o pdbedit não funcionou com o comando:
root# pdbedit --pwd-must-change-time="2010-01-01"
--time-format="%Y-%m-%d" nome_do_usuario
Qual era o meu problema ?
Modificar a senha de mais de 300 usuário para uma senha padrão, e forçar a troca da senha no próximo login.
Ficaria inviável, fazer pelo User Manager, pois seria usuário por usuário. Perguntei a algumas listas de discução, e recebi a ajuda do FABIANO.
A sugestão foi utilizar o comando net do SAMBA.
Então para forçar a troca de senha no proximo login de um servidor samba, utilizei o comando sugerido.
net sam set pwdmustchangenow nome_do_usuario yes
Funcionou corretamente, para verificar, podemos usar este comando, com o pdbedit
root #>pdbedit -a pedrodelfino
new password:
retype new password:
Unix username: pedrodelfino
NT username:
Account Flags: [U ]
User SID: S-1-5-21-951807190-2904679001-2272606852-1023
Primary Group SID: S-1-5-21-951807190-2904679001-2272606852-1003
Full Name: Pedro Delfino
Home Directory: \sdl2pedrodelfino
HomeDir Drive: U:
Logon Script: logon.bat
Profile Path:
Domain: IP
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: 0
Password can change: 0
Password must change: 0
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Oque devemos perceber é esta saída:
Password last set: 0
Password can change: 0
Password must change: 0
Onde o parametro Password must change
é oque indica que o usuário deverá trocar a senha no proximo login.
Então para finalizar, coloquei aqui o script, que fiz para modificar a senha de todos os usuário do samba, para uma senha padrão, e já setar a opção Password must change=0
.
#!/bin/bash
USER=`pdbedit -L | cut -d: -f1`
for i in $USER; do
(echo senha_padrao; echo senha_padrao)| smbpasswd -s $i
net sam set pwdmustchangenow $i yes
done
Experimente digitar o comando net sam set
net sam set
net sam set homedir Change a user's home directory
net sam set profilepath Change a user's profile path
net sam set comment Change a users or groups description
net sam set fullname Change a user's full name
net sam set logonscript Change a user's logon script
net sam set homedrive Change a user's home drive
net sam set workstations Change a user's allowed workstations
net sam set disabled Disable/Enable a user
net sam set pwnotreq Disable/Enable the password not required flag
net sam set autolock Disable/Enable a user's lockout flag
net sam set pwnoexp Disable/Enable whether a user's pw does not expire
net sam set pwdmustchangenow Force users password must change at next logon
Vai retornar as opções que podem ser modificadas.
Então é isso, encontramos uma solução para o problema. Espero ter ajudado, ainda não terminei a migração do servidor SAMBA, assim que terminar, pretendo colocar uma documentação completa aqui, como já fiz outra fez com a implementação com o SAMBA 2 com ldap (Integração de redes Linux e Windows com Samba e OpenLDAP)
Gerenciando usuários de um servidor samba com o pdbedit (parte 01)
O utilitário de gerenciamento de usuário pdbedit, traz para o samba 3 muitas funcionalidades antes escondidas ou que nem existiam no samba 2, com o padrão de armazenamento de usuário no arquivo smbpasswd.
Neste artigo mostrarei algumas experiências no gerenciamento de usuários do samba 3 com o pdbedit, este estudo surgiu da necessidade de fazer uma migração do samba 2 com ldap para um samba 3.
Desde que eu implantei a solução, Integração de redes Linux e Windows com Samba e OpenLDAP, não havia mais trabalhado em uma implantação com o samba em PDC, somente em redes pequenas.
Mudei muito a minha opnião sobre ldap, mas isto é assunto para outro artigo.
Este pequeno tutorial, não vai mostrar como configurar o samba, só vo tocar no assunto “smb.conf” uma unica vez, ou seja serve mesmo para quem quer saber como gerenciar os usuários do samba e para quem estava acostumado com o simples smbpasswd (que ainda continua lá em funcionamento sim). O pdbedit vai mostrar detalhes sobre seus usuários, que antes ficarava claro somente com samba usando autenticação com ldap.
Para começar…
Criando um usuário
Primeiro vamos criar um grupo
root #> groupadd TI
Agora vamos criar um usuário normal, primeiro no linux
root #> useradd -m -c "Pedro Delfino" -G TI -g users pedrodelfino
Definimos a senha
root #> passwd pedrodelfino
Lembrando que esta senha, é o acesso ao sistema no sheel no linux, ainda nâo é a senha do samba
Mapeando grupo do linux para o samba
Agora vamos usar o comando net groupmap para mapear o grupo do linux para o samba
root #> net groupmap add ntgroup="Grupo TI" unixgroup=TI type=d
Para listar os grupos que estão mapeados usamos o comando net groupmap list
root #> net groupmap list
Grupo TI (S-1-5-21-951807190-2904679001-2272606852-1022) -> TI
Administrators (S-1-5-32-544) -> 15000
Domain Admins (S-1-5-21-951807190-2904679001-2272606852-1001) -> root
Domain Users (S-1-5-21-951807190-2904679001-2272606852-1003) -> users
Domain Guests (S-1-5-21-951807190-2904679001-2272606852-1005) -> nogroup
Mapeando estes grupos fica mais facil de gerenciar as permissões nos compartilhamentos, e pastas. Nada nos impede de pular esta parte e fazer o gerenciamento tudo através do chown, eu prefiro a segunda opção, pois no meu caso como eu já tenho todos os grupos criados, mapear todos eles para o samba vai dar muito trabalho, mas por outro lado caso isso seja feito podemos utilizar o User Maganager da Microsoft para gerenciar os os grupos.
No manual oficial do samba, existe uma capitulo explicando as ganhos deste mapeamendo de grupos.
Falando no User Manager, é um ótima alternativa para gerenciar os usuários do samba.
Adicionando um usuario ao samba
No meu caso estou utilizando o tdbsam para gerenciar os usuários, não estou utilizando smbpasswd nem ldap.
No arquivo /etc/samba/smb.conf
, eu estou utilizando esta opção, para definir isto.
passdb backend = tdbsam
Executando o seguinte comando
root #>pdbedit -a pedrodelfino
new password:
retype new password:
Unix username: pedrodelfino
NT username:
Account Flags: [U ]
User SID: S-1-5-21-951807190-2904679001-2272606852-1023
Primary Group SID: S-1-5-21-951807190-2904679001-2272606852-1003
Full Name: Pedro Delfino
Home Directory: sdl2pedrodelfino
HomeDir Drive: U:
Logon Script: logon.bat
Profile Path:
Domain: IP
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: Ter, 12 Fev 2008 12:11:50 BRST
Password can change: Ter, 12 Fev 2008 12:11:49 BRST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Então, executamos o comando pdbedit -a pedrodelfino para adicionar o usuário, foi solicitado uma senha, esta senha sim é a senha do samba, ou seja a senha que o usuário vai logar na estação de trabalho windows.
Para verificar os dados de um usuário no samba temos o comando
root #> pdbedit -Lv pedrodelfino
Unix username: pedrodelfino
NT username:
Account Flags: [U ]
User SID: S-1-5-21-951807190-2904679001-2272606852-1023
Primary Group SID: S-1-5-21-951807190-2904679001-2272606852-1003
Full Name: Pedro Delfino
Home Directory: sdl2pedrodelfino
HomeDir Drive: U:
Logon Script: logon.bat
Profile Path:
Domain: IP
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: Ter, 12 Fev 2008 12:11:50 BRST
Password can change: Ter, 12 Fev 2008 12:11:49 BRST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Aqui temos todas as informações deste usuário
Também podemos listar todos os usuários do samba
root #> pdbedit -L
ou
root #> pdbedit -Lw
Modificar a senha o usuario do samba no primeiro login no windows
Uma necessidade que sempre tive e nunca consegui implementar. Fazendo a migração do samba 2 para o samba 3, importei todos os usuários que estavam em um ldap, então preciso mudar a senha de todos os usuários (que no meu caso são mais de 300) para uma senha padrão e depois setar a opção para o usuário mudar a senha no proximo login.
Segundo o manual do samba 3 na página 276, para forçar o usuário a trocar a senha no proximo login, temos que utilizar o seguinte comando
root# pdbedit --pwd-must-change-time="2010-01-01"
--time-format="%Y-%m-%d" nome_do_usuario
Mas isto não funcionou no meu servidor.
E nem este outro comando, que também esta no manual
root# pdbedit --pwd-must-change-time=0 nome_do_usuario
Isto deveria modificar no cadastro do usuário a opção
root #> pdbedit -Lv pedrodelfino
...
Password last set: Mon, 05 Dec 2005 23:37:11 MST
Password can change: Wed, 07 Dec 2005 23:37:11 MST
Password must change: 0
...
Infelizmente não funcionou.
Resolvi este problema utilizando o User Manager no windows, fiz o download, loguei em um estação windows como root, e acessei User Manager no meu dominio normalmente, editei o usuário e marquei a opção:
User change Must password at next Logon
Isto sim funcionou, o cadastro ficou assim
root #> pdbedit -Lv pedrodelfino
...
Password last set: 0
Password can change: 0
Password must change: 0
...
Logando com o usuário na estação windows.
Este assunto ainda é minha fonte de pesquisa, pois caso comando para forçar o usuário a modificar a senha no primeiro login tivesse funcionado no samba 3 seria ótimo, para gerar um script e fazer isso com todos os usuários.
Por hoje é só, nesta primeira parte do artigo, espero ter conseguido passar as minhas experiências no gerenciamento de usuário do samba utilizando o pdbedit. Na segunda parte do artigo, eu vo falar dos meus testes na modificação das políticas padrão do dominio do PDC samba.
Não esqueça de executar.
root #> man pdbedit
Pois ajuda e muito.
Referência do forum do Debian
Manual oficial do samba 3
Está precisando trabalhar com LINUX de forma profissional? Então aproveite pra conhecer a nossa formação completa de LINUX.