|
| Task: | Account management technology |
| Group: | neilb,sxw,ktd |
| Stage: | 1 |
A system for creating and managing user accounts is required. This will presumably interface to the Divisional Database, the LDAP infrastructure and the Kerberos infrastructure.
The Account Management Procedures task, and others, need to be able to interface with the various database (InfDB), directory (LDAP) and authentication (Kerberos) services. This task will provide the interface(s)to these technologies.
Some feel for what pseudo accounts are used for. Currently there are 5 types of pseudo account have been identified:
Update 11/5/2002
The above 5 cases boil down to just 2(ish) type of pseudo user:
It was agreed at the DICE meeting of 30/4/2002, that the LCFG auth component would manage the creation of the local-to-machine system pseudo users. Their UIDs and GIDs will be in the sub-1000 range. Their usernames still need to be registered with the EUCS, so as to exclude that UUN from ever being used by a real person, though other departments may also choose to use that UUN internally. The database, LDAP, kerberos do not need to know about these accounts.
For all other types of pseudo users, the AMT and AMP tools/procedures would be used to manage/create the account. These users require a database and LDAP entry, some will also require a kerberos principal. They also require that their UUN be registered with the EUCS, in the case of a test user like 'inftest' this UUN would only be used by us. We may even ask the EUCS to give 'inftest' access to the student or staff mail services. Other users, like the shared group account 'cs1' or 'aisubmit', would just have their usernames registered with the EUCS's UUN exclusion list, so that no real user would be given these usernames. It would be OK though for other departments to use these usernames internally.
For users like 'cs1' or 'aisubmit' they would not need a kerberos principal (at least while we don't have a kerberised filesystem), and would probably have the primary group pseudo(10001). Test accounts like 'inftest' would require a kerberos principal and would probably be GID people(10000), so that to all intents and purposes they appear as real people.
| What | Master | Copy | Comment |
|---|---|---|---|
| username | DB | LDAP | |
| Firstname | DB | LDAP | Can be combined with Lastname to give the GCOS. |
| Lastname | DB | LDAP | |
| UID | DB | LDAP | |
| GID | LDAP | ||
| DB | LDAP | Ideally it would mastered from LDAP, so that users could change their own entry, but too much depends on the DB one. | |
| Homedir | LDAP | eg /home/neilb
| |
| Home Partition | LDAP | eg u8 or twain9 | |
| Home Subdir | LDAP | Sub-directory within Home Partition eg staff/neilb or just s12345678. | |
| Primary Roles | DB | LDAP | Not stored as a role in the DB, but used to generate the Primary roles stored in LDAP. |
| Secondary Roles | LDAP | "System" roles, eg beowulf-user. | |
| Shell | LDAP | ||
| Passwd | Kerberos | ||
| Kerb Principal | Kerberos | LDAP | |
| Active/Disabled flag | LDAP | This may not be the way to do this. | |
| Disk quotas | LDAP | Or is this derived from role information | |
| Print quota | LDAP | Or is this derived from role information |
Currently, of the shared information between DB and LDAP, these fields would (or would not) be automatic.
| Field | Auto update |
|---|---|
| Lastname | yes |
| Firstname | yes |
| Informal Name | yes |
| Email address | yes |
| Numeric UID | no |
| Username | no |
The authorisation task has confirmed that some flag associated with the user will indicate whether the account is enabled or disabled, but the authorisation system won't use this directly. Instead it will modify the primary roles associated with the user, and its these roles (or lack of) that will restrict access to the system.
The 3 sites still use their existing underlying account generation scripts/procedures to physically create the home directories, passwd entries, etc, but some time ago it was decided to rationalise the username and uid name spaces. The database was seen as the central place to store this information. When accgen script is run with a list of users (or a class identifier), it interfaces with the DB to extract any already allocated username/uids. If they are not already allocated, then new ones are generated and fed back into the DB, so that other sites running accgen will use the now allocated username/uid. The output from accgen is then fed into the existing site's account generation scripts.
Account object. This object is
already taking shape in the dice-accntmgr package, in
the DICE CVS repository.
Account
object and a collection of Perl modules providing an
AccountManager object which will retrieve and update
Account objects. However, we will also provide at least
one command line tool written using these modules as a proof of
concept for the AMP task.
- an overview of what subsequent changes could be made if, for
example, anticipated technologies emerge.
Simon has mentioned that Kerberos and LDAP may merge in some way. So abstracting our interfaces would mean that we could plan for this change.
It's been noted that perhaps some form of web interface for users, to allow them to specify certain account details prior to their account being created could be implemented. See the Account Procedures Task, Possible Changes section for some more details. The significance to this task would be that we would provide some tool to be able to take this submitted data and create the account there and then when the user turns up. One issue may be the allocation of a UUN, it would be nice to have it on the web form, but do we want/can we allocate a UUN for a user that may not turn up (for whatever reason).
It's been suggested that there's a possibility that we may use the EUCS's Kerberos authentication realm for our authentication. This would mean that we either have to rely on the EUCS to create/modify kerberos credentials for users. Or some joint technology is developed that will allow the EUCS to devolve some of that management to us. The EUCS Kerberos will not be ready for next academic year, so this definitely won't happen for stage 1.
- a indication of when review of the revised strategy/policy might be
needed.
Initial coding has begun, and the database access module is nearly
complete. However, some decisions are still to be made about
what information is to be stored and how before other modules (mainly
LDAP) can proceed. We also still need to finalise the
Account object, though we have agreed the data it will
contain.
| Attribute | Description | ObjectClass |
|---|---|---|
| uid | Username eg neilb, s1234567 | PA |
| cn | Common Name eg Neil Brown | PA |
| gecos | GECOS field, probably the same as cn eg Neil Brown | PA |
| givenName | First name eg Neil | |
| sn | Last name eg Brown | |
| uidNumber | Numeric userid eg 26289 | PA |
| gidNumber | Numeric groupid eg 10 | PA |
| loginShell | Shell eg /usr/bin/bash | PA |
| homeDirectory | Home directory eg /home/neilb | PA |
| partition | Partition containing home dir. A DN to that partition eg cn=u8,ou=Partitions,dc=inf,dc=... | FM |
| subdirectory | Sub-directory of partition that is the home directory eg staff/neilb | FM |
| Email address eg Neil.Brown@ed.ac.uk | ||
| primaryRoles | Primary roles eg staff,computing | AT |
| secondaryRoles | Secondary roles eg beowulf,colourprinter | AT |
| krbName | Kerberos Principal | |
| accountEnabled | Is the account enabled eg false | AT |
| homedirQuota | Home Directory disk quota |
Key: PA - POSIX Account, FM - File System Map, AT - Authorisation Task
Note that the specifics of the FM and AT attributes are the responsibility of those tasks. For example the Authorisation task will probably decided that the primary and secondary roles are actually multivalued Distinguished Name references to the actual roles else where in the Directory Information Tree (DIT).
The interface provided to the Account Management Procedures task, and others that need it is as follows. A Perl object representing a user account and another representing the Account Management System. The calling program requests an account object from the management system, then modifies the object as required, and then passes the object back to the management system to update the various data sources.
The dice-accntmgr RPM contains these objects. A typical invocation would look like this:
use strict; use DICE::LocalAccntManager; use DICE::Account; my $manager = new DICE::LocalAcctManager; my $account = $manager->retrieve( "sxw" ); $account->set( "homedir", "/home/sxw" ); $manager->update( $account );
It is not possible to create an account from scratch using this
interface. The bare minimum requires that there is an entry in the
Informatics Database, keyed on the user's Universal UserName (UUN),
this is so that the retrieve above can locate the user. The only other
public method of the LocalAccntManager is the
delete() method. This will remove all system type
information related to the user, provided the database agrees that the
user should have left, but leave the database entries for the user
intact.
Creation of new student accounts, with incomplete data in the database (ie missing UUN), will be done via another provided object that will be able to deduce the UUN from their matriculation number and will update the database programmatically. This is because the initial data feed of a new intake, or the ITO staff manually entering students, will probably not complete the UUN field, yet we will want to create system accounts for these students. In this case we will provide the unknown matric number, instead of the UUN, as fortunately the UUN for a student is the matric number with an 's' prepended.
Internally, the update method will be a 2 pass affair. The first pass is a check, making sure the datasource will accept any proposed updates. If all datasources are happy, then we actually try to update the data in those sources. If one (or more) are not happy, then no updating to any of the sources occurs (even if some were happy).
The authoritative flag will no longer be a boolean value, it
may now be one of three values:
<IsAuthoritative|NotAuthoritative|Informative>.
This allows a datasource to volunteer information that it thinks is
correct, but will allow a later authoritative datasource to override
it.
To try and hide the authoritative flag of the
Account object, from any AMP task calling Perl scripts,
then $account->set("homedir","/home/neilb"); (note the
missing authoritative parameter) will default to a sensible value for
this flag. Probably IsAuthoritative
|
Please contact us with any
comments or corrections.
Unless explicitly stated otherwise, all material is copyright The University of Edinburgh |
|