Instalación do servidor samba. Configuración LDAP

De Manuais Informática - IES San Clemente.
Ir a la navegación Ir a la búsqueda

Introdución

  • Neste apartado abordaremos os pasos necesarios para instalar o servidor Samba e configuralo para que use como base de datos de usuarios o servidor LDAP.
  • Pero en primeiro lugar, teremos que engadir no LDAP o esquema de samba, que define unha serie de atributos que o servidor samba precisará almacenar para as propiedades dos usuarios do dominio Windows.
  • Imos configurar o servidor SAMBA para que use como backend o servizo LDAP.

00Platega U910 server Escenario 04.1.jpg

Instalación do servidor Samba

  • Imos instalar tres paquetes:
    • servidor samba,
    • a documentación
    • utilidades para xestionar os usuarios e grupos de samba no LDAP:
apt-get install samba smbldap-tools winbind smbclient samba-testsuite samba-common-bin samba-common registry-tools libsmbclient libpam-winbind


  • Podemos comprobar que a versión do paquete instalado é a 4.X, aínda que o usaremos en modo de compatibilidade de Samba3:
root@dserver00:~# samba --version
Version 4.X.X-Debian

Configurar o servidor LDAP para servir de base de datos de samba

Incluír o esquema de samba no servidor LDAP

  • Para incluír o esquema no servizo LDAP, precisamos realizar unha serie de pasos:

Copiar o ficheiro samba.schema a /etc/ldap e estudo do mesmo

  • O paquete samba-doc inclúe o esquema de samba para o LDAP en formato schema,
  • Así que, descomprimirémolo a /etc/ldap/schema e converterémolo a formato LDIF para introducir o esquema no LDAP.
  • Descomprimimos o ficheiro co esquema samba:
zcat /usr/share/doc/samba/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
  • Imos ver os objectClass que define:
cat /etc/ldap/schema/samba.schema | grep objectclass
 ## 1.3.6.1.4.1.7165.2.2.x - objectclasses
 ## 1.3.6.1.4.1.7165.2.3.2.x - objectclasses
 ## 1.3.6.1.4.1.7165.4.2.x - objectclasses
 ##   objectclass ( 1.3.6.1.4.1.7165.2.2.XX NAME ....
 ##    <attributetype|objectclass> ( 1.3.6.1.4.1.7165.2.XX.XX NAME ....
 ## The smbPasswordEntry objectclass has been depreciated in favor of the
 ## sambaAccount objectclass
 #objectclass ( 1.3.6.1.4.1.7165.2.2.1 NAME 'smbPasswordEntry' SUP top AUXILIARY
 #objectclass ( 1.3.6.1.4.1.7165.2.2.2 NAME 'sambaAccount' SUP top STRUCTURAL
 #objectclass ( 1.3.6.1.4.1.7165.2.2.3 NAME 'sambaAccount' SUP top AUXILIARY
 objectclass ( 1.3.6.1.4.1.7165.2.2.6 NAME 'sambaSamAccount' SUP top AUXILIARY
 objectclass ( 1.3.6.1.4.1.7165.2.2.4 NAME 'sambaGroupMapping' SUP top AUXILIARY
 objectclass ( 1.3.6.1.4.1.7165.2.2.14 NAME 'sambaTrustPassword' SUP top STRUCTURAL
 objectclass ( 1.3.6.1.4.1.7165.2.2.15 NAME 'sambaTrustedDomainPassword' SUP top STRUCTURAL
 objectclass ( 1.3.6.1.4.1.7165.2.2.5 NAME 'sambaDomain' SUP top STRUCTURAL
 objectclass ( 1.3.6.1.4.1.7165.2.2.7 NAME 'sambaUnixIdPool' SUP top AUXILIARY
 objectclass ( 1.3.6.1.4.1.7165.2.2.8 NAME 'sambaIdmapEntry' SUP top AUXILIARY
 objectclass ( 1.3.6.1.4.1.7165.2.2.9 NAME 'sambaSidEntry' SUP top STRUCTURAL
 objectclass ( 1.3.6.1.4.1.7165.2.2.10 NAME 'sambaConfig' SUP top AUXILIARY
 objectclass ( 1.3.6.1.4.1.7165.2.2.11 NAME 'sambaShare' SUP top STRUCTURAL
 objectclass ( 1.3.6.1.4.1.7165.2.2.12 NAME 'sambaConfigOption' SUP top STRUCTURAL
 ##objectclass ( 1.3.6.1.4.1.7165.2.2.13 NAME 'sambaPrivilege' SUP top AUXILIARY
 objectclass ( 1.3.6.1.4.1.7165.2.2.16 NAME 'sambaTrustedDomain' SUP top STRUCTURAL
  • Observar que hai unhas cantas clases de obxectos comentadas, por evolución nas versións de samba.
  • Por mencionar algunha clase de obxectos: sambaAccount, sambaDomain, sambaShare


  • Os atributos que define son:
cat /etc/ldap/schema/samba.schema | grep attributetype
## 1.3.6.1.4.1.7165.2.1.x - attributetypes
## 1.3.6.1.4.1.7165.2.3.1.x - attributetypes
## 1.3.6.1.4.1.7165.4.1.x - attributetypes
##   attributetype ( 1.3.6.1.4.1.7165.2.1.XX NAME ....
##    <attributetype|objectclass> ( 1.3.6.1.4.1.7165.2.XX.XX NAME ....
#attributetype ( 1.3.6.1.4.1.7165.2.1.1 NAME 'lmPassword'
#attributetype ( 1.3.6.1.4.1.7165.2.1.2 NAME 'ntPassword'
#attributetype ( 1.3.6.1.4.1.7165.2.1.4 NAME 'acctFlags'
#attributetype ( 1.3.6.1.4.1.7165.2.1.3 NAME 'pwdLastSet'
#attributetype ( 1.3.6.1.4.1.7165.2.1.5 NAME 'logonTime'
#attributetype ( 1.3.6.1.4.1.7165.2.1.6 NAME 'logoffTime'
#attributetype ( 1.3.6.1.4.1.7165.2.1.7 NAME 'kickoffTime'
#attributetype ( 1.3.6.1.4.1.7165.2.1.8 NAME 'pwdCanChange'
#attributetype ( 1.3.6.1.4.1.7165.2.1.9 NAME 'pwdMustChange'
#attributetype ( 1.3.6.1.4.1.7165.2.1.10 NAME 'homeDrive'
#attributetype ( 1.3.6.1.4.1.7165.2.1.11 NAME 'scriptPath'
#attributetype ( 1.3.6.1.4.1.7165.2.1.12 NAME 'profilePath'
#attributetype ( 1.3.6.1.4.1.7165.2.1.13 NAME 'userWorkstations'
#attributetype ( 1.3.6.1.4.1.7165.2.1.17 NAME 'smbHome'
#attributetype ( 1.3.6.1.4.1.7165.2.1.18 NAME 'domain'
#attributetype ( 1.3.6.1.4.1.7165.2.1.14 NAME 'rid'
#attributetype ( 1.3.6.1.4.1.7165.2.1.15 NAME 'primaryGroupID'
attributetype ( 1.3.6.1.4.1.7165.2.1.24 NAME 'sambaLMPassword'
attributetype ( 1.3.6.1.4.1.7165.2.1.25 NAME 'sambaNTPassword'
attributetype ( 1.3.6.1.4.1.7165.2.1.26 NAME 'sambaAcctFlags'
attributetype ( 1.3.6.1.4.1.7165.2.1.27 NAME 'sambaPwdLastSet'
attributetype ( 1.3.6.1.4.1.7165.2.1.28 NAME 'sambaPwdCanChange'
attributetype ( 1.3.6.1.4.1.7165.2.1.29 NAME 'sambaPwdMustChange'
attributetype ( 1.3.6.1.4.1.7165.2.1.30 NAME 'sambaLogonTime'
attributetype ( 1.3.6.1.4.1.7165.2.1.31 NAME 'sambaLogoffTime'
attributetype ( 1.3.6.1.4.1.7165.2.1.32 NAME 'sambaKickoffTime'
attributetype ( 1.3.6.1.4.1.7165.2.1.48 NAME 'sambaBadPasswordCount'
attributetype ( 1.3.6.1.4.1.7165.2.1.49 NAME 'sambaBadPasswordTime'
attributetype ( 1.3.6.1.4.1.7165.2.1.55 NAME 'sambaLogonHours'
attributetype ( 1.3.6.1.4.1.7165.2.1.33 NAME 'sambaHomeDrive'
attributetype ( 1.3.6.1.4.1.7165.2.1.34 NAME 'sambaLogonScript'
attributetype ( 1.3.6.1.4.1.7165.2.1.35 NAME 'sambaProfilePath'
attributetype ( 1.3.6.1.4.1.7165.2.1.36 NAME 'sambaUserWorkstations'
attributetype ( 1.3.6.1.4.1.7165.2.1.37 NAME 'sambaHomePath'
attributetype ( 1.3.6.1.4.1.7165.2.1.38 NAME 'sambaDomainName'
attributetype ( 1.3.6.1.4.1.7165.2.1.47 NAME 'sambaMungedDial'
attributetype ( 1.3.6.1.4.1.7165.2.1.54 NAME 'sambaPasswordHistory'
attributetype ( 1.3.6.1.4.1.7165.2.1.20 NAME 'sambaSID'
attributetype ( 1.3.6.1.4.1.7165.2.1.23 NAME 'sambaPrimaryGroupSID'
attributetype ( 1.3.6.1.4.1.7165.2.1.51 NAME 'sambaSIDList'
attributetype ( 1.3.6.1.4.1.7165.2.1.19 NAME 'sambaGroupType'
attributetype ( 1.3.6.1.4.1.7165.2.1.21 NAME 'sambaNextUserRid'
attributetype ( 1.3.6.1.4.1.7165.2.1.22 NAME 'sambaNextGroupRid'
attributetype ( 1.3.6.1.4.1.7165.2.1.39 NAME 'sambaNextRid'
attributetype ( 1.3.6.1.4.1.7165.2.1.40 NAME 'sambaAlgorithmicRidBase'
attributetype ( 1.3.6.1.4.1.7165.2.1.41 NAME 'sambaShareName'
attributetype ( 1.3.6.1.4.1.7165.2.1.42 NAME 'sambaOptionName'
attributetype ( 1.3.6.1.4.1.7165.2.1.43 NAME 'sambaBoolOption'
attributetype ( 1.3.6.1.4.1.7165.2.1.44 NAME 'sambaIntegerOption'
attributetype ( 1.3.6.1.4.1.7165.2.1.45 NAME 'sambaStringOption'
attributetype ( 1.3.6.1.4.1.7165.2.1.46 NAME 'sambaStringListOption'
##attributetype ( 1.3.6.1.4.1.7165.2.1.50 NAME 'sambaPrivName' 
##attributetype ( 1.3.6.1.4.1.7165.2.1.52 NAME 'sambaPrivilegeList'
attributetype ( 1.3.6.1.4.1.7165.2.1.53 NAME 'sambaTrustFlags'
attributetype ( 1.3.6.1.4.1.7165.2.1.58 NAME 'sambaMinPwdLength'
attributetype ( 1.3.6.1.4.1.7165.2.1.59 NAME 'sambaPwdHistoryLength'
attributetype ( 1.3.6.1.4.1.7165.2.1.60 NAME 'sambaLogonToChgPwd'
attributetype ( 1.3.6.1.4.1.7165.2.1.61 NAME 'sambaMaxPwdAge'
attributetype ( 1.3.6.1.4.1.7165.2.1.62 NAME 'sambaMinPwdAge'
attributetype ( 1.3.6.1.4.1.7165.2.1.63 NAME 'sambaLockoutDuration'
attributetype ( 1.3.6.1.4.1.7165.2.1.64 NAME 'sambaLockoutObservationWindow'
attributetype ( 1.3.6.1.4.1.7165.2.1.65 NAME 'sambaLockoutThreshold'
attributetype ( 1.3.6.1.4.1.7165.2.1.66 NAME 'sambaForceLogoff'
attributetype ( 1.3.6.1.4.1.7165.2.1.67 NAME 'sambaRefuseMachinePwdChange'
attributetype ( 1.3.6.1.4.1.7165.2.1.68 NAME 'sambaClearTextPassword'
attributetype ( 1.3.6.1.4.1.7165.2.1.69 NAME 'sambaPreviousClearTextPassword'
attributetype ( 1.3.6.1.4.1.7165.2.1.70 NAME 'sambaTrustType'
attributetype ( 1.3.6.1.4.1.7165.2.1.71 NAME 'sambaTrustAttributes'
attributetype ( 1.3.6.1.4.1.7165.2.1.72 NAME 'sambaTrustDirection'
attributetype ( 1.3.6.1.4.1.7165.2.1.73 NAME 'sambaTrustPartner'
attributetype ( 1.3.6.1.4.1.7165.2.1.74 NAME 'sambaFlatName'
attributetype ( 1.3.6.1.4.1.7165.2.1.75 NAME 'sambaTrustAuthOutgoing'
attributetype ( 1.3.6.1.4.1.7165.2.1.76 NAME 'sambaTrustAuthIncoming'
attributetype ( 1.3.6.1.4.1.7165.2.1.77 NAME 'sambaSecurityIdentifier'
attributetype ( 1.3.6.1.4.1.7165.2.1.78 NAME 'sambaTrustForestTrustInfo'
  • Botarlle un ollo aos distintos atributos, seguro que moitos son familiares.

Transformar o ficheiro samba.schema en formato LDIF

  • Imos agora transformar samba.schema en formato LDIF para poder engadilo no LDAP
  • Creamos o ficheiro schema_convert.conf co seguinte contido:
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/samba.schema


  • Creamos un directorio temporal para almacenar o ficheiros LDIF:
mkdir /tmp/ldif


  • Usamos o comando slaptest para converter o ficheiro de esquema a LDIF:
slaptest -f schema_convert.conf -F /tmp/ldif
  • Podemos ver no directorio temporal todo o que se creou, e entre outros, o ficheiro cn={4}samba.ldif que é o que cargaremos no LDAP.
tree /tmp/ldif
/tmp/ldif
├── cn=config
│   ├── cn=schema
│   │   ├── cn={0}core.ldif
│   │   ├── cn={1}cosine.ldif
│   │   ├── cn={2}inetorgperson.ldif
│   │   ├── cn={3}nis.ldif
│   │   └── cn={4}samba.ldif
│   ├── cn=schema.ldif
│   ├── olcDatabase={0}config.ldif
│   └── olcDatabase={-1}frontend.ldif
└── cn=config.ldif


Cargar o ficheiro LDIF no ldap

  • Temos dúas opcións:
    • Usando o comando ldapadd, precisamos facer uns cambios no ficheiro, pero non hai que reiniciar o servizo.
    • Copiando o ficheiro ldif a /etc/ldap/slapd.d/cn=config/cn=schema, pero hai que reiniciar o servizo ldap.
  • En calquera caso imos facer unha copia do ficheiro ldif a /etc/ldap/schema que é onde tiñamos os outros esquemas e os seus ficheiros ldif asociados, e así témolos todos xuntos.
ls /etc/ldap/schema/
collective.ldif    duaconf.ldif		 misc.ldif	  ppolicy.ldif
collective.schema  duaconf.schema	 misc.schema	  ppolicy.schema
corba.ldif	   dyngroup.ldif	 nis.ldif	  README
corba.schema	   dyngroup.schema	 nis.schema	  samba.schema
core.ldif	   inetorgperson.ldif	 openldap.ldif	  
core.schema	   inetorgperson.schema  openldap.schema
cosine.ldif	   java.ldif		 pmi.ldif
cosine.schema	   java.schema		 pmi.schema
  • Copiamos o ficheiro ao directorio anterior
cp "/tmp/ldif/cn=config/cn=schema/cn={4}samba.ldif" "/etc/ldap/schema/samba.ldif"
  • O ficheiro copiado (/etc/ldap/schema/samba.ldif) precisa que realicemos nel as seguintes modificacións, cambiando estes dous atributos:
dn: cn=samba,cn=schema,cn=config
...
cn: samba


  • e borrando as seguintes liñas que se atopan ao final do ficheiro:
structuralObjectClass: olcSchemaConfig
entryUUID: b53b75ca-083f-102d-9fff-2f64fd123c95
creatorsName: cn=config
createTimestamp: 20080827045234Z
entryCSN: 20080827045234.341425Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20080827045234Z


  • Antes de cargar o LDIF no servizo LDAP imos ver que esquemas están cargados:
tree /etc/ldap
/etc/ldap
├── ldap.conf
├── sasl2
├── schema
│   ├── collective.ldif
...
│   ├── core.ldif
│   ├── core.schema
│   ├── cosine.ldif
│   ├── cosine.schema
...
│   ├── inetorgperson.ldif
│   ├── inetorgperson.schema
...
│   ├── nis.ldif
│   ├── nis.schema
...
│   ├── samba.ldif
│   └── samba.schema
└── slapd.d
    ├── cn=config
    │   ├── cn=module{0}.ldif
    │   ├── cn=schema
    │   │   ├── cn={0}core.ldif
    │   │   ├── cn={1}cosine.ldif
    │   │   ├── cn={2}nis.ldif
    │   │   └── cn={3}inetorgperson.ldif
    │   ├── cn=schema.ldif
    │   ├── olcBackend={0}mdb.ldif
    │   ├── olcDatabase={0}config.ldif
    │   ├── olcDatabase={-1}frontend.ldif
    │   └── olcDatabase={1}mdb.ldif
    └── cn=config.ldif
  • Vemos que en /etc/ldap/slap.d/cn=config/cn=schema están os esquemas que actualmente están cargados no ldap.
  • Tamén o podemos ver consultado o directorio ldap.
ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=schema,cn=config "(objectClass=olcSchemaConfig)" dn
dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config


  • Opción A: cargar o esquema sen reiniciar o servizo: ldapadd
  • Cargamos o ficheiro samba.ldif modificado anteriormente
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/samba.ldif
  adding new entry "cn=samba,cn=schema,cn=config"


  • Comprobación do realizado.
ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=schema,cn=config "(objectClass=olcSchemaConfig)" dn

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: cn={4}samba,cn=schema,cn=config
  • Vemos que en /etc/ldap/slap.d/cn=config/cn=schema está cargado o novo esquema.
tree /etc/ldap
/etc/ldap
├── ldap.conf
├── sasl2
├── schema
│   ├── collective.ldif
...
│   ├── core.ldif
│   ├── core.schema
│   ├── cosine.ldif
│   ├── cosine.schema
...
│   ├── inetorgperson.ldif
│   ├── inetorgperson.schema
...
│   ├── nis.ldif
│   ├── nis.schema
...
│   ├── samba.ldif
│   └── samba.schema
└── slapd.d
    ├── cn=config
    │   ├── cn=module{0}.ldif
    │   ├── cn=schema
    │   │   ├── cn={0}core.ldif
    │   │   ├── cn={1}cosine.ldif
    │   │   ├── cn={2}nis.ldif
    │   │   ├── cn={3}inetorgperson.ldif
    │   │   └── cn={4}samba.ldif
    │   ├── cn=schema.ldif
    │   ├── olcBackend={0}mdb.ldif
    │   ├── olcDatabase={0}config.ldif
    │   ├── olcDatabase={-1}frontend.ldif
    │   └── olcDatabase={1}mdb.ldif
    └── cn=config.ldif


OPCIÓN B: reiniciando o servidor pero sen modificar o ficheiro:

cp "/tmp/ldif/cn=config/cn=schema/cn={4}samba.ldif" "/etc/ldap/slapd.d/cn=config/cn=schema"
chown openldap: '/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}samba.ldif'
service slapd restart

Engadir os índices necesarios para as buscas de samba

  • Neste caso imos engadir un conxunto de campos bastante grande que van ser índices no LDAP, así que os introduciremos nun ficheiro. Introducimos o seguinte contido no ficheiro samba_indices_1.ldif:
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: loginShell eq
olcDbIndex: uniqueMember eq,pres
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq
olcDbIndex: sambaDomainName eq
olcDbIndex: default sub


  • E cargamos os índices no LDAP con ldapadd:
ldapadd -Y EXTERNAL -H ldapi:/// -f samba_indices_1.ldif
 modifying entry "olcDatabase={1}mdb,cn=config"


  • Reemplazamos índices que xa existen. Creamos o ficheiro: samba_indices_2.ldif
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: memberUid eq,pres,sub
  • Aplicamos os cambios no LDAP con ldapadd:
ldapadd -Y EXTERNAL -H ldapi:/// -f samba_indices_2.ldif
 modifying entry "olcDatabase={1}mdb,cn=config"


-- Antonio de Andrés Lema e Carlos Carrión Álvarez