IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

http://www.likewise.com
http://download.gna.org/smbldap-tools/docs/samba-ldap-howto/#htoc34
Alert.png Aquesta wiki forma part dels materials d'un curs
Curs: SambasobreLDAP, LinuxAdministracioAvancada
Fitxers: Sessio8.pdf
Repositori SVN: https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/SambaSobreLDAP
Usuari: anonymous
Paraula de pas: sense paraula de pas
Autors: Sergi Tur Badenas, Lluís Pérez Vidal

Contingut

ldapsam

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:

  • OpenLDAP
  • Sun One Directory Server
  • Novell eDirectory
  • IBM Tivoli Directory Server
  • Red Hat Directory Server
  • Fedora Directory Server

Configuració de Ldap per suportar Samba

Podeu consultar la secció Configuració de Ldap per suportar Samba de l'article sobre Ldap.

Paràmetres de l'objecte SambaSAMAccount

AtrinutsSambaSAMAccount.png

Exemple d'objectes necessaris al servidor 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]

Exemples en format LDIF

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

Configuració de Samba per treballar amb Ldap

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

Qüestions de seguretat

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

smbldap-tools

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 *

Configuració de smbldap-tools

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:

Configuració dels scripts de Samba amb smbldap-tools

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:

Add machine script i Ldap

É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:

Comprovació per línia d'ordres

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:

  • Afegir el compte de màquina Unix per a aquest "usuari". Els comptes Unix que representen un màquina Windows acaben en $ (p.ex. pcaula20_1$)
  • Afegir un compte d'usuari Samba especial (compte MTA)

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

Comandes

smbldap-groupadd

smbldap-groupdel

smbldap-groupmod

smbldap-groupshow

smbldap-passwd

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...

smbldap-populate

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.

smbldap-useradd

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.

smbldap-userdel

smbldap-userinfo

smbldap-userlist

smbldap-usermod

smbldap-usershow

pdbedit

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!
...

Rendiment del servidor Ldap

Indexs

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:

IndexsLdap.png

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.

Més de 500 usuaris i Ldap...

Cal tenir en compte que per defecte les consultes Ldap tenen una màxim d'objectes de resposta de 500. Consulteu:

Seguretat

No mostrar els hash de Windows a les connexions anònimes de Ldap

Consulteu Ldap#Afegir_camps_a_la_llista_de_camps_que_no_es_poden_ensenyar_amb_una_connexi.C3.B3_an.C3.B2nima

Domain Admins

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

Cache Ldap i nss

nscd

Consulteu nscd

nss-updatedb

Consulteu nss-updatedb

Exemple pas a pas d'instal·lació d'un servidors Samba com a PDC i backend Ldap

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:

  • URI del servidor Ldap: ldap://localhost
  • Distinguished base name (base dn): ou=All,dc=insmontsia,dc=com
  • Ldap version: 3
  • Make local root Database admin: No
  • Does the LDAP database require login?: No
  • Local crypt to use when changing passwords: exop

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

Paràmetres Ldap Samba (sambaAcctFlags, SambaPwdLastSet)

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.

sambaLogonTime

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:

Seguretat

No utilitzar el compte Root DN de Ldap

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

Troubleshooting. Resol·lució de problemes

Evitar que els usuaris puguin canviar la paraula de pas Ldap

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

Apareix el missatge: La vostra contrasenya caduca avui. Voleu canviar-la ara?

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

S'afegeixen dos objectes sambaDomainName al arbre ldap al utilitzar smbldap-tools

$ 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.

Failed to find sambaDomain object to get sambaAlgorithmicRidBase at /usr/share/perl5/smbldap_tools.pm line 1246.

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.

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$"

Failed to search sambaUnixIdPool to get next uidNumber: No such object at /usr/share/perl5/smbldap_tools.pm line 1198

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.


Crear les homes dels usuaris durant el primer login

PAM#Crear_la_home_de_l.27usuari_durant_el_primer_login

sid XXX does not belongs to our domain

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

Failed to issue the StartTLS instruction: Protocol error. Connection to LDAP server failed for the 1 try!

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

Deixa de funcionar pdbedit, afegir màquina al domini... (sambaSID Unable to locate SID) al recuperar copia de seguretat Ldap

$ 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)

Can't call method "get_value" on an undefined value at /usr/sbin/smbldap-useradd line XXX

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.

Vegeu també

Enllaços externs