| A/I Orange Book (1.0): Un how-to sulla replicazione e distribuzione di una rete resistente di server autogestiti | ||
|---|---|---|
| Indietro | Capitolo 4. Il database degli utenti | Avanti |
Questo che segue è lo schema che definisce le classi e gli attributi utilizzati nel nostro database di esempio, con qualche commento aggiunto per spiegare le varie sezioni:
#
# infra.schema
#
# OIDs di base
objectIdentifier infraOID 1.1
objectIdentifier infraLDAP infraOID:2
objectIdentifier infraAttributeType infraLDAP:1
objectIdentifier infraObjectClass infraLDAP:2
queste sono delle macro che definiscono gli oid per le classi e gli attributi che andiamo a descivere. L'oid 1.1 è utilizzato per test e prove, sarebbe opportuno registare i propri oid per evitare sovrapposizioni con altri elementi.
# abbreviazioni per tipi di dato molto comuni
objectIdentifier String 1.3.6.1.4.1.1466.115.121.1.26
objectIdentifier Boolean 1.3.6.1.4.1.1466.115.121.1.7
objectIdentifier Date 1.3.6.1.4.1.1466.115.121.1.26
objectIdentifier Counter 1.3.6.1.4.1.1466.115.121.1.27
### Attributi
attributetype ( infraAttributeType:7 NAME 'status'
DESC 'Status of an object'
EQUALITY caseIgnoreIA5Match
SYNTAX String SINGLE-VALUE )
l'attributo status è stato introdotto per mantenere nel database LDAP oggetti con stati differenti (ad esempio in fasi diverse della creazione, o per indicare l'obbligatorio cambio di password al primo utilizzo, o per disabilitare un account senza cancellarlo). Tutti i filtri di query che vengono usati per i servizi virtuali contengono una parte che verifica se status è active.
attributetype ( infraAttributeType:1 NAME 'documentRoot'
DESC 'The absolute path to the document root directory'
EQUALITY caseExactIA5Match
SYNTAX String SINGLE-VALUE )
attributetype ( infraAttributeType:2 NAME 'serverAlias'
DESC 'Apache server alias'
EQUALITY caseExactIA5Match
SYNTAX String )
attributetype ( infraAttributeType:3 NAME 'options'
DESC 'Comma separated string of options'
EQUALITY caseExactIA5Match
SYNTAX String SINGLE-VALUE )
attributetype ( infraAttributeType:5 NAME 'alias'
DESC 'apache alias'
EQUALITY caseExactIA5Match
SYNTAX String SINGLE-VALUE )
attributetype ( infraAttributeType:6 NAME 'parentSite'
DESC 'sito a cui si riferisce un alias apache'
EQUALITY caseExactIA5Match
SYNTAX String SINGLE-VALUE )
questi sopra sono attributi creati appositamente per memorizzare valori relativi ai virtual host e sottositi di Apache.
attributetype ( infraAttributeType:8 NAME 'ftpEnabled'
DESC 'Machine enabled to use the network '
EQUALITY caseIgnoreIA5Match
SYNTAX String SINGLE-VALUE )
attributetype ( infraAttributeType:12 NAME 'creationDate'
DESC 'Accont creation date'
EQUALITY caseIgnoreIA5Match
SYNTAX Date SINGLE-VALUE )
attributetype ( infraAttributeType:20 NAME 'dbuser'
DESC 'username of datbase'
EQUALITY caseIgnoreIA5Match
SYNTAX String SINGLE-VALUE )
attributetype ( infraAttributeType:21 NAME 'dbname'
DESC 'database name'
EQUALITY caseIgnoreIA5Match
SYNTAX String SINGLE-VALUE )
attributetype ( infraAttributeType:22 NAME 'clearPassword'
DESC 'cleartext password'
EQUALITY caseExactIA5Match
SYNTAX String SINGLE-VALUE )
questi ultimi tre sono attributi relativi agli oggetti database MySQL. Ovviamente MySQL non è in grado di autenticare gli utenti con LDAP, ma è comunque utile dal punto di vista amministrativo mantenere questi dati nel database (perlomeno possiamo sapere facilmente a quale utente fanno riferimento).
### Classi
objectclass ( infraObjectClass:1 NAME 'infraObject'
SUP top ABSTRACT
DESC 'Basic administrable object'
MAY ( creationDate $ host $ status )
)
questa è la classe base da cui poi derivano tutti gli oggetti che corrispondono ai servizi virtuali; in questo modo è possibile avere un set di attributi comuni a tutti questi oggetti (come ad esempio degli attributi relativi alla gestione, oppure - vedi host - si può specificare su quale macchina è basato il servizio).
objectclass ( infraObjectClass:2 NAME 'virtualHost'
SUP infraObject STRUCTURAL
DESC 'Apache virtual host'
MUST ( documentRoot $ cn $ status )
MAY ( serverAlias $ emailAddress $ options )
)
objectclass ( infraObjectClass:3 NAME 'virtualMailUser'
SUP infraObject STRUCTURAL
DESC 'Virtual mail user'
MUST ( mail )
MAY ( mailMessageStore $ userPassword $
mailAlternateAddress $ mailForwardingAddress $
gidNumber $ uidNumber )
)
objectclass ( infraObjectClass:4 NAME 'subSite'
SUP infraObject STRUCTURAL
DESC 'Apache sub-directory of our main sites'
MUST ( alias $ parentSite $ documentRoot )
)
objectclass ( infraObjectClass:8 NAME 'dataBase'
SUP infraObject STRUCTURAL
DESC 'MySQL database info'
MUST ( dbname )
MAY ( dbuser $ clearPassword )
)
objectclass ( infraObjectClass:10 NAME 'ftpAccount'
SUP infraObject AUXILIARY
DESC 'an FTP account'
MUST ( ftpEnabled )
)
queste sono le classi corrispondenti ai vari servizi virtuali. L'unica eccezione è l'oggetto ftpAccount, definito come una classe "aggiuntiva" a shadowAccount, di modo che il server FTP si possa autenticare tramite PAM; in definitiva queste però non sono differenze importanti dato che comunque vengono nascoste dal software di gestione.