http://www.likewise.com http://download.gna.org/smbldap-tools/docs/samba-ldap-howto/#htoc34
Curs: | SambasobreLDAP, LinuxAdministracioAvancada |
Fitxers: | Sessio8.pdf |
Repositori SVN: | https://[email protected]/svn/iceupc/SambaSobreLDAP |
Usuari: | anonymous |
Paraula de pas: | sense paraula de pas |
Autors: | Sergi Tur Badenas, Lluís Pérez Vidal |
Aquest article descriu com utilitzar un directori Ldap per tal de guardar l'informació de les comptes de domini d'un servidor Samba. Ldapsam és una alternativa als backends smbpasswd i tdbsam.
Cal tenir en compte que els objectius de ldapsam NO són:
Servidors Ldap suportats/coneguts:
Podeu consultar la secció Configuració de Ldap per suportar Samba de l'article sobre Ldap.
És necessari que existeixi un objecte al servidor LDAP que contingui el nom del domini. L'objecte és del tipus sambaDomain i sambaUnixIdPool. Un exemple d'objecte d'aquest tipus en format LDIF:
dn: sambaDomainName=ACACHA,dc=aulalinux,dc=upc,dc=edu objectClass: top objectClass: sambaDomain objectClass: sambaUnixIdPool gidNumber: 1000 sambaDomainName: ACACHA sambaSID: S-1-5-21-969149672-3718547393-15758166 uidNumber: 1000 sambaAlgorithmicRidBase: 1000 sambaForceLogoff: -1 sambaLockoutDuration: 30 sambaLockoutObservationWindow: 30 sambaLockoutThreshold: 0 sambaLogonToChgPwd: 0 sambaMaxPwdAge: -1 sambaMinPwdAge: 0 sambaMinPwdLength: 5 sambaNextRid: 1000 sambaNextUserRid: 1000 sambaPwdHistoryLength: 0 sambaRefuseMachinePwdChange: 0
Un cop configurat Samba per a utilitzar com a backend ldap, es pot observar com s'utilitza es busca aquesta entrada al servidor amb pdbedit (mostrant la informació de debug):
$ pdbedit -d 10 -vL ... smbldap_search_domain_info: Searching for:[(&(objectClass=sambaDomain)(sambaDomainName=ACACHA))] smbldap_search_ext: base => [dc=aulalinux,dc=upc,dc=edu], filter => [(&(objectClass=sambaDomain) (sambaDomainName=ACACHA))], scope => [2]
Exemple de la documentació de Samba:
dn: uid=guest2, ou=People,dc=quenya,dc=org sambaLMPassword: 878D8014606CDA29677A44EFA1353FC7 sambaPwdMustChange: 2147483647 sambaPrimaryGroupSID: S-1-5-21-2447931902-1787058256-3961074038-513 sambaNTPassword: 552902031BEDE9EFAAD3B435B51404EE sambaPwdLastSet: 1010179124 sambaLogonTime: 0 objectClass: sambaSamAccount uid: guest2 sambaKickoffTime: 2147483647 sambaAcctFlags: [UX ] sambaLogoffTime: 2147483647 sambaSID: S-1-5-21-2447931902-1787058256-3961074038-5006 sambaPwdCanChange: 0
Un exemple amb sambaSamAccount i posixAccount ObjectClasses alhora:
dn: uid=gcarter, ou=People,dc=quenya,dc=org sambaLogonTime: 0 displayName: Gerald Carter sambaLMPassword: 552902031BEDE9EFAAD3B435B51404EE sambaPrimaryGroupSID: S-1-5-21-2447931902-1787058256-3961074038-1201 objectClass: posixAccount objectClass: sambaSamAccount sambaAcctFlags: [UX ] userPassword: {crypt}BpM2ej8Rkzogo uid: gcarter uidNumber: 9000 cn: Gerald Carter loginShell: /bin/bash logoffTime: 2147483647 gidNumber: 100 sambaKickoffTime: 2147483647 sambaPwdLastSet: 1010179230 sambaSID: S-1-5-21-2447931902-1787058256-3961074038-5004 homeDirectory: /home/moria/gcarter sambaPwdCanChange: 0 sambaPwdMustChange: 2147483647 sambaNTPassword: 878D8014606CDA29677A44EFA1353FC7
El primer que cal fer és consultar si el Samba que tenim instal·lat té suport per a Ldap:
$ sudo smbd -b | grep LDAP HAVE_LDAP_H HAVE_LDAP HAVE_LDAP_ADD_RESULT_ENTRY HAVE_LDAP_DN2AD_CANONICAL HAVE_LDAP_INIT HAVE_LDAP_INITIALIZE HAVE_LDAP_SET_REBIND_PROC HAVE_LIBLDAP LDAP_SET_REBIND_PROC_ARGS
Un cop ho hem comprovat cal configurar Samba mitjançant el fitxer /etc/samba/smb.conf:
[global] security = user netbios name = NETBIOSNAME workgroup = DOMINI # Admin DN. Cal definir la paraula de pas amb: 'sudo smbpasswd -w parauladepas' # La paraula de pas es guarda al fitxer /var/lib/samba/secrets.tdb ldap admin dn = "cn=admin,dc=aulalinux,dc=ice,dc=upc,dc=edu" # LDAPS: ('off', 'start tls', or 'on' (default)) ldap ssl = start tls passdb backend = ldapsam:ldap://localhost # smbpasswd -x delete the entire dn-entry ldap delete dn = no ldap user suffix = ou=People ldap group suffix = ou=Groups ldap machine suffix = ou=Computers # Trust UNIX account information in LDAP # (see the smb.conf man page for details) # Specify the base DN to use when searching the directory ldap suffix = dc=aulalinux,dc=ice,dc=upc,dc=edu
Aquest fitxer de configuració és un exemple. S'han de modificar els valors per tal que concordin amb la vostra configuració específica.
Finalment cal emmagatzemar la paraula de pas d'accés a Ldap al fitxer /var/lib/samba/secrets.tdb (tfb) utilitzant l'ordre smbpasswd:
$ sudo smbpasswd -w parauladepas
IMPORTANT: Si la paraula de pas conté caràcters especial per a bash cal escapar-los amb la contrabarra
Al servidor Ldap, als objectes sambaSAMAccount hi ha dades confidencials com els atributs SambaLMPassword i SambaNTPassword. Aquest valors estan xifrats però es poden aplicar atacs de força bruta o es poden utilitzar directament per fer-se passar per un altre usuari. Per aquesta raó, les comunicacions entre Samba i Ldap sempre millor que siguin xifrades (NO utilitzar: ldap ssl = off).
També cal evitar que els usuaris no administradors de Ldap puguin consultar els atributs crítics configurant el fitxer /etc/ldap/slapd.conf:
access to attrs=SambaLMPassword,SambaNTPassword by dn="cn=admin,dc=aulalinux,dc=ice,dc=upc,dc=edu" write by * none
Vegeu també Gosa i el paquet goPDC. Tot i que no el recomano...
smldap-tools són una sèrie d'scripts pensats per a gestionar usuaris que estiguin emmagatzemats en un directori Ldap (afegir, modificar i eliminar grups i usuaris) i també hi ha eines que ens poden ajudar en la migració d'un Servidor Windows NT 4.0 a Samba. Utilitza Perl.
Instal·lació:
$ sudo apt-get install smbldap-tools
Comandes:
$ sudo dpkg -L smbldap-tools | grep bin /usr/sbin /usr/sbin/smbldap-groupadd /usr/sbin/smbldap-groupdel /usr/sbin/smbldap-groupmod /usr/sbin/smbldap-groupshow /usr/sbin/smbldap-passwd /usr/sbin/smbldap-populate /usr/sbin/smbldap-useradd /usr/sbin/smbldap-userdel /usr/sbin/smbldap-userinfo /usr/sbin/smbldap-usermod /usr/sbin/smbldap-usershow
Fitxers de configuració:
$ sudo dpkg -L smbldap-tools | grep etc /etc /etc/smbldap-tools
La documentació es troba a la carpeta:
/usr/share/doc/smbldap-tools
Es pot descomprimir tota la documentació amb:
$ cd /usr/share/doc/smbldap-tools $ sudo gunzip *
Copieu els exemples de configuració de la documentació a la carpeta /etc/smbldap-tools:
$ cd /usr/share/doc/smbldap-tools/examples $ sudo gunzip smbldap.conf.gz $ sudo cp /usr/share/doc/smbldap-tools/examples/smbldap.conf /etc/smbldap-tools/ $ sudo cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/
Arreglem els permisos d'aquests fitxers:
$ sudo chmod 0644 /etc/smbldap-tools/smbldap.conf $ sudo chmod 0600 /etc/smbldap-tools/smbldap_bind.conf
Modifiquem els valors de smbldap.conf per fer-los concordar amb el nostre entorn.
NOTA: Si només utilitzem smbldap-tools parcialment, aleshores no caldrà configurar perfectament totes les opcions. M'explico: Si utilitzem una aplicació com Gosa per a gestionar els usuaris Ldap aleshores totes les funcions de modificar, eliminar usuaris o similars no les necessitarem pas. El que si necessitarem és smbldap-tools per a fer la configuració inicial del servidor amb l'ordre populate i per als add machine scripts
Abans de modificar la configuració n'obtenim una copia de referència:
$ sudo cp /etc/smbldap-tools/smbldap.conf /etc/smbldap-tools/smbldap.conf.original
Eliminem els comentaris:
$ cd /etc/smbldap-tools $ sudo bash -c "cat smbldap.conf | grep -i -v '^#\|^$\|^;' > smbldap.conf.backup" $ sudo mv smbldap.conf.backup smbldap.conf
Tindreu quelcom similar a:
$ sudo joe /etc/smbldap-tools/smbldap.conf
SID="S-1-5-21-4205727931-4131263253-1851132061" sambaDomain="AULALINUX" slaveLDAP="127.0.0.1" slavePort="389" masterLDAP="127.0.0.1" masterPort="389" ldapTLS="0" verify="none" cafile="/etc/smbldap-tools/ca.pem" clientcert="/etc/smbldap-tools/smbldap-tools.pem" clientkey="/etc/smbldap-tools/smbldap-tools.key" suffix="dc=aulalinux,dc=ice,dc=upc,dc=edu" usersdn="ou=People,${suffix}" computersdn="ou=Computers,${suffix}" groupsdn="ou=Groups,${suffix}" idmapdn="ou=Idmap,${suffix}" sambaUnixIdPooldn="sambaDomainName=AULALINUX,${suffix}" scope="sub" hash_encrypt="SSHA" crypt_salt_format="%s" userLoginShell="/bin/bash" userHome="/home/%U" userHomeDirectoryMode="700" userGecos="System User" defaultUserGid="513" ...
Per obtenir el SID:
$ sudo net getlocalsid
IMPORTANT: Si esteu creant un nou servidor des de zero el SSID pot ser qualsevol SSID vàlid. Si esteu migrant un servidor existent és molt important mantenir el SSID al antic valor per al que funcioni correctament els comptes de màquina ja existents i altres recursos
També cal configurar el BIND a Ldap. Per això es modificar el fitxer /etc/smbldap-tools/smbldap_bind.conf:
slaveDN="cn=admin,dc=aulalinux,dc=ice,dc=upc,dc=edu" slavePw="parauladepas" masterDN="cn=admin,dc=aulalinux,dc=ice,dc=upc,dc=edu" masterPw="parauladepas"
Observeu la importància de protegir aquest fitxer amb:
$ sudo chmod 0600 /etc/smbldap-tools/smbldap_bind.conf
OPCIONAL. També podem configurar smbldap-tools mitjançant un script de configuració:
$ sudo chmod +x /usr/share/doc/smbldap-tools/configure.pl $ sudo /usr/share/doc/smbldap-tools/configure.pl Use of $# is deprecated at /usr/share/doc/smbldap-tools/configure.pl line 314. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- smbldap-tools script configuration -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Before starting, check . if your samba controller is up and running. . if the domain SID is defined (you can get it with the 'net getlocalsid') . you can leave the configuration using the Crtl-c key combination . empty value can be set with the "." character -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Looking for configuration files... Samba Configuration File Path [/etc/samba/smb.conf] >
Un cop configurat podem fer que smbldap-tools ens generi l'arbre bàsic de Ldap amb:
$ sudo smbldap-populate Populating LDAP directory for domain AULALINUX (S-1-5-21-1708324648-3902790046-514691925) (using builtin directory structure) entry dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry ou=Users,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry ou=Groups,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry ou=Computers,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry ou=Idmap,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry uid=root,ou=Users,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry uid=nobody,ou=Users,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry cn=Domain Admins,ou=Groups,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry cn=Domain Users,ou=Groups,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry cn=Domain Guests,ou=Groups,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry cn=Domain Computers,ou=Groups,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry cn=Administrators,ou=Groups,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry cn=Account Operators,ou=Groups,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry cn=Print Operators,ou=Groups,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry cn=Backup Operators,ou=Groups,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry cn=Replicators,ou=Groups,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. entry sambaDomainName=AULALINUX,dc=aulalinux,dc=ice,dc=upc,dc=edu already exist. Updating it... Please provide a password for the domain root: Changing UNIX and samba passwords for root New password: Retype new password:
El següent és un extracte d'exemple de la part relativa a la configuració de smbldap-tools a Samba al fitxer /etc/samba/smb.conf:
; Do ldap passwd sync ldap passwd sync = Yes passwd program = /usr/sbin/smbldap-passwd %u passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*tokens*updated* add user script = /usr/sbin/smbldap-useradd -m "%u" ldap delete dn = No delete user script = /usr/sbin/smbldap-userdel "%u" add machine script = /usr/sbin/smbldap-useradd -w "%u" add group script = /usr/sbin/smbldap-groupadd -p "%g" delete group script = /usr/sbin/smbldap-groupdel "%g" add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g" delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g" set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"
Podeu trobar un exemple complet de fitxer smb.conf a la documentació:
/usr/share/doc/smbldap-tools/examples/smb.conf
Recursos:
És important tenir en compte que si posem el que és típic a add machine script:
add machine script = /usr/sbin/useradd -c Machine -d /nonexistent -s /bin/false %u
L'usuari de compte de màquina de Unix es crearà en local, és a dir, tindreu el usuari de compte de màquina de Samba a Ldap i el compte Unix equivalent en local al PDC. Cal utilitzar un script que crei el compte d'usuari en remot a Ldap.
IMPORTANT: A més podeu tenir problemes de UID ja que els usuaris locals (en aquest cas comptes de màquines) poden agafar un UID que després també s'assignarà a un usuari ldap!
Cal posar:
add machine script = /usr/sbin/smbldap-useradd -w "%u"
A l'objecte:
sambaDomainName=NOMDOMINISAMBA,dc=DOMINI,dc=com
per exemple:
sambaDomainName=INSEBRE,dc=iesebre,dc=com
Al atribut uidNumber és guarda el pròxim uid.
Recursos:
Quan afegim un compte de màquina (aka MTA o Machine Trust Account) al domini amb el sistema On The Fly (és a dir, es crea el compte automàticament al afegir la màquina al domini) realment samba està fent dos feines:
NOTA: Tingueu en compte que tot i que no és habitual, hi han altres mètodes a part del On The Fly, per exemple és pot primer crear el compte de màquina manualment i després amb l'ordre net afegir la màquina al domini
El moment d'afegir una màquina al domini és crític en el sentit de que si dona qualsevol error el Windows us donarà molt poca informació o encara pitjor, us donarà errors que no tindran res a veure amb el que realment esta passant.
NOTA: Consulteu Samba scripts, concretament l'script /etc/samba/scripts/machine_add que és un script propi millorat que utilitza però genera un fitxer de log que us pot ajudar a depurar problemes. També consulteu Protocol per unir-se al domini. Depuració d'errors
Sovint els errors al afegir màquines al domini venen donats per que no es pot crear correctament el compte equivalent unix. Pot ser útilt que proveu d'executar a mà:
/etc/samba/scripts/machine_add -d -a "%a" -I "%I" -m "%m" -M "%M" -w "%u"
On:
Per exemple:
El que acaba fent l'script és executar:
/usr/sbin/smbldap-useradd -w "$W"
TODO: Captura de pantalla de ADS on es mostri una MTA amb només el compte Unix i una correcta amb Unix i Samba.
Amb els scripts que us proposo el fitxer de log és /var/log/samba/add_machine_log i un exemple de porció del fitxer correcte és:
Sep 07 13:09:17 moodle [7056]: Samba machine add script initiated... Sep 07 13:09:17 moodle [7056]: whoami: root Sep 07 13:09:17 moodle [7056]: =WinXP Sep 07 13:09:17 moodle [7056]: Client's architecture =WinXP Sep 07 13:09:17 moodle [7056]: Client's IP address I =192.168.10.217 Sep 07 13:09:17 moodle [7056]: Client's NetBIOS name =dir-tv Sep 07 13:09:17 moodle [7056]: Client's DNS name =192.168.10.217 Sep 07 13:09:17 moodle [7056]: Requested client username = Sep 07 13:09:17 moodle [7056]: Executing /usr/sbin/smbldap-useradd -w "dir-tv$" where: Sep 07 13:09:17 moodle [7056]: %u: dir-tv$ Sep 07 13:09:17 moodle [7056]: User added without errors Sep 13 20:22:17 moodle [16963]: Samba machine add script initiated... Sep 13 20:22:17 moodle [16963]: whoami: root Sep 13 20:22:17 moodle [16963]: =WinXP Sep 13 20:22:17 moodle [16963]: Client's architecture =WinXP Sep 13 20:22:17 moodle [16963]: Client's IP address I =192.168.10.202 Sep 13 20:22:17 moodle [16963]: Client's NetBIOS name =coordfppc05 Sep 13 20:22:17 moodle [16963]: Client's DNS name =192.168.10.202 Sep 13 20:22:17 moodle [16963]: Requested client username = Sep 13 20:22:17 moodle [16963]: Executing /usr/sbin/smbldap-useradd -w "coordfppc05$" where: Sep 13 20:22:17 moodle [16963]: %u: coordfppc05$ Sep 13 20:22:17 moodle [16963]: User added without errors
IMPORTANT: El compte que heu creat com a compte de màquina només Unix no apareixerà a Gosa fins que no sigui també un compte Samba
Permet canviar les paraules de pas del usuaris Ldap des de línia d'ordres. L'ordre la pot utilitzar cada usuari per canviar la seva pròpia paraula de pas:
$ /usr/sbin/smbldap-passwd
Només el superusuari pot canviar paraules de pas d'altres usuaris:
$ /usr/sbin/smbldap-passwd root Only root can specify username
En canvi el següent és correcte:
$ sudo /usr/sbin/smbldap-passwd root
IMPORTANT: Podeu utilitzar generadors de hash (LM hash i NT hash) però cal tenir en compte qu també s'han de canviar altres camps com sambaPWdLastSet o userPassword... no és doncs una operació recomanable de fer pel darrera...
Reexecutar l'script:
$ sudo smbldap-populate Use of qw(...) as parentheses is deprecated at /usr/share/perl5/smbldap_tools.pm line 1423, line 522. Populating LDAP directory for domain INSALFACS (S-1-5-21-3639968310-533092537-190950812) (using builtin directory structure) entry dc=iesalfacs,dc=cat already exist. entry ou=All,dc=iesalfacs,dc=cat already exist. entry ou=Grups,ou=All,dc=iesalfacs,dc=cat already exist. entry ou=GrupsDomini,ou=Grups,ou=All,dc=iesalfacs,dc=cat already exist. entry ou=Sistemes,ou=All,dc=iesalfacs,dc=cat already exist. entry ou=Idmap,dc=iesalfacs,dc=cat already exist. entry sambaDomainName=INSALFACS,dc=iesalfacs,dc=cat already exist. Updating it... entry uid=root,ou=All,dc=iesalfacs,dc=cat already exist. entry uid=nobody,ou=All,dc=iesalfacs,dc=cat already exist. entry cn=Domain Admins,ou=GrupsDomini,ou=Grups,ou=All,dc=iesalfacs,dc=cat already exist. entry cn=Domain Users,ou=GrupsDomini,ou=Grups,ou=All,dc=iesalfacs,dc=cat already exist. entry cn=Domain Guests,ou=GrupsDomini,ou=Grups,ou=All,dc=iesalfacs,dc=cat already exist. entry cn=Domain Computers,ou=GrupsDomini,ou=Grups,ou=All,dc=iesalfacs,dc=cat already exist. entry cn=Administrators,ou=GrupsDomini,ou=Grups,ou=All,dc=iesalfacs,dc=cat already exist. entry cn=Account Operators,ou=GrupsDomini,ou=Grups,ou=All,dc=iesalfacs,dc=cat already exist. entry cn=Print Operators,ou=GrupsDomini,ou=Grups,ou=All,dc=iesalfacs,dc=cat already exist. entry cn=Backup Operators,ou=GrupsDomini,ou=Grups,ou=All,dc=iesalfacs,dc=cat already exist. entry cn=Replicators,ou=GrupsDomini,ou=Grups,ou=All,dc=iesalfacs,dc=cat already exist. Please provide a password for the domain root: Use of qw(...) as parentheses is deprecated at /usr/share/perl5/smbldap_tools.pm line 1423, <DATA> line 522. Changing UNIX and samba passwords for root New password: Retype new password:
Com podeu veure no torna a crear la majoria d'objectes! però si que modifica:
sambaDomainName=INSALFACS,dc=iesalfacs,dc=cat
A més ens permet canviar el password de root de Samba.
Un exemple de com afegir un compte de màquina:
$ sudo /usr/sbin/smbldap-useradd -w "testwindowsxp3$"
IMPORTANT: ES tracta d'un exemple juguet! Per afegir un compte de màquina real cal a més de definir els paràmetres de compte Unix definir els de Samba. Això només ho pot fer Samba i es farà al afegir la màquina al domini no al crear el compte!
El objecte Ldap creat és:
dn: uid=testwindowsxp3$,ou=Sistemes,ou=All,dc=iesalfacs,dc=cat objectClass: account objectClass: posixAccount objectClass: top cn: testwindowsxp3$ gidNumber: 515 homeDirectory: /nonexistent uid: testwindowsxp3$ uidNumber: 1010 description: Computer gecos: Computer loginShell: /bin/false
On el basedn de l'objecte:
ou=Sistemes,ou=All,dc=iesalfacs,dc=cat
S'obté del paràmetres computersdn de la configuració de smbldap-tools, fitxer /etc/smbldap-tools/smbldap.conf:
suffix="dc=iesalfacs,dc=cat" ... computersdn="ou=Sistemes,ou=All,${suffix}"
El gidNumber és:
$ sudo getent group | grep 515 Domain Computers:*:515:
El número d'identificador de grup de màquines del domini. El:
uidNumber: 1010
S'obté del paràmetre de configuració sambaUnixIdPooldn:
sambaDomain="INSALFACS" ... suffix="dc=iesalfacs,dc=cat" ... sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
en el meu cas:
dn: sambaDomainName=INSALFACS,dc=iesalfacs,dc=cat objectClass: sambaDomain objectClass: sambaUnixIdPool gidNumber: 1000 sambaDomainName: INSALFACS sambaSID: S-1-5-21-3639968310-533092537-190950812 uidNumber: 1011 ...
IMPORTANT: Cal vigilar el rang del uidnumber per tal que no es solapin els idnumbers dels usuaris locals (comencen per 1000) amb els de Ldap. Una bona idea es posar un uidnumber inicial igual a 2000 o superior per evitar aquests xocs de númeració
IMPORTANT: Cal executar la comanda com a root per accedir al fitxer de credencials (sempre que seguint les recomanacions de la instal·lació haguiu fet el fitxer només de lectura per a root)
A l'apartat troubleshooting hi ha diversos casos de problemes i com resoldre'ls relacionats amb aquesta comanda.
Es pot utilitzar per gestionar els usuaris de Ldap. Per exemple per afegir un usuari normal
$ sudo pdbedit -a usuari
Si teniu el sistema amb libnss_ldap veureu que enseguida també teniu disponible la compte Unix equivalent:
$ sudo getent passwd usuari
Fixeu-vos que val haver indicat la paraula de pas d'accés a ldap amb l'ordre smbpasswd -w sinó tindreu problemes al connectar:
$ sudo pdbedit - a usuari ... Connection to LDAP server failed for the 2 try!
Per a depurar pot anar bé:
$ sudo pdbedit -d 10 -a usuari
També cal executar l'ordre com a superusuaris o sudo. Si no poseu sudo:
$ pdbedit -a vlaan Failed to open /var/lib/samba/secrets.tdb Failed to open /var/lib/samba/secrets.tdb fetch_ldap_pw: neither ldap secret retrieved! ldap_connect_system: Failed to retrieve password from secrets.tdb Connection to LDAP server failed for the 1 try! Failed to open /var/lib/samba/secrets.tdb Failed to open /var/lib/samba/secrets.tdb fetch_ldap_pw: neither ldap secret retrieved! ldap_connect_system: Failed to retrieve password from secrets.tdb Connection to LDAP server failed for the 2 try! ...
Configuració antiga (fitxer /etc/openldap/slapd.conf):
index objectClass eq index cn pres,sub,eq index sn pres,sub,eq index uid pres,sub,eq index displayName pres,sub,eq index uidNumber eq index gidNumber eq index memberUID eq index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq index default sub
Configuració nova
Amb la configuració cn=config cal posar-ho a olcDbIndex. Ho podeu fer amb Apache Directory Studio:
Els índex són:
cn,sn,sn1,sn2,givenName,displayName,email,mail,irisPersonaluniqueId,carLicense,employeeNumber pres,eq,approx,sub
i
uidnumber,gidnumber,memberUID,sambaSID,sambaPrimaryGroupSID,sambaDomainName,sambaGroupType,sambaSIDList,uniqueMember eq
Un cop indicats els índexs:
$ sudo /etc/init.d/slapd stop (o utilitzar service) Stopping OpenLDAP: slapd.
$ sudo slapindex WARNING! Runnig as root! There's a fair chance slapd will fail to start. Check file permissions! # Correct the ownership of the index files .. $ sudo chown openldap:openldap -R /var/lib/ldap/* $ sudo /etc/init.d/slapd start Starting OpenLDAP: slapd
Vegeu també l'ordre slapindex.
Cal tenir en compte que per defecte les consultes Ldap tenen una màxim d'objectes de resposta de 500. Consulteu:
Consulteu Ldap#Afegir_camps_a_la_llista_de_camps_que_no_es_poden_ensenyar_amb_una_connexi.C3.B3_an.C3.B2nima
TODO Fake domain admins ? enable privileges = yes
Si heu utilitzat smbldap-tools us haurà creat per defecte els grups:
domaccountoperators Netbios Domain Users to manipulate users accounts domadmin Netbios Domain Administrators domaincomputers Netbios Domain Computers accounts domainusers Netbios Domain Users dombackupoperators Netbios Domain Members can bypass file security to back up files domguests Netbios Domain Guests Users lpadmin Administradors de CUPS printoperators Netbios Domain Print Operators Replicators
Però per que apareguin a Gosa, primer cal que la "carpeta ldap" a la que estiguin sigui un objecte Ldap (objectClass) de tipus GosaDepartment, i després aquí dins han d'estar a una Unitat Organitzativa (ou) anomenada grups o el que haguiu definit a Gosa com ou on estan els grups. Aquest ou no apareix com un "carpeta" a Gosa, simplement el que fa és indicar que cal ensenyar aquest grups si anem a l'apartat grups de Gosa i a la unitat organitzacional superior.
Si esteu utilitzant Gosa, el primer és crear l'usuari. Ara l'heu d'afegir als grups que pertoqui, per exemple a domadmin si ha de ser Administrador del domini de Windows.
Ho podeu fer a mà:
Afegiu l'usuari a Ldap:
$ sudo smbldap-useradd -a -m adminuser
Afegiu-lo al grup domainadmins:
$ sudo smbldap-usermod -G +512 adminuser
Configureu els privilegis:
$ sudo net -S AULALINUXPDC -U root rpc rights grant 'AULALINUX\Domain Admins' SeMachineAccountPrivilege
Comproveu els privilegis:
$ net rpc -S AULALINUXPDC rights list accounts -Uroot
Consulteu nscd
Consulteu nss-updatedb
En aquest exemple suposem que ja tenim preparat un servidor Ldap. La gestió d'usuaris es pot fer com desitgeu però en aquest cas suposarem que ja tenim un Gosa configurat. Per tenir aquest entorn llest podeu seguir els passos de:
Comencem doncs...
$ sudo apt-get install samba samba-doc
Ara hem de configurar el servidor Samba per a fer de PDC del domini (més informació a l'article Samba com a PDC concretament Samba_com_a_PDC#Passos_a_seguir._Mini-HOWTO):
Editeu el fitxer de configuració de Samba, però prèviament feu una còpia:
$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.original
Ara editeu el fitxer:
$ sudo joe /etc/samba/smb.conf
per exemple:
IMPORTANT: Canvieu els valors del workgroup, adreces IP, etc pels valors que us convinguin
[global] workgroup = INSMONTSIA netbios name = MOODLE socket options = SO_KEEPALIVE TCP_NODELAY IPTOS_LOWDELAY interfaces = 192.168.0.11/24 192.168.1.7/24 192.168.2.7/24 192.168.3.7/24 192.168.11.7 192.168.130.11/24 192.168.170.11/24 bind interfaces only = Yes time server = Yes server string = Moodle PDC dns proxy = no log level = 0 debug timestamp = yes log file = /var/log/samba/log.%m max log size = 0 syslog = 0 panic action = /usr/share/samba/panic-action %d security = user encrypt passwords = true os level = 99 preferred master = Yes domain master = Yes wins support = Yes name resolve order = wins host bcast local master = yes passdb backend = ldapsam:"ldap://localhost" map to guest = bad user domain logons = yes add machine script = /usr/sbin/smbldap-useradd -w "%u" add user script = /usr/sbin/smbldap-useradd -m "%u" delete user script = /usr/sbin/smbldap-userdel "%u" add group script = /usr/sbin/smbldap-groupadd -p "%g" delete group script = /usr/sbin/smbldap-groupdel "%g" add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g" delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g" set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u" logon path = logon script = logon.bat logon drive = u: usershare allow guests = yes ldap admin dn = cn=admin,dc=insmontsia,dc=com ldap ssl = off ldap delete dn = no ldap suffix = ou=All,dc=insmontsia,dc=com [netlogon] comment = Logon path = /etc/samba/netlogon browseable = No [homes] root preexec = /etc/samba/scripts/mk_sambadir "/home/%u" "%u" "%g" valid users = %S, %D%w%S browseable = no writable = yes printable = no guest ok = no comment = Home Directories create mode = 0755 directory mode = 0755
A l'exemple fixeu-vos que heu de crear la carpeta dels scripts de netlogon:
/etc/samba/netlogon
Consulteu Samba_com_a_PDC#Configuraci.C3.B3_del_Logon
I també
/etc/samba/scripts
amb l'script:
$ cat /etc/samba/scripts/mk_sambadir #!/bin/bash if [ ! -d "$1" ]; then /bin/cp -r /etc/skel "$1" /bin/chmod -R 755 "$1" /bin/chown -R "$2" "$1" /bin/chgrp -R "$3" "$1" fi
Un cop feta la configuració la podeu comprovar (a nivell sintàctic) amb:
$ sudo testparm
Un cop comprovat reinicieu el servidor amb:
$ sudo service smbd restart $ sudo service nmbd restart
Cal indicar la paraula de pas de l'usuari admin de ldap amb:
$ sudo smbpasswd -w Parauladepas
Ara anem a instal·lar i configurar smbldaptools:
$ sudo apt-get install smbldap-tools
Es tracta d'una sèrie d'scripts en perl que ens ajudaran primer a crear l'estructura bàsica de la base de dades Ldap, i posteriorment permetran fer les operacions de gestió de comptes d'usuari Ldap des de la línia d'ordres.
NOTA: Els comptes d'usuari es guardaran a Ldap. Concretament en els mateixos objectes es guardarà al mateix temps l'usuari de Unix i també l'usuari de Samba. Després caldrà configurar els servidors Samba per tal que tant les comptes Unix com les comptes Windows utilitzin com a base de dades centralitzada Ldap
Els scripts perl instal·lats són:
$ dpkg -L smbldap-tools | grep bin /usr/sbin /usr/sbin/smbldap-groupadd /usr/sbin/smbldap-groupdel /usr/sbin/smbldap-groupmod /usr/sbin/smbldap-groupshow /usr/sbin/smbldap-passwd /usr/sbin/smbldap-populate /usr/sbin/smbldap-useradd /usr/sbin/smbldap-userdel /usr/sbin/smbldap-userinfo /usr/sbin/smbldap-userlist /usr/sbin/smbldap-usermod /usr/sbin/smbldap-usershow
La idea dels scripts es substituir les ordres típiques de gestió d'usuaris i grups useradd, usermod, etc. (vegeu LPI 107.1. Gestió d'usuaris i comptes de grup i els fitxers de sistema relacionats) per uns altres scripts que en comptes de modificar les dades dels usuaris en local ho fan a la base de dades Ldap.
IMPORTANT: En molts casos no voldrem utilitzar la línia d'ordres per tal de gestionar els usuaris. Podem per exemple utilitzar Gosa per tal de fer una gestió mixta. utilitzarem només algunes ordres de smbldap-tools com per exemple smbldap-populate per a preparar l'entorn i smbldap-useradd per afegir comptes de màquina (MTA o Machine Trust Account) on the fly (és a dir permetre que usuaris administradors de domini puguin afegir màquines a un domini directament des dels clients Windows). Consulteu Samba_amb_Ldap#Add_machine_script_i_Ldap
Per configurar smbldap-tools:
$ sudo joe /etc/smbldap-tools/smbldap.conf
El sid el podeu obtenir amb:
$ sudo net getlocalsid
i/o
$ sudo net getdomainsid
NOTA: Normalment el SID del PDC correspon amb el SID del domini
Un exemple de fitxer :
$ sudo cat /etc/smbldap-tools/smbldap.conf | grep -v '^#\|^$\|^;' sambaDomain="INSMONTSIA" slaveLDAP="localhost" slavePort="389" masterLDAP="localhost" masterPort="389" ldapTLS="0" ldapSSL="0" verify="require" cafile="/etc/smbldap-tools/ca.pem" clientcert="/etc/smbldap-tools/smbldap-tools.iallanis.info.pem" clientkey="/etc/smbldap-tools/smbldap-tools.iallanis.info.key" suffix="ou=All,dc=insmontsia,dc=com" usersdn="${suffix}" computersdn="ou=Computers,ou=Sistemes,${suffix}" groupsdn="ou=Grups,${suffix}" idmapdn="ou=Idmap,${suffix}" sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}" scope="sub" hash_encrypt="MD5" crypt_salt_format="%s" userLoginShell="/bin/bash" userHome="/home/%U" userHomeDirectoryMode="700" userGecos="System User" defaultUserGid="513" defaultComputerGid="515" skeletonDir="/etc/skel" defaultMaxPasswordAge="45" userSmbHome="\\PDC-SRV\%U" userProfile="\\PDC-SRV\profiles\%U" userHomeDrive="H:" userScript="logon.bat" mailDomain="iallanis.info" with_smbpasswd="0" smbpasswd="/usr/bin/smbpasswd" with_slappasswd="0" slappasswd="/usr/sbin/slappasswd"
Ara cal especificar l'usuari d'administració i la paraula de pas a:
IMPORTANT: Adapteu les dades a la vostra configuració
$ sudo joe /etc/smbldap-tools/smbldap_bind.conf ############################ # Credential Configuration # ############################ # Notes: you can specify two differents configuration if you use a # master ldap for writing access and a slave ldap server for reading access # By default, we will use the same DN (so it will work for standard Samba # release) slaveDN="cn=admin,dc=insmontsia,dc=com" slavePw="PARAULA_DE_PAS" masterDN="cn=admin,dc=insmontsia,dc=com" masterPw="PARAULA_DE_PAS"
Per seguretat feu:
$ sudo chmod 0600 /etc/smbldap-tools/smbldap_bind.conf
Un cop tingeu la configuració prepareu la base de dades Ldap amb:
$ sudo smbldap-populate
Us mostrarà quelcom similar a:
Populating LDAP directory for domain INFOCENTRE (S-1-5-21-4026095555-2225798725-3806780828) (using builtin directory structure) Use of uninitialized value $ou_users in concatenation (.) or string at /usr/sbin/smbldap-populate line 173. entry ou=All,dc=santabarbara,dc=com already exist. entry ou=All,dc=santabarbara,dc=com already exist. adding new entry: ou=Grups,ou=All,dc=santabarbara,dc=com adding new entry: ou=Computers,ou=Sistemes,ou=All,dc=santabarbara,dc=com adding new entry: ou=Idmap,ou=All,dc=santabarbara,dc=com adding new entry: uid=root,ou=All,dc=santabarbara,dc=com adding new entry: uid=nobody,ou=All,dc=santabarbara,dc=com adding new entry: cn=Domain Admins,ou=Grups,ou=All,dc=santabarbara,dc=com adding new entry: cn=Domain Users,ou=Grups,ou=All,dc=santabarbara,dc=com adding new entry: cn=Domain Guests,ou=Grups,ou=All,dc=santabarbara,dc=com adding new entry: cn=Domain Computers,ou=Grups,ou=All,dc=santabarbara,dc=com adding new entry: cn=Administrators,ou=Grups,ou=All,dc=santabarbara,dc=com adding new entry: cn=Account Operators,ou=Grups,ou=All,dc=santabarbara,dc=com adding new entry: cn=Print Operators,ou=Grups,ou=All,dc=santabarbara,dc=com adding new entry: cn=Backup Operators,ou=Grups,ou=All,dc=santabarbara,dc=com adding new entry: cn=Replicators,ou=Grups,ou=All,dc=santabarbara,dc=com entry sambaDomainName=INFOCENTRE,ou=All,dc=santabarbara,dc=com already exist. Updating it... Please provide a password for the domain root: Changing UNIX and samba passwords for root New password: Retype new password:
Ara si feu:
$ sudo pdbedit -vL
Us mostrarà quelcom similar a:
lp_load_ex: refreshing parameters Initialising global parameters rlimit_max: rlimit_max (1024) below minimum Windows limit (16384) params.c:pm_process() - Processing configuration file "/etc/samba/smb.conf" Processing section "[global]" smbldap_search_domain_info: Searching for:[(&(objectClass=sambaDomain)(sambaDomainName=INFOCENTRE))] smbldap_open_connection: connection opened ldap_connect_system: successful connection to the LDAP server smbldap_search_paged: base => [ou=All,dc=santabarbara,dc=com], filter => [(&(uid=*)(objectclass=sambaSamAccount))],scope => [2], pagesize => [1024] smbldap_search_paged: search was successful init_sam_from_ldap: Entry found for user: root --------------- Unix username: root NT username: root Account Flags: [U ] User SID: S-1-5-21-4026095555-2225798725-3806780828-500 Primary Group SID: S-1-5-21-4026095555-2225798725-3806780828-513 Full Name: root Home Directory: \\INFOCENTRESBRB\root HomeDir Drive: H: Logon Script: logon.bat Profile Path: \\INFOCENTRESBRB\profiles\root Domain: INFOCENTRE Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: never Kickoff time: never Password last set: dv, 25 mar 2011 08:04:45 CET Password can change: dv, 25 mar 2011 08:04:45 CET Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF init_sam_from_ldap: Entry found for user: nobody --------------- Unix username: nobody NT username: nobody Account Flags: [NDU ] User SID: S-1-5-21-4026095555-2225798725-3806780828-2998 Primary Group SID: S-1-5-21-4026095555-2225798725-3806780828-513 Full Name: nobody Home Directory: \\INFOCENTRESBRB\nobody HomeDir Drive: H: Logon Script: logon.bat Profile Path: \\INFOCENTRESBRB\profiles\nobody Domain: INFOCENTRE 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 ...
Hauríeu de veure l'usuari root i l'usuari nobody
Si teniu problemes proveu d'augmentar el nivell de debug:
$ sudo pdbedit -d 3 -vL
NOTA: Per exemple si el servidor Ldap no suporta SSL, per defecte Samba intenta fer la connexió per SSL. Cal posar
Podeu comprovar l'usuari de Ldap amb:
$ sudo ldapwhoami -x -D "cn=admin,dc=insmontsia,dc=com" -W
Finalment ara configureu PAM i NSSwitch per tal que el servidor utilitzi com a base de dades d'usuaris no només les locals (fitxers /etc/passwd, /etc/shadow) sinó també el servidor Ldap. Instal·leu:
$ sudo apt-get install ldap-auth-config
I seguiu els assistents (més detalls a Configuració_d'un_client_per_autenticar_amb_Ldap#Configuraci.C3.B3_a_Ubuntu.2C_noves_versions...). Hem respost:
El fitxer de configuració resultant és:
$ cat /etc/ldap.conf | grep -v '^#\|^$\|^;' base ou=All,dc=insmontsia,dc=com uri ldap://localhost ldap_version 3 pam_password exop
Podeu tornar a configurar amb (ho necessitareu per veure l'opció exop!):
$ sudo dpkg-reconfigure ldap-auth-config
L'últim pas es modificat el fitxer /etc/nsswitch.conf:
$ sudo joe /etc/nsswitch.conf # /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: compat ldap group: compat ldap shadow: compat ldap hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
Comproveu que funciona amb:
$ sudo getent passwd $ sudo getent group
IMPORTANT: És important forçar a la vostra aplicació de gestió d'usuaris, per exemple Gosa a que no utilitzi UIDs locals, sinó pot passar que hi hagin usuaris remots a Ldap amb el UID d'un usuari local:
$ id sergitur uid=1001(sergi) gid=1001(sergi) grupos=1001(sergi)
Finalment seguiu els passos de:
PAM#Crear_la_home_de_l.27usuari_durant_el_primer_login
sambaAcctFlags:[W]-Workstation, [U]-User. String of 11 characters surrounded by square brackets [ ] representing account flags such as U (user), W (workstation), X (no password expiration), I (domain trust account), H (home dir required), S (server trust account), and D (disabled). sambaHomeDrive: forces the [homes] mapped to a certain Letter (ex: S:). Refer to the “logon drive”.If empty smb.conf sambaHomePath: your.homes.path. if empty smb.conf [homes] path is used sambaKickoffTime: Specifies the time (UNIX time format) when the user will be locked down and cannot login any longer. If this attribute is omitted, then the account will never expire. Using this attribute together with shadowExpire of the shadowAccount ObjectClass will enable accounts to expire completely on an exact date. sambaLMPassword: Lan Manager Password sambaLogoffTime: sambaLogonScript: your.logon.script. if empty smb.conf netlogon script. sambaLogonTime: sambaNTPassword: Stores the passwords auto. Do not touch sambaPrimaryGroupSID: The primary Group SID auto. Do not touch. sambaProfilePath: The Profile Path. If it is empty taken from smb.conf. Not needed if you do no profiles. sambaPwdCanChange: need to be 0 or 1. 1 user can change password sambaPwdLastSet: counts the last set of password automatically. Used for your password policy. The integer time in seconds since 1970 when the sambaLMPassword and sambaNTPassword attributes were last set. sambaPwdMustChange: You must set to 0 or 1. 0 the user must change his password needs: sambaPwdCanChange =1. On some distributions you also need to, sambaPwdLastSet=0.
Samba doesnt update sambaLogonTime in LDAP when a user login in order to have it set , one can run a script that will do it set up a script /root/update_sambaLogonTime.sh
#!/bin/bash TIMESTAMP=$(date +%s) ldapmodify -x -h localhost -D "cn=Manager,dc=example,dc=com" -y /root/pass-test <<EOF dn: uid=$1,ou=People,dc=example,dc=com changetype: modify replace: sambaLogonTime sambaLogonTime: $TIMESTAMP EOF
now create a pass-test file by running echo with “-n” in order to remove the newline “n” because ldapmodify doesnt not chop it
echo -n "mypassword" > /root/pass-test
now just add a line under [netlogon] in smb.conf
root preexec = /root/update_sambaLogonTime.sh "%u"
Recursos:
TODO: http://download.gna.org/smbldap-tools/docs/samba-ldap-howto/#htoc34
In this HOWTO, we're using the Root DN : the ldap admin dn should be another account than Root DN : you should use another ldap account who should have permissions to write any sambaSAMAccount and some posixAccount attributes.
So if you don't want to use the cn=Manager,dc=idealx,dc=org account anymore, you can use a dedicated account for Samba and another one for the smbldap-tools scripts. The two users were created in section 4.4.2 in the DSA branch : cn=samba,ou=DSA,dc=idealx,dc=org and cn=smbldap-tools,ou=DSA,dc=idealx,dc=org. If the password set for thoses account were respectivly samba and smbldap-tools, you can modify the configuration files as follow (of course, you can use the same account for both samba and smbldap-tools) :
file /etc/opt/IDEALX/smbldap-tools/smbldap_bind.conf
slaveDN="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" slavePw="smbldapsecretpwd" masterDN="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" masterPw="smbldapsecretpwd"
file /etc/samba/smb.conf
ldap admin dn = cn=samba,ou=DSA,dc=idealx,dc=org
don't forget to also set the samba account password in secrets.tdb file :
smbpasswd -w sambasecretpwd
file /etc/openldap/slapd.conf: many access control list must be set : samba user need write access to all samba attributes and some others (uidNumber, gidNumber ...). smbldap-tools must have write access to add or delete new users, groups or computers account nssldap also need write access to unix password attribute (for example if a user want to change his password with the passwd command).
# users can authenticate and change their password access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdLastSet,sambaPwdMustChange by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write by dn="cn=nssldap,ou=DSA,dc=idealx,dc=org" write by self write by anonymous auth by * none # some attributes need to be readable anonymously so that 'id user' can answer correctly access to attrs=objectClass,entry,homeDirectory,uid,uidNumber,gidNumber,memberUid by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write by * read # somme attributes can be writable by users themselves access to attrs=description,telephoneNumber,roomNumber,homePhone,loginShell,gecos,cn,sn,givenname by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write by self write by * read # some attributes need to be writable for samba access to attrs=cn,sambaLMPassword,sambaNTPassword,sambaPwdLastSet,sambaLogonTime,sambaLogoffTime,sambaKickoffTime,sambaPwdCanChange,sambaPwdMustChange,sambaAcctFlags,displayName,sambaHomePath,sambaHomeDrive,sambaLogonScript,sambaProfilePath,description,sambaUserWorkstations,sambaPrimaryGroupSID,sambaDomainName,sambaMungedDial,sambaBadPasswordCount,sambaBadPasswordTime,sambaPasswordHistory,sambaLogonHours,sambaSID,sambaSIDList,sambaTrustFlags,sambaGroupType,sambaNextRid,sambaNextGroupRid,sambaNextUserRid,sambaAlgorithmicRidBase,sambaShareName,sambaOptionName,sambaBoolOption,sambaIntegerOption,sambaStringOption,sambaStringListoption,sambaPrivilegeList by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write by self read by * none # samba need to be able to create the samba domain account access to dn.base="dc=idealx,dc=org" by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write by * none # samba need to be able to create new users account access to dn="ou=Users,dc=idealx,dc=org" by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write by * none # samba need to be able to create new groups account access to dn="ou=Groups,dc=idealx,dc=org" by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write by * none # samba need to be able to create new computers account access to dn="ou=Computers,dc=idealx,dc=org" by dn="cn=samba,ou=DSA,dc=idealx,dc=org" write by dn="cn=smbldap-tools,ou=DSA,dc=idealx,dc=org" write by * none # this can be omitted but we leave it: there could be other branch # in the directory access to * by self read by * none
Abans havia l'opció:
sambaPwdCanChange
però sembla que en noves version de Ldap aquesta opció és obsoleta. Hi ha però un truc que es establir el valor de:
smbPwdLastSet
a un valor de epoch superior a la data actual, per exemple:
2147483647
i aleshores els usuaris no poden canviar la paraula de pas.
NOTA: A Windows es canvia la paraula depas amb Ctrl+Alt+Supr
En anglès el missatge és:
Your Password expires today
En el meu cas era problema de no tenir especificat el camp sambaLogonTime. Es pot posar el valor 0.
Se suposa que ha de portar el valor de l'últim dia que és va fer login però Samba no canvia aquest valor per defecte amb backend ldap. Consulteu sambaLogonTime
$ sudo sudo smbldap-populate ... adding new entry: sambaDomainName=INSMONTSIA,dc=iesmontsia,dc=org adding new entry: sambaDomainName=INSMONTSIA,ou=All,dc=iesmontsia,dc=org ...
Això em passa al indicar un valor de:
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
Diferent al que us mostra la línia anterior (és el valor per defecte). Sembla que l'objecte s'ha de trobar a la base que indiquem com a suffix.
Si us dona l'error:
$ /usr/sbin/smbldap-useradd -w "testwindowsxppr$" Use of qw(...) as parentheses is deprecated at /usr/share/perl5/smbldap_tools.pm line 1423, <DATA> line 522. Failed to find sambaDomain object to get sambaAlgorithmicRidBase at /usr/share/perl5/smbldap_tools.pm line 1246.
Oco amb el codi:
if ($search->count != 1) { die "Failed to find sambaDomain object to get sambaAlgorithmicRidBase"; }
Fixeu-vos que le count és igual a 1, un problema pot ser tenir el objecte repetit més d'un cop a l'arbre!
Cal diferenciar l'error de:
Failed to search sambaUnixIdPool to get next uidNumber: No such object at /usr/share/perl5/smbldap_tools.pm line 1198.
Consulteu més avall per aquest error.
Failed to update uidNumber in sambaUnixIdPool: modifications require authentication at /usr/share/perl5/smbldap_tools.pm line 1221. $ /usr/sbin/smbldap-useradd -w "testwindowsxp$" Use of qw(...) as parentheses is deprecated at /usr/share/perl5/smbldap_tools.pm line 1437, <DATA> line 522. Failed to update uidNumber in sambaUnixIdPool: modifications require authentication at /usr/share/perl5/smbldap_tools.pm line 1221.
El problema està en que per a fer la connexió cal llegir el fitxer:
/etc/smbldap-tools/smbldap_bind.conf
Que per seguretat al contindrà password s'ha posat amb permisos:
$ sudo ls -la /etc/smbldap-tools/smbldap_bind.conf -rw------- 1 root root 128 ago 8 07:46 /etc/smbldap-tools/smbldap_bind.conf
Si executeu la comanda com a superusuari es podrà llegir el fitxers i tot funcionarà correctament:
$ sudo /usr/sbin/smbldap-useradd -w "testwindowsxp1$"
Testejant el log d'un script fer a mida:
$ sudo tail -f /var/log/samba/add_machine_log Aug 07 19:51:46 samba02 [4303]: =WinXP Aug 07 19:51:46 samba02 [4303]: Client's architecture =WinXP Aug 07 19:51:46 samba02 [4303]: Client's IP address I =192.168.50.201 Aug 07 19:51:46 samba02 [4303]: Client's NetBIOS name =testwindowsxp Aug 07 19:51:46 samba02 [4303]: Client's DNS name =192.168.50.201 Aug 07 19:51:46 samba02 [4303]: Requested client username = Aug 07 19:51:46 samba02 [4303]: Executing /usr/sbin/smbldap-useradd -w "testwindowsxp$" where: Aug 07 19:51:46 samba02 [4303]: %u: testwindowsxp$ Aug 07 19:51:46 samba02 [4303]: Use of qw(...) as parentheses is deprecated at /usr/share/perl5/smbldap_tools.pm line 1423, <DATA> line 522. Failed to find sambaDomain object to get sambaAlgorithmicRidBase at /usr/share/perl5/smbldap_tools.pm line 1246.
Si ho executeu directament:
$ /usr/sbin/smbldap-useradd -w "testwindowsxp$" Use of qw(...) as parentheses is deprecated at /usr/share/perl5/smbldap_tools.pm line 1428, <DATA> line 522. Failed to search sambaUnixIdPool to get next uidNumber: No such object at /usr/share/perl5/smbldap_tools.pm line 1198.
En el meu cas l'error estava en la configuració del paràmetre sambaUnixIdPooldn al fitxer /etc/smbldap-tools/smbldap.conf que no era el correcte. Posant:
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
que és el que corresponia tot Ok.
PAM#Crear_la_home_de_l.27usuari_durant_el_primer_login
Normalment és degut a que no coincideixen els SID dels usuaris de la base de dades (en el meu cas era Ldap) i el SID del domini al que estem. En el meu cas em va passar al executar per segon cop l'ordre smbldap-populate sobre una base de dades Ldap ja configurada. Aquesta última ordre em va canviar el SID del domini (no pas el nom!) i per això aquest errors.
Vegeu també:
net setlocalsid
Si després de configurar Samba per tal utilitzar com a backend un servidor Ldap us dona el següent error:
$ sudo pdbedit -vL Failed to issue the StartTLS instruction: Protocol error Connection to LDAP server failed for the 1 try!
Potser que el vostre servidor LDAP no estigui configurat per tal de suportar connexions segures? Consulteu Ldap#Configuraci.C3.B3_del_servidor per configurar el servidor Ldap o desactiveu l'accés mitjançant SSL a la configuració de Samba (fitxer /etc/samba/smb.conf):
ldap ssl = off
I reinicieu Samba:
$ sudo /etc/init.d/samba restart
$ sudo pdbedit -L -d 5 ... ldapsam_getsampwsid: Unable to locate SID [S-1-5-21-4045161930-1404234508-1517741366-513] count=0 ...
IMPORTANT: noteu que per veure l'error activem el mode debug a nivell 5, és a dir que si no pseu el debug l'ordre simplement petava per un error malloc memory leak....
Als Release notes:
http://www.samba.org/samba/history/samba-3.0.23.html
Informaven d'aquest canvi!
Per crear els índexs correctament (tant els imprescindibles per no tenir aquest error com altres per tal de millorar el rendiment) consulteu:
Samba_i_Ldap#Rendiment_del_servidor_Ldap
En el meu cas l'error va esdevenir al haver de recuperar una copia de seguretat del servidor Ldap. La copia era un slapcat i sembla ser que no conté els índexs (no només cal tenir la configuració si no que s'han de crear amb slapindex)
Diuen que cal mirar:
* does the default group defined in smbldap.conf exist (defaultUserGid="513") ? * does the NT "Domain Users" group mapped to a unix group of rid 513 (see option -r of smbldap-groupadd and smbldap-groupmod to set a rid) ?
Però en el meu cas no és cap de les dos opcions. El problema era que la configuració del fitxer no era la correcte:
$ sudo joe /etc/smbldap-tools/smbldap.conf
El paràmetre groupsdn no apuntava a on toca.
Havia d'apuntar a:
groupsdn="ou=Grups,${suffix}"
Que es on hem posat els grups al nostre servidor. Al apuntar malament no podia trobar el default grup.