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.