Integrando Debian Wheezy e AD – Servidor de arquivos
{jcomments on}
1 – Ambiente: Debian Wheezy (7.1) e Windows® Server 2008. Também foi testando com o Windows® Server 2003.
2 – Baixando os pacotes necessários:
# apt-get update && apt-get install krb5-user winbind ssh samba ntpdate
3 – acerte o horário do seu servidor samba igual ao do servidor Active Directory pois caso contrário ele não permitirá o logon. Para quem não conhece o comando é$ sudo su senha:
# date mmddhhmmyyyy
# exit
Onde: mm: Mês dd: Dia hh: hora mm: Minuto yyyy: Ano
Edite o arquivo /etc/default/ntpdate para que o horário seja sincronizado com o horário do seu servidor LDAP:
# The settings in this file are used by the program ntpdate-debian, but not # by the upstream program ntpdate. # Set to "yes" to take the server list from /etc/ntp.conf, from package ntp, # so you only have to keep it in one place. NTPDATE_USE_NTP_CONF=yes # List of NTP servers to use (Separate multiple servers with spaces.) # Not used if NTPDATE_USE_NTP_CONF is yes. NTPSERVERS="ip-do-dc" # Additional options to pass to ntpdate NTPOPTIONS="-u"
4 – Editando os arquivos necessários: Obs: recomendo fortemente daqui pra frente antes de editar os arquivos realizar uma cópia dos mesmos pois caso algo dê errado, será possível a restauração dos mesmos. Claro que muitos sabem dessas precauções, mas fica aí a dica.
$ sudo nano /etc/resolv.conf
Altere o arquivo conforme o modelo abaixo:
search seu.dominio domain seu.dominio nameserver ip_do_dns_primario nameserver ip_do_dns_secundario
Salve e feche o arquivo.
$ sudo nano /etc/hosts
Altere o arquivo /etc/hosts, conforme o modelo: (neste caso apenas edite a ultima linha)
127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts ip_do_servidor_samba nome_do_servidor_samba.seu.dominio nome_do_servidor_samba
Salve e feche o arquivo.
$ sudo nano /etc/nsswitch.conf
Altere o arquivo /etc/nsswitch.conf conforme abaixo:
passwd: compat winbind group: compat winbind shadow: compat hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
Salve e feche o arquivo.
$ sudo nano /etc/krb5.conf
Edite o arquivo /etc/krb5.conf e deixe-o assim:
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = SEU.DOMINIO dns_lookup_realm = true dns_lookup_kdc = true ticket_lifetime = 24h forwardable = yes [realms] SEU.DOMINIO = { kdc = servidor.seu.dominio admin_server = servidor. seu.dominio default_domain = SEU.DOMINIO } [domain_realm] .dominio.seu = SEU.DOMINIO dominio.seu = SEU.DOMINIO [kdc] profile = /var/kerberos/krb5kdc/kdc.conf [appdefaults] pam = { debug = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true krb4_convert = false }
Salve e feche o arquivo. Para verificar que você consegue se autenticar via kerberos execute o comando:
kinit usuario@ SEU.DOMINIO
Será solicitada a senha do usuário. Se não der nenhuma mensagem de erro, execute o comando klist. Se for mostrada uma mensagem parecida com a abaixo, você se autenticou com sucesso:
Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: usuario@SEU.DOMINIO Valid starting Expires Service pricipal renew until 26/07/2013 06:54 25/07/2013 20:54 26/07/2013 06:54 krbtgt/SEU.DOMINIO@SEU.DOMINIO
$ sudo nano /etc/samba/smb.conf
Altere o arquivo /etc/samba/smb.conf conforme abaixo: (troque “DOMINIO” pelo seu domínio e “seu.dominio” pelo seu FQDN)
[global] security = ads realm = seu.dominio password server = ip-do-dc workgroup = DOMINIO winbind refresh tickets = yes allow trusted domains = no idmap config DOMINIO: default = yes idmap config DOMINIO: backend = rid idmap config DOMINIO: readonly = yes idmap config DOMINIO: range= 1000000-10000000 idmap alloc config: range = 1000000-10000000 idmap uid = 1000000-10000000 idmap gid = 1000000-10000000 winbind enum users = yes winbind enum groups = yes template homedir = /home/%U template shell = /bin/bash client use spnego = yes client ntlmv2 auth = yes encrypt passwords = yes winbind use default domain = yes restrict anonymous = 2 domain master = no local master = no preferred master = no os level = 0
Aqui você também acrescentar outros parâmetros como a lixeira do samba, full audit, obviamente os compartilhamentos, impressoras etc. Porém estes parâmetros acima são apenas o necessário para a autenticação. Salve e feche o arquivo. Vamos editar os módulos do PAM:
$ sudo nano /etc/pam.d/common-account
O arquivo /etc/pam.d/common-account deve conter somente as linhas:
account sufficient pam_winbind.so account required pam_unix.so
Salve e feche o arquivo.
$ sudo nano /etc/pam.d/common-auth
O arquivo /etc/pam.d/common-auth deve conter somente as linhas:
auth required pam_listfile.so item=user sense=allow file=/etc/system_users onerr=fail auth sufficient pam_winbind.so auth sufficient pam_unix.so nullok_secure use_first_pass
Salve e feche o arquivo.
$ sudo nano /etc/pam.d/common-session
No arquivo /etc/pam.d/common-session deve conter somente as linhas:
session required pam_mkhomedir.so umask=0022 skel=/etc/skel session required pam_unix.so
Salve e feche o arquivo.
Crie o arquivo /etc/system_users e coloque os usuários, um em cada linha, que deseja permitir logon no computador. NÃO ESQUEÇA DE SEUS USUÁRIOS LOCAIS.
$ sudo touch /etc/system_users
$ sudo nano /etc/system_users
Depois de adicionados os usuários, salve e feche o arquivo. Crie o diretório que conterá o home dos usuários do domínio:
$ sudo mkdir /home/DOMINIO
4 – Adicione o computador ao domínio com o comando:
net ads join -U usuario_com_permissao_adicionar_computador_membro_de_dominio
5 – Reinicie os serviços:
$ sudo /etc/init.d/samba restart
$ sudo /etc/init.d/winbind restart
$ sudo /etc/init.d/ssh restart
Se você por acaso adicionou usuários do domínio para acessar o servidor faça o teste:
ssh usuario_do_dominio@_seu_servidor
(se por acaso você usar uma porta diferente da 22 especifique com o parâmetro -p porta_do_ssh) Agora ao criar as permissões no seu domínio Active Directory elas se refletirão diretamente no seu servidor samba. Por exemplo: Temos dois usuarios: maria e jose pertencentes ao grupo financeiro No seu servidor samba basta configurar as permissões utilizando dos parâmetros usados no seu dominio. Um exemplo de compartilhamento seria:
[financeiro] path = /departamentos/financeiro writable = yes browseable = yes create mask = 0770 directory mask = 0770
Assim se maria e jose pertencerem ao grupo financeiro, eles poderão além do dono da pasta acessar e criar arquivos e diretórios dentro do compartilhamento. Para configurar as permissões locais nos diretórios:
$ sudo chgrp financeiro /departamentos/financeiro -R
$ sudo chmod 770 /departamentos/financeiro -R
Problema encontrado: Quando o servidor reinicia, ele não atualiza mais os usuários e grupos para que possa ser efetuada a atutenticação. Para isso foi necessário criar uma keytab e um script para regerar o ticket do kerberos na inicialização. Veja como realizar aqui: http://va.mu/codQ
Está feito. Logicamente se trata de um exemplo. Cada cenário possui suas necessidades e o Administador deve ser responsável pelo ambiente de sua rede. Espero ter sido útil neste artigo.
Update1: resolvendo problema de sincronismo de horário;
Update2: resolvendo problema de quando os usuários tentam acessar os compartilhamentos, ficam num loop eterno digitando seu login e senha.
poderia disponibilizar esse script.
Problema encontrado: Quando o servidor reinicia, ele não atualiza mais os usuários e grupos para que possa ser efetuada a atutenticação. Para isso foi necessário criar uma keytab e um script para regerar o ticket do kerberos na inicialização. Veja como realizar aqui: http://va.mu/codQ
Está feito. Logicamente se trata de um exemplo. Cada cenário possui suas necessidades e o Administador deve ser responsável pelo ambiente de sua rede. Espero ter sido útil neste artigo.