Instalando e Configurando Samba com autenticação em AD no Debian Squeeze
Qual a ideia principal desse HOW TO demostrar a instalação do samba e configurar ele para trabalhar integrado com o AD, pois geralmente trabalhamos com ambientes heterogéneos ou seja, trabalhando com um ambiente multi-plataforma e é o que eu vou mostrar nesse HOW TO. OBS: Não vou mostrar como criar um grupo e inserir usuários no AD
Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.
Vamos primeiro setar essas duas variáveis do ambiente para não ficar nos questionando sobre a configuração inicial dos pacotes por que vamos efetuar todas manualmente.
export DEBIAN_PRIORITY=critical export DEBIAN_FRONTEND=noninteractive
Agora vamos fazer a instalação dos pacotes necessários.
aptitude update && aptitude dist-upgrade -y aptitude install -y samba samba-common smbclient winbind krb5-config libpam-krb5 cifs-utils
Agora vamos voltar as variáveis do sistema ao normal
unset DEBIAN_PRIORITY unset DEBIAN_FRONTEND
Agora vamos efetuar backup do resolv.conf
cp -Rfa /etc/resolv.conf{,.bkp}
Agora vamos configurar o /etc/resolv.conf deixe ele como no exemplo
#Domínio e Ip do servidor Windows Server 2008 search douglasqsantos.com.br nameserver 192.168.0.254
Agora vamos testar o nslookup
nslookup douglasqsantos.com.br Server: 192.168.0.254 Address: 192.168.0.254#53 Name: douglasqsantos.com.br Address: 192.168.0.254
Agora vamos efetuar o ajuste do relógio dos sistema
ntpdate -u ntp.usp.br 28 Jul 12:02:01 ntpdate[14281]: adjust time server 143.107.255.15 offset 0.034858 sec
Agora vamos fazer backup do arquivo de configuração do cliente kerberos
cp -Rfa /etc/krb5.conf{,.bkp}
Agora vamos configurar o arquivo /etc/krb5.conf do cliente kerberos que vai gerenciar os ticktes das senhas
vim /etc/krb5.conf [libdefaults] default_realm = douglasqsantos.com.br krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } } fcc-mit-ticketflags = true [realms] douglasqsantos.com.br = { kdc = 192.168.0.254 admin_server = 192.168.0.254:749 default_server = 192.168.0.254 } [domain_realm] .douglasqsantos.com.br=douglasqsantos.com.br douglasqsantos.com.br=douglasqsantos.com.br [login] krb4_convert = true krb4_get_tickets = false [kdc] profile = /etc/krb5kdc/kdc.conf [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false } [logging] default = file:/var/log/krb5libs.log kdc = file:/var/log/krb5kdc.log admin_server = file:/var/log/kadmind.log
Agora vamos acertar o arquivo /etc/security/limits.conf para não ficar mostrando erro no samba
vim /etc/security/limits.conf #colocar no final do arquivo root hard nofile 131072 root soft nofile 65536 mioutente hard nofile 32768 mioutente soft nofile 16384
Agora vamos fazer um backup do arquivo de configuração do samba
cp -Rfa /etc/samba/smb.conf{,.bkp}
Agora vamos a configuração do samba /etc/samba/smb.conf deixe o arquivo como no exemplo
vim /etc/samba/smb.conf [global] workgroup = DOUGLASQSANTOS realm = douglasqsantos.com.br server string = Samba Server security = ADS auth methods = winbind password server = 192.168.0.254 log level = 1 log file = /var/log/samba/samba.log log file = /var/log/samba/%D.%U.%m.log max log size = 1000 follow symlinks = yes socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 getwd cache = yes dead time = 15 wide links = no debug level = 0 acl compatibility = Auto aio read size = 16384 max xmit = 65535 read raw = no write raw = no large readwrite = yes strict locking = yes oplocks = yes level2 oplocks = yes load printers = No printcap name = cups disable spoolss = Yes guest account = nobody local master = No domain master = No idmap uid = 10000-30000 idmap gid = 10000-30000 winbind cache time = 15 winbind enum users = Yes winbind enum groups = Yes winbind use default domain = Yes #Arquivos proibidos em qualquer compartilhamento veto files = /*.mp3/*.mp4/*.wma/*.avi/*.divx/*.mpg/*.mpeg/*.rmvb/*.wmv/*.scr/*.inf/*.ogg/*.pif vfs objects = full_audit, recycle #Auditoria full_audit:facility = LOCAL5 full_audit:priority = NOTICE full_audit:success = write, unlink, rename, mkdir, rmdir, chmod, chown full_audit:prefix = %P|%U|%I|%m full_audit:failure = none #Controle da Lixeira recycle:facility = LOCAL1 recycle:priority = NOTICE recycle:maxsize = 0 recycle:repository = .recycle/%U recycle:directory_mode = 0777 recycle:subdir_mode = 0777 recycle:keeptree = True recycle:touch = False recycle:maxsize = 0 recycle:versions = True recycle:noversions = .doc|.xls|.ppt|.pdf recycle:exclude = *.tmp, *.temp, *.log, *.ldb, *.o, *.obj, ~*.*, *.bak, *.iso recycle:exclude_dir = tmp, temp, cache [programas] path = /srv/programas browsable = yes writable = yes public = no guest ok = no create mask = 0666 directory mask = 0777 force create mode = 0644 force directory mode = 0775 locking = no vfs objects = recycle, full_audit #force user = douglas #force group = @"%D\ti-admin" valid users = @"%D\ti-admin", @"%D\ti-estagiarios"
Agora vamos configurar o rsyslog para gerenciar os logs de auditoria do samba no arquivo /etc/rsyslog.conf
echo "local5.notice /var/log/samba/auditoria.log" >> /etc/rsyslog.conf
Agora já podemos reiniciar o rsyslog
/etc/init.d/rsyslog restart
Agora vamos criar os diretórios dos compartilhamentos e acertar as permissões
Tenho que deixar as permissões iniciais como 777 para que o sistema consiga criar as pastas iniciais.
mkdir -p /srv/programas chmod 777 /srv/programas
No samba criamos 1 compartilhamento para os programas e este esta atribuído permissão para o grupo %D\ti-admins e %D\ti-estagiarios a variável %D vai ser o domínio
Então temos que criar esse grupo admins no AD caso não exista e atribuir usuários a ele para que possamos acessar esse compartilhamento, este compartilhamento criei somente para exemplificar como vai ser criado compartilhamentos usando grupos do AD
Agora vamos acertar o arquivo de inicialização do winbind /etc/init.d/winbind para ele não ficar fazendo cache das consultas no AD
#linha 36 deixar como abaixo start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- no-caching #\$WINBINDD_OPTS"
Vamos fazer um backup do arquivo /etc/nsswitch.conf
cp /etc/nsswitch.conf{,.bkp}
Agora temos que acertar o arquivo /etc/nsswitch.conf que controla aonde vai ser consultado usuários e senhas deixe o arquivo como abaixo.
passwd: compat winbind group: compat winbind shadow: compat hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
Agora vamos reiniciar o samba e o winbind para eles pegarem a nova configuração
/etc/init.d/samba restart /etc/init.d/winbind restart
Agora temos que inserir a maquina no domínio AD
net ads join douglasqsantos.com.br -U administrador Enter administrador's password: senha Using short domain name -- DOUGLASQSANTOS Joined 'DEBIAN' to realm 'douglasqsantos.com.br'
Agora temos que reiniciar os serviços novamente
/etc/init.d/samba restart /etc/init.d/winbind restart
Agora já podemos testar a conexão do samba com o AD
wbinfo -t checking the trust secret for domain DOUGLASQSANTOS via RPC calls succeeded
Agora vamos checar os grupos que temos no domínio.
wbinfo -g computadores do domínio controladores de domínio administradores de esquema administradores de empresa editores de certificados admins. do domínio usuários do domínio convidados domínio proprietários criadores de diretiva de grupo servidores ras e ias grupo de replicação de senha rodc permitido grupo de replicação de senha rodc negado controladores de domínio somente leitura controladores de domínio de empresa somente leitura dnsadmins dnsupdateproxy
Agora vamos chegar os usuários do domínio
wbinfo -u DEBIAN\nobody DEBIAN\douglas administrador convidado krbtgt douglas
Fazendo backup dos arquivos da pam
cp -Rfa /etc/pam.d{,.bkp}
Vamos agora acertar a pam para que o sistema pegue primeiro o usuário e senha local e depois do AD caso precisarmos utilizar os usuários locais arquivo da pam /etc/pam.d/common-password
vim /etc/pam.d/common-password password sufficient pam_unix.so password requisite pam_krb5.so minimum_uid=1000 password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512 password [success=1 default=ignore] pam_winbind.so use_authtok try_first_pass password requisite pam_deny.so password required pam_permit.so
Outra opção interessante que podemos utilizar é que podemos logar via ssh utilizando os usuários do AD porém temos que fazer mais um acerto na pam em /etc/pam.d/common-session
vim /etc/pam.d/common-session session [default=1] pam_permit.so session requisite pam_deny.so session required pam_permit.so session required pam_unix.so session optional pam_winbind.so session optional pam_mkhomedir.so skel=/etc/skel umask=0027
Agora vou abordar alguns comandos para manipulação dos compartilhamentos
Aqui vamos fazer a listagem o dos compartilhamentos no servidor com o usuário douglas
smbclient -L //192.168.0.253 -U DOUGLASQSANTOS/douglas Enter DOUGLASQSANTOS/douglas's password: senha Domain=[DOUGLASQSANTOS] OS=[Unix] Server=[Samba 3.5.6] Sharename Type Comment --------- ---- ------- IPC$ IPC IPC Service (Samba Server) programas Disk Programas [...] Domain=[DOUGLASQSANTOS] OS=[Unix] Server=[Samba 3.5.6] Server Comment --------- ------- DEBIAN Samba Server Workgroup Master --------- ------- DOUGLASQSANTOS SERVER-PC
Agora vamos logar no servidor samba como se fosse um servidor FTP
smbclient //192.168.0.253/programas -U DOUGLASQSANTOS/douglas Enter DOUGLASQSANTOS/douglas's password: Domain=[DOUGLASQSANTOS] OS=[Unix] Server=[Samba 3.5.6] smb: \>
Agora vamos logar novamente no servidor como se fosse um servidor FTP porem informando a senha no prompt
smbclient //192.168.0.253/programas -U DOUGLASQSANTOS/douglas%senha Domain=[DOUGLASQSANTOS] OS=[Unix] Server=[Samba 3.5.6] smb: \>
Agora vamos efetuar a montagem de um compartilhamento via linha de comando
mkdir /mnt/samba mount.smbfs -o user=DOUGLASQSANTOS/douglas,password=senha //192.168.0.253/programas /mnt/samba
Agora vamos verificar se obtivemos sucesso
df -Th Sist. Arq. Tipo Size Used Avail Use% Montado em /dev/xvda3 xfs 19G 2,6G 17G 14% / tmpfs tmpfs 1003M 0 1003M 0% /lib/init/rw udev tmpfs 990M 80K 990M 1% /dev tmpfs tmpfs 1003M 0 1003M 0% /dev/shm /dev/xvda1 ext3 184M 23M 153M 13% /boot /dev/xvdb1 xfs 400G 59G 342G 15% /srv //192.168.0.253/programas/ cifs 400G 59G 342G 15% /mnt/samba
Podemos efetuar a montagem também da seguinte forma vamos obter o mesmo resultado
mount -t cifs //192.168.0.254/programas /mnt/samba -o user=DOUGLASQSANTOS/douglas,password=senha
Montando no /etc/fstab
//192.168.0.254/programas /mnt/samba cifs auto,credentials=/etc/smbcredentials,workgroup=DOUGLASQSANTOS,gid=douglas,uid=douglas,rw,noserverino 0 0
Agora precisamos criar o smbcredentials para armazenar as informações de usuário e senha
vim /etc/smbcredentials username=douglas password=senha
Agora vamos ajustar as permissões do arquivo
chmod 640 /etc/smbcredentials
Agora pra testar é só executar o seguinte comando
mount -a