Tutorial de Migração samba3(com ou sem Ldap ) para samba4
Objetivo:
Neste tutorial tenho como objetivo externar minha experiencia ao fazer a migração do meu ambiente de autenticação ( Em media 800 Usuários, 50 Grupos, e 600 maquinas ) e servir como um guia para outras pessoas.
Antes de começarmos o Tutorial:
Recomendo fazer exaustivos teste em um ambiente virtual antes de fazer a migração no ambiente de produção
Para isso utilizei o seguinte ambiente de teste
Maquinas Virtuais ( Caso queira os testes podem ser feitos com maquinas reais sem problema somente tome cuidado de coloca-las em uma rede apartada para os testes )
Criei 3 Maquinas virtuais
Sendo 2 maquinas virtuais com clientes
uma Windows XP e uma com Windows 7
Para ter um ambiente de teste confiável apos criar as maquinas Virtuais ingressei as duas no meu domínio antigo em produção ( Samba3+ldap) e me loguei em cada uma delas com pelo menos 4 usuários do domínio, diferente em cada maquina Totalizando 7 ( Um usuário em comum nas duas maquina para teste )
*Obs1 o procedimento acima e de grande importância para que sejam feitos teste de login e verificação de dados
*Obs2 não vou aborda como instalar maquinas Windows XP ou 7 e nem como coloca-los no domínio ( Samba3 ) Pois pressuponho que saibam como fazer isso tendo em vista já terem um domínio samba3 em operação.
Cenário anterior ( servidor em produção )
Servidor Suse
Samba3 + Ldap ( Banco bdb e Tls )
servidor dns bind
Cenário Novo ( servidor Teste para a Migração )
Servidor Debian 7
Samba4+bind9 como backend
Dicas Importantes para a migração caso seu servidor antigo utilize Autenticação Ldap
LDAP ( Openldap )
Como meu servidor antigo era um servidor Suse, e o novo e um servidor Debian tive que ficar atento a localização de alguns diretórios do servidor ldap que são diferentes no suse e no Debian
Debian | SUSE | |
pasta com os arquivos de Configuração | /etc/ldap | /etc/openldap |
Nome do serviço | /etc/init.d/slapd | /etc/init.d/ldap |
A pasta de Módulos do ldap | /usr/lib/ldap | /usr/lib/openldap/modules |
A Pasta com schemas | etc/ldap/schema/ | /etc/openldap/schema/ |
Fazendo copia dos arquivos necessário do servidor Samba3
*obs. somente relembrando o meu servidor samba3 esta instalado numa maquina suse
Agora vamos Começar
Acesse seu servidor samba3
Nele vamos fazer Backup de algumas Pastas e Arquivos de Configurações que serão necessários Para a migração
Criar Pasta Backup
# mkdir -p /root/backup/var/lib/
# mkdir -p /root/backup/etc/
Parando o servidor ldap ( em um servidor suse ) para fazer backup
# /etc/init.d/ldap stop
* no Suse o serviço do openldap se chama ldap
Fazendo Backup do servidor ldap
# slapcat > /root/backup/backup.ldif
Iniciando o servidor Ldap ( Para que seus usuários possam voltar a logar )
# /etc/init.d/ldap start
Copiar arquivo as pastas do samba
# cp -r /etc/samba/ /root/backup/etc/
# cp -r /var/lib/samba /root/backup/var/lib/
Copiando pasta de configuração do ldap
# cp -r /etc/openldap /root/backup/etc/
*Obs. relembrando novamente que no meu caso o servidor suse usa a pasta openldap diferente do Debian que usa ldap
No meu caso o ldap usar conexão segura TLS por isso precisei dos certificados também
para facilitar copiei toda as pasta /etc/ssl
# cp -r /etc/ssl /root/backup/etc/
Copiar a pasta Backup do servidor samba3 para o servidor samba4
# scp -r /root/backup root@servidorsamba4:/root/
* Ligue as duas maquinas em rede ( Smab3 e samba4 ) somente para fazer essa copia pois recomendo que o teste de migração sejam feito numa rede apartada simulando um cenário real ( aonde o servidor samba4 tem o mesmo ip do antigo samba3 )
caso queira pode copiar essa pasta para uma media removível e colar no samba4
Agora Vamos Para O Servidor Samba4
Instalação do Servidor openldap ( sera usado temporariamente no processo de migração de contas apos isso ira ser removido pois o samba4 já conta com um servidor ldap interno ), Serei o mais direto Possível nesse tópico ( instalação do servidor ldap ) pois pressuponho que já tenha esse conhecimento
Caso queira uma Tutorial Mais aprofundado de como Instalar um servidor ldap
http://www.mundotibrasil.com.br/primeira-configuracao-ldap/
Antes de Instalar o ldap e fazer o dump dos usuários aconselho a verificar os seguintes itens abaixo:
1 Verificar se existem usuários com sid duplicado ( Ver no final do tutorial como resolver isso )
2 Verificar se existem grupos que tenho o mesmo nome que o de usuários ( Ver no final do tutorial como resolver isso )
Instalar servidor ldap
# apt-get install libldap-2.4-2 slapd ldap-utils
* Quando for solicitado senha pode deixar em branco
Parar o servidor ldap
# service slapd stop
*Obs. no Debian o Servidor do openldap se chama slapd
Fazer copia da Pasta Padrão do servidor ldap ( Criada na instalação do servidor ldap )
# mv /etc/ldap /etc/ldap.padrao
Copiar a pasta do servidor ldap antigo ( Samba3 ) que foi backupeada para o novo servidor ldap ( Temporário )
# cp -r /root/backup/etc/openldap /etc/ldap
*Obs. lembrando novamente o meu backup contem a pasta openldap pois o servidor antigo era um suse caso fosse um Debian seria ldap
Mudando Permissões na pasta ldap
# chmod 777 -R /etc/ldap
Agora precisamos editar o arquivo /etc/ldap/slapd.conf
Editando o arquivo /etc/ldap/slapd.conf
Meu arquivo slapd.conf
########################################################## # # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/yast.schema include /etc/openldap/schema/samba.schema pidfile /var/run/slapd/slapd.pid argsfile /var/run/slapd/slapd.args modulepath /usr/lib/openldap/modules access to attrs=SambaLMPassword,SambaNTPassword by dn="cn=Administrator,dc=empresa,dc=casa" write by * none access to dn.base="" by * read access to dn.base="cn=Subschema" by * read access to attrs=userPassword,userPKCS12 by self write by * auth access to attrs=shadowLastChange by self write by * read access to * by * read ####################################################################### # BDB database definitions ####################################################################### allow bind_v2 loglevel 1024 TLSCertificateFile /etc/ssl/servercerts/servercert.pem TLSCACertificatePath /etc/ssl/certs/ TLSCertificateKeyFile /etc/ssl/servercerts/serverkey.pem database bdb suffix "dc=empresa,dc=casa," rootdn "cn=Administrator,dc=empresa,dc=casa" ################################################### directory /var/lib/ldap checkpoint 1024 5 cachesize 10000 index objectClass,uidNumber,gidNumber eq index member,mail eq,pres index cn,displayname,uid,sn,givenname sub,eq,pres index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq #############################################################################
Como Podemos ver no meu slapd.conf ( de um servidor suse ) vamos adapta-lo para um servidor Debian temos que mudar as seguintes linhas.
DE
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/yast.schema include /etc/openldap/schema/samba.schema
Vamos mudar de /etc/openldap para /etc/ldap que e como Debian trabalha
PARA
include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/yast.schema include /etc/ldap/schema/samba.schema
Como Podemos ver no meu slapd.conf ( de um servidor suse ) ele chama os módulos
em: /usr/lib/openldap/modules
modulepath /usr/lib/openldap/modules
Vamos mudar para /usr/lib/ldap ( padrão do Debian )
modulepath /usr/lib/ldap
* Por padrão o openldap no Debian trabalha com banco tdb como o meu e bdb precisei adicionar a linha abaixo no meu
moduleload back_bdb.la
Apos fazermos as modificações necessárias salvamos o arquivo
como podemos ver acima meu servidor ldap usa conexão segura TLS com isso temos que copiar os certificados.
copiar pasta certificados
#cp -r /root/backup/etc/ssl /etc/
Permissão na pasta ssl
#chmod 777 -R /etc/ssl/
Adicionando a base ldap
# slapadd -l /root/backup.ldif
Inciando o servidor ldap
# service slapd start
Testando o Servidor ldap
# ldapsearch -x -h 127.0.0.1
Pronto já temos um servidor ldap com nossa base de usuários
*Lembre-se que o samba4 já tem um servidor ldap interno só estamos usando esse servidor ldap temporariamente para que possamos migrar as contas de usuários do samba3 ( que usava ldap )para o samba4
INSTALANDO O SAMBA4
Estou usando como base o começo do tutorial
http://www.mundotibrasil.com.br/samba-4-compilar-instalar-e-provisionar/
Instalação dos pacotes necessários para o samba:
# apt-get install libreadline-dev git build-essential libattr1-dev libblkid-dev libgnutls-dev autoconf python-dev python-dnspython libacl1-dev gdb pkg-config libpopt-dev libldap2-dev dnsutils acl attr libbsd-dev docbook-xsl libcups2-dev aptitude vim krb5-user
*Obs Quando for perguntado pelo Kerberos e só dar enter ( Em branco mesmo ) pois iremos usar o arquivo que o servidor samba ira criar
Vamos aos preparativos
vim /etc/fstab
*caso tenha somente o / fazer o procedimento somente nele, o que fizemos foi basicamente adicionar ,acl,user_xattr,barrier=1
/dev/sda1 / ext4 errors=remount-ro,acl,user_xattr,barrier=1 0 1 /dev/sda2 /home ext4 defaults,acl,user_xattr,barrier=1 0 1
# mount -o remount /
# mount -o remount /home
Download do código fonte do samba 4:
# cd /usr/src
# wget http://www.samba.org/samba/ftp/stable/samba-4.0.5.tar.gz
# tar -xzvf samba-4.0.5.tar.gz
# cd samba-4.0.5
# ./configure –prefix=/opt/samba
# make
# make install
*Obs. fique atento que após ./configure são 2 traços juntos
Adicionar o diretório bin e sbin do samba ao Path
Dessa forma sera setado para todos os usuários
# echo -e “PATH=”/opt/samba/bin:/opt/samba/sbin:\${PATH}” \n export PATH” >> /etc/profile
Somente root
# echo -e “PATH=”/opt/samba/bin:/opt/samba/sbin:\${PATH}” \n export PATH” >> /root/.profile
Essas conf acimas só serão validadas na próximo login para que o path seja exportado nessa sessão atual execute o comando abaixo
#export PATH=$PATH:”/opt/samba/bin:/opt/samba/sbin”
Fazendo a Migração em si
# /opt/samba/bin/samba-tool domain classicupgrade –dbdir=root/backup/var/lib/samba/ –use-xattrs=yes –dns-backend=BIND9_DLZ –realm=empresa /root/backup/etc/samba/smb.conf
*Entendo um Pouco o faz cada opção
–dbdir: caminho para o diretório que contém os arquivos de banco de dados tdb.
–use-xattr: usar o suporte ao sistema de arquivos subjacente para atributos estendidos
–realm Você pode especificar o domínio na linha de comando, se ele já não estiver especificado no arquivo smb.conf Samba3
no final adicionamos a localização do arquivo smb.conf
Opções adicionar
DNS Backend: Por default Samba é configurado com o servidor DNS interno. Se você quiser usar Bind como backend, add – dns-backend = BIND9_DLZ ou – dns-backend = BIND9_FLATFILE. Bind como backend é recomendado se você pretende criar uma configuração de DNS complexante, que o Samba 4 interno DNS permite atualmente. Encontre informações sobre como instalar e configurar Bind como backend,
Apos migrar o domínio tive um problema na senha do meu usuário administrator com isso tive que setar a senha do mesmo
# samba-tool user setpassword Administrator
Removendo o Servidor ldap
# aptitude purge slapd ldap-utils -y
Instalar servidor bind9
# apt-get install bind9 bind9utils
Parando o Bind
# service bind9 stop
Permissão na pasta dns do samba
# chmod 777 -R /opt/samba/private/dns
Agora Vamos editar alguns arquivos do bind
no Debian eles foram subdivididos
as conf ficam em /etc/bind/named.conf.options
Editando o arquivo /etc/bind/named.conf.options
fiz as seguintes alterações
dnssec-validation auto;
Mudei para
dnssec-validation no;
Comentei a linha sobre ipv6 por não utilizar
// listen-on-v6 { any; };
Adicionei a linha referente ao arquivo keytab criado pelo samba
Essa linha é responsável pelo dinamic dns
tkey-gssapi-keytab “/opt/samba/private/dns.keytab”;
adicionei o forwaders de dns para o Samba ( para que ele consulte outro dns caso não saiba o nome consultado na minha rede temos esse dns acima do meu por isso adicionei ele caso não saiba qual colocar coloque o Google 8.8.8.8 )
forwarders { 10.205.144.6; };
Editar o Arquivo /etc/bind/name.conf
Adcionar a linha include \”/opt/samba/private/named.conf\”; no arquivo /etc/bind/name.conf
echo “include \”/opt/samba/private/named.conf\”;” >> /etc/bind/name.conf
Editar o Arquivo /etc/default/bind9
Como não uso ipv6 na minha rede forcei o bind a usar somente ipv4
no arquivo /etc/default/bind9 estava a linha
OPTIONS=”-u bind”
mudei para
OPTIONS=”-4 -u bind”
Iniciando o Bind
# service bind9 start
Alguns teste do bind
Listar Zonas do DNS
# samba-tool dns zonelist 127.0.0.1 -U Administrator
Informação sobre uma Zona especifica
# samba-tool dns zoneinfo 127.0.0.1 empresa.casa -U Administrator
Kerberos
copiando arquivos de configuração
# cp /opt/samba/private/krb5.conf /etc/
* Obs. tive um problema que o Kerberos não era inicializado estava sem ip na interface, após setar o ip e restart o samba o mesmo funcionou
~Testando o Kerberos
# kinit administrator@EMPRESA.CASA
Digite a senha do Administrador do domínio
Password for administrator@EMPRESA.CASA:
Sera exibida uma msg parecida com a abaixo
Warning: Your password will expire in 35 days on Wed Feb 6 19:58:59 2013
# klist
Sera exibida uma mensagem parecida com a abaixo
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@EMPRESA.CASA
Valid starting Expires Service principal
01/02/13 15:34:04 01/03/13 01:34:04 krbtgt/EMPRESA.CASA@EMPRESA.CASA
renew until 01/03/13 15:34:00
Teste do samba
# samba -i -M single
-i – Modo interativo (O normal é o daemon)
-M single – Apenas um processo (sem filhos)
Se não houve nenhuma mensagem de erro podemos cancelar o teste, para isso utilize a combinação de teclas CTRL+C para encerrar o processo.
# sbin/samba -V
Version 4.0.5 Agora vamos iniciar o Samba4 # sbin/samba
Outro pequeno teste
# bin/smbclient -L localhost -U%
Domain=[EMPRESA] OS=[Unix] Server[Samba 4.0.5] Sharename Type Comment --------- ---- ------- netlogon Disk sysvol Disk IPC$ IPC IPC Service (Samba 4.0.5) Domain=[EMPRESA] OS=[Unix] Server=[Samba 4.0.5] Server Comment --------- ------- Workgroup Master --------- -------
Pronto seu servidor samba4 esta ativo e com todos os usuários e grupos do seu servidor samba3
Criando arquivo de inicialização do samba
Agora precisamos de um script para iniciar e parar o Samba4.
# vi /etc/init.d/samba
#! /bin/bash ### BEGIN INIT INFO # Provides: samba # Required-Start: $network $local_fs $remote_fs # Required-Stop: $network $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start Samba daemons ### END INIT INFO # # Start/stops the Samba daemon (samba). # Adapted from the Samba 3 packages. # SAMBAPID=/opt/samba/var/run/samba.pid # clear conflicting settings from the environment unset TMPDIR # See if the daemon and the config file are there test -x /opt/samba/sbin -a -r /opt/samba/etc/ || exit 0 . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting Samba 4 daemon" "samba" if ! start-stop-daemon --start --quiet --oknodo --exec /opt/samba/sbin/samba -- -D; then log_end_msg 1 exit 1 fi log_end_msg 0 ;; stop) log_daemon_msg "Stopping Samba 4 daemon" "samba" start-stop-daemon --stop --quiet --name samba $SAMBAPID # Wait a little and remove stale PID file sleep 1 if [ -f $SAMBAPID ] && ! ps h `cat $SAMBAPID` > /dev/null then # Stale PID file (samba was succesfully stopped), # remove it (should be removed by samba itself IMHO.) rm -f $SAMBAPID fi log_end_msg 0 ;; restart|force-reload) $0 stop sleep 1 $0 start ;; *) echo "Usage: /etc/init.d/samba {start|stop|restart|force-reload}" exit 1 ;; esac exit 0
Dê permissão de execução ao script.
# chmod +x /etc/init.d/samba
Agora precisamos que o script inicie nos níveis de execução 2345 e pare em 016.
# update-rc.d samba defaults
Vamos atualizar o resolv.conf.
# vi /etc/resolv.conf
search empresa.casa nameserver 127.0.0.1
RESOLVENDO PROBLEMAS
Tive alguns Problemas após executar o comando
# /opt/samba/bin/samba-tool domain classicupgrade –dbdir=root/backup/var/lib/samba/ –use-xattrs=yes –dns-backend=BIND9_DLZ –realm=empresa /root/backup/etc/samba/smb.conf
SID DUPLICADO
Tive problemas de SID duplicado
na pagina do samba tem esse script para verificar e remover esses sids duplicados
Como podem ver ele verifica os sid duplicados usando o slapcat ( Com isso você deve fazer o dump dos usuários para o ov ldap para só depois tentar remover os Sid duplicados )
################################################################### #!/usr/bin/python # A quick and dirty python script that checks for duplicat SID's using slapcat. import os data = os.popen("slapcat | grep sambaSID", 'r') line = [] def anydup(thelist): dups = list(set([x for x in thelist if thelist.count(x) > 1])) for i in dups: print "Duplicate id: ", i for each_line in data: line.append(each_line.strip()) anydup(line) ########################################################################
Comigo esse script não funcionou dessa forma usei o comando abaixo
Com isso antes de fazer o dump dos usuários executei o seguinte comando
cat /root/backup/backup.ldif | grep sambaSID | sort | uniq -d
Com isso fiquei sabendo quais eram os sid duplicados e os removi na mão no meu arquivo de backup /root/backup/backup.ldif
*Obs. você deve remover todo o usuário com o sid duplicado
Exemplo
ao executar o comando cat /root/backup/backup.ldif | grep sambaSID | sort | uniq -d
verifique que o sid abaixo estava duplicado
sambaSID: S-1-5-21-2538661941-1374352465-460999318-3266
Com isso removi um dos usuários que tem o mesmo sid removendo todas as linhas referentes a ele como no exemplo abaixo
dn: uid=usuario-teste,ou=Users,dc=empresa,dc=casa objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount objectClass: sambaSamAccount uidNumber: 1133 structuralObjectClass: inetOrgPerson entryUUID: 238fd2da-131c-102f-9a3d-675e93413251 creatorsName: cn=Administrator,dc=empresa,dc=casa createTimestamp: 20100623140535Z sambaSID: S-1-5-21-2538661941-1374352465-460999318-3266 loginShell: /bin/false sambaLogonScript: logon_admin.bat gidNumber: 512 sambaPrimaryGroupSID: S-1-5-21-2538661941-1374352465-460999318-512 sambaPwdCanChange: 1316016264 sambaPwdMustChange: 1328372822 shadowMax: 30 sambaAcctFlags: [U ] givenName: FCNM employeeNumber: 52001273 sambaDomainName: EMPRESA.CASA sambaBadPasswordCount: 0 sambaBadPasswordTime: 0 sambaNTPassword: 6862D880221F70365C01BBD3C3FF664F sambaPasswordHistory: 00000000000000000000000000000000000000000000000000000000 00000000 homeDirectory: /home/usuario-teste description: usuario-teste uid: usuario-teste sambaPwdLastSet: 1342618479 shadowLastChange: 15539 userPassword:: e1NTSEF9ZWI3eHpaV1FBOHN6L2pJRUxaOE1MRmxWMFBqZDQ1SFo= cn: Jose Roberto telephoneNumber: 3185 sn: Jose title:: VGVjLiBkZSBJbmZvcm3DoXRpY2E= departmentNumber:: QXNzZXNzb3JpYSBkZSBUZWNub2xvZ2lhIGRhIEluZm9ybWHDp8OjbyAoIEF USSAp o: Jose Roberto Bastos de Oliveira entryCSN: 20130429164709Z#000000#00#000000 modifiersName: cn=Administrator,dc=empresa,dc=casa modifyTimestamp: 20130429164709Z
não esqueça de remover ele dos grupos ao qual ele pertence removendo o campo memberUid: usuario-teste
Agora que não existem usuário duplicados pode segui normalmente o tutorial
Caso já tenha feito o dump dos usuários
pode usar o comando
slapcat | grep sambaSID | sort | uniq -d
e usar um interface gráfica para remover usuários do ldap ( ldap-acount-manager (LAM ) ou phpldapadmin )
Cara… Muito bom o tutorial. Ainda não testei, mas veio a calhar porque tenho um o Samba+LDAP aqui com uns 2000 usuários e não tinha ideia de como fazer para importar. Vou testar aqui e, se puder, vou acrescentar alguma coisa. Abço
Obrigado pelo comentario se precisar de alguma coisa e só falar
e estou na espera da sua contribuição vlw mano
Boa Noite Jeferson, eu tenho um servidor d arquivos com debian 5 e samba 3, estou querendo migrar para debian 7 e samba 4, mas nao posso usar ele como controlador de domínio, preciso que seja apenas um servidor de arquivos, autenticando usuários no compartilhamento, existe esta opção? Obrigado
show de bola, muito bom mesmo. Parabens :)
Vou arranjar um tempo para montar um ambiente de testes e utilizar os passos publicados. Agora eu fiquei com uma dúvida. As máquinas que já estavam ingressadas no domínio, não foi preciso reingressar?
Parabéns pela contribuição!
Abraço,
O Gabriel, o foda dessa migração e isso as maquinas que ja estão no dominio continuam por isso pedi para usar 2 maquinas que ja estavão no dominio como teste
para o usuario e as maquinas e transparante
Obrigado max que bom que gostou ainda tenho que melhorar os termos usado no tutorial, o portugues ( diga-se de passagem minha ortografia e horrivel kkk ) mais aos poucos vou melhorando
Que nada, isso é de menos (pelo menos pra mim kkkk) conseguiu passar a mensagem perfeitamente Jeferson.
Amigo segui a risca seu tutorial, estou tendo o erro abaixo.
quando executo o comando:
samba-tool domain classicupgrade /root/backup/etc/samba/smb.conf –dbdir /root/backup/var/lib/samba/ –dns-backend=SAMBA_INTERNAL –realm homeoffice
erro que apresenta.
Reading smb.conf
Provisioning
add_new_domain_info: failed to add domain dn= sambaDomainName=HOMEOFFICE,dc=homeoffice with: Invalid DN syntax
invalid DN
smbldap_search_domain_info: Adding domain info for HOMEOFFICE failed with NT_STATUS_UNSUCCESSFUL
pdb_init_ldapsam: WARNING: Could not get domain info, nor add one to the domain. We cannot work reliably without it.
pdb backend ldapsam:ldap://127.0.0.1/ did not correctly init (error was NT_STATUS_CANT_ACCESS_DOMAIN_INFO)
ERROR(): uncaught exception – Cannot load backend methods for ‘ldapsam:ldap://127.0.0.1/’ backend (-1073741606,NT_STATUS_CANT_ACCESS_DOMAIN_INFO)
File “/opt/samba4/lib/python2.7/site-packages/samba/netcmd/__init__.py”, line 175, in _run
return self.run(*args, **kwargs)
File “/opt/samba4/lib/python2.7/site-packages/samba/netcmd/domain.py”, line 1318, in run
useeadb=eadb, dns_backend=dns_backend, use_ntvfs=use_ntvfs)
File “/opt/samba4/lib/python2.7/site-packages/samba/upgrade.py”, line 616, in upgrade_from_samba3
s3db = samba3.get_sam_db()
File “/opt/samba4/lib/python2.7/site-packages/samba/samba3/__init__.py”, line 390, in get_sam_db
return passdb.PDB(self.lp.get(‘passdb backend’))
Bom dia meu amigo tente repetir o comando tirando a ultima opção s –realm homeoffice
ficando samba-tool domain classicupgrade /root/backup/etc/samba/smb.conf –dbdir /root/backup/var/lib/samba/ –dns-backend=SAMBA_INTERNAL
pelo log de ero pude reparar que o samba esta reclamando tb do ldap
WARNING: Could not get domain info, nor add one to the domain. We cannot work reliably without it.
pdb backend ldapsam:ldap://127.0.0.1/ did not correctly init (error was NT_STATUS_CANT_ACCESS_DOMAIN_INFO)
ERROR(): uncaught exception – Cannot load backend methods for ‘ldapsam:ldap://127.0.0.1/’ backend
vc instalou um servidor ldap para fazer a importação das contas ?
o samba esta reclamando que nao esta conseguindo se conectar a ele
Caro Jeferson,
Sensacional seu tutorial.
Os meu servidores já são Debian, com samba+ldap com 8000 usuários.
Vou teste assim que tiver tempo.
Mas já quero fazer uma pergunta, rola um HA no samba4? ou pelo menos da passa de usuários? Pq tenho outros sistemas que fazem autenticação no LDAP como RADIUS, APACHE e etc…
Vlw ai!
muito bom o topico ajudou demais da conta… pra ficar melhor ainda posta outro topico de migração do AD microsoft para samba 4. abraços!!!!
Bom dia,
Fiz toda a instalação e está rodando tudo ok.
Quando tento migrar os usuários do samba3+ldap antigo, está dando este erro.
Tem alguma idéia do que pode ser? Já limpei os sids duplicados!
Obrigado
Augusto
servidor# samba-tool domain classicupgrade –dbdir=samba3/samba –use-xattrs=yes –realm=cle.unicamp.br samba3cf/samba/smb.conf –dns-backend=BIND9_DLZ
ERROR(): uncaught exception – list index out of range
File “/usr/local/lib/python2.7/site-packages/samba/netcmd/__init__.py”, line 175, in _run
return self.run(*args, **kwargs)
File “/usr/local/lib/python2.7/site-packages/samba/netcmd/domain.py”, line 1318, in run
useeadb=eadb, dns_backend=dns_backend, use_ntvfs=use_ntvfs)
File “/usr/local/lib/python2.7/site-packages/samba/upgrade.py”, line 804, in upgrade_from_samba3
homes[username] = get_posix_attr_from_ldap_backend(logger, ldb_object, base_dn, username, “homeDirectory”)
File “/usr/local/lib/python2.7/site-packages/samba/upgrade.py”, line 547, in get_posix_attr_from_ldap_backend
return msg[0][attr][0]
The connection to the LDAP server was closed
Muito bacana o tutorial.
Estou tentando migrar uma versão antiga do samba, onde a base de dados ainda era no arquivo smbpasswd. O meu problema maior não são os usuários, pois são apenas 50 então é tranquilo recadastrar, mas eu gostaria de evitar de ter colocar as máquinas no domínio novamente. Tentei alterar o SID do domínio como eu fazia antigamente, mas não consegui no samba4. Vocês têm idéia de como proceder?
Boa tarde.
Talvez você saiba o que pode estar ocorrendo comigo.
Exporting groups
Ignoring group ‘Administradores’ S-1-5-32-544 listed but then not found: Unable to enumerate members for alias, (-1073741487,NT_STATUS_NO_SUCH_ALIAS)
Ignoring group ‘Duplicadores’ S-1-5-32-552 listed but then not found: Unable to enumerate members for alias, (-1073741487,NT_STATUS_NO_SUCH_ALIAS)
Ignoring group ‘Operadores de Backup’ S-1-5-32-551 listed but then not found: Unable to enumerate members for alias, (-1073741487,NT_STATUS_NO_SUCH_ALIAS)
Ignoring group ‘Operadores de Contas’ S-1-5-32-548 listed but then not found: Unable to enumerate members for alias, (-1073741487,NT_STATUS_NO_SUCH_ALIAS)
Ignoring group ‘Operadores de Impressao’ S-1-5-32-550 listed but then not found: Unable to enumerate members for alias, (-1073741487,NT_STATUS_NO_SUCH_ALIAS)
Exporting users
Skipping wellknown rid=500 (for username=root)
Next rid = 3961
ERROR(): uncaught exception – ProvisioningError: Please remove duplicate user sid entries before upgrade.
File “/opt/samba/lib/python2.6/site-packages/samba/netcmd/__init__.py”, line 175, in _run
return self.run(*args, **kwargs)
File “/opt/samba/lib/python2.6/site-packages/samba/netcmd/domain.py”, line 1318, in run
useeadb=eadb, dns_backend=dns_backend, use_ntvfs=use_ntvfs)
File “/opt/samba/lib/python2.6/site-packages/samba/upgrade.py”, line 779, in upgrade_from_samba3
raise ProvisioningError(“Please remove duplicate user sid entries before upgrade.”)
Já removi os SID duplicados
Não possuo muita experiência em cima do samba,
Sei que o samba4 já possui o proprio ldap.
Se eu for centralizar todos os usuários de linux e windows.
eu vou ter que migrar o ldap para o samba4?
obrigado porinquanto..
isso mesmo ele ja tem ldap + dns + winbind interno, e como se fosse uma ad 2003
isso mesmo a ideia e essa
E a configuração dos clientes linux? Sabe me informar se preciso do winbind? Ou apenas do PAM?
O tutorial ficou muito bom, mas no meu caso as máquinas estão sendo migradas como contas de usuários.
Após isto as máquinas não possuêm relação de confiança com o novo SAMBA4
Não sei se pode estar faltando alguma informação importante no meu ldif.
Os bancos de dados dentro de /var/lib/samba/ foram copiados corretamente para a migração.
Segue os arquivos necessários para o entendimento do problema :
maquinas.ldif
—————————————————————————————
dn: ou=maquinas,dc=empresa,dc=com
objectClass: organizationalUnit
objectClass: top
ou: maquinas
dn: uid=maquina_teste$,ou=maquinas,dc=empresa,dc=com
cn: maquina_teste
uidNumber: 5358
gidNumber: 515
homeDirectory: /dev/null
objectClass: posixAccount
objectClass: account
objectClass: sambaSamAccount
objectClass: top
sambaSID: S-1-5-21-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-3048
sambaNTPassword: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
uid: maquina_teste$
—————————————————————————————
smb.conf
—————————————————————————————
name resolve order = lmhosts wins bcast host
netbios name = Empresa
ldap passwd sync = yes
local master = yes
workgroup = EMPRESA
ldap admin dn = cn=admin,dc=empresa,dc=com
security = user
short preserve case = yes
guest account = nobody
ldap user suffix = ou=usuarios
ldap machine suffix = ou=maquinas
domain master = yes
encrypt passwords = true
passdb backend = ldapsam:ldap://xxx.xxx.xxx.xxx/
wins support = yes
ldap ssl = Off
server string = Servidor de Arquivos
password server = Server
ldap suffix = dc=empresa,dc=com
preferred master = yes
domain logons = yes
———————————————————————————
Os unicos erros encontrados durante a migração com o classicupgrade são os seguintes:
# /usr/local/samba/bin/samba-tool domain classicupgrade –dbdir=root/backup/var_lib_samba/ –use-xattrs=yes –dns-backend=SAMBA_INTERNAL –realm=EMPRESA.COM /home/zuberrzo/SAMBA/samba_etc/smb.conf
Ignoring group memberships of ‘maquina_teste$’ S-1-5-21-xxxxxxxxxxxxxxxxxxxxxxxxxxxx-3048: Unable to enumerate group memberships, (-1073741596,NT_STATUS_INTERNAL_DB_CORRUPTION)
Ignoring group memberships of ‘maquina_teste$’
Next rid = xxxx117
Exporting posix attributes
.
.
.
A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba4 server will be ready to use
Server Role: active directory domain controller
Hostname: Empresa
NetBIOS Domain: EMPRESA
DNS Domain: empresa.com
DOMAIN SID: S-1-5-21-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Importing WINS database
Importing Account policy
Could not set account policy, ((53, ‘objectclass: modify message must have elements/attributes!’))
Importing idmap database
Cannot open idmap database, Ignoring: [Errno 2] No such file or directory
Adding groups
Importing groups
Commiting ‘add groups’ transaction to disk
Adding users
Importing users
User root has been kept in the directory, it should be removed in favour of the Administrator user
Commiting ‘add users’ transaction to disk
Adding users to groups
Commiting ‘add users to groups’ transaction to disk
Setting password for administrator
Administrator password has been set to password of user ‘root’
Grande tutorial, para quem ainda está começando o trabalho com LDAP e Samba foi muito esclarecedor.
No meu caso estou tendo dificuldade de entender se essa importação funcionaria na situação que tenho:
Tenho somente uma base Openldap sem Samba3 ou 4 e gostaria somente de importar os dados dos usuários dessa base.
O tutorial se aplicaria? Tentei segui-lo mas não tive sucesso. O que estou fazendo erro?
Att,
Tiago
Agora eu fiquei com uma dúvida.
As máquinas que já estavam ingressadas no domínio, não foi preciso reingressar?
Está de Parabéns pelo tutorial.
Abraço,
Bom dia.
Primeiro agradecer pelo material.
No meu caso instalei o ldap, porem quando rodar o comando para importar para o samba4 tive a seguinte mensagem:
Provisioning
add_new_domain_info: failed to add domain dn= sambaDomainName=AGROVALE.COM.BR,dc=agrovale,dc=com,dc=br with: Other (e.g., implementation specific) error
index generation failed
smbldap_search_domain_info: Adding domain info for AGROVALE.COM.BR failed with NT_STATUS_UNSUCCESSFUL
pdb_init_ldapsam: WARNING: Could not get domain info, nor add one to the domain. We cannot work reliably without it.
pdb backend ldapsam:ldap://192.168.1.22 did not correctly init (error was NT_STATUS_CANT_ACCESS_DOMAIN_INFO)
ERROR(): uncaught exception – Cannot load backend methods for ‘ldapsam:ldap://192.168.1.22’ backend (-1073741606,Configuration information could not be read from the domain controller, either because the machine is unavailable or access has been denied.)
File “/opt/samba/lib/python2.7/site-packages/samba/netcmd/__init__.py”, line 175, in _run
return self.run(*args, **kwargs)
File “/opt/samba/lib/python2.7/site-packages/samba/netcmd/domain.py”, line 1452, in run
useeadb=eadb, dns_backend=dns_backend, use_ntvfs=use_ntvfs)
File “/opt/samba/lib/python2.7/site-packages/samba/upgrade.py”, line 483, in upgrade_from_samba3
s3db = samba3.get_sam_db()
File “/opt/samba/lib/python2.7/site-packages/samba/samba3/__init__.py”, line 394, in get_sam_db
return passdb.PDB(self.lp.get(‘passdb backend’))
Jeferson Salles você tem ideia do que pode ser?
Nos processos do linux eu vejo o slapd rodando, inclusive ele tra resultado quando executo o comando: ldapsearch -x -h 127.0.0.1
Depois de algumas correções na configuração, agora estou me deparando com este erro abaixo.
Alguem tem ideia de como resolver.
Desde já agradeço.
Provisioning
ERROR(): uncaught exception – ProvisioningError: ldapsam passdb backend detected but no LDAP Bind PW found in secrets.tdb for user %s. Please point this tool at the secrets.tdb that was used by the previous installation.
File “/opt/samba/lib/python2.7/site-packages/samba/netcmd/__init__.py”, line 175, in _run
return self.run(*args, **kwargs)
File “/opt/samba/lib/python2.7/site-packages/samba/netcmd/domain.py”, line 1452, in run
useeadb=eadb, dns_backend=dns_backend, use_ntvfs=use_ntvfs)
File “/opt/samba/lib/python2.7/site-packages/samba/upgrade.py”, line 470, in upgrade_from_samba3
raise ProvisioningError(“ldapsam passdb backend detected but no LDAP Bind PW found in secrets.tdb for user %s. Please point this tool at the secrets.tdb that was used by the previous installation.”)
Eu novamente.
Depois de mexer em configurações agora me deparei com a situação do samba não conseguir logar no ldap.
/root/backup/etc/samba/smb.conf
Reading smb.conf
INFO: Current debug levels:
all: 5
tdb: 5
printdrivers: 5
lanman: 5
smb: 5
rpc_parse: 5
rpc_srv: 5
rpc_cli: 5
passdb: 5
sam: 5
auth: 5
winbind: 5
vfs: 5
idmap: 5
quota: 5
acls: 5
locking: 5
msdfs: 5
dmapi: 5
registry: 5
scavenger: 5
dns: 5
ldb: 5
doing parameter log file = /var/log/samba/%m.log
doing parameter max log size = 0
doing parameter debug level = 1
Provisioning
failed to bind to server ldap://192.168.1.22 with dn=”cn=root,dc=agrovale,dc=com,dc=br” Error: Invalid credentials
(unknown)
Connection to LDAP server failed for the 1 try!
Connection to LDAP server failed for the 2 try!
Connection to LDAP server failed for the 3 try!
Connection to LDAP server failed for the 4 try!
Connection to LDAP server failed for the 5 try!
Connection to LDAP server failed for the 6 try!
Connection to LDAP server failed for the 7 try!
Para resolver esta mensagem acima eu comentei a seguinte linha no smb.conf
# passdb backend = ldapsam:ldap://192.168.1.22
Ficando desta forma as entradas do ldap.
ldap passwd sync = yes
ldap delete dn = Yes
ldap admin dn = cn=root,dc=agrovale,dc=com,dc=br
ldap suffix = dc=agrovale,dc=com,dc=br
ldap machine suffix = ou=Computadores
ldap user suffix = ou=Usuarios
ldap group suffix = ou=Grupos
ldap idmap suffix = sambaDomainName=agrovale.com.br
idmap backend = ldap:ldap://127.0.0.1
idmap uid = 10000-20000
idmap gid = 10000-20000
ldap ssl = no
Porem agora quando executo a migração com o comando.
/opt/samba/bin/samba-tool domain classicupgrade –dbdir=/root/backup/var/lib/samba/ –use-xattrs=yes –dns-backend=BIND9_DLZ –realm=AGROVALE /root/backup/etc/samba/smb.conf
Reading smb.conf
No final tenho a seguinte mensagem:
Populating DomainDnsZones and ForestDnsZones partitions
Unable to find group id for BIND,
set permissions to sam.ldb* files manually
BIND version unknown, please modify /opt/samba/private/named.conf manually.
See /opt/samba/private/named.conf for an example configuration include file for BIND
and /opt/samba/private/named.txt for further documentation required for secure DNS updates
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /opt/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba4 server will be ready to use
Server Role: active directory domain controller
Hostname: lobeira
NetBIOS Domain: AGROVALE.COM.BR
DNS Domain: agrovale
DOMAIN SID: S-1-5-21-2999359046-2353621477-198610729
Importing WINS database
ERROR(ldb): uncaught exception – Entry name=GAGS15,type=0x00 already exists
File “/opt/samba/lib/python2.7/site-packages/samba/netcmd/__init__.py”, line 175, in _run
return self.run(*args, **kwargs)
File “/opt/samba/lib/python2.7/site-packages/samba/netcmd/domain.py”, line 1452, in run
useeadb=eadb, dns_backend=dns_backend, use_ntvfs=use_ntvfs)
File “/opt/samba/lib/python2.7/site-packages/samba/upgrade.py”, line 741, in upgrade_from_samba3
import_wins(Ldb(result.paths.winsdb), samba3_winsdb)
File “/opt/samba/lib/python2.7/site-packages/samba/upgrade.py”, line 366, in import_wins
“address”: ips})
Interessante q no arquivo ldif não possui o GAGS15.
Será que deu certo para ele pegar os arquivos do ldap e adicionar no samba4?
Ou sera q não vai da certo.
Desde já agradeço
Bom dia. Consegui efetuar a migração 100%. Porém coloquei um 2008_R2 como membro DC. O Sincronismo do diretório funcionou, porém o DNS do samba não está aceitando updates (isto é não aceita a inserção/updates de registros das máquinas da rede) ocorrendo o erro:
samba_dlz: cancelling transaction on zone xxxxxxxxxxxxxxx/IN denied
Inclusive já recompilei o BIND pela possibilidade de ser algo relacionado ao spnego, mas de nada adiantou.
Alguma dica?