Mini Roteiro - Samba integrado ao LDAP Procedimento de Instalação e configuração Procedimento baseado em DEBIAN, pode ser adaptado facilmente para outras distribuições. autor: e-mail: André Alexandre Gaio aagaio@linwork.com.br -------==== Baixando, Compilando e instalando o BerkeleyDB ====---------- wget ftp://sleepycat1.inetu.net/releases/db-4.3.21.tar.gz tar xzvf db-4.3.21.tar.gz cd db-4.3.21 cd build_unix../dist/configure --prefix=/usr/local install Colocar o diretorio "/usr/local/lib" no arquivo "/etc/ld.so.conf" ldconfig -------==== Baixando, Compilando e instalando o Cyrus-SASL ====--------- wget ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.20.tar.gz tar xzvf cyrus-sasl-2.1.20.tar.gz cd cyrus-sasl-2.1.20./configure install Criar um link do diretorio "/usr/local/lib/sasl2" para o diretorio "/usr/lib" ln -s /usr/local/lib/sasl2 /usr/lib/ ldconfig ------==== Baixando, Compilando e instalando o OpenLDAP ====-------- wget ftp://ftp.openldap.org/pub/openldap/openldap-stable/openldap-stable- 20040923.tgz tar xzvf openldap-stable-20040923.tgz cd openldap-2.2.17./configure \ --enable-debug \ --enable-syslog \ --enable-fetch \ --with-readline \ --with-threads \ --with-cyrus-sasl \ --with-tls \ --enable-slapd \ --enable-crypt \ --enable-lmpasswd \ --enable-spasswd depend test install Pág. 1/10
-------==== Baixando, Compilando e instalando o SAMBA ====------------- wget http://us1.samba.org/samba/ftp/samba-3.0.9.tar.gz tar -xvzf samba-3.0.9.tar.gz cd samba-3.0.9./configure \ --sbindir=/usr/local/sbin \ --with-configdir=/etc/samba \ --libexecdir=/usr/local/libexec/ \ --with-mandir=/usr/local/man \ --with-logfilebase=/var/log/samba \ --with-ldap \ --with-ldapsam \ --with-winbind \ --with-smbmount \ --with-profiling-data \ --with-quotas \ --with-sys-quotas \ --enable-cups \ --with-quotas \ --with-static-modules= vfs_recycle,vfs_extd_audit,\ vfs_default_quota,vfs_audit,vfs_cap,getdate,vfs_fake_perms \ --with-smbmount \ --with-automount \ --with-tdbsam \ --with-acl-support install -----------==== Migrar as contas do sistema para o LDAP ====----------------- Baixe o MigrationTools em: wget http://www.padl.com/download/migrationtools.tgz tar -xvzf MigrationTools.tgz cd MigrationTools-45 Editar o arquivo migrate_common.ph e configurar as linhas: $NAMINGCONTEXT{'passwd'} = "ou=ti"; $NAMINGCONTEXT{'group'} = "ou=ti"; $DEFAULT_MAIL_DOMAIN = "seudominio.com.br"; $DEFAULT_BASE = "o=sua_organização,c=br"; $DEFAULT_MAIL_HOST = "mail.seudominio.com.br"; Exportar os grupos do sistema para um ldif:./migrate_group.pl /etc/group /tmp/grupos.ldif ldapadd -x -v -D cn=manager,c=br -W -f /tmp/grupos.ldif Exportando os usuários no LDAP:./migrate_passwd.pl /etc/passwd /tmp/usuarios.ldif ldapadd -x -v -D cn=manager,c=br -W -f /root/usuarios.ldif Pág. 2/10
-----------==== Fazendo o sistema autenticar no LDAP ====----------------- Instalar a libnss-ldap: apt-get install libnss-ldap Serão pedidos os dados do servidor LDAP, os quais são: IP: 127.0.0.1 PORTA: 389 BASE DN: c=br ADMINISTRADOR: cn=manager,c=br SENHA: senha Modifique o arquivo /etc/nsswitch.conf e altere as seguinte linhas: passwd: compat ldap group: compat ldap Edite o arquivo /etc/openldap/slapd.conf e acresente a linha abaixo no final dos includes: include /etc/openldap/schema/samba.schema Restarte o openldap a fim de que o novo esquema seja reconhecido pelo mesmo. Crie um link simbólico de /etc/samba apontando para /usr/local/samba/lib. ln -s /usr/local/samba/lib /etc/samba Crie um arquivo smb.conf conforme conteúdo abaixo e coloque-o em /etc/samba. -----------==== Criar o arquivo /etc/samba/smb.conf ====----------------- [global] workgroup = SEU_WORKGROUP netbios name = sambasrv hosts allow = 192.168. printcap name = cups load printers = yes printing = cups print command = lpr -r -P%p -J'%J' %s log file = /var/log/samba/%m.log max log size = 1500 security = user passdb backend = ldapsam:ldap://127.0.0.1/ ldap suffix = c=br ldap admin dn = "cn=manager,c=br" ldap filter = "(&(uid=%u)(objectclass=sambasamaccount))" ldap port = 389 ldap ssl = no ldap user suffix = "ou=ti,o=seu_dominio,c=br" ldap group suffix = "ou=ti,o=seu_dominio,c=br" ldap machine suffix = "ou=ti,o=seu_dominio,c=br" ldap passwd sync = Yes idmap uid = 15000-40000 idmap gid = 15000-40000 nt acl support = yes create mask = 600 directory mask = 700 force directory mode = 700 encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd ldap passwd sync = yes ldap delete dn = yes passwd program = /usr/local/sbin/smbldap-passwd.pl -o %u Pág. 3/10
passwd chat = *new*password* %n\n *new*password* %n\n *successfully* unix password sync = Yes hide dot files = yes add machine script = /usr/local/sbin/smbldap-useradd -w "%u" add user script = /usr/local/sbin/smbldap-useradd -m "%u" delete user script = /usr/local/sbin/smbldap-userdel "%u" add group script = /usr/local/sbin/smbldap-groupadd -p "%g" delete group script = /usr/local/sbin/smbldap-groupdel "%g" add user to group script = /usr/local/sbin/smbldap-groupmod -x "%u" "%g" dos charset = UTF-8 unix charset = UTF-8 cups server = admin users = @root username map = /etc/samba/smbusers socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 local master = no os level = 64 domain master = yes preferred master = no domain logons = yes logon script = script.bat logon path = \\%L\%U\profile wins support = yes dns proxy = no [netlogon] comment = Network Logon Service path = /home/netlogon guest ok = yes writable = no share modes = no [sysvol] comment = Network Logon Service path = /home/netlogon guest ok = yes writable = no share modes = no [printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = no writable = no printable = yes [teste] comment = Teste path = /home/teste valid users = @staff public = no writable = yes printable = no create mask = 0770 Pág. 4/10
-----------==== Configurando o smbldap-tools ====----------------- wget http://samba.idealx.org/dist/smbldap-tools-0.8.5.tgz tar zxvf smbldap-tools-0.8.5.tgz cd smbldap-tools-0.8.5 cp -a smbldap-* /usr/local/sbin/ mkdir /etc/smbldap-tools/ cp -a smbldap.conf smbldap_bind.conf /etc/smbldap-tools/ chmod 644 /etc/smbldap-tools/smbldap.conf chmod 600 /etc/smbldap-tools/smbldap_bind.conf Editar o /etc/smbldap-tools/smbldap.conf: SID="S-1-5-21-3434180907-2502208406-463015406" slaveldap="127.0.0.1" slaveport="389" masterldap="127.0.0.1" masterport="389" ldaptls="0" verify="" cafile="" clientcert="" clientkey="" suffix="o=sua_organização,c=br" usersdn="ou=ti,${suffix}" computersdn="ou=ti,${suffix}" groupsdn="ou=ti,${suffix}" idmapdn="ou=ti,${suffix}" sambaunixidpooldn="cn=nextfreeunixid,${suffix}" scope="sub" hash_encrypt="ssha" crypt_salt_format="%s" userloginshell="/bin/false" userhome="/home/%u" usergecos="ldap System User" defaultusergid="1000" defaultcomputergid="1000" skeletondir="/etc/skel" defaultmaxpasswordage="60" usersmbhome="\\seu_workgroup\homes\%u" userprofile="\\seu_workgroup\profiles\%u" userhomedrive="h:" userscript="%u.bat" maildomain="seu_domínio.com.br" with_smbpasswd="0" smbpasswd="/usr/bin/smbpasswd" Pág. 5/10
Execute o comando abaixo para obter o SID: net getlocalsid SEU_WORKGROUP Note que ele cria uma entrada automaticamente no ldap, semelhante a esta: dn: sambadomainname=seu_workgroup,o=sua_organização,c=br sambadomainname: SEU_WORKGROUP sambasid: S-1-5-21-3434180907-2502208406-463015406 sambaalgorithmicridbase: 1000 objectclass: sambadomain sambanextuserrid: 31000 sambanextgrouprid: 31001 É também necessário armazenar o password do ldap no secrets, utilize o comando: smbpasswd -w <SENHA> Edite o arquivo /etc/smbldap-tools/smbldap_bind.conf e configure-o da seguinte forma: slavedn="cn=manager,c=br" slavepw="senha" masterdn="cn=manager,c=br" masterpw="senha" Instalar os pacotes: apt-get install perl perl-modules perl-5.6 Copie o arquivo smbldap_tools.pm para o diretório /usr/local/sbin cp -a smbldap_tools.pm /usr/local/sbin/ -----------==== Instalando os módulos do perl ====----------------- wget http://www.cpan.org/modules/by-authors/id/gbarr/convert-asn1-0.14.tar.gz tar zxvf Convert-ASN1-0.18.tar.gz test install wget http://www.cpan.org/modules/by-authors/id/gbarr/authen-sasl-2.08.tar.gz tar zxvf Authen-SASL-2.08.tar.gz test install wget http://www.cpan.org/modules/by-authors/id/gaas/uri-1.35.tar.gz tar zxvf URI-1.35.tar.gz test install Pág. 6/10
wget http://www.cpan.org/modules/by-authors/id/sampo/net_ssleay.pm-1.25.tar.gz tar zxvf Net_SSLeay.pm-1.25.tar.gz test install http://search.cpan.org/cpan/authors/id/b/be/behroozi/io-socket-ssl-0.96.tar.gz tar zxvf IO-Socket-SSL-0.96.tar.gz test install wget http://search.cpan.org/cpan/authors/id/k/kh/khampton/xml-sax-base- 1.04.tar.gz tar zxvf XML-SAX-Base-1.04.tar.gz test install http://search.cpan.org/cpan/authors/id/b/bj/bjkuit/crypt-smbhash-0.12.tar.gz tar zxvf Crypt-SmbHash-0.12.tar.gz test install wget http://www.cpan.org/modules/by-authors/id/gbarr/perl-ldap-0.3202.tar.gz tar zxvf perl-ldap-0.3202.tar.gz test install ou apt-get install perl-ldap Precisamos informar qual será o próximo uid disponível para ele criar os usuários. Salve as seguintes informações em um arquivo chamado nextuid.ldif dn: cn=nextfreeunixid,ou=ti,o=sua_organização,c=br objectclass: inetorgperson objectclass: sambaunixidpool uidnumber: 1000 gidnumber: 1000 cn: NextFreeUnixId sn: NextFreeUnixId Inclua na base: ldapadd -x -v -D cn=manager,c=br -W -f nextuid.ldif Pág. 7/10
------==== Populando a base com os objetos necessários ao Windows ====------ Execute: smbldap-populate Se der algum erro é porquê tais entradas já se encontram na base. ----== Instalando a ferramenta de Administração do LDAP PhpLDAPAdmin ==---- wget http://voxel.dl.sourceforge.net/sourceforge/phpldapadmin/phpldapadmin- 0.9.4b.tar.gz tar zxvf phpldapadmin-0.9.4b.tar.gz mv phpldapadmin-0.9.4b /var/www/htdocs/restrito/adm_ldap cd /var/www/htdocs/restrito/adm_ldap cp config.php.example config.php Instale o pacote do apache: apt-get install apache Edite o arquivo /etc/apache/httpd.conf: Procure pela linha: AllowOverride NONE E substitua por: AllowOverride AuthConfig Reinicie o apache. Edite o config.php: $servers[$i]['host'] = 'localhost'; $servers[$i]['base'] = 'c=br'; $servers[$i]['login_dn'] = 'cn=manager,c=br' Crie no diretório /var/www/htdocs/restrito/adm_ldap o arquivo.htaccess com o conteúdo abaixo: AuthName Área administrativa! Identifique-se: AuthType Basic AuthUserFile /etc/apache/admin_secrets.txt AuthGroupFile /dev/null require valid-user Crie um usuário para administrar o aplicativo: htpasswd -c /etc/apache/admin_secrets.txt admin Faça o teste em: http://localhost/restrito/adm_ldap Pág. 8/10
---------== Crie o script de controle do samba /etc/init.d/samba ==-------- #!/bin/sh # # Script de Parada e início do Samba. # samba_start() { if [ -x /usr/local/sbin/smbd -a -x /usr/local/sbin/nmbd -a -r / etc/samba/smb.conf ]; then echo "Iniciando o Samba..." /usr/local/sbin/smbd -D -s /etc/samba/smb.conf -l /var/log/samba /usr/local/sbin/nmbd -D -s /etc/samba/smb.conf -l /var/log/samba fi } samba_stop() { # killall smbd nmbd killall smbd nmbd } samba_restart() { samba_stop sleep 2 samba_start } case "$1" in 'start') samba_start ;; 'stop') samba_stop ;; 'restart') samba_restart ;; *) samba_start ;; esac ---------== Coloque o script a fim de ser iniciado automaticamente ==-------- chmod 700 /etc/init.d/samba update-rc.d samba defaults Pág. 9/10
---------== Modelo de arquivo ldif com as propriedades dos usuários ==-------- dn: uid=user,ou=ti,o=sua_organização,c=br objectclass: inetorgperson objectclass: posixaccount objectclass: sambasamaccount sn: user uid: user mail: user@seu_domínio.com.br telephonenumber: 55-11-5555-5555 uidnumber: 1000 gidnumber: 100 homedirectory: /home/user loginshell: /bin/false cn: user userpassword: {SSHA}e1NTSEF9U2p5Sm9xM0tDN2p3L09YSE1HcEwrR0JBRldzQW80c2o= sambalogontime: 0 sambalogofftime: 2147483647 sambakickofftime: 2147483647 sambapwdcanchange: 0 sambahomepath: \\sambasrv\user sambahomedrive: H: sambaprofilepath: \\sambasrv\user\profile sambaprimarygroupsid: S-1-5-21-1085031214-764733703-682003330-512 sambasid: S-1-5-21-1085031214-764733703-682003330-2997 sambalmpassword: 8CBA24680BC914C1AAD3B435B51404EE sambaacctflags: [U] sambantpassword: 7EC465C29A86BE7394CFE2C3D612B688 sambapwdlastset: 1095748733 sambapwdmustchange: 1099636733 ---== Crie o índice para a pesquisa do Domain Name do Samba no LDAP ==--- Acrescente a linha abaixo no final de seu arquivo slapd.conf: index sambadomainname eq Derrube o serviço do OpenLDAP e execute: slapindex -v Este procedimento recriará os índices do LDAP e acrescentará o novo índice. OBSERVAÇÃO IMPORTANTE: Este artigo pode ser reproduzido, desde que seja mencionado o autor e o site de orígem do mesmo. Quaisquer observações e/ou sugestões mande-me um email. Espero que seja útil. Boa Sorte! São Paulo, 12 de dezembro de 2004. Pág. 10/10